@import "https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700;800&display=swap";:root{--page:#f4f5f7;--page-deep:#eceef1;--surface:#fff;--surface-soft:#f7f8fa;--ink:#14181f;--muted:#5b6470;--subtle:#8a929e;--faint:#b6bcc6;--line:#e6e8ec;--hair:#f0f1f4;--input:#f7f8fa;--accent:#2b59e0;--accent-strong:#1e47c4;--accent-soft:#ecf0fc;--accent-glow:#2b59e024;--ok:#1b7f4b;--ok-bg:#e7f4ec;--warn:#9a6212;--warn-bg:#fbefd8;--err:#d23a35;--violet-soft:#f0f1fb;--cyan-soft:#eaf5f7;--r-sm:8px;--r:10px;--r-lg:14px;--r-xl:18px;--shadow:0 2px 10px #14181f0f;--shadow-soft:0 1px 2px #14181f0d}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--page);color:var(--ink);-webkit-font-smoothing:antialiased;font-family:Hanken Grotesk,system-ui,sans-serif}.app-shell{background:0 0;gap:0;width:min(100%,1440px);min-height:100vh;margin:0 auto;padding:20px;display:flex}.app-sidebar{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl) 0 0 var(--r-xl);z-index:2;border-right:0;flex-direction:column;flex:0 0 232px;gap:24px;min-height:calc(100vh - 40px);padding:28px 16px 20px;display:flex}.app-content{background:var(--surface);border:1px solid var(--line);border-radius:0 var(--r-xl) var(--r-xl) 0;min-width:0;min-height:calc(100vh - 40px);box-shadow:var(--shadow);flex-direction:column;flex:1;display:flex;overflow:hidden}.app-header{background:var(--surface);border-bottom:1px solid var(--line);flex:none;align-items:center;gap:11px;padding:14px 18px;display:none}.sidebar-brand{align-items:center;gap:13px;padding:4px 10px 18px;display:flex}.brand-logo{border-radius:var(--r);background:var(--accent);color:#fff;flex:none;justify-content:center;align-items:center;width:40px;height:40px;font-size:18px;font-weight:800;display:flex}.brand-text{flex-direction:column;gap:1px;display:flex}.brand-name{letter-spacing:0;font-size:24px;font-weight:800;line-height:1}.brand-kicker{letter-spacing:0;color:var(--muted);font-size:12px;font-weight:700}.header-right{color:var(--muted);align-items:center;gap:8px;margin-left:auto;font-size:12px;display:flex}.app-main{-webkit-overflow-scrolling:touch;flex:1;padding:32px 36px 40px;overflow-y:auto}.app-nav{flex-direction:column;flex:1;gap:10px;padding-right:2px;display:flex;overflow-y:auto}.nav-item{border-radius:var(--r);width:100%;font:inherit;cursor:pointer;color:var(--muted);text-align:left;background:0 0;border:0;align-items:center;gap:12px;padding:10px 12px;transition:background .14s,color .14s;display:flex}.nav-item:hover{background:var(--surface-soft);color:var(--ink)}.nav-item.is-active{color:var(--accent);background:var(--accent-soft)}.nav-icon{color:currentColor;justify-content:center;align-items:center;width:24px;display:inline-flex}.nav-label{font-size:14px;font-weight:600}.sidebar-account{background:var(--surface-soft);border:1px solid var(--line);border-radius:var(--r);min-height:58px;color:var(--muted);align-items:center;gap:9px;padding:12px;font-size:13px;display:flex}.sidebar-account>span:first-child{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ink);font-weight:800;overflow:hidden}.screen-head{justify-content:space-between;align-items:flex-start;gap:12px;margin:0 0 24px;display:flex}.screen-title{letter-spacing:-.01em;color:var(--ink);margin:0;font-size:clamp(24px,2.4vw,30px);font-weight:700;line-height:1.1}.screen-sub{color:var(--subtle);margin:6px 0 0;font-size:13px;line-height:1.5}.section-label{letter-spacing:0;color:var(--ink);font-size:14px;font-weight:800}.hint{color:var(--subtle);max-width:46ch;margin:0 2px 12px;font-size:12px;line-height:1.5}.error{color:var(--err);font-weight:600}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}.card-grid,.day-grid{gap:16px;display:grid}.pill{background:var(--surface);color:var(--ink);border:1px solid var(--line);font:inherit;cursor:pointer;border-radius:999px;flex:none;align-items:center;gap:6px;padding:8px 14px;font-size:13px;font-weight:600;transition:background .14s,border-color .14s;display:inline-flex}.pill:hover:not(:disabled){background:var(--surface-soft)}.pill-accent{background:var(--accent);color:#fff;border-color:var(--accent)}.pill-accent:hover:not(:disabled){background:var(--accent-strong)}.pill:disabled{opacity:.5;cursor:not-allowed}.link-btn{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:0;padding:2px;font-size:13px;font-weight:700}.link-btn:disabled{opacity:.45;cursor:not-allowed}.link-btn.danger-link{color:var(--err)}.segmented{background:var(--surface-soft);border:1px solid var(--line);border-radius:var(--r);margin-bottom:16px;padding:3px;display:flex}.segmented-btn{color:var(--muted);border-radius:var(--r-sm);font:inherit;cursor:pointer;background:0 0;border:0;flex:1;padding:8px 12px;font-size:13px;font-weight:600;transition:background .14s,color .14s}.segmented-btn.is-on{background:var(--surface);color:var(--accent);box-shadow:var(--shadow-soft)}.mobile-form .attendance-status .segmented-btn{color:var(--muted);box-shadow:none;background:0 0}.mobile-form .attendance-status .segmented-btn.is-on{background:var(--surface);color:var(--accent);box-shadow:var(--shadow-soft)}.chip-row{gap:8px;padding:2px 2px 8px;display:flex;overflow-x:auto}.chip{background:var(--surface);color:var(--muted);border:1px solid var(--line);font:inherit;cursor:pointer;white-space:nowrap;border-radius:999px;flex:none;padding:7px 14px;font-size:13px;font-weight:600;transition:background .14s,border-color .14s}.chip:hover{background:var(--surface-soft)}.chip.is-on{background:var(--accent);color:#fff;border-color:var(--accent)}.assignment-picker{gap:7px;min-width:0;display:grid}.assignment-picker-label{color:var(--muted);font-size:12px;font-weight:700}.assignment-pills{padding-bottom:2px}.assignment-pills .chip{align-items:center;gap:6px;display:inline-flex}.assignment-pill-dot{opacity:.62}.sel-head{justify-content:space-between;align-items:baseline;margin:8px 2px 12px;display:flex}.sel-name{font-size:17px;font-weight:800}.sel-meta{color:var(--faint);font-size:12px;font-weight:600}.day-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}.day-label{padding:12px 16px 9px;font-size:13px;font-weight:700}.slot-row{text-align:left;border:0;border-top:1px solid var(--hair);width:100%;font:inherit;color:inherit;cursor:pointer;background:0 0;align-items:center;gap:13px;padding:12px 16px;display:flex}.slot-row.is-static,.slot-row:disabled{cursor:default}.slot-row.is-pinned{background:var(--accent-soft);box-shadow:inset 4px 0 0 var(--accent)}.slot-time{width:96px;color:var(--subtle);font-variant-numeric:tabular-nums;flex:none;font-size:12px;font-weight:600}.slot-dot{border-radius:999px;flex:none;width:8px;height:8px}.slot-main{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.slot-title{font-size:14px;font-weight:700}.slot-sub{color:var(--subtle);font-size:12px}.pin-badge{letter-spacing:.08em;color:var(--accent);background:var(--accent-soft);border-radius:999px;flex:none;padding:3px 8px;font-size:9px;font-weight:800}.feas-card{padding:18px}.feas-head{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.status-pill{border-radius:999px;padding:4px 11px;font-size:11px;font-weight:800}.status-pill.is-ok{color:var(--ok);background:var(--ok-bg)}.status-pill.is-review{color:var(--warn);background:var(--warn-bg)}.feas-list{margin:0;padding:0;list-style:none}.finding{align-items:flex-start;gap:11px;padding:6px 0;font-size:13px;line-height:1.45;display:flex}.finding-dot{border-radius:999px;flex:none;width:7px;height:7px;margin-top:5px}.toggle{background:var(--line);cursor:pointer;border:0;border-radius:999px;flex:none;width:42px;height:25px;padding:0;position:relative}.toggle.is-on{background:var(--accent)}.toggle-knob{background:#fff;border-radius:999px;width:19px;height:19px;transition:transform .15s;position:absolute;top:3px;left:3px;box-shadow:0 1px 2px #00000040}.toggle.is-on .toggle-knob{transform:translate(17px)}.toggle input{opacity:0;cursor:pointer;width:100%;height:100%;margin:0;position:absolute}.setup-section{justify-content:space-between;align-items:center;margin:28px 2px 12px;display:flex}.avatar{background:var(--accent-soft);width:36px;height:36px;color:var(--accent);border-radius:14px;flex:none;justify-content:center;align-items:center;font-size:13px;font-weight:800;display:flex}.teacher-row{border-top:1px solid var(--hair);align-items:center;gap:12px;padding:14px 16px;display:flex}.teacher-row:first-child{border-top:0}.teacher-row input[type=text]{font:inherit;background:0 0;border:0;flex:1;min-width:0;font-size:14px;font-weight:700}.account-row{flex-wrap:wrap;align-items:flex-start}.account-summary{flex:180px;align-items:center;gap:12px;min-width:0;display:flex}.account-copy{min-width:0}.account-name{overflow-wrap:anywhere;font-size:14px;font-weight:700;display:block}.teacher-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;display:flex}.teacher-actions .link-btn:disabled{opacity:.5;cursor:not-allowed}.teacher-edit-form{flex:1 0 100%;gap:10px;padding:2px 0 0 44px;display:grid}.teacher-edit-extra{flex:1 0 100%;justify-content:flex-start;padding-left:44px}.teacher-edit-note{flex:1 0 100%;padding-left:44px}.row-load{color:var(--faint);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600}.icon-x{background:var(--input);width:30px;height:30px;color:var(--faint);cursor:pointer;border:0;border-radius:10px;flex:none;font-size:16px;line-height:1}.class-card,.req-card,.rule-card{padding:16px 18px}.class-card input[type=text],.req-card input[type=text]{font:inherit;border:1px solid var(--line);background:var(--input);border-radius:12px;min-width:0;padding:7px 10px}.period-pill{color:var(--muted);background:var(--accent-soft);border-radius:12px;align-items:center;gap:4px;padding:5px 9px;font-size:12px;font-weight:700;display:inline-flex}.class-flag{color:var(--muted);cursor:pointer;align-items:center;gap:7px;margin-top:11px;font-size:12px;font-weight:600;display:flex}.period-pill .period-input{width:6.5rem;font:inherit;font-variant-numeric:tabular-nums;background:0 0;border:0}.req-controls{flex-wrap:wrap;align-items:center;gap:8px;margin-top:9px;display:flex}.req-controls select,.req-controls input[type=number]{font:inherit;border:1px solid var(--line);background:var(--input);border-radius:12px;padding:7px 10px}.req-controls input[type=number]{width:4rem}.rule-day{border-top:1px solid var(--hair);align-items:center;gap:12px;padding:6px 0;display:flex}.rule-day:first-of-type{border-top:0}.rule-day .day-key{width:40px;color:var(--faint);flex:none;font-size:12px;font-weight:600}.dayplan-input{font:inherit;border:1px solid var(--line);background:var(--input);border-radius:10px;flex:1;min-width:0;padding:6px 9px;font-size:12px}.dayplan-input::placeholder{color:var(--faint);font-style:italic}.what-to-print{overflow:hidden}.ptp-row{text-align:left;width:100%;font:inherit;color:inherit;cursor:pointer;border:0;border-top:1px solid var(--hair);background:0 0;align-items:center;gap:13px;padding:12px 14px;display:flex}.ptp-row:first-child{border-top:0}.ptp-sub{border-top:1px solid var(--hair);text-transform:uppercase;letter-spacing:.07em;color:var(--faint);padding:10px 14px 5px;font-size:11px;font-weight:700}.check-box{border:1.5px solid var(--line);background:var(--surface);border-radius:7px;flex:none;justify-content:center;align-items:center;width:21px;height:21px;display:inline-flex}input[type=checkbox].native-check{opacity:0;width:1px;height:1px;position:absolute}input[type=checkbox].native-check:checked+.check-box{background:var(--accent);border-color:var(--accent)}input[type=checkbox].native-check:checked+.check-box:after{content:"";border-top:0;border-bottom:2px solid #fff;border-left:2px solid #fff;border-right:0;width:11px;height:6px;transform:rotate(-45deg)translateY(-1px)}.action-bar{flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 18px;display:flex}.mobile-form{gap:14px;padding:18px;display:grid}.field{color:var(--muted);gap:4px;font-size:12px;font-weight:600;display:grid}.field input,.field select{font:inherit;color:var(--ink);border:1px solid var(--line);background:var(--input);border-radius:12px;min-width:0;padding:10px 12px;font-size:14px;box-shadow:inset 0 1px #ffffffe6}.teacher-edit-form .field input{border:1px solid var(--line);background:var(--input);border-radius:12px;width:100%;padding:10px 12px;font-weight:500}.check-row{align-items:center;gap:8px;font-size:13px;display:flex}.event-card{border-left:5px solid var(--accent);padding:14px 16px}.event-holiday{border-left-color:var(--err)}.event-exam{border-left-color:var(--warn)}.event-meeting{border-left-color:#3367d6}.event-announcement{border-left-color:var(--ok)}.log-row{border-top:1px solid var(--hair);padding:14px 16px;font-size:13px}.log-row:first-child{border-top:0}.log-list-card{margin-top:12px;overflow:hidden}.log-row-head{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.admin-log-actions{align-items:center;gap:10px;display:flex}.admin-log-edit-form{border:1px solid var(--line);background:var(--surface-soft);border-radius:14px;grid-template-columns:minmax(130px,.65fr) minmax(180px,1fr);gap:10px;margin-top:13px;padding:13px;display:grid}.admin-log-wide-field{grid-column:1/-1}.admin-log-checklist{flex-wrap:wrap;gap:8px 16px;display:flex}.admin-log-edit-actions{grid-column:1/-1;justify-content:flex-end;gap:12px;display:flex}.admin-log-message{margin:9px 0 0;font-size:12px}.admin-log-week-toolbar{grid-template-columns:minmax(190px,260px) minmax(300px,1fr);align-items:end;gap:24px;margin-bottom:12px;padding:16px 18px;display:grid}.admin-log-week-toolbar .week-nav{margin:0}.admin-log-week-toolbar .week-nav .link-btn{border:1px solid var(--line);background:var(--surface);border-radius:12px;min-width:38px;min-height:36px}.admin-week-log-table{margin-top:12px;overflow-x:auto}.admin-week-log-header,.admin-week-log-row{grid-template-columns:62px 112px minmax(110px,.9fr) minmax(130px,1fr) minmax(130px,1fr) minmax(220px,1.6fr);min-width:850px;display:grid}.admin-week-log-header{border-bottom:1px solid var(--line);background:var(--surface-soft);color:var(--faint);letter-spacing:.07em;text-transform:uppercase;padding:10px 16px;font-size:10px;font-weight:800}.admin-week-log-row{border-top:1px solid var(--hair);align-items:start;padding:13px 16px;font-size:13px}.admin-week-log-row:first-child{border-top:0}.admin-week-log-row>*{overflow-wrap:anywhere;min-width:0;padding-right:12px}.admin-log-day{color:var(--muted);font-weight:700}.admin-log-topic-cell{gap:7px;display:grid}.admin-log-topic-cell .admin-log-actions{justify-content:flex-start}.admin-week-log-row .admin-log-edit-form,.admin-week-log-row .admin-log-message{grid-column:1/-1}.admin-log-empty{min-width:850px;margin:0;padding:18px 16px}.parents-toggle-bar{justify-content:flex-end;margin:4px 0 8px;display:flex}.parents-toggle-bar .link-btn{border:1px solid var(--line);background:var(--surface);border-radius:12px;min-height:36px;padding:0 14px}.parents-toggle-bar .link-btn.is-on{background:var(--accent);color:#fff;border-color:var(--accent)}.parents-schedule{padding:22px 20px}.parents-schedule-head{text-align:center;margin-bottom:18px}.parents-centre{letter-spacing:.03em;color:var(--accent);margin:0;font-weight:800}.parents-title{margin:6px 0 2px;font-size:16px}.parents-range{color:var(--faint);margin:0;font-size:12px}.parents-table{display:grid}.parents-row{border-top:1px solid var(--hair);grid-template-columns:56px 110px minmax(110px,1fr) minmax(130px,1.4fr) minmax(150px,1.6fr);gap:8px;padding:11px 8px;font-size:13px;display:grid}.parents-row>*{overflow-wrap:anywhere;min-width:0}.parents-row-head{color:var(--faint);letter-spacing:.07em;text-transform:uppercase;border-top:0;font-size:10px;font-weight:800}.parents-empty{text-align:center;padding:16px}.log-selectors{grid-template-columns:1fr 1fr;gap:10px;display:grid}.pagination-row{border-top:1px solid var(--hair);background:var(--surface-soft);justify-content:space-between;align-items:center;gap:10px;padding:14px 16px;display:flex}.pagination-row button{flex:none}.week-nav{justify-content:space-between;align-items:center;margin-top:12px;display:flex}.week-nav-label{font-weight:600}.week-log-toolbar{padding:10px 14px}.week-log-toolbar .week-nav{margin-top:0}.week-log-toolbar .link-btn{border:1px solid var(--line);background:var(--surface);border-radius:12px;min-width:38px;min-height:36px}.week-log-sheet{gap:14px;margin-top:12px;display:grid}.week-log-day-card{overflow:hidden}.week-log-day-head{background:var(--surface-soft);border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:12px;padding:14px 16px;display:flex}.week-log-day-head strong{font-size:15px}.week-log-day-head span{color:var(--subtle);font-size:12px;font-weight:700}.week-log-columns,.week-log-row{grid-template-columns:minmax(130px,.85fr) minmax(170px,1.15fr) minmax(180px,1.35fr) minmax(92px,auto);align-items:center;gap:12px;display:grid}.week-log-columns{color:var(--faint);letter-spacing:.07em;text-transform:uppercase;padding:9px 16px;font-size:10px;font-weight:800}.week-log-row{border-top:1px solid var(--hair);padding:12px 16px}.week-log-row:first-child{border-top:0}.week-log-assignment{gap:2px;min-width:0;display:grid}.week-log-assignment strong{font-size:13px}.week-log-assignment span{color:var(--subtle);overflow-wrap:anywhere;font-size:12px}.week-log-action{justify-items:end;gap:5px;min-width:92px;display:grid}.week-log-action .link-btn{border:1px solid var(--accent);background:var(--accent);color:#fff;border-radius:11px;min-width:76px;min-height:36px;padding:7px 11px}.week-log-action .link-btn:hover:not(:disabled){background:var(--accent-strong)}.week-log-action .link-btn.is-saved:disabled{opacity:1;background:var(--ok-bg);color:var(--ok);border-color:#0000}.week-log-error{max-width:150px;color:var(--err);text-align:right;font-size:11px;line-height:1.3}.field-input{border:1px solid var(--line);font:inherit;background:var(--input);min-width:0;color:var(--ink);border-radius:12px;padding:10px 12px}.test-row{justify-content:space-between;align-items:center;gap:10px;display:flex}.test-context{margin:0}.test-summary{gap:2px;min-width:0;display:grid}.test-checklist{flex-wrap:wrap;gap:8px 12px;margin-top:6px;display:flex}.test-checklist .check-row{color:var(--muted);font-size:12px}.test-checklist-summary{flex-wrap:wrap;gap:6px;margin-top:7px;display:flex}.test-checklist-summary span{border:1px solid var(--line);color:var(--subtle);background:var(--surface-soft);border-radius:999px;padding:4px 9px;font-size:11px}.test-checklist-summary span.is-done{color:var(--ok);background:var(--ok-bg);border-color:#0000}.syllabus-list{margin-top:12px;overflow:hidden}.syllabus-row{gap:8px;display:grid}.syllabus-title{gap:2px;min-width:0;display:grid}.syllabus-form-grid{grid-template-columns:88px 88px;gap:10px;display:grid}.syllabus-status-row{grid-template-columns:minmax(170px,1fr) minmax(130px,160px) minmax(180px,220px) auto;align-items:end}.syllabus-row-actions{justify-content:flex-end;align-items:center;gap:10px;min-height:40px;display:flex}.syllabus-add-row{grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:10px;display:grid}.compact-field{margin:0}.syllabus-progress-group{gap:8px;display:grid}.syllabus-progress-chapters{gap:4px;display:grid}.worksheet-requests-head{align-items:center}.worksheet-request-count{background:var(--warn-bg);color:var(--warn);border-radius:999px;flex:none;padding:6px 10px;font-size:12px;font-weight:800}.worksheet-request-list{margin-top:12px;overflow:hidden}.worksheet-request-row{border-top:1px solid var(--hair);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:20px;padding:17px 18px;display:grid}.worksheet-request-row:first-child{border-top:0}.worksheet-request-main{min-width:0}.worksheet-request-chapter{margin:8px 0 2px;font-size:14px;font-weight:750}.worksheet-request-context{margin:0}.worksheet-given-btn{border:1px solid var(--ok);background:var(--ok-bg);min-height:40px;color:var(--ok);font:inherit;cursor:pointer;border-radius:12px;padding:9px 14px;font-size:13px;font-weight:800}.worksheet-given-btn:hover:not(:disabled){background:var(--ok);color:#fff}.worksheet-given-btn:disabled{opacity:.6;cursor:wait}.worksheet-request-error{color:var(--err);margin:8px 0 0;font-size:12px}.worksheet-request-empty{margin:0;padding:20px 18px}.banner{background:var(--err);color:#fff;padding:10px 16px;font-size:13px}.banner.neutral{background:var(--input);color:var(--muted);border-top:1px solid var(--line)}.auth-screen{background:0 0;place-items:center;min-height:100vh;padding:1rem;display:grid}.auth-box{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);width:min(100%,400px);box-shadow:var(--shadow);padding:28px}.auth-box h1{margin:0 0 12px;font-size:20px;font-weight:800}.auth-box label{color:var(--muted);gap:4px;margin:10px 0;font-size:12px;font-weight:600;display:grid}.auth-box input{font:inherit;border:1px solid var(--line);background:var(--input);border-radius:12px;padding:10px 12px}.auth-box details{border-top:1px solid var(--line);margin-top:1rem;padding-top:.75rem}.auth-box button,.mobile-form button,.action-bar button,.action-bar .secondary{font:inherit;border:1px solid var(--accent);border-radius:var(--r);background:var(--accent);color:#fff;cursor:pointer;padding:10px 16px;font-weight:600;transition:background .14s}.auth-box button:hover:not(:disabled),.mobile-form button:hover:not(:disabled),.action-bar button:hover:not(:disabled){background:var(--accent-strong)}.auth-box button:disabled,.mobile-form button:disabled,.action-bar button:disabled{opacity:.5;cursor:not-allowed}.mobile-form .assignment-pills .chip{border:1px solid var(--line);background:var(--surface);color:var(--muted);border-radius:999px;flex:none;padding:7px 14px}.mobile-form .assignment-pills .chip:hover:not(:disabled){background:var(--surface-soft)}.mobile-form .assignment-pills .chip.is-on,.mobile-form .assignment-pills .chip.is-on:hover:not(:disabled){border-color:var(--accent);background:var(--accent);color:#fff}.action-bar button.secondary,.auth-box button.secondary,button.secondary,.action-bar .secondary{background:var(--surface);color:var(--ink);border:1px solid var(--line);box-shadow:none}.action-bar button.secondary:hover:not(:disabled),button.secondary:hover:not(:disabled){background:var(--surface-soft)}button.secondary{font:inherit;border-radius:var(--r);cursor:pointer;padding:8px 13px;font-weight:600}.panel{max-width:440px;margin:2rem auto;padding:1rem}.error-panel{background:var(--surface);border:1px solid var(--err);border-radius:18px}.error-panel h1{color:var(--err);margin-top:0}table.edit{border-collapse:separate;border-spacing:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);width:100%;margin:.5rem 0 1rem;font-size:13px;overflow:hidden}table.edit th,table.edit td{border:0;border-bottom:1px solid var(--hair);text-align:left;padding:10px 12px}table.edit tr:last-child td{border-bottom:0}table.edit input,table.edit select{font:inherit;border:1px solid var(--line);background:var(--input);border-radius:12px;padding:8px 10px}.inline-form{gap:8px;margin:12px 0;display:grid}.inline-form input,.inline-form select{font:inherit;border:1px solid var(--line);background:var(--input);border-radius:12px;padding:10px 12px}table.grid{border-collapse:separate;border-spacing:0;background:var(--surface);table-layout:fixed;border:1px solid var(--line);border-radius:var(--r-lg);width:100%;margin:.75rem 0;overflow:hidden}table.grid th,table.grid td{border:0;border-right:1px solid var(--hair);border-bottom:1px solid var(--hair);text-align:center;vertical-align:top;padding:.5rem .6rem}table.grid tr>:last-child{border-right:0}table.grid tbody tr:last-child>*{border-bottom:0}table.grid thead th{background:var(--surface-soft);color:var(--ink);padding:.65rem;font-weight:600}table.grid tbody th{background:var(--surface-soft);white-space:nowrap;font-weight:700}table.grid tbody th.time-head{color:var(--muted);font-variant-numeric:tabular-nums;font-weight:600}.subj{font-weight:700}.who{color:var(--subtle);font-size:.85em}.free{color:var(--faint)}.master-cell{padding:.25rem!important}.master .slot{padding:.25rem 0}.master .slot+.slot{border-top:1px dashed var(--line);margin-top:.1rem}.master .slot-time{width:auto;color:var(--subtle);font-variant-numeric:tabular-nums;font-size:.7rem;display:block}.cell-static{line-height:1.3;display:block}button.cell{width:100%;font:inherit;cursor:pointer;background:0 0;border:none;border-radius:6px;padding:.15rem;line-height:1.3;display:block}button.cell:not(:disabled):hover{background:var(--hair)}button.cell:disabled{cursor:default;color:var(--faint)}button.cell.pinned{background:var(--accent-soft);box-shadow:inset 0 0 0 1px var(--accent);color:var(--accent)}.print-page h2{border-bottom:2px solid var(--accent);margin-top:2rem;padding-bottom:.3rem}.teacher-day-schedules{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;display:grid}.teacher-day-card{min-width:0;padding:17px 18px}.teacher-day-head{justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:13px;display:flex}.teacher-day-head>div{gap:3px;display:grid}.teacher-day-kicker{color:var(--accent);letter-spacing:.08em;text-transform:uppercase;font-size:11px;font-weight:800}.teacher-day-list{gap:8px;display:grid}.teacher-day-period{background:var(--surface-soft);border-radius:12px;grid-template-columns:minmax(105px,auto) minmax(50px,auto) 1fr;align-items:center;gap:10px;padding:10px 11px;display:grid}.teacher-day-time{color:var(--subtle);font-variant-numeric:tabular-nums;font-size:12px}.teacher-day-class{font-size:13px;font-weight:800}.teacher-day-subject{color:var(--muted);overflow-wrap:anywhere;min-width:0;font-size:13px}.teacher-day-empty{margin:0;padding:9px 0 3px}.teacher-week-heading{margin-top:22px}@media (width>=768px){.screen{max-width:100%}.day-grid,.card-grid{grid-template-columns:repeat(2,1fr)}}@media (width>=1200px){.card-grid{grid-template-columns:repeat(3,1fr)}}@media (width<=560px){.log-selectors{grid-template-columns:1fr}.admin-log-week-toolbar{grid-template-columns:1fr;gap:14px}.admin-log-edit-form{grid-template-columns:1fr;padding:11px}.admin-log-wide-field{grid-column:1}.admin-log-edit-actions{grid-column:1;justify-content:flex-start}.week-log-columns{display:none}.week-log-row{grid-template-columns:1fr;gap:9px;padding:14px}.week-log-row .field-input{width:100%;min-width:0}.week-log-assignment{grid-template-columns:auto 1fr;align-items:baseline;gap:8px}.week-log-action{justify-content:space-between;align-items:flex-start;gap:10px;min-width:0;display:flex}.week-log-error{text-align:left;order:-1;max-width:none}.syllabus-status-row{grid-template-columns:1fr;align-items:stretch}.syllabus-status-row .link-btn{justify-self:start}.syllabus-row-actions{justify-content:flex-start}.syllabus-add-row{grid-template-columns:1fr;align-items:stretch}.worksheet-request-row{grid-template-columns:1fr;gap:12px}.worksheet-given-btn{justify-self:start}.teacher-day-schedules{grid-template-columns:1fr}.teacher-day-period{grid-template-columns:1fr auto;gap:3px 10px}.teacher-day-time{grid-column:1}.teacher-day-class{grid-area:1/2}.teacher-day-subject{grid-column:1/-1}}@media (width<=767px){body{background:var(--page)}.app-shell{background:0 0;flex-direction:column;width:min(100%,440px);min-height:100vh;padding:0;display:flex}.app-sidebar{display:contents}.sidebar-account,.sidebar-brand{display:none}.app-content{min-height:100vh;box-shadow:none;background:0 0;border:0;border-radius:0;margin:0}.app-header{z-index:4;background:var(--surface);border-bottom:1px solid var(--line);min-height:65px;padding:14px 18px;display:flex;position:sticky;top:0}.app-header .brand-logo{border-radius:13px;width:36px;height:36px;font-size:17px}.app-header .brand-name{font-size:16px}.app-header .brand-kicker{font-size:10px}.app-main{padding:18px 16px 104px}.app-nav{z-index:5;width:min(100%,440px);padding:9px 8px calc(14px + env(safe-area-inset-bottom));background:var(--surface);border-top:1px solid var(--line);flex-direction:row;gap:4px;display:flex;position:fixed;bottom:0;left:50%;overflow-x:auto;transform:translate(-50%);box-shadow:0 -2px 12px #14181f0d}.nav-item{text-align:center;border-radius:14px;flex-direction:column;flex:1 0 auto;align-items:center;gap:4px;width:auto;min-width:64px;padding:7px 6px;display:flex}.nav-item.is-active{box-shadow:none;background:var(--accent-soft)}.nav-label{font-size:11px}.screen-title{font-size:28px}.card{border-radius:18px}.syllabus-status-row{grid-template-columns:1fr;align-items:stretch}.syllabus-status-row .link-btn{justify-self:start}.syllabus-row-actions{justify-content:flex-start}table.grid{min-width:560px}}@media print{.no-print,.app-header,.app-sidebar,.app-nav,.action-bar{display:none!important}body{color:#000;background:#fff}.app-shell,.app-content,.app-main{width:auto;max-width:none;min-height:0;box-shadow:none;background:#fff;border:0;margin:0;padding:0;overflow:visible}.print-page{page-break-after:always}.print-page:last-child{page-break-after:auto}.print-page.landscape{page:landscape}table.grid thead th{color:#000;-webkit-print-color-adjust:exact;print-color-adjust:exact;background:#fff}table.grid tbody th{-webkit-print-color-adjust:exact;print-color-adjust:exact;background:#f3f1ec}button.cell.pinned{box-shadow:none}}@page landscape{size:landscape}@keyframes ov-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes ov-pop{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes ov-pulse{0%,to{box-shadow:0 0 0 0 var(--warn-bg);transform:scale(1)}50%{transform:scale(1.08);box-shadow:0 0 0 6px #0000}}.ov-screen{gap:18px;display:grid}.ov-card{padding:18px 20px;animation:.5s cubic-bezier(.22,1,.36,1) both ov-rise}.ov-hero{background:linear-gradient(120deg, var(--accent) 0%, #1f43c2 60%, #2742a8 100%);color:#fff;border-radius:var(--r-lg);border:0;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:18px;padding:22px 26px;animation:.5s cubic-bezier(.22,1,.36,1) both ov-rise;display:flex}.ov-hero-day{align-items:center;gap:16px;min-width:0;display:flex}.ov-hero-icon{background:#ffffff29;border-radius:14px;flex:none;justify-content:center;align-items:center;width:48px;height:48px;display:inline-flex}.ov-hero-icon svg{width:24px;height:24px}.ov-hero-headings{gap:4px;display:grid}.ov-hero-line{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.ov-hero-dayname{letter-spacing:-.01em;font-size:30px;font-weight:800;line-height:1}.ov-hero-pill{background:#ffffff2e;border-radius:999px;padding:3px 10px;font-size:12px;font-weight:700}.ov-hero-sub{opacity:.85;font-size:13px}.ov-load{align-items:center;display:flex}.ov-load-item{border-left:1px solid #ffffff38;grid-template-rows:auto auto;grid-template-columns:auto auto;align-items:center;column-gap:10px;padding:2px 22px;display:grid}.ov-load-item:first-child{border-left:0;padding-left:0}.ov-load-ic{opacity:.85;grid-row:1/3;width:20px;height:20px}.ov-load-item strong{grid-column:2;font-size:24px;font-weight:800;line-height:1}.ov-load-lbl{opacity:.85;grid-column:2;font-size:12px}@media (width<=540px){.ov-hero{flex-direction:column;align-items:flex-start}.ov-load{justify-content:space-between;align-self:stretch}.ov-load-item{padding:2px 14px}}.ov-period-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;display:grid}.ov-period-card{border:1px solid var(--accent-soft);background:#f5f7fd;border-radius:16px;align-items:center;gap:14px;padding:14px 16px;animation:.4s both ov-pop;display:flex}.ov-period-badge{background:var(--accent);color:#fff;border-radius:999px;flex:none;justify-content:center;align-items:center;width:44px;height:44px;display:inline-flex}.ov-period-badge svg{width:22px;height:22px}.ov-period-meta{gap:2px;min-width:0;display:grid}.ov-period-time{color:var(--accent);font-size:13px;font-weight:700}.ov-period-class{color:var(--ink);font-size:17px;font-weight:800}.ov-period-subject{color:var(--subtle);font-size:13px}.ov-cardlink{cursor:pointer;font:inherit;color:var(--accent);background:0 0;border:0;align-items:center;gap:4px;padding:2px;font-size:13px;font-weight:700;display:inline-flex}.ov-cardlink-ic{width:16px;height:16px}.ov-board{grid-template-columns:minmax(280px,.9fr) 1.7fr;align-items:start;gap:18px;display:grid}.ov-board-side{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:18px;display:grid}.ov-board-column{align-content:start;gap:18px;min-width:0;display:grid}@media (width<=1040px){.ov-board{grid-template-columns:1fr}}@media (width<=620px){.ov-board-side{grid-template-columns:1fr}}.ov-card{transition:transform .18s,box-shadow .18s}.ov-card:hover{box-shadow:var(--shadow)}.ov-card-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:14px;display:flex}.ov-card-titlewrap{align-items:center;gap:10px;min-width:0;display:flex}.ov-card-icon{border-radius:11px;flex:none;justify-content:center;align-items:center;width:34px;height:34px;display:inline-flex}.ov-card-icon svg{width:18px;height:18px}.ov-tone-blue{background:var(--accent-soft);color:var(--accent)}.ov-tone-green{background:var(--ok-bg);color:var(--ok)}.ov-tone-amber{background:var(--warn-bg);color:var(--warn)}.ov-tone-violet{color:#6d45d6;background:#efeafb}.ov-card-title{letter-spacing:0;color:var(--ink);font-size:15px;font-weight:800}.ov-badge{color:#fff;background:var(--accent);border-radius:999px;justify-content:center;align-items:center;min-width:22px;height:22px;padding:0 7px;font-size:12px;font-weight:800;display:inline-flex}.ov-badge-warn{background:var(--warn)}.ov-pulse{animation:1.8s ease-in-out infinite ov-pulse}.ov-empty{color:var(--subtle);margin:4px 0 0;font-size:13px}.ov-empty-state{flex-direction:column;min-height:96px;display:flex;position:relative}.ov-empty-art{align-self:flex-end;margin-top:auto;line-height:0}.ov-art{width:88px;height:auto}.ov-art-green{color:#2f9e5e}.ov-art-amber{color:#c9971f}.ov-art-blue{color:var(--accent)}.ov-art-violet{color:#6d45d6}.ov-art-fill{fill:currentColor;opacity:.14}.ov-art-stroke{stroke:currentColor;stroke-width:2px;fill:none;stroke-linecap:round;stroke-linejoin:round}.ov-list{gap:10px;margin:0;padding:0;list-style:none;display:grid}.ov-list li{border-left:3px solid var(--hair);gap:2px;padding-left:10px;display:grid}.ov-list li strong{color:var(--ink);font-size:14px}.ov-pending{color:var(--warn);margin-top:2px;font-size:11px;font-weight:800}.ov-event{border-left-color:var(--accent)!important}.ov-event-holiday{border-left-color:var(--err)!important}.ov-event-exam{border-left-color:var(--warn)!important}.ov-event-meeting{border-left-color:#3367d6!important}.ov-event-announcement{border-left-color:var(--ok)!important}.ov-ring-list{margin:0;padding:0;list-style:none;display:grid}.ov-ring-row{border-bottom:1px solid var(--hair);align-items:center;gap:14px;padding:12px 0;display:flex}.ov-ring-row:last-child{border-bottom:0}.ov-ring{flex:none;position:relative}.ov-ring svg{transform:rotate(-90deg)}.ov-ring-track{fill:none;stroke:var(--hair)}.ov-ring-fill{fill:none;stroke:var(--accent);stroke-linecap:round;transition:stroke-dashoffset 1s cubic-bezier(.22,1,.36,1)}.ov-ring-label{color:var(--ink);justify-content:center;align-items:center;font-weight:800;display:flex;position:absolute;inset:0}.ov-ring-meta{flex:1;gap:2px;min-width:0;display:grid}.ov-ring-meta strong{color:var(--ink);font-size:14px}.ov-row-chevron{width:18px;height:18px;color:var(--subtle);flex:none}.ov-week-row{justify-content:space-between;align-items:center;gap:16px;display:flex}.ov-bigstat{gap:4px;display:grid}.ov-bigstat-num{color:var(--ink);font-size:34px;font-weight:800;line-height:1}.ov-feed{gap:14px;margin:0;padding:0;list-style:none;display:grid}.ov-feed-item{align-items:flex-start;gap:12px;display:flex}.ov-feed-item>div{gap:2px;display:grid}.ov-feed-item strong{color:var(--ink);font-size:14px}.ov-feed-dot{background:var(--accent);width:10px;height:10px;box-shadow:0 0 0 4px var(--accent-soft);border-radius:999px;flex:none;margin-top:4px}@media (prefers-reduced-motion:reduce){.ov-card,.ov-hero,.ov-period-card,.ov-pulse{animation:none!important}.ov-card,.ov-ring-fill{transition:none}}.att-board{grid-template-columns:minmax(0,1.4fr) minmax(260px,1fr);align-items:start;gap:16px;display:grid}@media (width<=820px){.att-board{grid-template-columns:1fr}}.att-cal{padding:18px 20px 16px}.att-cal-head{align-items:center;gap:12px;margin-bottom:14px;display:flex}.att-cal-title{text-align:center;flex:1;gap:2px;display:grid}.att-cal-title strong{color:var(--ink);font-size:17px;font-weight:800}.att-nav{border:1px solid var(--line);background:var(--surface);width:36px;height:36px;color:var(--ink);cursor:pointer;border-radius:12px;flex:none;justify-content:center;align-items:center;font-size:20px;line-height:1;transition:background .15s,border-color .15s;display:inline-flex}.att-nav:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent)}.att-nav:disabled{opacity:.35;cursor:not-allowed}.att-weekdays{grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px;display:grid}.att-weekdays span{text-align:center;letter-spacing:.04em;color:var(--subtle);font-size:11px;font-weight:800}.att-grid{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.att-cell{aspect-ratio:1;background:var(--hair);min-height:38px;color:var(--ink);font:inherit;cursor:pointer;border:1px solid #0000;border-radius:12px;justify-content:center;align-items:center;font-size:13px;font-weight:700;transition:transform .12s,box-shadow .12s,background .12s;display:flex}.att-cell.is-blank{cursor:default;background:0 0;border:0}.att-cell:hover:not(.is-future):not(.is-blank){box-shadow:var(--shadow-soft);transform:translateY(-2px)}.att-cell.is-present{background:var(--ok-bg);color:var(--ok)}.att-cell.is-absent{background:var(--warn-bg);color:var(--warn)}.att-cell.is-today{border-color:var(--accent)}.att-cell.is-selected{box-shadow:0 0 0 2px var(--accent);border-color:var(--accent)}.att-cell.is-future{color:var(--faint);cursor:not-allowed;background:0 0}.att-legend{flex-wrap:wrap;gap:14px;margin-top:14px;display:flex}.att-legend-item{color:var(--muted);align-items:center;gap:6px;font-size:12px;font-weight:600;display:inline-flex}.att-dot{border-radius:4px;width:12px;height:12px}.att-dot.is-present{background:var(--ok-bg);border:1px solid var(--ok)}.att-dot.is-absent{background:var(--warn-bg);border:1px solid var(--warn)}.att-dot.is-unmarked{background:var(--hair);border:1px solid var(--line)}.att-mark{align-content:start;gap:14px;padding:18px 20px;display:grid}.att-mark-kicker{letter-spacing:.12em;text-transform:uppercase;color:var(--subtle);font-size:11px;font-weight:800}.att-mark-date{color:var(--ink);margin-top:-8px;font-size:18px;font-weight:800}.att-mark-field .segmented{margin-bottom:0}.att-save{border-radius:var(--r);width:100%;font:inherit;color:#fff;cursor:pointer;background:var(--accent);border:0;padding:12px 14px;font-size:14px;font-weight:600;transition:background .14s}.att-save:hover:not(:disabled){background:var(--accent-strong)}.att-save:disabled{opacity:.5;cursor:not-allowed}@media (prefers-reduced-motion:reduce){.att-cell,.att-nav{transition:none}}
