:root{--roster-ink:#18222c;--roster-ink-2:#34414c;--roster-muted:#727c84;--roster-line:#d9dde0;--roster-panel:#fff;--roster-soft:#f2f4f5;--roster-accent:#465969;--roster-alert:#b34242;--roster-warm:#816a45}
.rosterBoard{min-height:100%;padding:34px 28px 126px;color:var(--roster-ink);background:#f8f8f6;font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
.rosterHero{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:24px}.rosterHero small{display:block;margin-bottom:5px;color:var(--roster-muted);font-size:13px;font-weight:700;letter-spacing:.02em}.rosterHero h1{margin:0;font-size:38px;line-height:1.08;letter-spacing:-.035em}.rosterHero p{margin:8px 0 0;color:var(--roster-muted);font-size:15px}.rosterPrimary{min-height:46px;padding:0 18px;border:0;border-radius:14px;background:var(--roster-ink);color:#fff;font-weight:750;box-shadow:0 8px 20px rgba(24,34,44,.14)}
.rosterWeekNav{display:grid;grid-template-columns:48px 1fr 48px;gap:8px;margin-bottom:12px;padding:6px;border:1px solid var(--roster-line);border-radius:18px;background:var(--roster-soft)}.rosterWeekNav button{height:44px;border:0;border-radius:13px;background:#fff;color:var(--roster-ink);font-weight:700}.rosterWeekNav button:first-child,.rosterWeekNav button:last-child{font-size:26px}.rosterWeekNav #rosterCurrent{background:transparent;color:var(--roster-ink-2)}
.rosterDays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin-bottom:16px}.rosterDay{position:relative;min-width:0;height:68px;padding:8px 2px;border:1px solid transparent;border-radius:14px;background:transparent;color:var(--roster-muted)}.rosterDay span{display:block;font-size:11px;font-weight:700}.rosterDay b{display:block;margin-top:5px;font-size:17px}.rosterDay i{position:absolute;top:5px;right:5px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:#dfe4e7;color:var(--roster-ink-2);font-size:9px;line-height:16px;font-style:normal}.rosterDay.active{border-color:#aeb8bf;background:var(--roster-ink);color:#fff;box-shadow:0 7px 18px rgba(24,34,44,.15)}.rosterDay.active i{background:#fff;color:var(--roster-ink)}
.rosterSummary{display:grid;grid-template-columns:repeat(3,1fr);margin-bottom:16px;border:1px solid var(--roster-line);border-radius:18px;background:var(--roster-panel);overflow:hidden}.rosterSummary div{padding:15px 10px;text-align:center}.rosterSummary div+div{border-left:1px solid var(--roster-line)}.rosterSummary b{display:block;font-size:22px}.rosterSummary span{display:block;margin-top:3px;color:var(--roster-muted);font-size:11px}
.rosterToolbar{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px;margin-bottom:12px}.rosterSearch,.rosterPickerSearch{display:flex;align-items:center;gap:8px;min-height:46px;padding:0 14px;border:1px solid var(--roster-line);border-radius:14px;background:#fff}.rosterSearch span,.rosterPickerSearch span{font-size:22px;color:var(--roster-muted)}.rosterSearch input,.rosterPickerSearch input{width:100%;border:0;outline:0;background:transparent;color:var(--roster-ink);font:inherit}.rosterFilterButton{position:relative;min-width:76px;border:1px solid var(--roster-line);border-radius:14px;background:#fff;color:var(--roster-ink);font-weight:700}.rosterFilterButton i{position:absolute;top:8px;right:8px;width:7px;height:7px;border-radius:50%;background:var(--roster-alert)}
.rosterViewTabs{display:grid;grid-template-columns:1fr 1fr;margin-bottom:15px;padding:4px;border-radius:13px;background:#e9ecee}.rosterViewTabs button{height:39px;border:0;border-radius:10px;background:transparent;color:var(--roster-muted);font-weight:700}.rosterViewTabs button.active{background:#fff;color:var(--roster-ink);box-shadow:0 2px 7px rgba(24,34,44,.09)}
.rosterPool{margin-bottom:17px;padding:15px;border:1px solid var(--roster-line);border-radius:18px;background:#eef1f2}.rosterPool>div:first-child{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:11px}.rosterPool strong{font-size:14px}.rosterPool small{color:var(--roster-muted);font-size:11px}.rosterPoolTrack{display:flex;gap:9px;overflow-x:auto;padding:1px 1px 5px;scrollbar-width:none}.rosterPoolTrack::-webkit-scrollbar{display:none}.rosterPoolDone{padding:10px 2px;color:var(--roster-muted);font-size:13px}
.rosterSites{display:grid;gap:12px}.rosterSite{border:1px solid var(--roster-line);border-radius:20px;background:var(--roster-panel);overflow:hidden;transition:.16s ease}.rosterSite.dragOver{border-color:#617586;background:#edf2f5;box-shadow:0 0 0 3px rgba(70,89,105,.13)}.rosterSiteHead{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:12px;width:100%;min-height:72px;padding:14px 16px;border:0;background:transparent;text-align:left}.rosterSiteHead span{min-width:0}.rosterSiteHead small{display:block;margin-bottom:3px;color:var(--roster-muted);font-size:11px;font-weight:700}.rosterSiteHead strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px}.rosterSiteHead>b{display:grid;place-items:center;min-width:30px;height:30px;padding:0 8px;border-radius:10px;background:var(--roster-soft);font-size:13px}.rosterSiteHead>i{color:#98a0a5;font-size:22px;font-style:normal}.rosterSiteWorkers{display:grid;gap:8px;padding:0 12px 12px}.rosterEmptyDrop{min-height:54px;border:1px dashed #bbc3c8;border-radius:14px;background:#fafafa;color:var(--roster-muted);font-weight:650}
.rosterWorker{position:relative;display:flex;align-items:center;gap:10px;min-width:215px;min-height:58px;padding:8px 34px 8px 8px;border:1px solid #d7dcdf;border-radius:15px;background:#fff;color:var(--roster-ink);text-align:left;touch-action:pan-y}.rosterSiteWorkers .rosterWorker{width:100%;min-width:0}.rosterWorker.dragging{opacity:.4}.rosterWorker.conflict{border-color:#d4a7a7;background:#fffafa}.rosterAvatar{display:grid;place-items:center;flex:0 0 40px;width:40px;height:40px;border-radius:13px;background:var(--roster-ink);color:#fff;font-size:12px;font-weight:800;letter-spacing:.03em}.rosterWorkerCopy{min-width:0;flex:1}.rosterWorkerCopy strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}.rosterWorkerCopy small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:3px;color:var(--roster-muted);font-size:11px}.rosterWorker>i{padding:3px 6px;border-radius:6px;background:#e8ecef;color:var(--roster-ink-2);font-size:9px;font-style:normal}.rosterWorker>em{display:grid;place-items:center;width:19px;height:19px;border-radius:50%;background:var(--roster-alert);color:#fff;font-size:11px;font-style:normal}.rosterGrip{position:absolute;right:10px;color:#a3abb0;letter-spacing:-3px}.rosterWorker.preferred .rosterAvatar{background:#596d7c}.rosterWorker.unavailable,.rosterWorker.leave{opacity:.68}
.rosterPeopleList{border:1px solid var(--roster-line);border-radius:20px;background:#fff;overflow:hidden}.rosterPersonRow{display:grid;grid-template-columns:44px minmax(0,1fr) auto auto;align-items:center;gap:10px;width:100%;min-height:73px;padding:10px 14px;border:0;background:#fff;color:var(--roster-ink);text-align:left}.rosterPersonRow+.rosterPersonRow{border-top:1px solid var(--roster-line)}.rosterPersonRow>span:nth-child(2){min-width:0}.rosterPersonRow strong,.rosterPersonRow small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rosterPersonRow small{margin-top:4px;color:var(--roster-muted);font-size:11px}.rosterPersonRow>i{padding:5px 7px;border-radius:8px;background:#edf0f1;color:var(--roster-ink-2);font-size:10px;font-style:normal}.rosterPersonRow>i.pending{background:#f2ede5;color:var(--roster-warm)}.rosterPersonRow>i.leave,.rosterPersonRow>i.unavailable{background:#f4eaea;color:var(--roster-alert)}.rosterPersonRow>em{color:#9ca4a9;font-size:21px;font-style:normal}
.rosterEmpty{padding:45px 20px;border:1px solid var(--roster-line);border-radius:20px;background:#fff;text-align:center}.rosterEmpty b{font-size:16px}.rosterEmpty p{margin:8px 0 0;color:var(--roster-muted);font-size:13px}.rosterActions{position:fixed;z-index:8;left:max(18px,calc(50% - 360px));right:max(18px,calc(50% - 360px));bottom:calc(74px + env(safe-area-inset-bottom));display:grid;grid-template-columns:1fr 1.45fr;gap:9px;padding:10px;border:1px solid rgba(201,207,211,.9);border-radius:19px;background:rgba(250,250,248,.94);box-shadow:0 12px 35px rgba(24,34,44,.15);backdrop-filter:blur(18px)}.rosterActions button{min-height:48px;border:1px solid var(--roster-line);border-radius:13px;background:#fff;color:var(--roster-ink);font-weight:750}.rosterActions .rosterPrimary{border:0;background:var(--roster-ink);color:#fff}.rosterActions button:disabled{opacity:.42;box-shadow:none}
.rosterSheetForm{display:grid;gap:15px;padding-bottom:10px}.rosterSheetForm label>span{display:block;margin-bottom:7px;color:var(--roster-muted);font-size:12px;font-weight:700}.rosterSheetForm select,.rosterSheetForm input:not([type=checkbox]),.rosterSheetForm textarea{box-sizing:border-box;width:100%;min-height:50px;padding:12px 13px;border:1px solid var(--roster-line);border-radius:13px;outline:0;background:#fff;color:var(--roster-ink);font:inherit}.rosterSheetForm textarea{resize:vertical}.rosterTwo{display:grid;grid-template-columns:1fr 1fr;gap:10px}.rosterSheetActions{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:5px}.rosterSheetActions button{min-width:116px;min-height:48px;padding:0 15px;border:1px solid var(--roster-line);border-radius:13px;background:#fff;color:var(--roster-ink);font-weight:750}.rosterSheetActions .primary{border-color:var(--roster-ink);background:var(--roster-ink);color:#fff}.rosterSheetActions .danger{color:var(--roster-alert)}.rosterSwitch{display:flex;align-items:center;justify-content:space-between;gap:16px}.rosterSwitch span b,.rosterSwitch span small{display:block}.rosterSwitch span small{margin-top:3px;color:var(--roster-muted);font-size:11px}.rosterSwitch input{width:22px;height:22px;accent-color:var(--roster-ink)}
.rosterAvailabilityButton{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:9px;min-height:54px;padding:0 13px;border:1px solid var(--roster-line);border-radius:13px;background:#f7f8f8;color:var(--roster-ink);text-align:left}.rosterAvailabilityButton>b{padding:6px 8px;border-radius:8px;background:#e8ecef;font-size:11px}.rosterAvailabilityButton>b.pending{background:#f2ede5;color:var(--roster-warm)}.rosterAvailabilityButton>b.leave,.rosterAvailabilityButton>b.unavailable{background:#f4eaea;color:var(--roster-alert)}.rosterLeaveNotice{padding:14px;border:1px solid #dfc4c4;border-radius:13px;background:#fffafa}.rosterLeaveNotice b{color:var(--roster-alert)}.rosterLeaveNotice p{margin:5px 0 0;color:var(--roster-muted);font-size:12px}
.rosterPickerPeople{max-height:42vh;overflow-y:auto;border:1px solid var(--roster-line);border-radius:16px;background:#fff}.rosterPickerRow{display:grid;grid-template-columns:22px 42px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:66px;padding:8px 12px}.rosterPickerRow+.rosterPickerRow{border-top:1px solid var(--roster-line)}.rosterPickerRow input{width:19px;height:19px;accent-color:var(--roster-ink)}.rosterPickerRow strong,.rosterPickerRow small{display:block}.rosterPickerRow small{margin-top:3px;color:var(--roster-muted);font-size:11px}.rosterPickerRow>i{min-width:20px;color:var(--roster-ink-2);font-style:normal;text-align:center}.rosterPickerRow.disabled{background:#fafafa;opacity:.58}.rosterPickerSearch{position:sticky;top:0;z-index:2}
.rosterDragGhost{position:fixed;z-index:9999;top:0;left:0;width:190px;pointer-events:none;box-shadow:0 18px 38px rgba(24,34,44,.25);opacity:.96}.rosterSaving .rosterBoard{pointer-events:none}.rosterLoading,.rosterError{display:grid;place-items:center;align-content:center;min-height:65vh;text-align:center}.rosterLoading p,.rosterError p{color:var(--roster-muted)}.rosterSkeleton{width:54px;height:54px;border:4px solid #dce1e3;border-top-color:var(--roster-ink);border-radius:50%;animation:rosterSpin .8s linear infinite}.rosterError button{min-height:46px;padding:0 20px;border:0;border-radius:13px;background:var(--roster-ink);color:#fff;font-weight:700}@keyframes rosterSpin{to{transform:rotate(360deg)}}
@media(max-width:520px){.rosterBoard{padding:28px 18px 126px}.rosterHero h1{font-size:34px}.rosterHero .rosterPrimary{padding:0 14px}.rosterSummary span{font-size:10px}.rosterPool>div:first-child{display:block}.rosterPool>div:first-child small{display:block;margin-top:3px}.rosterActions{left:12px;right:12px}.rosterPickerPeople{max-height:38vh}}
@media(prefers-color-scheme:dark){:root{--roster-ink:#eef1f3;--roster-ink-2:#c6ced3;--roster-muted:#919ba2;--roster-line:#394148;--roster-panel:#171b1f;--roster-soft:#242a2f;--roster-accent:#aebbc4;--roster-alert:#e07b7b;--roster-warm:#d3b986}.rosterBoard{background:#101315}.rosterPrimary,.rosterActions .rosterPrimary{background:#dce2e6;color:#15191c}.rosterWeekNav,.rosterViewTabs{background:#20262a}.rosterWeekNav button,.rosterDay.active,.rosterSummary,.rosterSearch,.rosterFilterButton,.rosterViewTabs button.active,.rosterPool,.rosterSite,.rosterWorker,.rosterPeopleList,.rosterPersonRow,.rosterEmpty,.rosterSheetForm select,.rosterSheetForm input:not([type=checkbox]),.rosterSheetForm textarea,.rosterPickerPeople,.rosterPickerRow,.rosterSheetActions button{background:#171b1f;color:var(--roster-ink)}.rosterAvatar{background:#dce2e6;color:#15191c}.rosterEmptyDrop,.rosterAvailabilityButton{background:#20262a}.rosterActions{background:rgba(17,20,22,.94)}.rosterWorker.conflict,.rosterLeaveNotice{background:#291b1b}.rosterPickerRow.disabled{background:#1d2124}.rosterDay.active{border-color:#c3ccd2}.rosterDay.active i{background:#dce2e6;color:#15191c}}
