:root{font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#162b45;background:#f4f6fa;font-size:14px}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer;border:1px solid #d5deea;background:white;border-radius:8px;padding:10px 15px;color:#243c56;font-weight:600}button:hover{background:#edf3fb}button:focus-visible,a:focus-visible{outline:3px solid #559eff;outline-offset:2px}.primary{background:#0069db;color:white;border-color:#0069db}.primary:hover{background:#0056b5}.danger{color:#b72d37}aside{width:224px;background:#102942;position:fixed;inset:0 auto 0 0;color:#bdd0e4;padding:28px 18px;display:flex;flex-direction:column}.brand{font-size:34px;font-style:italic;color:white;font-weight:850;letter-spacing:-2px}.brand span{color:#4eabff}.subbrand{font-size:11px;letter-spacing:1.7px;text-transform:uppercase;margin:5px 0 38px}nav{display:grid;gap:8px}nav button{text-align:left;color:#bed0e3;border:0;background:transparent;padding:14px}nav button.active,nav button:hover{color:white;background:#234663}.aside-bottom{margin-top:auto;font-size:12px;line-height:1.7}main{margin-left:224px;padding:32px;max-width:1900px}header{display:flex;align-items:center;justify-content:space-between;gap:16px;border-bottom:1px solid #dfe5ee;padding-bottom:25px;margin-bottom:28px}h1{font-size:29px;letter-spacing:-.8px;margin:7px 0}h2{font-size:20px;margin:0 0 15px}h3{margin:0 0 8px;font-size:15px}.eyebrow{font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:#68809a;font-weight:700}p{line-height:1.6}.muted{color:#687f96}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.spaced{justify-content:space-between}.notice{border:1px solid #e8d6a4;background:#fff9ea;color:#795b16;padding:14px 18px;border-radius:10px;margin-bottom:22px;line-height:1.5}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-bottom:24px}.stat,.card{background:white;border:1px solid #e0e6ee;border-radius:12px;padding:20px}.stat b{font-size:28px;display:block;margin-top:7px}.toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:18px 0}input,select,textarea{border:1px solid #cdd8e5;border-radius:7px;padding:10px;background:white;color:#213b55;max-width:100%}label{display:grid;gap:7px;font-size:13px;color:#50677f;margin-bottom:16px}input[type=checkbox]{width:auto}textarea{min-height:75px}.scroll{overflow:auto;background:white;border:1px solid #dce4ed;border-radius:12px}table{border-collapse:separate;border-spacing:0;width:100%;font-size:12px}th,td{padding:10px;border-bottom:1px solid #e8edf3;text-align:left;vertical-align:top}th{background:#f7f9fc;color:#698097;white-space:nowrap;font-weight:650}th:first-child,td:first-child{position:sticky;left:0;z-index:1;background:white;min-width:160px}.schedule td:not(:first-child){min-width:126px}.shift{width:100%;min-height:66px;text-align:left;display:block;padding:10px;background:#edf5ff;border:1px solid #cfe1f7;color:#195d9d;border-left:3px solid #579bea;border-radius:7px;font-size:12px}.shift small{display:block;margin-top:6px;font-size:10px;line-height:1.4}.shift.off{background:#f0eef8;color:#766493;border-color:#e1dced;border-left-color:#a08bbf}.shift.vacation{background:#eaf5ee;color:#3f7c54;border-color:#cee7d5}.shift.unset,.shift.empty{background:#fafbfc;color:#8a98a9;border:1px dashed #dbe2ea}.shift.empty{min-height:66px}.shift.course{background:#fff6df;color:#956c17}.badge{padding:5px 9px;border-radius:5px;background:#eaf1fa;font-size:11px;color:#45617f;display:inline-block}.legend{display:flex;gap:20px;font-size:12px;color:#76899c;margin:17px 0}.month{display:grid;grid-template-columns:repeat(7,minmax(100px,1fr));gap:8px}.day{min-height:145px;background:white;border:1px solid #dfe5ee;border-radius:9px;padding:12px}.day button{display:block;width:100%;margin:5px 0;text-align:left;padding:6px;font-size:11px}.day.dim{opacity:.45}.request{display:grid;grid-template-columns:1fr auto;gap:12px;margin-bottom:12px}.request p{margin:5px 0}.auth{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}.auth-art{background:#102942;color:white;padding:12vw 7vw}.auth-art h1{font-size:46px;line-height:1.15;margin:40px 0 25px}.auth-art p{color:#bad1e7;font-size:17px}.auth-form{align-self:center;padding:50px;max-width:490px;width:100%;margin:auto}.auth-form h1{font-size:28px;margin-bottom:25px}.auth-form button{width:100%}dialog{border:0;border-radius:16px;padding:26px;width:480px;max-width:94vw;box-shadow:0 20px 80px #10294240}dialog::backdrop{background:#10294288}dialog .row>*{flex:1}.dialog-title{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.dialog-title button{padding:5px 10px}.error{color:#ad2234;line-height:1.5}#toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#153a54;color:white;border-radius:8px;padding:14px 20px;display:none;z-index:20;max-width:90vw}.audit{white-space:pre-wrap;font-size:12px;max-width:75vw;overflow-wrap:anywhere}.source-table{max-height:500px;overflow:auto}.split{display:grid;grid-template-columns:1fr 1fr;gap:20px}.hide{display:none}@media(max-width:900px){aside{position:static;width:100%;padding:15px}.brand{font-size:26px}.subbrand,.aside-bottom{display:none}nav{display:flex;overflow:auto;gap:0}nav button{white-space:nowrap;padding:10px}main{margin:0;padding:20px}header{align-items:flex-start}.auth{grid-template-columns:1fr}.auth-art{padding:28px}.auth-art h1{font-size:28px;margin:20px 0}.auth-art p{display:none}.auth-form{padding:28px}.stats{gap:8px}.stat{padding:13px}.stat b{font-size:23px}.split{grid-template-columns:1fr}.month{grid-template-columns:repeat(7,120px)}.month-wrap{overflow:auto}.request{grid-template-columns:1fr}h1{font-size:24px}.schedule td:first-child{min-width:120px;max-width:120px}header .muted{font-size:12px}}

/* Compact weekly roster: preserve readable text and show more people at once. */
main[data-page="schedule"] {padding:16px 24px}
main[data-page="schedule"] header {padding-bottom:8px;margin-bottom:10px}
main[data-page="schedule"] h1 {font-size:23px;margin:3px 0}
main[data-page="schedule"] .notice {padding:7px 12px;margin-bottom:10px;font-size:12px}
main[data-page="schedule"] .stats {display:flex;gap:18px;flex-wrap:wrap;margin-bottom:10px}
main[data-page="schedule"] .stat {display:flex;align-items:center;gap:8px;padding:0;border:0;background:transparent;border-radius:0;font-size:12px}
main[data-page="schedule"] .stat b {display:inline;font-size:15px;margin:0}
main[data-page="schedule"] h2 {font-size:17px;margin-bottom:2px}
main[data-page="schedule"] .toolbar {margin:8px 0;gap:7px}
main[data-page="schedule"] #content > p {margin:5px 0 8px;font-size:12px}
main[data-page="schedule"] .legend {margin:8px 0;font-size:11px}
.schedule th {padding:5px 7px;font-size:11px;line-height:1.3}
.schedule td {padding:3px 5px;vertical-align:middle;height:36px}
.schedule td:first-child {font-size:12px;line-height:1.2}
.schedule td:not(:first-child) {min-width:110px}
.schedule .shift,.schedule .shift.empty {min-height:30px;padding:3px 6px;border-radius:4px;font-size:11px;line-height:1.15}
.schedule .shift small {font-size:10px;line-height:1.1;margin-top:2px}
.schedule .shift.empty small {display:none}
.schedule .shift:disabled {cursor:default;opacity:1}
@media(min-width:901px){
 main[data-page="schedule"] button:not(.shift),main[data-page="schedule"] input,main[data-page="schedule"] select {padding:6px 10px;font-size:12px}
}
@media(max-width:900px){
 main[data-page="schedule"] {padding:12px}
 main[data-page="schedule"] .stats {gap:8px 14px}
 .schedule td {height:42px}
 .schedule .shift,.schedule .shift.empty {min-height:36px}
}

@media(min-width:600px) and (max-width:900px){body:has(main[data-page="schedule"]) aside{display:flex;flex-direction:row;align-items:center;gap:16px;padding:10px 15px}body:has(main[data-page="schedule"]) nav{flex:1}main[data-page="schedule"] button:not(.shift),main[data-page="schedule"] input,main[data-page="schedule"] select{padding:6px 10px;font-size:12px}.schedule td{height:36px}.schedule .shift,.schedule .shift.empty{min-height:30px}}

.schedule .weekly-hours{display:block;margin-top:2px;font-size:10px;font-weight:500;line-height:1.15;color:#687f96}.schedule .weekly-hours.over-limit{color:#bd2030;font-weight:750}main[data-page="schedule"] .legend{flex-wrap:wrap;gap:6px 16px}

.schedule-visibility{display:flex;align-items:center;gap:10px}.schedule-visibility input{width:18px;height:18px}

.group-picker{display:flex;align-items:center;gap:7px;margin:0;font-size:12px}.group-picker select{max-width:230px}

.swap-candidates{max-height:340px;overflow:auto;margin:12px 0}
.swap-choice{display:flex;align-items:center;gap:12px;border:1px solid #cdd9e7;border-radius:12px;padding:14px;margin:8px 0;cursor:pointer}
.swap-choice input{width:20px;flex:0 0 20px}
.swap-choice:has(input:checked){border-color:#0068db;background:#eef6ff}

.calendar-link{display:inline-block;background:#0068db;color:white;padding:14px 20px;border-radius:10px;text-decoration:none;font-weight:700}

/* Publication status retains each shift type's color family. */
.shift.is-draft{border-style:dashed}
.shift.is-published{background:#2465a5;color:#fff;border-color:#174d82;border-style:solid}
.shift.off.is-published{background:#70538f;color:#fff;border-color:#553b70}
.shift.vacation.is-published{background:#35734c;color:#fff;border-color:#245437}
.shift.course.is-published{background:#89620e;color:#fff;border-color:#664907}
.shift.medical.is-published,.shift.absence.is-published{background:#386c7b;color:#fff;border-color:#264e5a}
.shift.is-published:hover{filter:brightness(.94)}
.day .shift{min-height:0}
.legend{flex-wrap:wrap}
