:root{--ink:#17242d;--muted:#71808b;--line:#dbe4e9;--panel:#fff;--bg:#f4f7f8;--amo:#1f8fb5;--amo-dark:#0f6f91;--nav:#173e4d;--green:#35a871;--violet:#7c6ed6;--orange:#e49b45;--hour:64px;--head:70px;--time:72px}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.4 Inter,Arial,sans-serif}.app-shell{display:grid;grid-template-columns:248px 1fr;min-height:100vh}.sidebar{background:var(--nav);color:#eaf4f6;padding:22px 18px;display:flex;flex-direction:column;gap:22px}.brand{display:flex;gap:11px;align-items:center}.brand-mark{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;background:#31a2c7;color:white;font-size:20px;font-weight:800}.brand strong,.brand span{display:block}.brand strong{font-size:16px}.brand span{font-size:11px;color:#9bbac4}.primary,.ghost,.side-nav button,.nav-pair button,.view-switch button{border:0;font:inherit;cursor:pointer}.primary{background:var(--amo);color:white;border-radius:8px;padding:10px 15px;font-weight:700}.primary:hover{background:var(--amo-dark)}.full{width:100%;padding:12px}.side-nav{display:grid;gap:5px}.side-nav button{background:transparent;color:#b9d0d7;padding:10px 11px;text-align:left;border-radius:8px}.side-nav button:hover,.side-nav button.active{background:#245566;color:white}.side-nav span{display:inline-block;width:24px}.side-nav b{float:right;background:#2f6a7c;padding:1px 7px;border-radius:10px}.filter-section{border-top:1px solid #315866;padding-top:18px}.filter-section h2{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#8dafba;margin:0 0 12px}.filter-section label{display:flex;align-items:center;gap:8px;margin:9px 0;font-size:13px}.filter-section input{accent-color:#30a2c6}.dot{width:8px;height:8px;border-radius:50%;display:inline-block}.blue{background:#369bd3}.violet{background:#8071d8}.green{background:#45ad78}.sidebar-note{margin-top:auto;background:#204b5b;border:1px solid #336475;border-radius:10px;padding:13px}.sidebar-note strong{font-size:12px}.sidebar-note p{margin:6px 0 0;color:#b9d0d7;font-size:11px}.main{min-width:0;padding:26px 30px}.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:19px}.eyebrow{color:var(--amo);font-size:10px;letter-spacing:.13em;font-weight:800}.topbar h1{font-size:26px;margin:3px 0 0}.top-actions{display:flex;gap:10px;align-items:center}.ghost{background:white;color:#44535d;border:1px solid var(--line);border-radius:8px;padding:9px 13px}.nav-pair,.view-switch{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:white}.nav-pair button,.view-switch button{background:white;padding:9px 12px}.nav-pair button+button,.view-switch button+button{border-left:1px solid var(--line)}.view-switch button.active{background:#e5f3f8;color:var(--amo-dark);font-weight:700}.view-switch button:disabled{color:#9ca8af}.calendar-card{background:white;border:1px solid var(--line);border-radius:13px;box-shadow:0 7px 24px rgba(26,52,65,.06);overflow:hidden}.calendar-meta{height:59px;padding:0 18px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.calendar-meta strong,.calendar-meta span{display:block}.calendar-meta>div>span{font-size:11px;color:var(--muted);margin-top:2px}.legend{display:flex;gap:17px}.legend span{display:flex!important;align-items:center;gap:6px!important;margin:0!important}.square{width:10px;height:10px;border-radius:3px}.square.group{background:#dff2ea;border:1px solid #48aa7b}.square.individual{background:#e9e4fb;border:1px solid #8071d8}.calendar-scroll{overflow:auto}.calendar{position:relative;display:grid;grid-template-columns:var(--time) repeat(7,minmax(125px,1fr));grid-template-rows:var(--head) calc(var(--hour)*13);min-width:1000px}.corner,.day-head{border-bottom:1px solid var(--line);border-right:1px solid var(--line);background:#fbfcfd}.corner{display:grid;place-items:center;color:#95a2aa;font-size:11px}.day-head{display:flex;justify-content:center;align-items:center;gap:8px}.day-head span{font-size:10px;color:#89969e}.day-head strong{font-size:19px}.day-head.today strong{background:var(--amo);color:white;width:34px;height:34px;border-radius:50%;display:grid;place-items:center}.day-head.weekend{background:#f7f9fa}.time-column{grid-column:1;grid-row:2;position:relative;background:#fbfcfd;border-right:1px solid var(--line)}.time-label{position:absolute;right:12px;transform:translateY(-7px);font-size:11px;color:#819099}.grid-lines{grid-column:2/9;grid-row:2;position:relative;background:repeating-linear-gradient(to bottom,transparent 0,transparent calc(var(--hour) - 1px),var(--line) calc(var(--hour) - 1px),var(--line) var(--hour)),repeating-linear-gradient(to right,transparent 0,transparent calc(14.2857% - 1px),var(--line) calc(14.2857% - 1px),var(--line) 14.2857%)}.events-layer{grid-column:2/9;grid-row:2;position:relative}.lesson{position:absolute;border-radius:7px;padding:7px 8px;border-left:4px solid;background:white;box-shadow:0 2px 8px rgba(24,48,62,.10);overflow:hidden;cursor:pointer;transition:.15s;user-select:none}.lesson:hover{transform:translateY(-1px);box-shadow:0 5px 13px rgba(24,48,62,.16);z-index:2}.lesson.group{background:#e9f7f1;border-color:#42a777}.lesson.individual{background:#efebfb;border-color:#7769d1}.lesson .time{font-size:10px;font-weight:800;color:#53636d}.lesson strong{display:block;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson small{display:block;color:#697983;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lesson.dragging{opacity:.45}.drop-hint{outline:2px dashed var(--amo);outline-offset:-2px}dialog{width:min(620px,calc(100vw - 30px));border:0;border-radius:14px;padding:0;box-shadow:0 25px 70px rgba(15,43,55,.3)}dialog::backdrop{background:rgba(10,33,42,.52)}dialog form,.large-dialog{padding:23px}.modal-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:18px}.modal-head h2{margin:3px 0 0;font-size:21px}.icon-close{border:0;background:#f0f4f5;border-radius:50%;width:32px;height:32px;font-size:20px;cursor:pointer}.segmented{display:flex;background:#f0f4f5;border-radius:9px;padding:3px;margin-bottom:18px}.segmented label{flex:1}.segmented input{position:absolute;opacity:0}.segmented span{display:block;text-align:center;padding:8px;border-radius:7px;cursor:pointer}.segmented input:checked+span{background:white;box-shadow:0 1px 5px rgba(20,45,58,.12);font-weight:700;color:var(--amo-dark)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.form-grid label{display:grid;gap:5px;font-size:12px;color:#5e6c74;font-weight:700}.form-grid .wide{grid-column:1/-1}input,select{width:100%;border:1px solid #cfdade;border-radius:8px;padding:10px;background:white;color:var(--ink);font:inherit}.form-grid small{font-weight:400;color:var(--muted)}.hidden{display:none!important}.modal-actions{display:flex;align-items:center;gap:9px;margin-top:22px}.modal-actions span{flex:1}.danger{border:0;background:#fff0f0;color:#b84141;padding:10px 13px;border-radius:8px;cursor:pointer}.large-dialog{width:min(830px,calc(100vw - 30px))}.muted{color:var(--muted)}.group-list{display:grid;gap:8px;margin:18px 0}.group-row{display:grid;grid-template-columns:110px 1fr 1fr 90px;gap:10px;align-items:center;border:1px solid var(--line);border-radius:9px;padding:11px}.group-code{font-weight:800;color:var(--amo-dark)}.status{font-size:11px;background:#e8f5ee;color:#248057;padding:4px 7px;border-radius:10px;text-align:center}.inline-form{display:grid;grid-template-columns:1fr 1.2fr 1.2fr auto;gap:8px;border-top:1px solid var(--line);padding-top:16px}.toast{position:fixed;right:24px;bottom:24px;background:#173e4d;color:white;padding:12px 16px;border-radius:8px;opacity:0;transform:translateY(12px);transition:.2s;pointer-events:none}.toast.show{opacity:1;transform:none}@media(max-width:850px){.app-shell{grid-template-columns:1fr}.sidebar{display:none}.main{padding:15px}.topbar{align-items:flex-start;gap:12px}.top-actions{flex-wrap:wrap;justify-content:flex-end}.form-grid{grid-template-columns:1fr}.form-grid .wide{grid-column:auto}.inline-form{grid-template-columns:1fr}.group-row{grid-template-columns:1fr 1fr}.calendar-card{border-radius:8px}}

/* Sidebar filter controls are intentionally scoped so generic form sizing cannot stretch checkboxes. */
.sidebar{padding:20px 16px;gap:18px}.full{padding:11px 12px}.side-nav button{display:flex;align-items:center;min-height:42px;padding:9px 10px}.side-nav span{flex:0 0 25px}.side-nav b{float:none;margin-left:auto}.filter-section{padding-top:16px}.filter-section h2{margin:0 0 9px}.filter-section .filter-row{position:relative;display:flex;align-items:center;width:100%;min-height:38px;margin:3px 0;padding:7px 8px;gap:9px;border-radius:7px;color:#dbe9ed;cursor:pointer;transition:background .15s,color .15s}.filter-section .filter-row:hover{background:#245566;color:white}.filter-section .filter-row input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}.checkbox-ui{display:grid;place-items:center;flex:0 0 17px;width:17px;height:17px;border:1.5px solid #86a7b2;border-radius:4px;background:#173e4d}.filter-row input:checked+.checkbox-ui{border-color:#35a7ce;background:#35a7ce}.filter-row input:checked+.checkbox-ui::after{content:'✓';color:#fff;font-size:12px;line-height:1;font-weight:900}.filter-name{min-width:0;line-height:1.25}.filter-row .dot{flex:0 0 8px}.filter-row:has(input[value="all"]){font-weight:700}.form-grid input,.form-grid select,.inline-form input,.inline-form select{width:100%;border:1px solid #cfdade;border-radius:8px;padding:10px;background:white;color:var(--ink);font:inherit}
