:root{--bg:#f5f0e3;--surface:#fff;--surface-sunken:#ece2c8;--ink:#1c2333;--ink-soft:#565f76;--ink-faint:#8a8f9e;--line:#e2d7ba;--navy:#1f3a5f;--navy-ink:#16283f;--navy-soft:#dbe4ee;--ribbon:#d9a441;--action:#c1552c;--action-soft:#f1dbcb;--course:#2f6f5e;--course-soft:#dceae3;--ok:#2f7d4f;--ok-soft:#dcead9;--pending:#b7791e;--pending-soft:#f3e4c8;--absent:#b23a2e;--absent-soft:#f1dad6;--font-display:-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue",Arial,sans-serif;--font-mono:ui-monospace,"SF Mono","Cascadia Mono","Roboto Mono",Menlo,Consolas,monospace;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#12161d;--surface:#1b212b;--surface-sunken:#222937;--ink:#ece6d6;--ink-soft:#a9afc4;--ink-faint:#6b7182;--line:#2b3140;--navy:#86aee0;--navy-ink:#0c131c;--navy-soft:#223349;--ribbon:#e0b563;--action:#e2895a;--action-soft:#3a2a22;--course:#7cc6ac;--course-soft:#1e332c;--ok:#63bd88;--ok-soft:#1e3226;--pending:#dcae5b;--pending-soft:#3a2f19;--absent:#e2807a;--absent-soft:#3a2320;color-scheme:dark}}:root[data-theme=dark]{--bg:#12161d;--surface:#1b212b;--surface-sunken:#222937;--ink:#ece6d6;--ink-soft:#a9afc4;--ink-faint:#6b7182;--line:#2b3140;--navy:#86aee0;--navy-ink:#0c131c;--navy-soft:#223349;--ribbon:#e0b563;--action:#e2895a;--action-soft:#3a2a22;--course:#7cc6ac;--course-soft:#1e332c;--ok:#63bd88;--ok-soft:#1e3226;--pending:#dcae5b;--pending-soft:#3a2f19;--absent:#e2807a;--absent-soft:#3a2320;color-scheme:dark}:root[data-theme=light]{--bg:#f5f0e3;--surface:#fff;--surface-sunken:#ece2c8;--ink:#1c2333;--ink-soft:#565f76;--ink-faint:#8a8f9e;--line:#e2d7ba;--navy:#1f3a5f;--navy-ink:#16283f;--navy-soft:#dbe4ee;--ribbon:#d9a441;--action:#c1552c;--action-soft:#f1dbcb;--course:#2f6f5e;--course-soft:#dceae3;--ok:#2f7d4f;--ok-soft:#dcead9;--pending:#b7791e;--pending-soft:#f3e4c8;--absent:#b23a2e;--absent-soft:#f1dad6;color-scheme:light}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:var(--font-display);-webkit-font-smoothing:antialiased;min-height:100%}button{font-family:inherit;cursor:pointer}:focus-visible{outline:2px solid var(--navy);outline-offset:2px}ul{margin:0}input,select,textarea{font-family:inherit;font-size:.9rem}.mobile-only{display:block}@media (min-width:860px){.mobile-only{display:none!important}}.app-shell{display:flex;min-height:100vh}.sidebar{display:none;width:240px;flex-shrink:0;flex-direction:column;background:var(--navy-ink);color:#ece3cd;padding:1.5rem 1.1rem;position:-webkit-sticky;position:sticky;top:0;height:100vh}@media (min-width:860px){.sidebar{display:flex}}.sidebar-brand{display:flex;flex-direction:column;margin-bottom:1.6rem}.sidebar-brand .brand-mark{font-family:var(--font-mono);font-weight:700;font-size:1.15rem;letter-spacing:.02em;color:#fff}.sidebar-brand .brand-sub{letter-spacing:.04em;color:#9aa8bd;margin-top:.15rem}.sidebar-brand .brand-sub,.sidebar-role{font-family:var(--font-mono);font-size:.66rem}.sidebar-role{letter-spacing:.06em;text-transform:uppercase;color:#cdd9e8;background:hsla(0,0%,100%,.08);border-radius:20px;padding:.35rem .7rem;width:-moz-fit-content;width:fit-content;margin-bottom:1.5rem}.sidebar-nav{display:flex;flex-direction:column;gap:.15rem;flex:1 1}.sidebar-link{display:flex;align-items:center;gap:.65rem;background:none;border:none;border-left:3px solid transparent;color:#b9c3d6;font-size:.87rem;font-weight:500;padding:.55rem .6rem;border-radius:0 8px 8px 0;text-align:left}.sidebar-link .nav-icon{font-size:1.05rem;width:1.2rem;text-align:center}.sidebar-link.active{background:hsla(0,0%,100%,.07);color:#fff;border-left-color:var(--ribbon);font-weight:700}.sidebar-link:hover{color:#fff}.sidebar-theme{margin-top:.8rem}.sidebar-logout{background:none;border:1px solid hsla(0,0%,100%,.16);color:#cdd9e8;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.03em;border-radius:8px;padding:.55rem .6rem;margin-top:.6rem}.sidebar-logout:hover{background:hsla(0,0%,100%,.06)}.theme-toggle{font-family:var(--font-mono);font-size:.7rem;letter-spacing:.03em;text-transform:uppercase;border-radius:20px;padding:.32rem .7rem;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft)}.sidebar .theme-toggle{border-color:hsla(0,0%,100%,.18);background:hsla(0,0%,100%,.05);color:#cdd9e8;width:100%}.main{flex:1 1;min-width:0;display:flex;flex-direction:column}.topbar{padding:1.1rem 1.1rem .85rem;border-bottom:1px solid var(--line);background:var(--bg)}@media (min-width:860px){.topbar{padding:2.1rem 2.2rem 1.1rem}}.topbar-row1{justify-content:space-between;margin-bottom:.3rem;gap:.6rem}.topbar-actions,.topbar-row1{display:flex;align-items:center}.topbar-actions{gap:.5rem}.brand{display:flex;align-items:baseline;gap:.4rem}.brand-mark{font-weight:700;font-size:1.05rem;letter-spacing:.02em}.brand-mark,.brand-sub{font-family:var(--font-mono)}.brand-sub{font-size:.62rem;color:var(--ink-faint);letter-spacing:.04em}.brand-cross{color:var(--ribbon);margin-left:.2em;font-weight:400}.role-pill{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.05em;text-transform:uppercase;padding:.3rem .6rem;border-radius:20px;background:var(--navy-soft);color:var(--navy);border:1px solid color-mix(in srgb,var(--navy) 30%,transparent)}.back-btn{display:flex;align-items:center;gap:.4rem;color:var(--navy);font-size:.9rem;font-weight:600;padding:.2rem 0;margin-bottom:.4rem}.back-btn,.icon-btn{background:none;border:none}.icon-btn{color:var(--ink-soft);font-size:1.1rem;padding:.2rem;line-height:1}.screen-title{font-size:1.35rem;font-weight:700;letter-spacing:-.01em;margin:.1rem 0 0;text-wrap:balance}@media (min-width:860px){.screen-title{font-size:1.7rem}}.screen-sub{font-family:var(--font-mono);font-size:.74rem;color:var(--ink-faint);margin-top:.3rem}.content{flex:1 1;width:100%;max-width:1120px;margin:0 auto;padding:1.1rem 1.1rem 4rem}@media (min-width:860px){.content{padding:1.6rem 2.2rem 3.5rem}}.section-eyebrow{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);margin:1.5rem 0 .7rem;display:flex;align-items:center;justify-content:space-between}.section-eyebrow:first-child{margin-top:.1rem}.section-eyebrow .link{color:var(--navy);text-transform:none;letter-spacing:0;font-weight:600;cursor:pointer;background:none;border:none;font-family:var(--font-display);font-size:.8rem}.card-grid{display:grid;grid-template-columns:1fr;grid-gap:.7rem;gap:.7rem}@media (min-width:700px){.card-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width:1080px){.card-grid{grid-template-columns:repeat(3,1fr)}}.week-grid{display:flex;flex-direction:column;gap:1.2rem}@media (min-width:860px){.week-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));align-items:start;grid-gap:1.2rem;gap:1.2rem}}.planning-grid{display:flex;flex-direction:column;gap:1.2rem}@media (min-width:860px){.planning-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));align-items:start;grid-gap:.9rem;gap:.9rem}.planning-grid .card-title{font-size:.86rem}}.kpi-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:.7rem;gap:.7rem;margin:.1rem 0 .4rem}@media (min-width:860px){.kpi-grid{grid-template-columns:repeat(4,1fr)}}.parent-grid{display:grid;grid-template-columns:1fr;grid-gap:.6rem;gap:.6rem}@media (min-width:780px){.parent-grid{grid-template-columns:repeat(2,1fr)}}.card{background:var(--surface);border-left-style:solid;border-radius:10px;padding:.9rem 1rem;display:flex;gap:.7rem;text-align:left;width:100%;border:1px solid var(--line);border-left-width:4px;transition:transform .12s ease,box-shadow .12s ease}.card.tappable{cursor:pointer}.card.tappable:hover{box-shadow:0 6px 16px -10px rgba(28,35,51,.25)}.card.tappable:active{transform:scale(.985)}.card.action{border-left-color:var(--action)}.card.course{border-left-color:var(--course)}.card-body{flex:1 1;min-width:0}.card-link{background:none;border:none;width:100%;text-align:left;padding:0;font:inherit;color:inherit;cursor:pointer}.card-top{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.3rem}.type-tag{font-family:var(--font-mono);font-size:.63rem;letter-spacing:.05em;text-transform:uppercase;padding:.15rem .4rem;border-radius:4px;font-weight:600}.type-tag.action{background:var(--action-soft);color:var(--action)}.type-tag.course{background:var(--course-soft);color:var(--course)}.card-title{font-size:.94rem;font-weight:600;line-height:1.3;margin:0}.card-meta{font-size:.72rem;color:var(--ink-soft);margin-top:.35rem}.card-meta,.card-spots{font-family:var(--font-mono)}.card-spots{font-size:.7rem;color:var(--ink-faint);margin-top:.3rem;display:flex;align-items:center;gap:.35rem}.spot-dot{width:6px;height:6px;border-radius:50%;background:var(--ink-faint)}.spot-dot.open{background:var(--ok)}.spot-dot.full{background:var(--absent)}.chevron{color:var(--ink-faint);align-self:center;font-size:1.1rem}.status-chip{font-family:var(--font-mono);font-size:.62rem;letter-spacing:.04em;text-transform:uppercase;padding:.15rem .45rem;border-radius:10px;font-weight:700;white-space:nowrap}.status-chip.ok{background:var(--ok-soft);color:var(--ok)}.status-chip.pending{background:var(--pending-soft);color:var(--pending)}.status-chip.absent{background:var(--absent-soft);color:var(--absent)}.status-chip.neutral{background:var(--navy-soft);color:var(--navy)}.kpi{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:.85rem .9rem}.kpi-label{font-family:var(--font-mono);font-size:.63rem;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-faint)}.kpi-value{font-size:1.55rem;font-weight:700;margin-top:.2rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.kpi-value small{font-size:.85rem;font-weight:500;color:var(--ink-soft)}.btn{font-family:var(--font-display);font-weight:600;font-size:.9rem;border-radius:8px;padding:.7rem 1.1rem;border:1px solid transparent}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-block{width:100%;text-align:center}.btn-primary{background:var(--navy);color:#fff}.btn-primary:disabled{background:var(--ok);color:#fff;opacity:1}.btn-ghost{background:none;border-color:var(--line);color:var(--ink)}.btn-small{font-family:var(--font-mono);font-size:.68rem;padding:.32rem .55rem;border-radius:6px;border:1px solid var(--line);background:var(--surface);color:var(--ink-soft);text-transform:uppercase;letter-spacing:.03em}.btn-small.is-ok{background:var(--ok-soft);color:var(--ok);border-color:transparent}.btn-small.is-pending{background:var(--pending-soft);color:var(--pending);border-color:transparent}.btn-small.is-absent{background:var(--absent-soft);color:var(--absent);border-color:transparent}.detail-grid{display:grid;grid-template-columns:1fr;grid-gap:1.4rem;gap:1.4rem;align-items:start}@media (min-width:760px){.detail-grid{grid-template-columns:1fr 340px}}.detail-side{display:flex;flex-direction:column;gap:1rem}@media (min-width:760px){.detail-side{position:-webkit-sticky;position:sticky;top:1.6rem}}.detail-hero{border-radius:12px;padding:1.1rem 1.2rem;background:var(--surface);border-left-style:solid;border:1px solid var(--line);border-left-width:4px}.detail-hero.action{border-left-color:var(--action)}.detail-hero.course{border-left-color:var(--course)}.detail-title{font-size:1.2rem;font-weight:700;margin:.45rem 0 .5rem;text-wrap:balance}@media (min-width:860px){.detail-title{font-size:1.4rem}}.detail-meta-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:.5rem .8rem;gap:.5rem .8rem;font-family:var(--font-mono);font-size:.75rem;color:var(--ink-soft);margin-top:.6rem;padding-top:.6rem;border-top:1px dashed var(--line)}.detail-meta-grid .k{color:var(--ink-faint);display:block;font-size:.63rem;text-transform:uppercase;letter-spacing:.04em}.panel{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:1rem 1.1rem}.block-title{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-soft);margin:1.2rem 0 .5rem}.block-title:first-child{margin-top:0}.prose{font-size:.9rem;line-height:1.6;color:var(--ink);margin:0;max-width:62ch}.needs-list{margin:0;padding-left:1.1rem;font-size:.87rem;line-height:1.7}.participant-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.55rem 0;border-bottom:1px solid var(--line)}.participant-row:last-child{border-bottom:none}.participant-name{font-size:.87rem;font-weight:600}.hint-note{font-family:var(--font-mono);font-size:.68rem;color:var(--ink-faint);margin-top:.8rem;line-height:1.5}.cancel-note{font-size:.76rem;color:var(--ink-faint);margin-top:.3rem;font-style:italic}.week-nav{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-bottom:1rem;flex-wrap:wrap}.week-nav-label{font-size:.85rem;gap:.6rem}.week-day-label,.week-nav-label{font-family:var(--font-mono);font-weight:700;display:flex;align-items:center}.week-day-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--navy);margin-bottom:.55rem;justify-content:space-between;gap:.4rem}.day-add{background:var(--surface);border:1px solid var(--line);border-radius:6px;color:var(--ink-soft);width:1.3rem;height:1.3rem;line-height:1;font-size:.9rem;padding:0}.empty-day{font-family:var(--font-mono);font-size:.72rem;color:var(--ink-faint);padding:.4rem 0}.planning-grid .card,.week-grid .card{margin-bottom:.55rem}.agenda-item{display:flex;gap:.6rem;border-left:2px solid var(--line);padding:.5rem 0 .5rem .7rem;margin-left:.2rem;cursor:pointer}.agenda-time{font-family:var(--font-mono);font-size:.72rem;color:var(--ink-faint);width:3.4rem;flex-shrink:0}.agenda-title{font-size:.85rem;font-weight:600}.agenda-loc{font-size:.76rem;color:var(--ink-soft);margin-top:.1rem}.manage-actions{display:flex;gap:.4rem;margin-top:.6rem}.news-item{margin-bottom:1.1rem;padding-bottom:1.1rem;border-bottom:1px dashed var(--line)}.news-item:last-child{border:none}.news-date{font-family:var(--font-mono);font-size:.68rem;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.04em}.news-title{font-size:.98rem;font-weight:700;margin:.25rem 0 .3rem}.news-body{font-size:.86rem;color:var(--ink-soft);line-height:1.6;margin:0;max-width:62ch}.parent-row{display:flex;align-items:center;justify-content:space-between;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:.75rem .9rem;gap:.6rem;width:100%;text-align:left;transition:box-shadow .12s ease,transform .12s ease}.parent-row.tappable:hover{box-shadow:0 6px 16px -10px rgba(28,35,51,.25)}.parent-row.tappable:active{transform:scale(.99)}.parent-name{font-size:.89rem;font-weight:600}.parent-email{font-family:var(--font-mono);font-size:.68rem;color:var(--ink-faint);margin-top:.15rem}.parent-hours{text-align:right}.parent-hours .h{font-family:var(--font-mono);font-size:.94rem;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.parent-hours .h small{font-size:.65rem;color:var(--ink-faint);font-weight:500}.hours-bar{width:64px;height:4px;background:var(--line);border-radius:2px;margin-top:.3rem;overflow:hidden;margin-left:auto}.hours-bar span{display:block;height:100%}.fill-count{font-size:1.3rem;font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.fill-count span{font-size:.78rem;font-weight:500;color:var(--ink-soft)}.fill-bar{width:100%;height:6px;background:var(--line);border-radius:3px;margin-top:.4rem;overflow:hidden}.fill-bar span{display:block;height:100%}.form-grid{display:flex;flex-direction:column;gap:.8rem}.form-row{display:flex;gap:.7rem;flex-wrap:wrap}.form-row .field{flex:1 1;min-width:120px}.field{display:flex;flex-direction:column;gap:.3rem;font-size:.82rem;color:var(--ink-soft);font-weight:600}.field input,.field select,.field textarea{border:1px solid var(--line);border-radius:8px;padding:.55rem .65rem;background:var(--bg);color:var(--ink);font-weight:400}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--navy)}.checkbox-list{display:flex;flex-direction:column;gap:.35rem;margin-top:.2rem}.checkbox-row{display:flex;align-items:center;gap:.5rem;font-size:.85rem;font-weight:400;color:var(--ink)}.form-error{color:var(--absent);font-size:.8rem;margin:0}.note-field{width:100%;min-height:90px;resize:vertical;border:1px solid var(--line);border-radius:8px;background:var(--bg);color:var(--ink);font-family:var(--font-display);font-size:.85rem;padding:.6rem .7rem;line-height:1.5}.note-field:focus{border-color:var(--navy)}.import-preview{max-height:220px;overflow-y:auto;border:1px solid var(--line);border-radius:8px;padding:.6rem .8rem;margin:.6rem 0}.import-row{font-size:.83rem;padding:.25rem 0;border-bottom:1px dashed var(--line)}.import-row:last-child{border-bottom:none}.modal-backdrop{position:fixed;inset:0;background:rgba(15,20,28,.5);display:flex;align-items:center;justify-content:center;padding:1.2rem;z-index:100}.modal-panel{background:var(--surface);border-radius:14px;padding:1.3rem 1.4rem;width:100%;max-width:420px;max-height:88vh;overflow-y:auto;box-shadow:0 30px 60px -20px rgba(0,0,0,.4)}.modal-panel.wide{max-width:640px}.modal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.8rem}.modal-title{font-size:1.1rem;font-weight:700;margin:0}.modal-actions{display:flex;justify-content:flex-end;gap:.6rem;margin-top:.4rem}.toast-stack{position:fixed;bottom:1.2rem;left:50%;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:.5rem;width:min(92vw,420px)}@media (min-width:860px){.toast-stack{left:auto;right:1.5rem;transform:none}}.toast{background:var(--navy-ink);color:#ece3cd;padding:.7rem 1rem;border-radius:10px;font-size:.85rem;box-shadow:0 10px 24px -12px rgba(0,0,0,.4);cursor:pointer;display:flex;align-items:center;gap:.5rem}.toast-email{background:var(--action);color:#fff}.toast-icon{font-size:1rem}.login-page{display:flex;min-height:100vh}.login-visual{display:none;flex:1 1;flex-direction:column;justify-content:center;padding:4rem;background:repeating-linear-gradient(to bottom,transparent 0 38px,color-mix(in srgb,#fff 6%,transparent) 38px 39px),var(--navy-ink);color:#ece3cd}@media (min-width:860px){.login-visual{display:flex}}.login-visual .login-mark{font-family:var(--font-mono);font-weight:700;font-size:2.1rem;letter-spacing:.02em;color:#fff}.login-visual .login-tag{font-size:1.02rem;color:#cdd9e8;margin:.9rem 0 2.2rem;max-width:30ch;line-height:1.5}.visual-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.9rem}.visual-list li{display:flex;align-items:center;gap:.7rem;font-size:.92rem;color:#dbe4ee}.visual-dot{width:8px;height:8px;border-radius:2px;flex-shrink:0}.login-form-panel{flex:1 1;display:flex;align-items:center;justify-content:center;padding:2rem 1.4rem;background:var(--bg)}.login-card{width:100%;max-width:380px}.login-card .login-mark{font-family:var(--font-mono);font-weight:700;font-size:1.5rem;letter-spacing:.02em}.login-card .login-tag{font-size:.87rem;color:var(--ink-soft);margin:.4rem 0 2rem}.role-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:1.05rem 1.15rem;margin-bottom:.85rem;display:flex;align-items:center;gap:.85rem;width:100%;text-align:left;transition:box-shadow .12s ease,transform .12s ease}.role-card:hover{box-shadow:0 10px 24px -14px rgba(28,35,51,.3)}.role-card:active{transform:scale(.985)}.role-icon{width:42px;height:42px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-weight:700;font-size:1.02rem;flex-shrink:0}.role-icon.parent{background:var(--course-soft);color:var(--course)}.role-icon.admin{background:var(--navy-soft);color:var(--navy)}.role-icon.teacher{background:var(--action-soft);color:var(--action)}.role-card-title{font-weight:700;font-size:.97rem;display:block}.role-card-sub{font-size:.79rem;color:var(--ink-soft);margin-top:.1rem}.bottom-nav{position:fixed;bottom:0;left:0;right:0;background:color-mix(in srgb,var(--bg) 92%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid var(--line);display:flex;padding:.5rem .4rem calc(.6rem + env(safe-area-inset-bottom, 0px));z-index:20}@media (min-width:860px){.bottom-nav{display:none}}.nav-btn{flex:1 1;background:none;border:none;display:flex;flex-direction:column;align-items:center;gap:.2rem;padding:.3rem .1rem;color:var(--ink-faint);font-size:.62rem;font-family:var(--font-mono);letter-spacing:.02em;border-radius:8px}.nav-btn.active{color:var(--navy)}.nav-dot{width:5px;height:5px;border-radius:50%;background:var(--navy);opacity:0}.nav-btn.active .nav-dot{opacity:1}.nav-icon{font-size:1.05rem;line-height:1}@media (prefers-reduced-motion:reduce){.card,.parent-row,.role-card{transition:none}}