.shell.roster-mode{--roster-accent:#136753;--roster-light:#edf4ed;grid-template-columns:200px minmax(0,1fr)}
.roster-mode aside{padding:22px 14px}.roster-mode .brand{font-size:22px}.roster-mode .mark{padding:4px 8px}.roster-mode nav{margin:24px 0;gap:3px;max-height:65vh}.roster-mode nav button{font-size:13px;min-height:38px;padding:8px 12px}.roster-mode main{padding:14px;max-width:none;min-width:0}.roster-mode main>header,.roster-mode main>.banner,.roster-mode main>footer{display:none}
.roster-mode main>.notice,.roster-mode main>.error{padding:9px 14px;font-size:13px;margin:0 0 10px}
.roster-topbar{display:flex;flex-wrap:wrap;gap:10px;align-items:end;justify-content:space-between;margin-bottom:12px}.roster-filters{display:flex;flex-wrap:wrap;gap:8px}.roster-filters label{gap:3px;font-size:11px;color:#60786b}.roster-filters select{height:36px;padding:6px 25px 6px 9px;max-width:190px;font-size:12px}.roster-period{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.roster-period button{min-height:36px;padding:6px 10px;font-size:12px}.roster-period input{padding:6px 8px;height:36px;width:137px;font-size:12px}.roster-period .actions{gap:4px}
.roster-board{background:#fff;border:1px solid #dce5de;border-radius:10px;overflow:hidden}.roster-board-head{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;flex-wrap:wrap;border-bottom:1px solid #dce5de}.roster-board-head>div:first-child{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap}.roster-board-head h1{font-size:19px;letter-spacing:-.4px;margin:0}.roster-board-head span{font-size:12px;color:#60786b}.roster-board-head button{min-height:34px;padding:7px 11px;font-size:12px}.roster-board-head .actions{gap:6px}.roster-actions{margin:0;position:relative}.roster-actions summary{list-style:none;background:#e7efeb;border-radius:7px;padding:9px 12px;font-size:12px;font-weight:600}.roster-actions[open]>div{position:absolute;right:0;top:36px;z-index:9;min-width:180px;display:grid;gap:5px;padding:8px;border:1px solid #ccd8d1;border-radius:9px;background:white;box-shadow:0 10px 30px #123e3422}.roster-actions button{text-align:left}
.roster-scroll{overflow:auto;max-height:calc(100vh - 210px);min-height:290px}.roster-table{min-width:910px;table-layout:fixed;font-size:12px}.roster-table th,.roster-table td{border-right:1px solid #e6ece6;border-bottom:1px solid #e6ece6;padding:6px;vertical-align:top}.roster-table th{font-size:12px;text-transform:none;font-weight:500;color:#294b3e}.roster-table th:first-child{width:174px;position:sticky;left:0;z-index:2;background:white}.roster-table th:last-child{width:80px}.roster-table thead th{position:sticky;top:0;z-index:3;background:#f9fbf8;text-align:left;height:52px;padding:8px;vertical-align:middle}.roster-table thead th:first-child{z-index:4}.roster-table thead th span:first-child{display:block;font-size:11px;color:#63786f}.roster-table thead strong{font-size:16px;font-weight:650}.roster-table thead .is-today{box-shadow:inset 0 -3px var(--roster-accent)}.publication-dot{position:absolute;right:8px;top:11px;width:6px;height:6px;border-radius:50%;background:#d4ddd8}.publication-dot.published{background:#24876b}.publication-dot.draft{background:#c18e2a}.roster-table .roster-summary th,.roster-summary td{background:#f7faf5;padding:8px}.roster-table .roster-section th{background:#e6eddf;height:29px;padding:6px 10px;color:#315441;font-weight:650}.roster-section span{font-weight:400}.roster-cell{height:68px;position:relative;padding-bottom:20px!important}.roster-cell.is-today{background:#f7faf4}.roster-person{display:flex;gap:6px;align-items:center;min-height:48px}.roster-person .avatar{width:25px;height:25px;flex-shrink:0;margin:0;font-size:12px}.roster-person strong{font-size:12px;display:block;line-height:1.3;overflow-wrap:anywhere}.roster-person small,.open-row th small{display:block;font-size:10px;margin-top:5px;font-weight:400}.roster-total{vertical-align:middle!important;color:#4e685d;font-size:11px}.roster-table tfoot td,.roster-table tfoot th{padding:9px 6px;background:#f4f7f1;font-weight:600}.roster-day{min-width:520px}.roster-day th:first-child{width:190px}.roster-day th:last-child{width:130px}
.roster-block{display:block;width:100%;text-align:left;min-height:36px;padding:5px 7px;border:1px solid #90b4a0;border-left:4px solid #398565;border-radius:6px;font-weight:400;background:#eef6ee;color:#224e3a;line-height:1.2;margin-bottom:3px;overflow:hidden}.roster-block strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:650}.roster-block>span{display:block;font-size:10px;margin-top:3px}.roster-block small{display:block;color:inherit;font-size:9px;margin-top:2px}.roster-block.dept-blue{background:#edf3fa;color:#294d72;border-color:#7ca5ca;border-left-color:#347aa9}.roster-block.dept-amber{background:#fff8e8;color:#73581f;border-color:#c9af6d;border-left-color:#b28d2c}.roster-block.dept-violet{background:#f4edfa;color:#634681;border-color:#b79bca;border-left-color:#8d65ac}.roster-block.dept-coral{background:#fbefea;color:#805141;border-color:#c99f8c;border-left-color:#b87152}.roster-block.is-draft{border-style:dashed}.roster-block:hover{filter:brightness(.97);background:#e0edde;color:#173e2f}.block-net{font-size:9px;display:block;margin:4px 0 5px;color:#62766b}.roster-item[draggable=true]{cursor:grab}.roster-item.dragging{opacity:.4}.open-block{border-style:dashed;background:#f3f6ef}.open-row td{min-height:36px;background:#fcfdf9}.roster-add-cell{position:absolute;right:3px;bottom:2px;width:23px;height:20px;min-height:20px;background:transparent;color:#6e897a;padding:0;font-size:16px;font-weight:400;opacity:.3}.roster-cell:hover .roster-add-cell,.roster-add-cell:focus-visible{opacity:1;background:#e3eee3;color:#136753}.cell-empty{color:#d5dfd9;font-size:12px}.roster-absence,.roster-availability{display:block;font-size:9px;line-height:1.25;padding:4px;border-radius:5px;margin-bottom:4px;background:#efe6f4;color:#725c7b}.roster-absence.pending{background:#fbf1da;color:#896e34}.roster-availability{background:#ecefeb;color:#697a6e}.roster-board-foot,.roster-help{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;font-size:11px;color:#61776c;padding:10px 12px}.roster-board-foot{border-top:1px solid #dce5de;background:#fbfcfa}.roster-help{padding:9px 3px}.legend-draft{color:#9a762d;margin-left:12px}
#roster-dialog{max-width:650px;padding:24px}#roster-dialog h2{margin:12px 0}#roster-dialog p{font-size:13px}.roster-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.roster-form-grid .full{grid-column:1/-1}.roster-form-grid label{font-size:12px}.roster-form-grid input,.roster-form-grid select{font-size:13px;padding:10px}.roster-edit-note{padding:10px 12px;background:#f0f5e8;border-radius:8px;color:#526c4e}.roster-dialog-actions{display:flex;gap:8px;flex-wrap:wrap}.roster-dialog-actions button{font-size:13px}.roster-mode .month-grid{padding:12px}.roster-mode .month-grid .calendar-shift{font-size:11px}
@media(min-width:1450px){.roster-table{min-width:100%;font-size:13px}.roster-table th:first-child{width:210px}.roster-table th:last-child{width:100px}.roster-block strong{font-size:12px}.roster-block>span{font-size:11px}.roster-person strong{font-size:13px}}
@media(max-width:950px){.shell.roster-mode{grid-template-columns:minmax(0,1fr)}.roster-mode aside{padding:12px 16px;height:auto}.roster-mode nav{margin:10px 0 0;max-height:none;gap:4px}.roster-mode aside>.secondary{display:none}.roster-mode .brand{font-size:20px}.roster-mode main{padding:12px}.roster-topbar{gap:10px}.roster-filters{width:100%}.roster-filters label{flex:1;min-width:130px}.roster-filters select{max-width:none}.roster-scroll{max-height:65vh}.roster-period{width:100%;justify-content:space-between}}
@media(max-width:550px){.roster-form-grid{grid-template-columns:1fr}#roster-dialog{padding:16px}.roster-board-head{padding:10px}.roster-board-head>div:first-child{gap:6px}.roster-board-foot span{font-size:10px}.roster-help{font-size:10px}.roster-period{gap:6px}.roster-period .segmented button{padding:6px 8px}}

.roster-table{min-width:800px}.roster-mode aside{display:flex;flex-direction:column;overflow:hidden}.roster-mode aside>*{flex-shrink:0}.roster-mode aside nav{flex:1;min-height:0;max-height:none;margin:16px 0;overflow:auto}.roster-mode aside>small{margin:12px 0}.roster-mode main{display:flex;flex-direction:column;height:100vh;overflow:hidden}.roster-workspace{display:flex;flex-direction:column;flex:1;min-height:0}.roster-topbar,.roster-board-head,.roster-board-foot,.roster-help{flex-shrink:0}.roster-board{display:flex;flex-direction:column;flex:1;min-height:0}.roster-scroll{flex:1;min-height:0;max-height:none}.roster-mode .month-grid{overflow:auto;flex:1;min-height:0}.roster-table thead th:last-child strong{font-size:13px}.roster-mode button:disabled{cursor:default}
@media(max-width:950px){.roster-mode aside{display:block;overflow:visible}.roster-mode aside nav{margin:8px 0 0;max-height:none}.roster-mode main{height:auto;min-height:80vh;overflow:visible}.roster-scroll{max-height:65vh;min-height:300px}.roster-workspace{flex:none}.roster-board{flex:none}}

.roster-cell{height:66px;padding-bottom:12px!important}.block-net{margin:2px 0;white-space:nowrap}.roster-block[draggable=true]{cursor:grab}.roster-block.dragging{opacity:.4}
.team-member-choices{max-height:330px;overflow:auto;border:1px solid #dce6dd;border-radius:10px;padding:4px 12px}.team-member-choices label{display:flex;align-items:center;gap:12px;padding:10px 2px;border-bottom:1px solid #eef2ed;cursor:pointer}.team-member-choices label[hidden]{display:none}.team-member-choices input{width:18px;height:18px;flex-shrink:0;accent-color:#204f3d}.team-member-choices small{display:block;color:#60786b;margin-top:3px}.roster-table.roster-month{min-width:4200px}.roster-section button{font-size:11px;padding:4px 8px;min-height:26px;margin-left:10px}
