@font-face{font-family:IBM Plex Sans Arabic;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-arabic-arabic-400-normal-CyU-ddYS.woff2)format("woff2"),url(/assets/ibm-plex-sans-arabic-arabic-400-normal-EA1o-u_Q.woff)format("woff")}@font-face{font-family:IBM Plex Sans Arabic;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-sans-arabic-arabic-500-normal-C4MQITzh.woff2)format("woff2"),url(/assets/ibm-plex-sans-arabic-arabic-500-normal-DPXcppbm.woff)format("woff")}@font-face{font-family:IBM Plex Sans Arabic;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-sans-arabic-arabic-700-normal-DrtBj6UE.woff2)format("woff2"),url(/assets/ibm-plex-sans-arabic-arabic-700-normal-9rXc6cUL.woff)format("woff")}@font-face{font-family:IBM Plex Sans Arabic;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-sans-arabic-latin-400-normal-Bo5KPYvw.woff2)format("woff2"),url(/assets/ibm-plex-sans-arabic-latin-400-normal-CFZh1unN.woff)format("woff")}@font-face{font-family:IBM Plex Sans Arabic;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-sans-arabic-latin-700-normal-BzSf6GNr.woff2)format("woff2"),url(/assets/ibm-plex-sans-arabic-latin-700-normal-Cl4F7CZR.woff)format("woff")}:root{--brand:#5b3d8a;--brand-strong:#46297a;--brand-soft:#efe8f8;--maroon:#8b1e3f;--accent:#f4a51c;--accent-ink:#4a3000;--accent-soft:#fff3dc;--mint:#2f8f74;--bg:#faf7fc;--surface:#fff;--surface-2:#f3eff8;--text:#221b2c;--muted:#5e5669;--border:#ddd5e8;--ok:#1d7a43;--warn:#9a4d00;--warn-soft:#fdf1e3;--danger:#b42318;--info:#1d5fa0;--info-soft:#e7f0fa;--focus:#1d5fa0;--s1:#6c4ba3;--s2:#d97a00;--g1:#46297a;--g2:#6c4ba3;--g3:#8f6cc9;--g4:#b49ade;--radius:14px;--radius-sm:10px;--tap:44px;--shadow:0 1px 2px #2814460f, 0 2px 8px #2814460d;--font:"IBM Plex Sans Arabic", "Segoe UI", Tahoma, "Noto Sans Arabic", "Geeza Pro", Arial, sans-serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--brand:#b9a0e6;--brand-strong:#cdb9f0;--brand-soft:#2a2140;--maroon:#f08bab;--accent:#f0a24a;--accent-ink:#2a1a00;--accent-soft:#3a2a17;--mint:#5fc9a8;--bg:#15111c;--surface:#1d1726;--surface-2:#261f32;--text:#ece8f2;--muted:#b0a7bd;--border:#3a3248;--ok:#5ccf8c;--warn:#f0a85a;--warn-soft:#3a2a17;--danger:#ff8a80;--info:#8cbcf0;--info-soft:#182839;--focus:#8cbcf0;--s1:#9a7bd2;--s2:#d07f22;--g1:#cbb6f2;--g2:#a385dc;--g3:#7f5cb8;--g4:#5a3d85;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);font-family:var(--font);margin:0;font-size:16px;line-height:1.6;overflow-x:hidden}h1{margin:.25rem 0 .75rem;font-size:1.45rem;line-height:1.3}h2{margin:0 0 .6rem;font-size:1.1rem}.h3,h3{margin:.9rem 0 .4rem;font-size:1rem}p{margin:.35rem 0}a{color:var(--brand-strong)}:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:6px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;overflow:hidden;position:absolute!important}.skip-link{inset-inline-start:8px;background:var(--surface);z-index:100;padding:8px 12px;position:absolute;top:-60px}.skip-link:focus{top:8px}.muted{color:var(--muted)}.small{font-size:.875rem}.text-warn{color:var(--warn)}.text-ok{color:var(--ok)}.text-info{color:var(--info)}.prewrap{white-space:pre-wrap}.ltr{direction:ltr;unicode-bidi:isolate}.shell{min-height:100dvh;padding-bottom:calc(68px + env(safe-area-inset-bottom))}.topbar{z-index:20;background:var(--surface);border-bottom:1px solid var(--border);padding:6px 16px;position:sticky;top:0}.topbar-row{flex-wrap:wrap;align-items:center;gap:8px;max-width:760px;margin-inline:auto;display:flex}.topbar-sub{color:var(--muted);justify-content:space-between;font-size:.85rem}.brand{color:var(--maroon);margin-inline-end:auto;font-weight:800;text-decoration:none}.badge-demo{white-space:nowrap;background:var(--accent-soft);color:var(--accent-ink);border:1px solid var(--accent);border-radius:999px;padding:0 10px;font-size:.8rem;font-weight:700;display:inline-block}.role-switch{gap:4px;display:flex}.page>.role-switch{margin-bottom:12px}.main{outline:none;max-width:760px;margin-inline:auto;padding:12px 16px 24px}.page-with-savebar{padding-bottom:72px}.page-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.back-link{min-height:var(--tap);align-items:center;text-decoration:none;display:inline-flex}.bottomnav{inset-inline:0;z-index:30;background:var(--surface);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom);justify-content:center;display:flex;position:fixed;bottom:0}.navitem{max-width:150px;min-height:60px;color:var(--muted);font:inherit;cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1 1 0;justify-content:center;align-items:center;gap:2px;font-size:.78rem;text-decoration:none;display:flex}.navitem.is-active{color:var(--brand-strong);font-weight:700}.more-menu{inset-inline-end:8px;bottom:calc(68px + env(safe-area-inset-bottom));z-index:31;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);min-width:200px;padding:6px;position:fixed}.more-link{min-height:var(--tap);color:var(--text);border-radius:var(--radius-sm);align-items:center;gap:10px;padding:0 12px;text-decoration:none;display:flex}.more-link:hover{background:var(--surface-2)}.btn{min-height:var(--tap);border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;justify-content:center;align-items:center;gap:6px;padding:0 16px;font-weight:600;text-decoration:none;display:inline-flex}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff}:root[data-theme=dark] .btn-primary{color:#0b1511}.btn-ghost{background:0 0}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn-small{min-height:40px;padding:0 12px;font-size:.9rem}.icon-btn{min-width:var(--tap);min-height:var(--tap);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);cursor:pointer;justify-content:center;align-items:center;display:inline-flex}.icon-btn.danger{color:var(--danger)}.input{width:100%;min-height:var(--tap);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);font:inherit;padding:8px 12px}textarea.input{resize:vertical}.input[aria-invalid=true]{border-color:var(--danger);box-shadow:0 0 0 1px var(--danger)}.input.num{text-align:center;font-variant-numeric:tabular-nums}.input-small{width:auto;min-height:40px}.field-label{color:var(--muted);margin-bottom:2px;font-size:.85rem;font-weight:600;display:block}.field-hint{color:var(--muted);margin:4px 0 0;font-size:.82rem}.field-error{color:var(--danger);margin:4px 0 0;font-size:.85rem;font-weight:600}.check{min-height:var(--tap);cursor:pointer;align-items:center;gap:8px;display:inline-flex}.check input{width:20px;height:20px}.checks{border:0;flex-wrap:wrap;gap:4px 16px;margin:0;padding:0;display:flex}.block{margin-top:10px;display:block}.chip{background:var(--surface-2);border:1px solid var(--border);white-space:nowrap;border-radius:999px;padding:2px 10px;font-size:.8rem;font-weight:600;display:inline-block}button.chip{cursor:pointer;min-height:36px;color:var(--text);font-family:inherit}.chip.is-on{background:var(--brand);border-color:var(--brand);color:#fff}.lesson-canceled,.att-absent{color:var(--danger)}.lesson-exceptional,.att-excused{color:var(--info)}.att-present,.lesson-held{color:var(--ok)}.stack{flex-direction:column;gap:8px;display:flex}.stack-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.grid-2,.grid-3{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.span-2{grid-column:span 2}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);margin:12px 0;padding:14px}.card-soft{background:var(--brand-soft);box-shadow:none}.card-hero{border-inline-start:5px solid var(--brand)}.form>label,.form>.grid-2,.form>fieldset{margin-bottom:10px;display:block}.form>.password-field,.form>.field-hint,.form>.field-error{margin-bottom:10px}.form>.password-field:has(+.field-hint,+.field-error){margin-bottom:0}.form>.btn-block+.btn-block{margin-top:8px}.inline-form{flex-direction:column;gap:8px;margin:8px 0;display:flex}.tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);flex-direction:column;gap:2px;min-height:88px;padding:14px;text-decoration:none;display:flex}.tile-warn{border-color:var(--warn);background:var(--warn-soft)}.tile-value{color:var(--brand-strong);font-variant-numeric:tabular-nums;font-size:1.5rem;font-weight:700}.tile-label{color:var(--muted);font-size:.85rem}.banner{border-radius:var(--radius-sm);border:1px solid;margin:8px 0;padding:10px 12px}.banner-info{background:var(--info-soft);border-color:var(--info)}.banner-warn{background:var(--warn-soft);border-color:var(--warn);text-align:center;border-radius:0;margin:0}.page .banner-warn{border-radius:var(--radius-sm);margin:8px 0}.filters{flex-wrap:wrap;align-items:flex-end;gap:8px;margin-bottom:8px;display:flex}.filter{flex:140px;min-width:140px;display:block}.filter.grow{flex:2 200px}.list{margin:0;padding:0;list-style:none}.list>li+li{border-top:1px solid var(--border)}.list-row,.list-link{min-height:var(--tap);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:6px 0;display:flex}.list-link{color:var(--text);text-decoration:none}.list-row.is-mine{background:var(--brand-soft);border-radius:var(--radius-sm);padding-inline:8px}.cards{gap:8px;margin:0;padding:0;list-style:none;display:grid}.student-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);min-height:var(--tap);flex-direction:column;padding:12px 14px;text-decoration:none;display:flex}.student-name{color:var(--text);font-weight:700;text-decoration:none}.pager{justify-content:space-between;align-items:center;gap:8px;margin:12px 0;display:flex}.datenav{justify-content:space-between;align-items:center;gap:8px;margin:8px 0 12px;display:flex}.datenav-center{text-align:center;flex:1;position:relative}.datenav-title{text-align:center;flex:1;font-weight:700;display:block}.datenav-input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);min-height:40px;color:var(--text);font:inherit;max-width:100%;margin-top:4px;padding:4px 8px}.segmented{border:0;min-width:0;margin:0;padding:0}.segmented-track{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-sm);gap:3px;padding:3px;display:flex}.segment{flex:1 1 0;min-width:0;position:relative}.segment input{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}.segment span{text-align:center;border-radius:8px;justify-content:center;align-items:center;min-height:40px;padding:0 6px;font-size:.92rem;font-weight:600;line-height:1.2;display:flex}.segmented-sm .segment span{min-height:38px;font-size:.86rem}.segment input:focus-visible+span{outline:3px solid var(--focus);outline-offset:1px}.segment.is-on span{background:var(--surface);box-shadow:var(--shadow);color:var(--brand-strong)}.segment.is-on.seg-present span{background:var(--ok);color:#fff}.segment.is-on.seg-absent span{background:var(--danger);color:#fff}.segment.is-on.seg-excused span{background:var(--info);color:#fff}.segmented:disabled .segment span{opacity:.7}.lesson-status{border-radius:var(--radius-sm);background:var(--surface);border:1px solid var(--border);flex-direction:column;gap:4px;margin-bottom:8px;padding:10px 12px;display:flex}.lesson-status.canceled{border-color:var(--danger)}.lesson-status.exceptional{border-color:var(--info)}.class-list{gap:8px;margin:8px 0;padding:0;list-style:none;display:grid}.class-row{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);gap:6px;padding:10px 12px;display:grid}.class-row-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px;display:flex}.recite-link{overflow-wrap:anywhere;align-items:center;min-height:40px;font-size:.9rem;font-weight:600;text-decoration:none;display:flex}.recite-link.has{color:var(--muted);font-weight:400}.savebar{bottom:calc(68px + env(safe-area-inset-bottom));background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);z-index:10;justify-content:space-between;align-items:center;gap:8px;margin-top:12px;padding:8px 12px;display:flex;position:sticky;box-shadow:0 -2px 10px #00000014}.savebar-status{color:var(--muted);font-size:.88rem}.range-rows{gap:10px;margin:0;padding:0;list-style:none;display:grid}.range-row{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);padding:10px}.range-row.has-error{border-color:var(--danger)}.range-row-head{align-items:center;gap:8px;display:flex}.range-index{background:var(--brand);color:#fff;border-radius:50%;justify-content:center;align-items:center;min-width:26px;height:26px;font-size:.8rem;font-weight:700;display:inline-flex}.range-row-body{grid-template-columns:minmax(0,1fr);gap:8px;margin-top:8px;display:grid}.range-inputs{grid-template-columns:1fr 1fr;gap:8px;display:grid}.add-row{width:100%;color:var(--brand-strong);border-style:dashed;margin-top:10px}@media (width>=560px){.range-row-body{grid-template-columns:180px minmax(0,1fr);align-items:end}}.stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;display:grid}.stat{background:var(--surface-2);border-radius:var(--radius-sm);flex-direction:column;padding:10px;display:flex}.stat-value{color:var(--brand-strong);font-variant-numeric:tabular-nums;font-size:1.4rem;font-weight:700}.stat-label{font-size:.88rem;font-weight:600}.stat-sub{color:var(--muted);font-size:.78rem}.grade-trend{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.grade-trend li{flex-direction:column;align-items:center;display:flex}.history-row{color:var(--text);min-height:var(--tap);grid-template-columns:auto auto 1fr;align-items:center;gap:4px 10px;padding:8px 0;text-decoration:none;display:grid}.history-row .muted{grid-column:1/-1}.history-text{overflow-wrap:anywhere;font-size:.9rem}.plan-row{grid-template-columns:auto 1fr auto;align-items:center;gap:8px;padding:6px 0;display:grid}.fee-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.fee-head{width:100%;font:inherit;color:var(--text);text-align:start;cursor:pointer;min-height:var(--tap);background:0 0;border:0;flex-direction:column;align-items:flex-start;gap:2px;padding:12px 14px;display:flex}.balance{font-size:.88rem}.ledger{border-top:1px solid var(--border);padding:0 14px 14px}.receipt{padding:4px 0}.table-scroll{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);overflow-x:auto}.table{border-collapse:collapse;width:100%;min-width:560px;font-size:.9rem}.table.compact{min-width:0}.table th,.table td{border-bottom:1px solid var(--border);text-align:start;white-space:nowrap;padding:8px 10px}.table.compact td{white-space:normal}.table.brackets th,.table.brackets td{padding-inline:4px}.table.brackets td:first-child{width:100%}.table.brackets .input.num{width:3.4em;padding-inline:4px}.table thead th{background:var(--surface-2);font-size:.82rem}.skeleton{gap:10px;margin:12px 0;display:grid}.skeleton-row{border-radius:var(--radius-sm);background:linear-gradient(90deg, var(--surface-2), var(--surface), var(--surface-2));background-size:200% 100%;height:56px;animation:1.2s linear infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){.skeleton-row{animation:none}}.empty{text-align:center;color:var(--muted);padding:24px 12px}.empty-title{font-weight:700}.state-page{text-align:center;padding:32px 16px}.login{justify-content:center;align-items:flex-start;min-height:100dvh;padding:24px 16px;display:flex}.login-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;max-width:460px;box-shadow:var(--shadow);padding:20px}.account-list{gap:8px;margin:12px 0 0;padding:0;list-style:none;display:grid}.account{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);width:100%;min-height:56px;color:var(--text);font:inherit;text-align:start;cursor:pointer;flex-direction:column;align-items:flex-start;gap:2px;padding:10px 14px;display:flex}.account:hover{border-color:var(--brand)}.account-name{font-weight:700}.account-roles{color:var(--muted);font-size:.85rem}.scrim{z-index:40;background:#0006;position:fixed;inset:0}.sheet{inset-inline:0;z-index:41;background:var(--surface);border-radius:var(--radius) var(--radius) 0 0;padding:20px 16px calc(20px + env(safe-area-inset-bottom));outline:none;max-width:560px;margin-inline:auto;position:fixed;bottom:0;box-shadow:0 -4px 20px #0003}.toasts{inset-inline:16px;z-index:60;pointer-events:none;justify-items:center;gap:8px;display:grid;position:fixed;top:12px}.toast{border-radius:var(--radius-sm);background:var(--text);max-width:520px;color:var(--bg);box-shadow:var(--shadow);padding:10px 16px;font-weight:600}.toast-success{background:var(--ok);color:#fff}.toast-error{background:var(--danger);color:#fff}.user-row.is-disabled{background:var(--surface-2);border-style:dashed}@media (width>=768px){h1{font-size:1.7rem}.grid-2.tiles,.stats{grid-template-columns:repeat(4,minmax(0,1fr))}}.topbar{border-top:4px solid var(--brand)}.card-hero{border-inline-start-color:var(--accent)}:root[data-theme=dark] .chip.is-on,:root[data-theme=dark] .range-index{color:#1d1726}.tone-s1{background:var(--s1)}.tone-s2{background:var(--s2)}.tone-g1{background:var(--g1)}.tone-g2{background:var(--g2)}.tone-g3{background:var(--g3)}.tone-g4{background:var(--g4)}.chart{margin:0}.chart-title{margin-top:0}.legend{color:var(--muted);flex-wrap:wrap;gap:4px 14px;margin:0 0 8px;padding:0;font-size:.82rem;list-style:none;display:flex}.legend li{align-items:center;gap:6px;display:inline-flex}.swatch{border-radius:3px;width:12px;height:12px;display:inline-block}.columns{grid-template-columns:repeat(var(--n), minmax(0, 1fr));align-items:end;gap:2px;height:170px;padding-top:18px;display:grid;position:relative}.axis-max{top:0;color:var(--muted);font-size:.75rem;position:absolute;inset-inline-end:0}.col{outline-offset:1px;flex-direction:column;justify-content:flex-end;align-items:stretch;min-width:0;height:100%;display:flex}.col-stack{flex-direction:column-reverse;flex:1;justify-content:flex-start;gap:2px;padding-inline:18%;display:flex}.col-seg{min-height:2px;display:block}.col-stack .col-seg:last-child{border-radius:4px 4px 0 0}.col:hover .col-seg,.col:focus-visible .col-seg{filter:brightness(1.15)}.col-label{color:var(--muted);text-align:center;white-space:nowrap;text-overflow:ellipsis;min-height:14px;margin-top:4px;font-size:.75rem;line-height:1.2;overflow:hidden}.col-stack{border-bottom:1px solid var(--border)}.bars{gap:8px;margin:0;padding:0;list-style:none;display:grid}.bar-row{grid-template-columns:minmax(80px,34%) 1fr;align-items:center;gap:8px;font-size:.86rem;display:grid}.bar-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bar-group{gap:2px;display:grid}.bar-track{align-items:center;gap:2px;min-width:0;min-height:18px;display:flex}.bar-fill{min-width:2px;height:12px;display:block}.bar-track .bar-fill:last-of-type{border-start-end-radius:4px;border-end-end-radius:4px}.bar-value{color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums;padding-inline-start:4px;font-size:.78rem}.chart-table{margin-top:10px;font-size:.85rem}.chart-table summary{cursor:pointer;color:var(--brand-strong);align-items:center;min-height:36px;display:flex}.meter{margin:8px 0}.meter-head{justify-content:space-between;gap:8px;margin-bottom:4px;font-size:.9rem;display:flex}.meter-track{background:var(--surface-2);border-radius:999px;height:10px;overflow:hidden}.meter-fill{border-radius:999px;height:100%;display:block}.strip{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.strip-dot{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:.8rem;font-weight:700;display:inline-flex}.st-present{background:var(--ok)}.st-absent{background:var(--danger)}.st-excused{background:var(--info)}.st-unrecorded{background:var(--surface-2);color:var(--muted);border:1px solid var(--border)}:root[data-theme=dark] .strip-dot:not(.st-unrecorded){color:#15111c}.attention{margin:0;padding:0;list-style:none}.attention li{border-top:1px solid var(--border);padding:8px 0}.attention li:first-child{border-top:0}.cal{background:var(--border);border:1px solid var(--border);border-radius:var(--radius-sm);grid-template-columns:repeat(7,minmax(0,1fr));gap:2px;display:grid;overflow:hidden}.cal-head{background:var(--surface-2);text-align:center;white-space:nowrap;color:var(--muted);padding:6px 0;font-size:.75rem;font-weight:700;overflow:hidden}.cal-day{background:var(--surface);min-height:64px;font:inherit;color:var(--text);text-align:start;cursor:pointer;border:0;flex-direction:column;align-items:stretch;gap:2px;min-width:0;padding:4px;display:flex}.cal-day.is-out{background:var(--surface-2);color:var(--muted)}.cal-day.is-today .cal-num{background:var(--accent);color:var(--accent-ink)}.cal-day.is-selected{box-shadow:inset 0 0 0 2px var(--brand)}.cal-num{border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;font-size:.82rem;font-weight:700;display:inline-flex}.cal-lesson{white-space:nowrap;text-overflow:ellipsis;border-inline-start:3px solid;border-radius:4px;padding:0 3px;font-size:.75rem;overflow:hidden}.cal-lesson.l-held{border-color:var(--ok)}.cal-lesson.l-planned{border-color:var(--brand)}.cal-lesson.l-canceled{border-color:var(--danger);text-decoration:line-through}.cal-lesson.l-exceptional{border-color:var(--info)}.cal-event{background:var(--accent-soft);color:var(--accent-ink);white-space:nowrap;text-overflow:ellipsis;border-radius:4px;padding:0 3px;font-size:.75rem;overflow:hidden}:root[data-theme=dark] .cal-event{color:var(--text)}.cal-more{color:var(--muted);font-size:.75rem}@media (width<=480px){.cal-day{align-items:center;min-height:52px}.cal-lesson,.cal-event{border-inline-start:0;border-radius:50%;width:8px;height:8px;padding:0;font-size:0}.cal-lesson.l-held{background:var(--ok)}.cal-lesson.l-planned{background:var(--brand)}.cal-lesson.l-canceled{background:var(--danger)}.cal-lesson.l-exceptional{background:var(--info)}.cal-event{background:var(--accent)}.cal-marks{justify-content:center;gap:3px;display:flex}}.cal-key{color:var(--muted);flex-wrap:wrap;gap:4px 12px;margin:8px 0;padding:0;font-size:.78rem;list-style:none;display:flex}.gallery{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;margin:0;padding:0;list-style:none;display:grid}.gallery img,.gallery .noprev{aspect-ratio:3/2;object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface-2);width:100%;color:var(--muted);justify-content:center;align-items:center;font-size:.8rem;display:flex}.gallery figcaption{color:var(--muted);overflow-wrap:anywhere;font-size:.78rem}.facts{grid-template-columns:auto 1fr;gap:4px 12px;margin:0;display:grid}.facts dt{color:var(--muted);font-size:.88rem}.facts dd{margin:0}@media (width>=900px){.grid-charts{grid-template-columns:1fr 1fr;gap:0 12px;display:grid}}.brand{align-items:center;gap:8px;font-size:1.02rem;display:inline-flex}.brand-mark,.wordmark-mark{background:linear-gradient(135deg, var(--brand), var(--maroon));color:#fff;width:32px;height:32px;box-shadow:inset 0 -3px 0 var(--accent);border-radius:10px;justify-content:center;align-items:center;font-size:1.05rem;font-weight:700;display:inline-flex}.topbar-row{min-height:48px}.account-btn{min-height:var(--tap);border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;border-radius:999px;align-items:center;gap:8px;padding:2px 6px 2px 10px;display:inline-flex}.account-btn-text{text-align:start;flex-direction:column;line-height:1.15;display:inline-flex}.account-btn-name{font-size:.85rem;font-weight:600}.account-btn-role{color:var(--muted);font-size:.75rem}@media (width<=599px){.account-btn-text{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}}.avatar{background:var(--brand-soft);width:34px;height:34px;color:var(--brand-strong);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:.85rem;font-weight:700;display:inline-flex}.account-head{align-items:center;gap:12px;margin-bottom:12px;display:flex}.account-head .avatar{width:48px;height:48px;font-size:1.05rem}.account-head h2{margin:0}.menu-list{border-top:1px solid var(--border);margin-bottom:12px;display:grid}.menu-item{text-align:start;border:0;border-bottom:1px solid var(--border);min-height:48px;font:inherit;color:var(--text);cursor:pointer;background:0 0;padding:0 4px}.menu-item:hover{background:var(--surface-2)}.menu-item.danger{color:var(--danger);font-weight:600}.demo-tools{background:var(--accent-soft);border-radius:var(--radius-sm);margin-bottom:12px;padding:10px 12px}.demo-tools h3{margin-top:0}.btn-block{width:100%}.link-btn{color:var(--brand-strong);font:inherit;cursor:pointer;min-height:var(--tap);background:0 0;border:0;justify-self:center;text-decoration:underline}.password-field{position:relative}.password-field .input{padding-inline-start:84px}.password-toggle{inset-inline-end:4px;border:0;min-height:36px;position:absolute;top:50%;transform:translateY(-50%)}.page.narrow{max-width:480px;margin-inline:auto}.shell.is-forced{padding-bottom:0}.auth{background:radial-gradient(circle at 85% 0%, var(--brand-soft), transparent 55%), var(--bg);justify-content:center;align-items:flex-start;min-height:100dvh;padding:32px 16px;display:flex}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:20px;width:100%;max-width:420px;padding:24px 20px;box-shadow:0 10px 30px #3c1e641a}.auth-head{text-align:center;margin-bottom:16px}.auth-head h1{color:var(--maroon);margin:10px 0 2px}.wordmark{justify-content:center;display:flex}.wordmark-mark{border-radius:16px;width:56px;height:56px;font-size:1.6rem}.auth .form{gap:6px;display:grid}.auth .form .btn-primary{min-height:48px;margin-top:10px;font-size:1rem}.demo-accounts{border-top:1px solid var(--border);margin-top:16px;padding-top:8px}.demo-accounts summary{cursor:pointer;min-height:var(--tap);color:var(--muted);align-items:center;font-size:.9rem;display:flex}.nav-desktop-only{display:none}@media (width>=1024px){.shell{padding-bottom:0}.bottomnav{top:0;bottom:0;border-top:0;border-inline-end:1px solid var(--border);z-index:15;flex-direction:column;justify-content:flex-start;gap:2px;width:220px;padding:76px 10px 16px;inset-inline:0 auto}.navitem{border-radius:var(--radius-sm);flex-direction:row;flex:none;justify-content:flex-start;gap:10px;max-width:none;min-height:46px;padding:0 12px;font-size:.95rem}.navitem.is-active{background:var(--brand-soft)}.nav-desktop-only{display:flex}.nav-mobile-only{display:none}.main,.topbar-row{max-width:880px}.main{margin-inline:max(236px,50% - 440px) auto}.topbar{z-index:20;position:sticky}.topbar-row{max-width:none}.savebar{bottom:12px}.grid-charts{grid-template-columns:1fr 1fr;gap:0 12px;display:grid}.stats{grid-template-columns:repeat(4,minmax(0,1fr))}}.user-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px;display:flex}.user-id{flex-direction:column;min-width:0;display:flex}.user-manage{border-top:1px solid var(--border);gap:8px;margin-top:10px;padding-top:10px;display:grid}.chip-ok{color:var(--ok);border-color:currentColor}.chip-off{color:var(--danger);border-color:currentColor}.chip-warn{color:var(--warn);background:var(--warn-soft);border-color:currentColor}.danger-text{color:var(--danger)}.menu-theme{margin-bottom:12px}.landing{background:radial-gradient(circle at 90% -10%, var(--brand-soft), transparent 50%), radial-gradient(circle at 0% 30%, var(--accent-soft), transparent 40%), var(--bg);min-height:100dvh}.landing-bar{align-items:center;gap:8px;max-width:960px;margin-inline:auto;padding:12px 16px;display:flex}@media (width<=400px){.landing-bar .brand{font-size:.92rem}.landing-bar .badge-demo{padding:0 6px;font-size:.75rem}}.landing-bar .brand{white-space:nowrap;color:var(--maroon);margin-inline-end:auto;font-weight:800}.hero{max-width:960px;margin-inline:auto;padding:32px 16px 24px}.hero-kicker{color:var(--maroon);font-weight:600}.hero h1{color:var(--brand-strong);margin:8px 0 12px;font-size:clamp(1.7rem,6vw,2.8rem);line-height:1.35}.hero-sub{max-width:560px;color:var(--muted);font-size:1.05rem}.hero-actions{margin-top:20px}.hero-cta{min-height:52px;padding:0 24px;font-size:1.05rem}.landing-section{max-width:960px;margin-inline:auto;padding:16px}.facts-grid,.features-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin:0 0 12px;padding:0;list-style:none;display:grid}.fact-card,.feature-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);flex-direction:column;gap:4px;padding:16px;display:flex}.fact-card{border-inline-start:4px solid var(--accent)}.fact-title{color:var(--maroon);font-weight:700}.feature-card h3{margin:6px 0 2px}.feature-card p{color:var(--muted);margin:0}.feature-icon{background:var(--brand-soft);width:44px;height:44px;color:var(--brand-strong);border-radius:12px;justify-content:center;align-items:center;display:inline-flex}.landing-footer{justify-items:start;gap:8px;max-width:960px;margin-inline:auto;padding:24px 16px 32px;display:grid}.auth-back{text-align:center;margin-top:8px}.sk{background:linear-gradient(90deg, var(--surface-2), var(--surface), var(--surface-2));background-size:200% 100%;flex:none;animation:1.2s linear infinite shimmer;display:block}@media (prefers-reduced-motion:reduce){.sk{animation:none}}.sk-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);gap:10px;padding:14px;display:grid}.sk-row{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:12px;padding:12px;display:flex}.sk-lines{flex:1;gap:6px;display:grid}.sk-tr{border-bottom:1px solid var(--border);justify-content:space-between;gap:12px;padding:6px 0;display:flex}.sk-chart{grid-template-columns:repeat(6,1fr);align-items:end;gap:8px;height:120px;display:grid}.sk-chart .sk{border-radius:4px 4px 0 0}.sk-field{gap:6px;display:grid}.sk-cal{grid-template-columns:repeat(7,1fr);gap:2px;display:grid}.sk-cal .sk{border-radius:4px;height:56px}:root[data-theme=dark] .badge-demo{color:var(--accent);border-color:var(--accent)}.temp-password code{-webkit-user-select:all;user-select:all;word-break:break-all;font-family:ui-monospace,Cascadia Mono,Consolas,monospace;font-size:1.25rem}
