.page{max-width:960px;margin:0 auto;padding:1.25rem 1rem 3rem}.masthead{border-bottom:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem;margin-bottom:1.25rem;padding-bottom:1rem;display:flex}.eyebrow{letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin:0;font-size:.72rem}.masthead h1,.wordmark{margin:.2rem 0 0;font-size:clamp(1.8rem,5vw,2.4rem)}.lede{max-width:40rem;color:var(--muted);margin:0;line-height:1.45}.card,.auth-card,.panel{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:1.15rem 1.2rem 1.25rem;box-shadow:0 3px 12px #24352d0f}.auth-card{gap:.9rem;max-width:28rem;display:grid}.auth-card h1,.panel h1,.panel h2{margin:0}.grid{gap:.85rem;display:grid}@media (width>=720px){.grid.two{grid-template-columns:1fr 1fr}}.toolbar{flex-wrap:wrap;align-items:center;gap:.65rem;margin:.75rem 0 1rem;display:flex}nav.tabs{flex-wrap:wrap;gap:.4rem;display:flex}button,.tab{appearance:none;background:var(--primary);color:var(--surface);cursor:pointer;border:0;border-radius:14px;min-height:48px;padding:.7rem 1rem}button.secondary,button.ghost,.tab{background:var(--primary-soft);color:var(--primary)}button.danger{background:var(--notice-surface);color:var(--notice-ink)}button.link,.tab.link{color:var(--primary);background:0 0;min-height:44px;padding:.45rem .2rem;text-decoration:underline}button:disabled{opacity:.6;cursor:wait}.tab.active{background:var(--primary);color:var(--surface)}.field{color:var(--muted);gap:.35rem;font-size:.92rem;display:grid}.field-input{align-items:center;gap:.5rem;display:flex}.field input,.field select{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--ink);border-radius:12px;flex:1;min-height:48px;padding:.6rem .7rem}.form-error,.status-error{color:var(--notice-ink);margin:0}.status-saved{color:var(--primary)}.status-saving,.muted{color:var(--muted)}.form-footer{color:var(--muted);margin:1rem 0 0;font-size:.92rem}.list{gap:.6rem;margin:0;padding:0;list-style:none;display:grid}.list button.row,a.row{text-align:left;background:var(--surface);width:100%;color:var(--ink);border:1px solid var(--border);border-radius:14px;justify-content:space-between;gap:.75rem;text-decoration:none;display:flex}.mark-row{border-bottom:1px solid var(--border);gap:.55rem;padding:.85rem 0;display:grid}.mark-row:last-child{border-bottom:0}.mark-buttons{flex-wrap:wrap;gap:.4rem;display:flex}.mark-buttons button{flex:7rem}.mark-buttons button.pending{box-shadow:inset 0 0 0 2px var(--gold)}.counts{flex-wrap:wrap;gap:.5rem;margin:.5rem 0 1rem;display:flex}.counts span{background:var(--primary-soft);border-radius:999px;padding:.35rem .75rem;font-size:.9rem}.notice{background:var(--notice-surface);color:var(--notice-ink);border-radius:14px;padding:.85rem 1rem}.card-detail{color:var(--muted);margin:.4rem 0 0;font-size:.92rem}.week-grid{gap:.6rem;display:grid}.rule-row{border-top:1px solid var(--border);margin-top:.65rem;padding-top:.55rem}fieldset.field{border:1px solid var(--border);border-radius:12px;gap:.35rem;padding:.75rem 1rem;display:grid}@media (width>=900px){.week-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=640px){.page{padding:.85rem .8rem 2.5rem}button,.tab{width:auto}}.page.cabinet{--control-h:34px;--title-size:1.6rem;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;max-width:1180px;padding:.75rem 1rem 2rem;font-size:15px;line-height:1.4}.page.cabinet .wordmark{font-size:1.5rem}.page.cabinet .masthead{gap:.5rem;margin-bottom:.7rem;padding-bottom:.55rem}.page.cabinet .panel,.page.cabinet .card{box-shadow:none;border-radius:12px;padding:.7rem .8rem .8rem}.page.cabinet h1{font-size:var(--title-size);font-weight:600}.page.cabinet h2{margin:1rem 0 .4rem;font-size:1.12rem}.page.cabinet h3{margin:.75rem 0 .35rem;font-size:1rem}.page.cabinet .lede{margin:.2rem 0 .7rem;font-size:.92rem}.page.cabinet .grid{gap:.55rem}.page.cabinet .toolbar{gap:.4rem;margin:.45rem 0 .7rem}.page.cabinet .toolbar.tight{margin:0}.page.cabinet button,.page.cabinet .tab{border-radius:10px;min-height:34px;padding:.28rem .7rem}.page.cabinet button.link,.page.cabinet .tab.link{min-height:32px;padding:.2rem .15rem}.page.cabinet .field{gap:.22rem;font-size:.86rem}.page.cabinet .field input,.page.cabinet .field select,.page.cabinet .field textarea{border-radius:10px;min-height:34px;padding:.28rem .55rem}.page.cabinet .list{gap:.35rem}.page.cabinet .list.compact{gap:.25rem}.page.cabinet .list button.row,.page.cabinet a.row{border-radius:10px;align-items:center;min-height:36px;padding:.4rem .65rem}.page.cabinet .notice{border-radius:10px;padding:.55rem .7rem}.page.cabinet .notice.compact{margin:.4rem 0;font-size:.9rem}.page.cabinet .mark-row{padding:.45rem 0}.page.cabinet .mark-buttons button{flex:6rem}.page.cabinet button:hover:not(:disabled),.page.cabinet .tab:hover{filter:brightness(.97)}.page.cabinet button:focus-visible,.page.cabinet .tab:focus-visible,.page.cabinet input:focus-visible,.page.cabinet select:focus-visible,.page.cabinet textarea:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.page.cabinet .week-event .event-main,.page.cabinet .agenda-item .event-main,.page.cabinet .row-plain{min-height:0;padding:0}.page.cabinet .week-event .event-edit{min-height:28px}.page.cabinet .row.selected,.page.cabinet .combobox-list .selected{box-shadow:inset 0 0 0 1.5px var(--primary)}.section-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:.6rem;margin-bottom:.7rem;display:flex}.inline-form{flex-wrap:wrap;align-items:end;gap:.45rem;margin:.4rem 0 .8rem;display:flex}.inline-form .field{flex:10rem;min-width:10rem}.search-field{min-width:14rem}.student-section{border-top:1px solid var(--border);margin-top:.45rem;padding-top:.35rem}.section-head{width:100%;color:var(--ink);text-align:left;background:0 0;border-radius:8px;justify-content:space-between;align-items:center;min-height:36px;padding:.25rem .1rem;display:flex}.student-list{gap:.3rem;margin:0;padding:.2rem 0 .5rem;list-style:none;display:grid}.student-row{border:1px solid var(--border);background:var(--surface);border-radius:10px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.35rem .7rem;padding:.35rem .5rem;display:grid}.student-identity{gap:.1rem;min-width:0;display:grid}.student-name{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.student-actions{flex-shrink:0;align-items:center;gap:.3rem;display:flex}.student-access{border-top:1px solid var(--border);grid-column:1/-1;padding-top:.35rem}.empty-row{padding:.35rem .15rem}.hint{color:var(--muted);font-size:.82rem;line-height:1.35;display:block}.check-row{align-items:flex-start;gap:.45rem;margin:.25rem 0;display:flex}.icon-btn{background:var(--primary-soft);min-width:36px;min-height:36px;color:var(--primary);padding:0}.overflow{position:relative}.overflow-menu{z-index:8;background:var(--surface);border:1px solid var(--border);border-radius:10px;gap:.15rem;min-width:11rem;padding:.35rem;display:grid;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 8px 24px #24352d1f}.overflow-menu button{text-align:left;justify-content:flex-start;width:100%}.combobox-box{position:relative}.combobox-list{z-index:9;background:var(--surface);border:1px solid var(--border);border-radius:10px;max-height:220px;margin:.2rem 0 0;padding:.25rem;list-style:none;position:absolute;left:0;right:0;overflow:auto;box-shadow:0 8px 24px #24352d1f}.combobox-list button{width:100%;color:var(--ink);text-align:left;background:0 0;border-radius:8px}.combobox-list button:hover,.combobox-list button.selected{background:var(--primary-soft);color:var(--primary)}.session-row{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.35rem;display:grid}.dialog-scrim{z-index:20;background:#24352d47;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.dialog{background:var(--surface);border:1px solid var(--border);border-radius:14px;width:min(36rem,100%);max-height:min(88vh,48rem);padding:.9rem 1rem 1rem;overflow:auto;box-shadow:0 12px 36px #24352d29}.preview-block,.bulk-scope{gap:.4rem;margin:.5rem 0;display:grid}.toast{z-index:30;background:var(--primary);color:var(--surface);border-radius:10px;margin:0;padding:.45rem .8rem;font-size:.92rem;position:fixed;bottom:1rem;right:1rem;box-shadow:0 6px 18px #24352d29}.page.cabinet .section-head,.page.cabinet .combobox-list button{color:var(--ink);box-shadow:none;background:0 0}.page.cabinet .section-head:hover,.page.cabinet .combobox-list button:hover{background:var(--primary-soft);color:var(--primary);filter:none}@media (width<=720px){.page.cabinet button,.page.cabinet .tab,.page.cabinet .field input,.page.cabinet .field select,.page.cabinet .icon-btn{min-height:44px}.student-row{grid-template-columns:1fr}.student-name{white-space:normal}.student-actions{justify-content:flex-start}.session-row{grid-template-columns:1fr}.drawer{border-radius:16px 16px 0 0;align-self:flex-end;width:100%;height:min(92vh,100%)}.week-cal{display:none}.day-switcher,.day-agenda,.agenda-list,.list-mode .agenda-list{display:grid}.compact-mark{grid-template-columns:1fr}}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:.6rem 1rem;margin:.15rem 0 .7rem;display:flex}.page-header h1{margin:0}.page-actions{flex-wrap:wrap;align-items:end;gap:.4rem;display:flex}.masthead-email{margin:.15rem 0 0;font-size:.82rem}.segmented{background:var(--primary-soft);border-radius:10px;flex-wrap:wrap;gap:.2rem;padding:.15rem;display:flex}.segmented-item{color:var(--primary);min-height:var(--control-h,34px);background:0 0;padding:.25rem .7rem}.segmented-item.selected,.page.cabinet .segmented-item.selected{background:var(--primary);color:var(--surface)}.empty-state{padding:.85rem .2rem 1rem}.empty-title{margin:0 0 .35rem;font-family:Lora,Georgia,serif;font-size:1.05rem}.chip{border-radius:999px;align-items:center;margin-right:.25rem;padding:.05rem .45rem;font-size:.75rem;line-height:1.4;display:inline-flex}.chip-muted{background:var(--primary-soft);color:var(--muted)}.chip-ok{background:var(--primary-soft);color:var(--primary)}.chip-warn{color:#7a5a12;background:#f6e7c8}.chip-danger{background:var(--notice-surface);color:var(--notice-ink)}.drawer-scrim{z-index:24;background:#24352d47;justify-content:flex-end;display:flex;position:fixed;inset:0}.drawer{background:var(--surface);border-left:1px solid var(--border);flex-direction:column;width:min(26.5rem,100%);height:100%;display:flex;box-shadow:-8px 0 24px #24352d14}.drawer-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:.5rem;padding:.7rem .9rem .5rem;display:flex}.drawer-head h2{margin:0;font-size:1.15rem}.drawer-body{flex:1;align-content:start;gap:.55rem;padding:.7rem .9rem 1.25rem;display:grid;overflow:auto}.drawer-foot{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;flex-shrink:0;justify-content:flex-end;gap:.4rem;padding:.65rem .9rem;display:flex}.week-nav{flex-wrap:wrap;align-items:end;gap:.5rem 1rem;margin-bottom:.6rem;display:flex}.week-date{min-width:10rem}.week-range{color:var(--muted);margin:0;font-size:.92rem}.week-cal{border:1px solid var(--border);background:var(--surface);border-radius:12px;grid-template-columns:3.1rem repeat(7,minmax(0,1fr));display:grid;overflow:hidden}.week-cal-corner,.week-cal-head{border-bottom:1px solid var(--border);border-right:1px solid var(--border);background:#fbf6ec;padding:.4rem .35rem}.week-cal-head{gap:.05rem;min-height:3.1rem;display:grid}.week-cal-dow{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:.72rem}.week-cal-date{font-size:.82rem}.week-cal-hours{border-right:1px solid var(--border);position:relative}.week-hour-label{color:var(--muted);text-align:right;padding:.15rem .25rem 0 0;font-size:.72rem}.week-cal-day{border-right:1px solid var(--border);min-width:0;position:relative}.week-hour-line{border-top:1px dashed var(--border);position:absolute;left:0;right:0}.week-event{z-index:1;background:#f3f8f3;border:1px solid #cfe0d2;border-radius:8px;grid-template-rows:minmax(0,1fr) auto;gap:.15rem;min-height:52px;padding:.2rem .28rem .25rem;display:grid;position:absolute;overflow:hidden}.week-event.cancelled{background:var(--notice-surface);border-style:dashed;border-color:#e3b4b2}.week-event.replaced{box-shadow:inset 3px 0 0 var(--gold)}.week-event .event-main{width:100%;min-height:0;color:var(--ink);text-align:left;background:0 0;border-radius:0;align-content:start;gap:.05rem;padding:0;display:grid}.week-event .event-time,.agenda-item .event-time{font-size:.78rem;font-weight:700}.week-event .event-title,.week-event .event-meta{text-overflow:ellipsis;white-space:nowrap;font-size:.75rem;overflow:hidden}.week-event .event-edit,.agenda-item .event-edit,.agenda-item>.secondary{width:100%;min-height:28px;padding:.1rem .4rem;font-size:.78rem}.day-switcher,.week-wrap>.agenda-list,.week-wrap>.empty-row{display:none}.day-chip{background:var(--surface);color:var(--ink);border:1px solid var(--border);justify-items:start;min-height:44px;display:grid}.day-chip.selected,.page.cabinet .day-chip.selected{background:var(--primary);color:var(--surface)}.agenda-list{gap:.35rem;margin:0;padding:0;list-style:none;display:grid}.agenda-item{border:1px solid var(--border);background:var(--surface);border-radius:10px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.35rem;padding:.4rem .5rem;display:grid}.agenda-item.cancelled{background:var(--notice-surface);border-style:dashed}.agenda-item.replaced{box-shadow:inset 3px 0 0 var(--gold)}.event-main{width:100%;color:var(--ink);text-align:left;background:0 0;gap:.1rem;min-height:0;padding:0;display:grid}.event-status{flex-wrap:wrap;gap:.2rem;display:flex}.date-group h3{margin:.7rem 0 .3rem;font-size:.95rem}.data-table{border-collapse:collapse;width:100%;font-size:.9rem}.data-table th,.data-table td{border-bottom:1px solid var(--border);text-align:left;vertical-align:middle;padding:.32rem .45rem}.data-table .num{text-align:right;white-space:nowrap}.fold{border:1px solid var(--border);background:var(--surface);border-radius:10px;margin:.7rem 0;padding:.35rem .7rem .55rem}.fold summary{cursor:pointer;padding:.25rem 0;font-weight:600}.row-plain{width:100%;color:var(--ink);text-align:left;background:0 0;border-radius:0;gap:.1rem;min-height:0;padding:0;display:grid}.rule-day{border:1px solid var(--border);background:var(--surface);border-radius:10px;padding:.45rem .55rem}.catalog-grid{gap:1.1rem;display:grid}.compact-mark{grid-template-columns:minmax(8rem,1fr) minmax(0,2fr);align-items:center}.section-toolbar.wrap{align-items:center}@media (width>=841px){.week-wrap>.day-switcher,.week-wrap>.agenda-list,.week-wrap>.empty-row{display:none}.list-mode .agenda-list,.list-mode .empty-row{display:grid}}@media (width<=840px){.week-cal{display:none}.week-wrap>.day-switcher{flex-wrap:wrap;gap:.3rem;margin-bottom:.55rem;display:flex}.week-wrap>.agenda-list,.week-wrap>.empty-row{display:grid}}@font-face{font-family:Lora;src:url(/fonts/Lora-Variable.ttf)format("truetype");font-weight:400 700;font-style:normal;font-display:swap}@font-face{font-family:Noto Sans;src:url(/fonts/NotoSans-Variable.ttf)format("truetype");font-weight:400 700;font-style:normal;font-display:swap}:root{--background:#fff9ee;--surface:#fffcf7;--ink:#24352d;--muted:#59685f;--primary:#386448;--primary-soft:#e5efe6;--accent:#d74642;--notice-ink:#a83230;--notice-surface:#fdecea;--border:#e6e0d5;--gold:#d7ad54;color:var(--ink);background:var(--background);font-synthesis:none;text-rendering:optimizelegibility;font-family:Noto Sans,Segoe UI,sans-serif}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:var(--background)}button,input,select,textarea{font:inherit}h1,h2,h3{font-family:Lora,Georgia,serif;font-weight:700}
