:root{--ink:#17352a;--muted:#65796f;--line:#dce7e0;--paper:#fff;--canvas:#f3f7f4;--navy:#005b3b;--teal:#00864a;--teal-soft:#e6f4eb;--amber:#f2bd2e;--danger:#bd3f48;--shadow:0 18px 55px rgba(0,91,59,.11)}
*{box-sizing:border-box}body{margin:0;min-height:100vh;color:var(--ink);background:radial-gradient(circle at 93% 3%,rgba(242,189,46,.2),transparent 28rem),var(--canvas);font:14px/1.45 Arial,"Helvetica Neue",sans-serif}button,input,select{font:inherit}button{cursor:pointer}.hidden{display:none!important}
.topbar{min-height:72px;padding:12px clamp(16px,3vw,42px);display:flex;align-items:center;gap:20px;color:#fff;background:linear-gradient(115deg,#004a31 0%,var(--navy) 58%,#08764f 100%);border-bottom:4px solid var(--amber)}.brand{display:flex;flex:1 1 auto;align-items:center;gap:14px;min-width:0;color:#fff;text-decoration:none}.brand-mark{width:44px;height:40px;display:grid;place-items:center;border-radius:10px;color:var(--navy);background:var(--amber);font-weight:800;font-size:14px;letter-spacing:-.03em}.brand>span:last-child{display:flex;flex-direction:column;min-width:0}.brand strong{font-size:clamp(16px,1.8vw,21px)}.brand small{color:#d2e7dc;font-size:11px}.user-tools,.account{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:7px}.account form{margin:0}.user-badge,.header-action{display:inline-flex;align-items:center;justify-content:center;min-height:32px;padding:6px 10px;border:1px solid rgba(255,255,255,.22);border-radius:8px;color:#fff;background:rgba(255,255,255,.09);font-size:11px;font-weight:700;white-space:nowrap}.header-action:hover{background:rgba(255,255,255,.16)}
main{width:min(1550px,98%);margin:17px auto 36px;padding:0}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:11px}.period-controls,.toolbar-actions{display:flex;align-items:center;gap:7px}.period-controls h1{min-width:220px;margin:0 5px;font-size:18px;text-align:center}.period-controls p{margin:2px 5px 0;color:var(--muted);font-size:10px;text-align:center}.btn{min-height:35px;padding:7px 11px;border:1px solid var(--line);border-radius:8px;color:var(--ink);background:var(--paper);font-size:12px;font-weight:700;box-shadow:0 3px 10px rgba(0,91,59,.06)}.btn:hover{border-color:#aebec9;transform:translateY(-1px)}.btn.primary{color:#fff;border-color:var(--teal);background:var(--teal)}.btn.secondary{color:var(--navy)}.btn.ghost{background:#f1f5f2}.btn.danger{color:#fff;background:var(--danger)}.btn.icon{min-width:35px;padding:5px;font-size:17px}.btn:disabled{opacity:.5;cursor:not-allowed}.legend{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12px;white-space:nowrap}.legend i{width:9px;height:9px;border-radius:50%;margin-left:8px}.scheduled-dot{background:var(--teal)}.pending-dot{background:#d99a00}
.summary{display:grid;grid-template-columns:repeat(5,minmax(140px,1fr));gap:9px;margin-bottom:11px}.stat{padding:11px 14px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.88);box-shadow:0 7px 24px rgba(0,91,59,.07)}.stat small{display:block;color:var(--muted);font-size:9px;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.stat strong{display:block;margin-top:3px;font-size:20px}.stat strong em{color:var(--muted);font-size:10px;font-style:normal;font-weight:600}.stat.pending{border-color:#efd487;background:#fff8df}.stat.pending strong{color:#8a6200}.filterbar{display:flex;align-items:center;gap:8px;margin-bottom:9px;padding:8px;border:1px solid var(--line);border-radius:9px;background:rgba(255,255,255,.72)}.filterbar select,.filterbar input{min-height:34px;padding:6px 9px;border:1px solid #cdd9e1;border-radius:7px;color:var(--ink);background:#fff;font-size:12px}.filterbar input{width:min(330px,100%);margin-left:auto}.notice{padding:9px 12px;margin-bottom:9px;border:1px solid #efd487;border-radius:8px;color:#765600;background:#fff8df;font-size:11px}
.calendar-shell{overflow:hidden;border:1px solid var(--line);border-radius:11px;background:var(--paper);box-shadow:var(--shadow)}.calendar-wrap{overflow:auto;max-height:calc(100vh - 285px);min-height:300px}.calendar{width:100%;min-width:1040px;border-collapse:separate;border-spacing:0;table-layout:fixed}.calendar th,.calendar td{border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.calendar th:last-child,.calendar td:last-child{border-right:0}.calendar thead th{position:sticky;top:0;z-index:3;padding:9px 7px;color:var(--muted);background:#f9fbfc;font-size:10px;letter-spacing:.07em;text-transform:uppercase}.day-number{display:block;margin-top:1px;color:var(--ink);font-size:17px;font-weight:800;letter-spacing:0}.time-column{width:125px}.time-cell{position:sticky;left:0;z-index:2;padding:12px 9px;vertical-align:top;color:var(--ink);background:#fbfcfd;font-size:10px;font-weight:700}.slot-cell{height:112px;padding:5px;vertical-align:top;background:#fff}.slot-cell:hover{background:#f7fbf8}.capacity-list{display:flex;flex-wrap:wrap;gap:3px;margin-bottom:4px}.slot-capacity{display:inline-flex;padding:2px 5px;border-radius:999px;color:#35604c;background:#e6f4eb;font-size:8px;font-weight:800;line-height:1.2}.slot-capacity.low{color:#765600;background:#fff0bd}.slot-capacity.full{color:#8c2635;background:#f8e3e5}.add-slot{width:100%;min-height:27px;padding:4px 6px;border:1px dashed transparent;border-radius:9px;color:#9aa9a1;background:transparent;font-size:10px}.slot-cell:hover .add-slot{border-color:#b7d7c5;color:var(--teal)}.exam-card{width:100%;margin-bottom:4px;padding:6px 7px;border:0;border-left:4px solid var(--teal);border-radius:6px;color:var(--ink);background:var(--teal-soft);text-align:left}.exam-card.pending{border-left-color:#d99a00;background:#fff4cf}.exam-card strong,.exam-card small{display:block}.exam-card strong{overflow:hidden;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.exam-card small{margin-top:2px;color:#426156;font-size:9px;line-height:1.25}.card-actions{display:flex;gap:4px;margin-top:4px}.card-actions button{padding:2px 5px;border:1px solid rgba(0,91,59,.18);border-radius:5px;color:var(--navy);background:rgba(255,255,255,.55);font-size:8px;font-weight:800}.empty,.loading{padding:48px;color:var(--muted);text-align:center}
dialog{width:min(610px,calc(100% - 24px));max-height:92vh;padding:0;overflow:auto;border:0;border-radius:13px;background:var(--paper);box-shadow:0 28px 90px rgba(0,0,0,.3)}dialog::backdrop{background:rgba(10,26,20,.62);backdrop-filter:blur(4px)}.modal-form{padding:0}.modal-form.wide{width:850px;max-width:100%}.modal-form.extra-wide{width:1050px;max-width:100%}.modal-form header{display:flex;align-items:center;justify-content:space-between;padding:15px 18px 11px;border-bottom:1px solid var(--line);margin:0}.modal-form header h2{margin:0;font-size:18px}.eyebrow{margin:0 0 2px;color:var(--teal);font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.icon-btn{border:0;color:var(--muted);background:transparent;font-size:22px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px;padding:15px 18px}.form-grid label{display:flex;flex-direction:column;gap:5px;color:var(--ink);font-size:11px;font-weight:700}.form-grid input,.form-grid select{width:100%;padding:8px 9px;border:1px solid #cdd9e1;border-radius:7px;background:#fff;font-size:12px}.form-grid input:focus,.form-grid select:focus{outline:0;border-color:var(--teal);box-shadow:0 0 0 3px rgba(0,134,74,.12)}.form-grid small{color:var(--muted)}.span-2{grid-column:1/-1}.modal-form footer{display:flex;justify-content:flex-end;gap:9px;padding:11px 18px 15px;border-top:1px solid var(--line);margin:0}.assignment-progress{margin:14px 18px 9px;padding:10px;border-radius:8px;background:#f5f8f6}.assignment-progress>div{height:6px;margin:7px 0;overflow:hidden;border-radius:999px;background:#e7eeea}.assignment-progress i{display:block;width:0;height:100%;background:var(--teal)}.assignment-progress small{color:var(--muted)}.room-list{display:flex;flex-direction:column;gap:6px;max-height:min(48vh,430px);padding:2px 18px 14px;overflow:auto}.room-option{display:flex;align-items:center;gap:10px;min-height:48px;padding:8px 10px;border:1px solid #d6e2db;border-left:4px solid #b8c9c0;border-radius:8px;background:#fff}.room-option.selected{border-color:#68a987;border-left-color:var(--teal);background:var(--teal-soft)}.room-option.occupied{border-color:#d8dfdb;border-left-color:#9aa8a1;background:#f0f3f1;opacity:.62}.room-option input{width:17px;height:17px}.table-wrap{max-height:520px;overflow:auto;padding:0 18px}table:not(.calendar){width:100%;border-collapse:collapse}table:not(.calendar) th{padding:9px 11px;color:var(--muted);background:#f6f9f7;font-size:11px;letter-spacing:.06em;text-align:left;text-transform:uppercase}table:not(.calendar) td{padding:9px 11px;border-top:1px solid var(--line);font-size:11px}.checks{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:8px;border:1px solid #cdd9e1;border-radius:7px}.check,.checks label{flex-direction:row!important;align-items:center!important}.toast{position:fixed;right:22px;bottom:22px;z-index:40;max-width:430px;padding:14px 18px;border-radius:10px;color:#fff;background:var(--navy);box-shadow:var(--shadow);opacity:0;transform:translateY(12px);pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:none}.toast.error{background:var(--danger)}
@media(max-width:1000px){.topbar{align-items:flex-start;flex-wrap:wrap}.brand{width:100%}.user-tools,.account{justify-content:flex-start}.summary{grid-template-columns:repeat(3,1fr)}.toolbar{align-items:stretch;flex-direction:column}.toolbar-actions{justify-content:space-between}.calendar-wrap{max-height:none}}
@media(max-width:650px){main{width:calc(100% - 20px)}.period-controls{flex-wrap:wrap}.period-controls>div{width:100%}.period-controls h1{min-width:0;text-align:left}.period-controls p{text-align:left}.legend{display:none}.summary{grid-template-columns:1fr 1fr}.filterbar{align-items:stretch;flex-direction:column}.filterbar input{width:100%;margin:0}.form-grid{grid-template-columns:1fr}.span-2{grid-column:auto}.brand small{white-space:normal}.account .user-badge{display:none}}
@media print{body{background:#fff}.topbar{color:var(--ink);border-bottom:2px solid var(--ink);background:#fff}.brand-mark,.brand small,.user-tools,.account,.toolbar button,.filterbar,.add-slot{display:none!important}main{width:100%;margin:15px 0}.calendar-shell{overflow:visible;box-shadow:none}.calendar-wrap{overflow:visible;max-height:none}.calendar{min-width:0;font-size:9px}.exam-card{print-color-adjust:exact;-webkit-print-color-adjust:exact}}
.exam-card.continuation{border-left-style:dashed;background:#eef7f1}.exam-card.pending.continuation{background:#fff8df}.exam-card strong{display:flex;align-items:center;gap:6px}.continuation-label{flex:0 0 auto;padding:2px 5px;border-radius:999px;color:#4f6c5d;background:rgba(255,255,255,.72);font-size:7px;font-weight:800;letter-spacing:.04em;text-transform:uppercase}
.room-searchbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 18px 10px}.room-searchbar label{position:relative;display:block;flex:1}.room-searchbar svg{position:absolute;left:10px;top:50%;width:16px;height:16px;fill:none;stroke:#71847a;stroke-width:1.8;stroke-linecap:round;transform:translateY(-50%)}.room-searchbar input{width:100%;min-height:38px;padding:8px 11px 8px 34px;border:1px solid #cdd9e1;border-radius:8px;color:var(--ink);background:#fff;font-size:11px}.room-searchbar input:focus{outline:0;border-color:var(--teal);box-shadow:0 0 0 3px rgba(0,134,74,.12)}.room-searchbar>span{min-width:120px;color:var(--muted);font-size:9px;text-align:right}.room-option.room-filtered-out{display:none}.room-search-empty{margin:4px 18px 16px;padding:20px;border:1px dashed #cdd9e1;border-radius:8px;color:var(--muted);font-size:11px;text-align:center}
.room-filterbar{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:0 18px 10px;padding:9px;border:1px solid #dce7e1;border-radius:9px;background:#f6f9f7}.room-filterbar label{display:flex;min-width:0;flex-direction:column;gap:4px}.room-filterbar label>span{color:var(--muted);font-size:8px;font-weight:800;letter-spacing:.05em;text-transform:uppercase}.room-filterbar select{width:100%;min-height:34px;padding:6px 28px 6px 8px;border:1px solid #cdd9e1;border-radius:7px;color:var(--ink);background:#fff;font-size:10px;font-weight:700}.room-filterbar select:focus{outline:0;border-color:var(--teal);box-shadow:0 0 0 3px rgba(0,134,74,.1)}
@media(max-width:650px){.room-searchbar{align-items:stretch;flex-direction:column}.room-searchbar>span{min-width:0;text-align:left}.room-filterbar{grid-template-columns:1fr}.room-filterbar label{display:grid;grid-template-columns:88px 1fr;align-items:center}.room-filterbar label>span{font-size:7px}}
.capacity-hint{min-height:28px;line-height:1.35}.capacity-hint.error{color:var(--danger)!important;font-weight:700}.form-grid input.field-invalid{border-color:var(--danger);background:#fff7f7;box-shadow:0 0 0 3px rgba(189,63,72,.1)}
.conflict-resolution{margin-bottom:11px;overflow:hidden;border:1px solid #e3bd62;border-radius:11px;background:#fffdf7;box-shadow:0 8px 25px rgba(113,75,0,.08)}.conflict-resolution>header{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 14px;border-bottom:1px solid #efdcae;background:#fff8e5}.conflict-resolution>header>div{display:flex;align-items:center;gap:10px}.resolution-icon{width:27px;height:27px;display:grid;flex:0 0 27px;place-items:center;border-radius:8px;color:#fff;background:#b97700;font-weight:900}.conflict-resolution h2{margin:0;color:#553b00;font-size:14px}.conflict-resolution header p{margin:2px 0 0;color:#765f2d;font-size:9px}.resolution-count{padding:4px 8px;border-radius:999px;color:#6f4900;background:#ffe4a2;font-size:9px;font-weight:900;white-space:nowrap}.resolution-list{display:grid;gap:8px;padding:10px}.resolution-card{margin:0;border:1px solid #ead9b5;border-radius:9px;background:#fff}.room-change{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 12px;border-left:4px solid #ca8200}.resolution-card-main{min-width:0}.resolution-tag{display:inline-flex;margin-bottom:4px;padding:2px 5px;border-radius:999px;color:#754c00;background:#ffedbd;font-size:7px;font-weight:900;letter-spacing:.04em;text-transform:uppercase}.resolution-card h3{margin:0;font-size:12px}.resolution-card p{margin:2px 0;color:var(--muted);font-size:9px}.resolution-reason{overflow-wrap:anywhere}.resolution-actions{display:flex;flex:0 0 auto;gap:6px}.resolution-actions .btn{min-height:31px;padding:5px 9px;font-size:10px}.capacity-change{overflow:hidden;border-left:4px solid var(--danger)}.capacity-change>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;list-style:none;cursor:pointer}.capacity-change>summary::-webkit-details-marker{display:none}.capacity-change>summary>span,.capacity-change>summary strong,.capacity-change>summary small{display:block}.capacity-change>summary strong{font-size:11px}.capacity-change>summary small{margin-top:2px;color:var(--muted);font-size:9px}.capacity-change>summary>b{padding:4px 7px;border-radius:999px;color:#8e2630;background:#f9dfe2;font-size:9px;white-space:nowrap}.capacity-contributors{display:grid;gap:5px;padding:9px 12px 11px;border-top:1px solid #eee1c6;background:#fffdfa}.capacity-contributors>p{margin:0 0 3px;color:#6e5b35}.capacity-contributor{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:7px 8px;border:1px solid #e2e9e5;border-radius:7px;background:#fff}.capacity-contributor span,.capacity-contributor strong,.capacity-contributor small{display:block;min-width:0}.capacity-contributor strong{font-size:10px}.capacity-contributor small{margin-top:1px;color:var(--muted);font-size:8px}.capacity-contributor em{padding:3px 6px;border-radius:999px;color:#006a42;background:#e0f3e8;font-size:7px;font-style:normal;font-weight:900;text-transform:uppercase}.capacity-contributor.recommended{border-color:#91c8aa;background:#f2faf5}.capacity-contributor .btn{min-height:28px;padding:4px 8px;font-size:9px}
@media(max-width:650px){.conflict-resolution>header,.room-change{align-items:stretch;flex-direction:column}.resolution-count{align-self:flex-start}.resolution-actions{display:grid;grid-template-columns:1fr 1fr}.capacity-contributor{grid-template-columns:1fr auto}.capacity-contributor em{grid-column:1/2;width:max-content}.capacity-contributor .btn{grid-column:2;grid-row:1/3}.capacity-change>summary{align-items:flex-start}.conflict-resolution header p{font-size:8px}}
