@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-vietnamese-wght-normal-CnvboYUG.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-wght-normal-ukD16Tqj.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Albert Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/albert-sans-latin-ext-400-normal-CK6y59xR.woff2) format("woff2"),url(/assets/albert-sans-latin-ext-400-normal-DEC9K0b4.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Albert Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/albert-sans-latin-400-normal-1PQZqV1o.woff2) format("woff2"),url(/assets/albert-sans-latin-400-normal-CesMP4Nj.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Albert Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/albert-sans-latin-ext-500-normal-DRBq3jn_.woff2) format("woff2"),url(/assets/albert-sans-latin-ext-500-normal-BELBd-5-.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Albert Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/albert-sans-latin-500-normal-CmxtX9KC.woff2) format("woff2"),url(/assets/albert-sans-latin-500-normal-CItXc8sT.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Albert Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/albert-sans-latin-ext-600-normal-C7nfSnWt.woff2) format("woff2"),url(/assets/albert-sans-latin-ext-600-normal-DJOKJsr0.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Albert Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/albert-sans-latin-600-normal-C_5W882s.woff2) format("woff2"),url(/assets/albert-sans-latin-600-normal-gYdudiP1.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Albert Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/albert-sans-latin-ext-700-normal-B2w8H_Iv.woff2) format("woff2"),url(/assets/albert-sans-latin-ext-700-normal-BWgSUrqX.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Albert Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/albert-sans-latin-700-normal-DzMU317f.woff2) format("woff2"),url(/assets/albert-sans-latin-700-normal-CZU4hHRi.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Spline Sans Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/spline-sans-mono-latin-ext-400-normal-BfWvPoNT.woff2) format("woff2"),url(/assets/spline-sans-mono-latin-ext-400-normal-BkT5i7fe.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Spline Sans Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/spline-sans-mono-latin-400-normal-mUpA6Mve.woff2) format("woff2"),url(/assets/spline-sans-mono-latin-400-normal-739QRW1l.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--brand: #1c5a3a;--brand-deep: #123f28;--brand-wash: color-mix(in srgb, var(--brand) 7%, transparent);--brand-line: color-mix(in srgb, var(--brand) 22%, transparent);--paper: #f7f4ec;--paper-raised: #fffdf7;--ink: #22271f;--ink-soft: #5c6355;--ink-faint: #969c8d;--rule: #e3ded0;--good: #2e7d43;--warn: #a66b00;--bad: #ad3a2d;--radius: 11px;--radius-lg: 14px;--font-display: "Fraunces Variable", Georgia, serif;--font-body: "Albert Sans", -apple-system, sans-serif;--font-mono: "Spline Sans Mono", ui-monospace, monospace;--shadow-soft: 0 1px 2px rgb(34 39 31 / .05), 0 4px 16px rgb(34 39 31 / .06);--shadow-lift: 0 2px 4px rgb(34 39 31 / .08), 0 12px 32px rgb(34 39 31 / .1)}*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-body);background:var(--paper);color:var(--ink);font-size:15px;line-height:1.55;background-image:repeating-linear-gradient(0deg,transparent 0 31px,rgb(34 39 31 / .018) 31px 32px)}#root{min-height:100dvh}h1,h2,h3{font-family:var(--font-display);font-weight:560;letter-spacing:-.01em}button{font:inherit;cursor:pointer}input,select{font:inherit}a{color:var(--brand)}.crest{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--brand);color:#fff;font-family:var(--font-display);font-size:17px;font-weight:600;letter-spacing:.02em;box-shadow:inset 0 0 0 2px #ffffff40,var(--shadow-soft);flex-shrink:0;user-select:none}.crest--lg{width:72px;height:72px;font-size:28px}.door{min-height:100dvh;display:grid;grid-template-columns:minmax(320px,.85fr) minmax(0,1.15fr)}.door-brand{background:radial-gradient(620px 320px at 20% 0%,color-mix(in srgb,#fff 12%,transparent),transparent 70%),var(--brand-deep);color:#ffffffe0;padding:clamp(28px,5vw,56px);display:flex;flex-direction:column;justify-content:center;gap:26px;position:relative;overflow:hidden}.door-brand:after{content:"";position:absolute;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,transparent 0 33px,rgb(255 255 255 / .045) 33px 34px)}.door-brand>*{position:relative;z-index:1}.door-brand-mark{background:none;border:none;padding:0;align-self:flex-start}.door-brand-mark:disabled{cursor:default}.door-brand-mark img{width:62px;height:62px;object-fit:contain;background:#fff;border-radius:12px;padding:6px}.door-crest{width:62px;height:62px;border-radius:12px;display:grid;place-items:center;font-family:var(--font-display);font-size:23px;font-weight:650;background:#ffffff24;color:#fff;border:1px solid rgb(255 255 255 / .2)}.door-brand-copy{margin-top:0}.door-brand-copy h1{font-size:clamp(26px,3vw,36px);line-height:1.12;color:#fff;letter-spacing:-.015em}.door-motto{font-family:var(--font-display);font-style:italic;font-size:15px;color:#ffffff9e;margin-top:10px}.door-points{list-style:none;margin-top:26px;display:grid;gap:11px}.door-points li{display:flex;align-items:flex-start;gap:10px;font-size:14px;color:#fffc}.door-points svg{width:15px;height:15px;flex:0 0 auto;margin-top:3px;color:#ffffff8c}.door-foot{margin-top:auto;font-size:12px;color:#ffffff6b}.door-foot strong{color:#ffffffb3;font-weight:600}.door-main{display:flex;align-items:center;justify-content:center;gap:28px;padding:clamp(28px,5vw,56px) clamp(20px,4vw,48px);background:var(--paper)}.door-form{width:min(408px,100%);animation:rise .5s cubic-bezier(.22,1,.36,1) both}.door-main.wide .door-form{width:min(460px,100%)}.door-head{margin-bottom:26px}.door-head h2{font-size:clamp(25px,3vw,31px);letter-spacing:-.015em}.door-head p{margin-top:8px;font-size:14.5px;line-height:1.55;color:var(--ink-soft)}.door-said{font-size:14.5px;line-height:1.6;color:var(--ink-soft);margin-bottom:18px}.door-demo{width:218px;flex:0 0 auto;display:flex;flex-direction:column;gap:6px;animation:rise .5s .14s cubic-bezier(.22,1,.36,1) both}.door-demo-title{display:flex;align-items:center;gap:8px;margin-bottom:2px}.door-demo-title span{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--ink-faint);white-space:nowrap}.door-demo-title:after{content:"";flex:1;border-bottom:1px dashed var(--brand-line)}.door-demo-hint{font-size:11px;color:var(--ink-faint);font-style:italic;line-height:1.45}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@media(max-width:1080px){.door-demo{display:none}}@media(max-width:860px){.door{grid-template-columns:1fr;grid-template-rows:auto 1fr}.door-brand{flex-direction:row;align-items:center;gap:14px;padding:16px clamp(18px,5vw,32px)}.door-brand-mark{align-self:center}.door-brand-mark img,.door-crest{width:46px;height:46px;font-size:18px;border-radius:10px}.door-brand-copy{min-width:0}.door-brand-copy h1{font-size:20px}.door-motto{font-size:13px;margin-top:3px}.door-points,.door-foot{display:none}.door-main{align-items:flex-start;padding-top:clamp(28px,6vh,48px)}}.field{margin-bottom:16px}.field label{display:block;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);margin-bottom:5px}.field input,.field select{width:100%;padding:10px 12px;border:1px solid var(--rule);border-radius:7px;background:#fff;color:var(--ink);transition:border-color .15s,box-shadow .15s}.field input:focus,.field select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-wash)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 19px;border-radius:9px;border:1px solid transparent;font-weight:600;font-size:14px;text-decoration:none;transition:transform .14s cubic-bezier(.22,1,.36,1),box-shadow .15s,background .15s,border-color .15s}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--brand);color:#fff;box-shadow:var(--shadow-soft)}.btn-primary:hover{background:var(--brand-deep);transform:translateY(-1px);box-shadow:var(--shadow-lift)}.btn-primary:active{transform:none;box-shadow:var(--shadow-soft)}.btn-primary:disabled{opacity:.6;cursor:wait}.btn-ghost{background:transparent;color:var(--brand);border-color:var(--brand-line)}.btn-ghost:hover{background:var(--brand-wash);border-color:var(--brand)}.btn-block{width:100%}.form-error{background:color-mix(in srgb,var(--bad) 9%,transparent);border:1px solid color-mix(in srgb,var(--bad) 30%,transparent);color:var(--bad);border-radius:7px;padding:9px 12px;font-size:13px;margin-bottom:16px}.shell{display:grid;grid-template-columns:232px 1fr;min-height:100dvh}.sidebar{background:radial-gradient(520px 260px at 30% 0%,color-mix(in srgb,#fff 9%,transparent),transparent 70%),var(--brand-deep);color:#ffffffeb;padding:20px 14px;display:flex;flex-direction:column;position:sticky;top:0;height:100dvh}.sidebar:after{content:"";position:absolute;inset:0;pointer-events:none;z-index:0;background:repeating-linear-gradient(0deg,transparent 0 33px,rgb(255 255 255 / .04) 33px 34px)}.sidebar>*{position:relative;z-index:1}.sidebar-school{display:flex;align-items:center;gap:10px;padding:4px 8px 18px;border-bottom:1px solid rgb(255 255 255 / .14);margin-bottom:14px}.sidebar-school .crest{background:#ffffff24;box-shadow:none}.sidebar-school-name{font-family:var(--font-display);font-size:15px;font-weight:560;line-height:1.25}.sidebar-school-sub{font-size:11px;color:#ffffff8c}.nav{display:flex;flex-direction:column;gap:1px;flex:1 1 auto;min-height:0;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgb(255 255 255 / .25) transparent;padding-right:2px;margin-bottom:10px}.nav::-webkit-scrollbar{width:5px}.nav::-webkit-scrollbar-thumb{background:#ffffff38;border-radius:99px}.nav-section{font-size:9.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#fff6;padding:12px 12px 4px}.nav-section:first-child{padding-top:2px}.nav a{display:flex;align-items:center;gap:10px;color:#ffffffbf;text-decoration:none;padding:7px 12px;border-radius:7px;font-size:14px;font-weight:500;transition:background .12s,color .12s}.nav a:hover{background:#ffffff14;color:#fff}.nav a.active{background:#ffffff21;color:#fff;box-shadow:inset 2.5px 0 #ffffffd9}.nav-icon{width:17px;height:17px;opacity:.9}.sidebar-user{border-top:1px solid rgb(255 255 255 / .14);padding-top:12px;margin-top:auto;flex:0 0 auto;font-size:13px;background:var(--brand-deep)}.sidebar-user-name{font-weight:600}.sidebar-user-role{font-size:11px;color:#ffffff8c;margin-bottom:8px}.sidebar-user button{background:none;border:1px solid rgb(255 255 255 / .25);color:#ffffffd9;border-radius:6px;padding:5px 12px;font-size:12px}.sidebar-user button:hover{background:#ffffff1a}.main{padding:20px 28px 48px;max-width:1360px}.page-head{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--rule)}.page-title{font-size:clamp(24px,3vw,30px);letter-spacing:-.015em;line-height:1.14}.page-sub{color:var(--ink-soft);font-size:14.5px;line-height:1.55;margin-top:6px;max-width:74ch}.eyebrow,.landing-eyebrow{display:inline-block;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.13em;color:var(--brand);padding:5px 12px;border-radius:99px;background:var(--brand-wash);border:1px solid var(--brand-line);margin-bottom:12px}.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;margin-bottom:16px}.stat{background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius-lg);padding:15px 17px 14px;box-shadow:var(--shadow-soft);position:relative;overflow:hidden;transition:transform .18s cubic-bezier(.22,1,.36,1),box-shadow .18s,border-color .18s}.stat:hover{transform:translateY(-2px);box-shadow:var(--shadow-lift);border-color:var(--brand-line)}.stat:after{content:"";position:absolute;left:18px;right:18px;bottom:12px;border-bottom:1px solid var(--rule);box-shadow:0 2.5px 0 var(--rule)}.stat-label{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.11em;color:var(--ink-faint)}.stat-value{font-family:var(--font-display);font-size:32px;font-weight:580;letter-spacing:-.02em;margin:4px 0 14px;font-variant-numeric:tabular-nums}.stat-value small{font-size:15px;color:var(--ink-soft);font-weight:400}.panel{background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft);padding:18px 20px;margin-bottom:14px}.panel.lead{border-top:3px solid var(--brand)}.panel-title{font-family:var(--font-display);font-size:17px;font-weight:600;letter-spacing:-.01em;margin-bottom:15px;padding-bottom:11px;border-bottom:1px solid var(--rule);display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}.panel-title>span:first-child{position:relative;padding-left:13px}.panel-title>span:first-child:before{content:"";position:absolute;left:0;top:.16em;bottom:.16em;width:3px;border-radius:99px;background:var(--brand)}.bar-row{display:grid;grid-template-columns:minmax(90px,150px) 1fr max-content;gap:12px;align-items:center;margin-bottom:7px}.bar-label{font-size:13px;color:var(--ink-soft);text-align:right}.bar-track{background:var(--brand-wash);border-radius:99px;height:14px;overflow:hidden}.bar-fill{height:100%;background:var(--brand);border-radius:99px;transform-origin:left;animation:grow .7s cubic-bezier(.22,1,.36,1) both}@keyframes grow{0%{transform:scaleX(0)}}.bar-count{font-family:var(--font-mono);font-size:13px;color:var(--ink-soft);white-space:nowrap}.bar-count small{font-family:var(--font-body);color:var(--ink-faint);margin-left:4px}.table-wrap{overflow-x:auto;border:1px solid var(--rule);border-radius:var(--radius-lg);background:var(--paper-raised);box-shadow:var(--shadow-soft)}table.register{width:100%;border-collapse:collapse;font-size:14px}table.register th{text-align:left;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.11em;color:var(--ink-faint);background:color-mix(in srgb,var(--brand) 4%,var(--paper-raised));padding:11px 14px;border-bottom:1px solid var(--rule);white-space:nowrap}table.register td{padding:9px 14px;border-bottom:1px solid color-mix(in srgb,var(--rule) 62%,transparent)}table.register tbody tr{transition:background .12s}table.register tbody tr:last-child td{border-bottom:none}table.register tr:last-child td{border-bottom:none}table.register tbody tr{transition:background .1s}table.register tbody tr:hover{background:var(--brand-wash)}.adm-no{font-family:var(--font-mono);font-size:12.5px;background:var(--brand-wash);color:var(--brand-deep);border-radius:5px;padding:2px 7px;white-space:nowrap}.pill{display:inline-block;font-size:11.5px;font-weight:650;letter-spacing:.01em;border:1px solid transparent;border-radius:99px;padding:3px 11px}.pill-stream{background:color-mix(in srgb,var(--warn) 11%,transparent);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 26%,transparent)}.toolbar{display:flex;gap:10px;margin-bottom:12px;flex-wrap:wrap;align-items:center}.toolbar input[type=search]{flex:1;min-width:200px;padding:9px 13px;border:1px solid var(--rule);border-radius:7px;background:#fff}.toolbar input[type=search]:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-wash)}.toolbar select{padding:9px 12px;border:1px solid var(--rule);border-radius:7px;background:#fff}.empty{padding:48px 20px;text-align:center;color:var(--ink-faint);font-family:var(--font-display);font-style:italic;font-size:15.5px}.modal-backdrop{position:fixed;inset:0;background:#12181073;display:grid;place-items:center;padding:20px;z-index:50;animation:fade .15s both}@keyframes fade{0%{opacity:0}}.modal{width:min(480px,100%);background:var(--paper-raised);border-radius:var(--radius-lg);border-top:3px solid var(--brand);box-shadow:var(--shadow-lift);padding:26px 28px;max-height:90dvh;overflow-y:auto;animation:rise .25s cubic-bezier(.22,1,.36,1) both}.modal h2{font-size:20px;margin-bottom:18px}.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}.form-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}.form-section{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.11em;color:var(--ink-faint);border-bottom:1px solid var(--rule);padding-bottom:6px;margin:20px 0 15px}.stage-block{margin-bottom:26px}.stage-name{font-family:var(--font-display);font-size:17px;margin-bottom:10px;display:flex;align-items:center;gap:10px}.stage-name:after{content:"";flex:1;border-bottom:1px dashed var(--brand-line)}.class-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}.class-card{background:var(--paper-raised);border:1px solid var(--rule);border-radius:8px;padding:12px 14px;box-shadow:var(--shadow-soft);display:flex;justify-content:space-between;align-items:center}.class-card-name{font-weight:600;font-size:14px}.class-card-teacher{font-size:12px;color:var(--ink-faint)}.class-card-count{font-family:var(--font-mono);font-size:13px;color:var(--brand-deep);background:var(--brand-wash);border-radius:6px;padding:3px 9px}.loading{padding:60px;text-align:center;color:var(--ink-faint);font-style:italic;font-family:var(--font-display)}.footnote{margin-top:40px;padding-top:14px;border-top:1px solid var(--rule);font-size:12px;color:var(--ink-faint)}.demo-card{display:flex;flex-direction:column;gap:1px;text-align:left;background:var(--paper-raised);border:1px solid var(--rule);border-radius:9px;padding:9px 12px;box-shadow:var(--shadow-soft);transition:transform .12s,border-color .12s}.demo-card:hover{transform:translate(2px);border-color:var(--brand-line)}.demo-card.selected{border-color:var(--brand);background:var(--brand-wash)}.demo-card.selected .demo-card-role:after{content:" ✓";color:var(--good)}.demo-card-role{font-weight:650;font-size:12.5px;color:var(--brand-deep)}.demo-card-note{font-size:11px;color:var(--ink-faint);line-height:1.35;overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical}.page-actions{display:flex;gap:10px;margin-top:18px}.toolbar-note{align-self:center;font-size:13px;color:var(--ink-faint);font-style:italic}.toolbar input[type=date]{padding:9px 12px;border:1px solid var(--rule);border-radius:7px;background:#fff}.offline-banner{background:color-mix(in srgb,var(--warn) 10%,transparent);border:1px solid color-mix(in srgb,var(--warn) 30%,transparent);color:var(--warn);border-radius:7px;padding:9px 13px;font-size:13.5px;margin-bottom:14px}.register-summary{display:flex;gap:8px;margin-bottom:12px;flex-wrap:wrap}.status-chip{font-size:12.5px;font-weight:600;border-radius:99px;padding:3px 12px}.status-picker{display:flex;gap:5px;flex-wrap:wrap}.status-btn{font-size:12px;font-weight:600;text-transform:capitalize;border-radius:99px;padding:4px 11px;border:1px solid var(--rule);background:var(--paper-raised);color:var(--ink-soft);transition:all .1s}.status-present.active,.status-chip.status-present{background:color-mix(in srgb,var(--good) 14%,transparent);border-color:var(--good);color:var(--good)}.status-absent.active,.status-chip.status-absent{background:color-mix(in srgb,var(--bad) 12%,transparent);border-color:var(--bad);color:var(--bad)}.status-late.active,.status-chip.status-late{background:color-mix(in srgb,var(--warn) 14%,transparent);border-color:var(--warn);color:var(--warn)}.status-excused.active,.status-chip.status-excused{background:var(--brand-wash);border-color:var(--brand);color:var(--brand-deep)}.status-btn:disabled{opacity:.55;cursor:default}.grades-grid .score-cell{padding:4px 8px}.grades-grid input[type=number]{width:72px;padding:6px 8px;text-align:center;border:1px solid var(--rule);border-radius:6px;background:#fff;font-family:var(--font-mono);font-size:13.5px}.grades-grid input[type=number]:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-wash)}.th-max{font-weight:400;color:var(--ink-faint);text-transform:none}.total-cell{font-family:var(--font-mono);font-weight:600}.grade-cell{font-family:var(--font-display);font-weight:600;color:var(--brand-deep)}.tab-row{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px}.tab{background:var(--paper-raised);border:1px solid var(--rule);border-radius:99px;padding:8px 17px;font-weight:600;font-size:13.5px;color:var(--ink-soft);transition:color .15s,border-color .15s,background .15s,box-shadow .15s}.tab:hover{color:var(--brand-deep);border-color:var(--brand-line)}.tab.active{color:var(--brand-deep);background:var(--brand-wash);border-color:var(--brand);box-shadow:0 0 0 1px var(--brand-line)}.fee-line{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:9px 2px;border-bottom:1px dashed var(--rule)}.fee-line label{font-weight:500;display:flex;gap:8px;align-items:center}.fee-line input{width:140px;padding:7px 10px;text-align:right;border:1px solid var(--rule);border-radius:6px;font-family:var(--font-mono)}.fee-total{border-bottom:none;border-top:2px solid var(--ink);margin-top:6px;padding-top:12px}.pill-paid{background:color-mix(in srgb,var(--good) 12%,transparent);color:var(--good);border-color:color-mix(in srgb,var(--good) 28%,transparent)}.pill-part_paid{background:color-mix(in srgb,var(--warn) 11%,transparent);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 26%,transparent)}.pill-issued{background:var(--brand-wash);color:var(--brand-deep);border-color:var(--brand-line)}.notice-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.notice-head h2{font-size:17px}.notice-meta{font-size:12px;color:var(--ink-faint);white-space:nowrap}.notice-body{margin-top:8px;white-space:pre-wrap;color:var(--ink-soft)}.timetable-grid td{min-width:110px}.tt-period{white-space:nowrap}.tt-time{display:block;font-size:11px;color:var(--ink-faint);font-family:var(--font-mono)}.tt-break td{background:color-mix(in srgb,var(--paper) 70%,var(--paper-raised))}.tt-break-cell{color:var(--ink-faint);text-align:center}.tt-select{width:100%;padding:5px 6px;border:1px solid var(--rule);border-radius:6px;background:#fff;font-size:13px}.child-card{padding-bottom:8px}.child-head{margin-bottom:12px}.child-name{font-size:20px}.child-meta{font-size:13px;color:var(--ink-soft)}.child-stats{margin-bottom:6px}.upload-zone{display:flex;flex-direction:column;align-items:center;gap:8px;border:2px dashed var(--brand-line);border-radius:var(--radius);padding:44px 20px;cursor:pointer;text-align:center;color:var(--ink-soft);transition:background .15s}.upload-zone:hover{background:var(--brand-wash)}.upload-zone strong{font-family:var(--font-display);font-size:18px;color:var(--brand-deep)}.upload-zone span{font-size:13px;line-height:1.6}.import-sample{font-family:var(--font-mono);font-size:12px;color:var(--ink-faint)}.import-issues{margin:12px 0;font-size:13.5px}.import-issues summary{cursor:pointer;font-weight:600;color:var(--warn)}.import-issues ul{margin:8px 0 0 20px;color:var(--ink-soft)}.child-card-link{display:block;text-decoration:none;color:inherit;transition:transform .12s,box-shadow .12s}.child-card-link:hover{transform:translateY(-1px);box-shadow:var(--shadow-lift)}.child-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px}.child-open{font-size:13px;font-weight:600;color:var(--brand);white-space:nowrap}.comment-quote{border-left:3px solid var(--brand-line);padding:4px 14px;margin:10px 0}.comment-quote p{font-style:italic;color:var(--ink-soft);line-height:1.6}.comment-quote cite{display:block;font-size:12px;color:var(--ink-faint);margin-top:4px;font-style:normal}.skills-chips{display:flex;flex-wrap:wrap;gap:7px}.scorecard .total-cell{font-size:15px}.messages-layout{display:grid;grid-template-columns:300px 1fr;gap:16px;align-items:start}@media(max-width:860px){.messages-layout{grid-template-columns:1fr}}.thread-list{display:flex;flex-direction:column;gap:8px}.thread-item{text-align:left;background:var(--paper-raised);border:1px solid var(--rule);border-radius:9px;padding:10px 13px;box-shadow:var(--shadow-soft);transition:border-color .12s}.thread-item:hover{border-color:var(--brand-line)}.thread-item.active{border-color:var(--brand);background:var(--brand-wash)}.thread-item-top{display:flex;justify-content:space-between;align-items:center}.unread-dot{background:var(--bad);color:#fff;font-size:11px;font-weight:700;border-radius:99px;padding:1px 7px}.thread-item-who{font-size:12px;color:var(--ink-soft)}.thread-item-preview{font-size:12.5px;color:var(--ink-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px}.thread-view{display:flex;flex-direction:column;min-height:420px;padding:0;overflow:hidden}.thread-empty{min-height:420px;display:grid;place-items:center}.thread-view-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:13px 18px;border-bottom:1px solid var(--rule);background:color-mix(in srgb,var(--paper) 55%,var(--paper-raised))}.thread-view-head span{font-size:12.5px;color:var(--ink-soft)}.thread-messages{flex:1;overflow-y:auto;padding:16px 18px;max-height:460px}.bubble-row{display:flex;margin-bottom:10px}.bubble-row.mine{justify-content:flex-end}.bubble{max-width:78%;background:var(--paper);border:1px solid var(--rule);border-radius:12px 12px 12px 3px;padding:8px 13px}.bubble-row.mine .bubble{background:var(--brand-wash);border-color:var(--brand-line);border-radius:12px 12px 3px}.bubble p{font-size:14px;line-height:1.5;white-space:pre-wrap}.bubble-meta{display:block;font-size:10.5px;color:var(--ink-faint);margin-top:4px}.thread-compose{display:flex;gap:8px;padding:12px 14px;border-top:1px solid var(--rule)}.thread-compose input{flex:1;padding:9px 13px;border:1px solid var(--rule);border-radius:99px;background:#fff}.thread-compose input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-wash)}.kind-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px;margin-bottom:16px}.kind-card{display:flex;flex-direction:column;gap:4px;text-align:left;background:var(--paper-raised);border:1px solid var(--rule);border-radius:9px;padding:13px 15px;box-shadow:var(--shadow-soft);transition:transform .12s,border-color .12s}.kind-card:hover{transform:translateY(-1px);border-color:var(--brand-line)}.kind-card.selected{border-color:var(--brand);background:var(--brand-wash)}.kind-title{font-family:var(--font-display);font-weight:600;font-size:15px;color:var(--brand-deep)}.kind-blurb{font-size:12px;color:var(--ink-soft);line-height:1.4}.generated-doc{line-height:1.7;font-size:14.5px}.generated-doc h2,.generated-doc h3,.generated-doc h4{margin:14px 0 6px;color:var(--brand-deep)}.generated-doc ul{margin:4px 0 4px 22px}.generated-doc p{margin:3px 0}.md-row{display:flex;gap:14px;border-bottom:1px solid var(--rule);padding:4px 0}.md-row span{flex:1;font-size:13px}@media print{.generated-doc{border:none;box-shadow:none;padding:0}}.subject-chips{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:14px}.subject-chip{font-size:13px;padding:4px 12px;border-radius:99px;border:1px solid var(--rule);background:var(--paper-raised);color:var(--ink-soft)}.subject-chip.core{border-color:var(--brand-line);background:var(--brand-wash);color:var(--brand-deep);font-weight:500}.subject-chip small{color:var(--ink-faint);font-family:var(--font-mono);font-size:11px}.subject-add{display:flex;gap:8px;align-items:center;flex-wrap:wrap;border-top:1px dashed var(--rule);padding-top:12px}.subject-add input[type=text],.subject-add input:not([type]){padding:8px 11px;border:1px solid var(--rule);border-radius:7px;background:#fff}.subject-core-toggle{display:flex;gap:5px;align-items:center;font-size:13px;color:var(--ink-soft)}.chip-add{cursor:pointer;border-style:dashed;color:var(--brand-deep);background:transparent}.chip-add:hover{background:var(--brand-wash)}.chip-x{background:none;border:none;margin-left:5px;padding:0 2px;color:var(--ink-faint);font-size:13px;cursor:pointer;line-height:1}.chip-x:hover{color:var(--bad)}.report-sheet{background:#fff;border:1px solid var(--rule);border-radius:4px;box-shadow:var(--shadow-lift);max-width:210mm;margin:0 auto;padding:14mm 12mm;font-size:12.5px;color:#1b1f18}.rs-header{text-align:center;border-bottom:3px double var(--brand);padding-bottom:10px;margin-bottom:12px}.rs-school-name{font-family:var(--font-display);font-size:24px;font-weight:650;color:var(--brand-deep)}.rs-motto{font-style:italic;font-size:12px;color:var(--ink-soft)}.rs-doc-title{font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;margin-top:6px}.rs-pupil-bar{display:flex;flex-wrap:wrap;gap:8px 26px;border:1px solid var(--rule);border-radius:6px;padding:9px 13px;margin-bottom:12px}.rs-pupil-bar span{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint)}.rs-pupil-bar strong{font-size:13.5px}.rs-grades{width:100%;border-collapse:collapse;margin-bottom:12px}.rs-grades th,.rs-grades td{border:1px solid #c9c4b4;padding:5px 8px;text-align:center}.rs-grades th{background:var(--brand-wash);font-size:10.5px;text-transform:uppercase;letter-spacing:.04em}.rs-subject{text-align:left!important;font-weight:600}.rs-total{font-weight:700}.rs-grade{font-weight:700;color:var(--brand-deep)}.rs-remark{text-align:left!important;font-size:11.5px}.rs-skills{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:12px}.rs-skills-table{flex:1;min-width:200px;border-collapse:collapse}.rs-skills-table th,.rs-skills-table td{border:1px solid #c9c4b4;padding:4px 8px;font-size:11.5px}.rs-skills-table th{background:var(--brand-wash);text-align:left}.rs-rating{text-align:center;font-weight:600;width:42px}.rs-attendance{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;border:1px solid var(--rule);border-radius:6px;padding:7px 12px;margin-bottom:12px}.rs-narrative{border:1px solid var(--rule);border-radius:6px;padding:10px 14px;margin-bottom:12px}.rs-narrative-title{font-weight:700;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);margin-bottom:6px}.rs-narrative p{line-height:1.7}.rs-comments{display:grid;gap:10px;margin-bottom:12px}.rs-comment{border:1px solid var(--rule);border-radius:6px;padding:8px 12px}.rs-comment span{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint)}.rs-comment p{min-height:22px;margin:4px 0}.rs-signature{font-size:11px;color:var(--ink-soft)}.rs-key{font-size:10.5px;color:var(--ink-soft);margin-bottom:10px}.rs-key-item{margin-right:12px;white-space:nowrap}.rs-footer{display:flex;justify-content:space-between;border-top:1px solid var(--rule);padding-top:8px;font-size:11px;color:var(--ink-soft)}.rs-generated{font-style:italic}.rs-empty{text-align:center;padding:20px;color:var(--ink-faint);font-style:italic}@media print{.sidebar,.toolbar,.no-print,.page-actions{display:none!important}.shell{display:block}.main{padding:0;max-width:none}body{background:#fff;background-image:none}.report-sheet{border:none;box-shadow:none;border-radius:0;max-width:none;padding:0}@page{size:A4;margin:12mm}}.view-badge{display:inline-flex;align-items:center;gap:7px;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;border-radius:99px;padding:5px 14px;margin-bottom:16px;border:1px solid var(--rule);background:var(--paper-raised);color:var(--ink-soft)}.view-badge-dot{width:7px;height:7px;border-radius:50%}.view-badge-admin{border-color:var(--brand);color:var(--brand-deep)}.view-badge-admin .view-badge-dot{background:var(--brand)}.view-badge-staff{border-color:color-mix(in srgb,var(--good) 45%,transparent);color:var(--good)}.view-badge-staff .view-badge-dot{background:var(--good)}.view-badge-parent{border-color:color-mix(in srgb,var(--warn) 45%,transparent);color:var(--warn)}.view-badge-parent .view-badge-dot{background:var(--warn)}.dash-head{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap}.period-filter{display:flex;flex-direction:column;gap:4px}.period-filter label{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-faint)}.period-filter select{padding:8px 12px;border:1px solid var(--rule);border-radius:7px;background:var(--paper-raised);font-weight:600;min-width:230px}.naira{font-family:var(--font-body);font-size:.62em;font-weight:700;vertical-align:6%;margin-right:1px}.stat-foot{font-size:11.5px;color:var(--ink-faint);margin-top:-8px;padding-bottom:4px}.stat-value small{font-size:16px;color:var(--ink-faint)}.dash-grid{display:grid;grid-template-columns:3fr 2fr;gap:16px}@media(max-width:900px){.dash-grid{grid-template-columns:1fr}}.panel-note{font-size:12px;color:var(--ink-faint);font-weight:400}.trend{display:flex;align-items:flex-end;gap:6px;height:118px;padding-top:4px}.trend-col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;gap:3px}.trend-bar-wrap{width:100%;max-width:40px;display:flex;align-items:flex-end;background:var(--brand-wash);border-radius:5px 5px 0 0;min-height:20%}.trend-bar{width:100%;background:var(--brand);border-radius:5px 5px 0 0;animation:grow .6s cubic-bezier(.22,1,.36,1) both}.trend-rate{font-family:var(--font-mono);font-size:10.5px;color:var(--ink-soft)}.trend-day{font-size:10px;color:var(--ink-faint);white-space:nowrap}.meter{height:16px;border-radius:99px;background:color-mix(in srgb,var(--bad) 12%,transparent);overflow:hidden;margin-top:6px}.meter-fill{height:100%;background:var(--good);border-radius:99px;animation:grow .7s cubic-bezier(.22,1,.36,1) both;transform-origin:left}.meter-legend{display:flex;justify-content:space-between;font-size:13px;color:var(--ink-soft);margin-top:8px}.meter-detail{font-size:12px;color:var(--ink-faint);margin-top:4px}.quick-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}.quick-card{display:flex;flex-direction:column;gap:2px;background:var(--paper);border:1px solid var(--rule);border-radius:var(--radius);padding:13px 15px;text-decoration:none;color:inherit;transition:transform .18s cubic-bezier(.22,1,.36,1),border-color .15s,box-shadow .15s}.quick-card:hover{transform:translateY(-1px);border-color:var(--brand-line);box-shadow:var(--shadow-soft)}.quick-card strong{font-size:14px;color:var(--brand-deep)}.quick-card span{font-size:12px;color:var(--ink-soft);line-height:1.4}.quick-card-urgent{border-color:var(--warn);background:color-mix(in srgb,var(--warn) 7%,var(--paper))}.quick-card-urgent strong{color:var(--warn)}.modal-wide{width:min(680px,100%)}.content-label-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}.content-label-row label{margin-bottom:0}.btn-ai{border-color:var(--brand);color:var(--brand-deep);font-size:13px;padding:6px 14px}.brand-row{display:grid;grid-template-columns:1fr 1fr;gap:18px}@media(max-width:700px){.brand-row{grid-template-columns:1fr}}.colour-picker{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.colour-picker input[type=color]{width:52px;height:36px;padding:2px;border:1px solid var(--rule);border-radius:7px;background:#fff;cursor:pointer}.colour-picker code{font-family:var(--font-mono);font-size:13px;color:var(--ink-soft)}.colour-picker .page-sub{flex-basis:100%;font-size:12px}.logo-picker{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.logo-preview{width:64px;height:64px;object-fit:contain;border:1px solid var(--rule);border-radius:10px;background:#fff;padding:4px}.logo-placeholder{width:64px;height:64px;display:grid;place-items:center;border:1px dashed var(--rule);border-radius:10px;font-size:10.5px;color:var(--ink-faint);text-align:center}.landing-logo{width:42px;height:42px;object-fit:contain;border-radius:8px;background:#fff;padding:3px;border:1px solid var(--rule)}.landing-footer-school{color:#fffc;font-weight:500}.ai-toggle-panel{display:flex;justify-content:space-between;align-items:center;gap:20px;border-left:3px solid var(--brand)}.switch{position:relative;width:52px;height:28px;flex-shrink:0;border-radius:99px;border:1px solid var(--rule);background:var(--paper);cursor:pointer;transition:background .18s,border-color .18s}.switch.on{background:var(--brand);border-color:var(--brand)}.switch:disabled{opacity:.5;cursor:not-allowed}.switch-knob{position:absolute;top:2px;left:2px;width:22px;height:22px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #22271f4d;transition:transform .18s cubic-bezier(.22,1,.36,1)}.switch.on .switch-knob{transform:translate(24px)}.landing{min-height:100dvh;display:flex;flex-direction:column;background:var(--paper)}.landing-nav{display:flex;justify-content:space-between;align-items:center;gap:18px;padding:12px clamp(16px,5vw,56px);position:sticky;top:0;z-index:30;background:color-mix(in srgb,var(--paper) 86%,transparent);backdrop-filter:blur(12px);border-bottom:1px solid transparent;transition:border-color .2s,box-shadow .2s}.landing-nav.stuck{border-bottom-color:var(--rule);box-shadow:var(--shadow-soft)}.landing-brand{display:flex;align-items:center;gap:11px;min-width:0}.landing-brand .crest{width:36px;height:36px;font-size:14px;flex:0 0 auto}.landing-brand-name{font-family:var(--font-display);font-weight:650;font-size:17px;color:var(--brand-deep);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.landing-nav-links{display:flex;gap:24px}.landing-nav-links a{font-size:14px;font-weight:500;color:var(--ink-soft);text-decoration:none;padding:4px 0;border-bottom:1.5px solid transparent;transition:color .15s,border-color .15s}.landing-nav-links a:hover{color:var(--brand-deep);border-bottom-color:var(--brand)}.landing-nav-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}@media(max-width:900px){.landing-nav-links{display:none}}.landing-eyebrow{display:inline-block;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.13em;color:var(--brand);padding:5px 12px;border-radius:99px;background:var(--brand-wash);border:1px solid var(--brand-line);margin-bottom:16px}.landing-eyebrow.on-dark{color:#ffffffd9;background:#ffffff1a;border-color:#ffffff38}.landing-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);gap:clamp(28px,5vw,64px);align-items:center;max-width:1180px;width:100%;margin:0 auto;padding:clamp(34px,7vh,76px) clamp(20px,5vw,56px) clamp(28px,5vh,54px)}.landing-hero-copy{animation:rise .6s cubic-bezier(.22,1,.36,1) both}.landing-motto{font-family:var(--font-display);font-style:italic;font-size:clamp(14px,1.6vw,17px);color:var(--brand);margin-bottom:16px}.landing-hero h1{font-size:clamp(33px,4.6vw,56px);line-height:1.06;font-weight:600;letter-spacing:-.02em}.landing-hero-line{display:block}.landing-hero h1 em{font-style:italic;font-weight:560;color:var(--brand);font-size:.68em}.landing-sub{max-width:520px;margin:20px 0 0;font-size:16.5px;line-height:1.62;color:var(--ink-soft)}.landing-cta{margin-top:28px;display:flex;flex-wrap:wrap;align-items:center;gap:10px}.btn-lg{padding:13px 28px;font-size:16px;border-radius:9px;text-decoration:none}a.btn-lg,a.btn{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}.landing-cta-note{margin-top:14px;font-size:12.5px;color:var(--ink-faint);font-style:italic}@media(max-width:940px){.landing-hero{grid-template-columns:1fr;text-align:center;padding-top:clamp(28px,5vh,48px)}.landing-sub{margin-left:auto;margin-right:auto}.landing-cta{justify-content:center}}.demo{animation:rise .6s .14s cubic-bezier(.22,1,.36,1) both;min-width:0}.demo-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.demo-tab{font-size:12.5px;font-weight:600;color:var(--ink-faint);background:none;border:1px solid transparent;border-radius:99px;padding:5px 13px;transition:color .15s,background .15s,border-color .15s}.demo-tab:hover{color:var(--brand-deep)}.demo-tab.on{color:var(--brand-deep);background:var(--brand-wash);border-color:var(--brand-line)}.demo-window{background:var(--paper-raised);border:1px solid var(--rule);border-radius:14px;box-shadow:var(--shadow-lift);overflow:hidden}.demo-chrome{display:flex;align-items:center;gap:6px;padding:10px 14px;background:color-mix(in srgb,var(--brand) 5%,var(--paper));border-bottom:1px solid var(--rule)}.demo-dot{width:8px;height:8px;border-radius:50%;background:var(--rule)}.demo-crumb{margin-left:8px;font-family:var(--font-mono);font-size:11px;color:var(--ink-faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.demo-body{padding:14px 16px 12px;min-height:268px}.demo-caption{margin-top:12px;font-size:13px;color:var(--ink-soft);font-style:italic;text-align:center}.demo-rows{display:flex;flex-direction:column;gap:5px}.demo-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:7px 10px;border:1px solid var(--rule);border-radius:8px;background:var(--paper);animation:rise .4s cubic-bezier(.22,1,.36,1) both}.demo-name{font-weight:600;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.demo-marks{display:flex;gap:4px;flex:0 0 auto}.demo-mark{width:26px;height:26px;border-radius:7px;display:grid;place-items:center;font-size:11.5px;font-weight:700;border:1px solid var(--rule);color:var(--ink-faint);background:var(--paper-raised)}.demo-mark.on.present{background:var(--good);border-color:var(--good);color:#fff}.demo-mark.on.late{background:var(--warn);border-color:var(--warn);color:#fff}.demo-mark.on.absent{background:var(--bad);border-color:var(--bad);color:#fff}.demo-foot{margin-top:10px;padding-top:9px;border-top:1px dashed var(--rule);font-size:12px;color:var(--ink-faint)}.demo-foot strong{color:var(--good)}.demo-table{font-size:13px}.demo-thead,.demo-trow{display:grid;grid-template-columns:1.6fr .6fr .6fr .7fr .7fr .6fr;gap:6px;align-items:center;padding:7px 8px}.demo-table.fees .demo-thead,.demo-table.fees .demo-trow{grid-template-columns:1.3fr 1fr 1fr 1.1fr}.demo-thead{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--ink-faint);border-bottom:1px solid var(--rule)}.demo-trow{border-bottom:1px solid color-mix(in srgb,var(--rule) 55%,transparent);animation:rise .4s cubic-bezier(.22,1,.36,1) both}.demo-trow span{font-variant-numeric:tabular-nums}.demo-total{font-weight:700;color:var(--brand-deep)}.demo-grade{justify-self:start;font-size:11px;font-weight:700;padding:2px 8px;border-radius:99px;background:var(--brand-wash);color:var(--brand-deep);border:1px solid var(--brand-line)}.demo-grade.gA{background:color-mix(in srgb,var(--good) 14%,transparent);color:var(--good);border-color:color-mix(in srgb,var(--good) 32%,transparent)}.demo-owed{color:var(--bad);font-weight:600}.demo-clear{color:var(--good);font-weight:600}.demo-report-head{display:flex;align-items:center;gap:11px;padding-bottom:11px;border-bottom:1px solid var(--rule);margin-bottom:10px}.demo-report-crest{width:34px;height:34px;border-radius:8px;flex:0 0 auto;background:var(--brand);opacity:.9}.demo-report-head strong{display:block;font-size:13.5px}.demo-report-head small{font-size:11.5px;color:var(--ink-faint)}.demo-report-row{display:grid;grid-template-columns:1.5fr 1.6fr auto auto;gap:10px;align-items:center;padding:8px 2px;font-size:13px;border-bottom:1px solid color-mix(in srgb,var(--rule) 55%,transparent);animation:rise .4s cubic-bezier(.22,1,.36,1) both}.demo-bar{height:6px;border-radius:99px;background:var(--brand-wash);overflow:hidden}.demo-bar i{display:block;height:100%;background:var(--brand);border-radius:99px;animation:growbar .7s cubic-bezier(.22,1,.36,1) both}@keyframes growbar{0%{width:0!important}}.landing-bridge{display:flex;justify-content:center;align-items:baseline;gap:14px;flex-wrap:wrap;padding:18px 20px;border-block:1px solid var(--rule);background:color-mix(in srgb,var(--brand) 3.5%,var(--paper));font-family:var(--font-display);font-style:italic;font-size:15px;color:var(--ink-soft)}.landing-bridge span:nth-child(2n){color:var(--brand);font-style:normal}.landing-section{max-width:1120px;width:100%;margin:0 auto;padding:clamp(44px,8vh,88px) clamp(20px,5vw,56px)}.landing-section-head{max-width:640px;margin:0 auto clamp(28px,4vh,44px);text-align:center}.landing-section-head h2{font-size:clamp(25px,3.4vw,37px);line-height:1.14;letter-spacing:-.015em}.landing-section-head p{margin-top:14px;font-size:15.5px;line-height:1.62;color:var(--ink-soft)}.landing-audiences{display:grid;grid-template-columns:repeat(auto-fit,minmax(258px,1fr));gap:16px}.audience{background:var(--paper-raised);border:1px solid var(--rule);border-top:3px solid var(--brand);border-radius:var(--radius);box-shadow:var(--shadow-soft);padding:24px 24px 20px;transition:transform .2s cubic-bezier(.22,1,.36,1),box-shadow .2s}.audience:hover{transform:translateY(-3px);box-shadow:var(--shadow-lift)}.audience-icon{width:42px;height:42px;border-radius:10px;display:grid;place-items:center;background:var(--brand-wash);color:var(--brand-deep);margin-bottom:14px}.audience-icon svg{width:22px;height:22px}.audience h3{font-size:20px;margin-bottom:2px}.audience-lead{font-family:var(--font-display);font-style:italic;color:var(--brand);font-size:14.5px;margin-bottom:12px}.audience ul{list-style:none}.audience li{font-size:13.5px;color:var(--ink-soft);line-height:1.5;padding:7px 0 7px 20px;position:relative;border-top:1px dashed var(--rule)}.audience li:before{content:"-";position:absolute;left:0;color:var(--brand)}.landing-how{background:color-mix(in srgb,var(--brand) 3.5%,var(--paper));max-width:none}.landing-how>*{max-width:1120px;margin-inline:auto}.how-tabs{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:22px}.how-tab{display:inline-flex;align-items:center;gap:9px;font-size:14px;font-weight:600;color:var(--ink-soft);background:var(--paper-raised);border:1px solid var(--rule);border-radius:99px;padding:8px 18px 8px 8px;transition:color .15s,border-color .15s,box-shadow .15s}.how-tab:hover{border-color:var(--brand-line)}.how-tab.on{color:var(--brand-deep);border-color:var(--brand);box-shadow:0 0 0 1px var(--brand-line)}.how-tab-n{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-family:var(--font-mono);font-size:11.5px;background:var(--brand-wash);color:var(--brand-deep)}.how-tab.on .how-tab-n{background:var(--brand);color:#fff}.how-panel{max-width:720px;background:var(--paper-raised);border:1px solid var(--rule);border-radius:14px;box-shadow:var(--shadow-soft);padding:clamp(22px,4vw,34px);animation:rise .4s cubic-bezier(.22,1,.36,1) both}.how-panel h3{font-size:23px}.how-panel p{margin-top:10px;font-size:15px;line-height:1.65;color:var(--ink-soft)}.how-panel ul{list-style:none;margin-top:18px;display:grid;gap:9px}.how-panel li{display:flex;align-items:flex-start;gap:10px;font-size:14px;color:var(--ink)}.how-panel li svg{width:16px;height:16px;flex:0 0 auto;margin-top:3px;color:var(--brand)}.landing-ai{background:var(--brand-deep);color:#ffffffeb}.landing-ai-inner{max-width:720px;margin:0 auto;padding:clamp(40px,7vh,68px) 24px;text-align:center}.landing-ai h2{font-size:clamp(23px,3.2vw,32px);color:#fff}.landing-ai p{margin:14px auto 0;max-width:560px;line-height:1.66;font-size:15px;color:#ffffffc7}.landing-ai-chips{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin-top:24px}.landing-ai-chips span{font-size:13px;font-weight:600;border:1px solid rgb(255 255 255 / .3);border-radius:99px;padding:6px 16px;background:#ffffff14}.landing-faq{max-width:800px}.faq-list{display:flex;flex-direction:column;gap:8px}.faq{background:var(--paper-raised);border:1px solid var(--rule);border-radius:var(--radius);overflow:hidden;transition:border-color .15s}.faq[open]{border-color:var(--brand-line);box-shadow:var(--shadow-soft)}.faq summary{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:15px 18px;cursor:pointer;list-style:none;font-family:var(--font-display);font-size:16.5px;font-weight:560;color:var(--ink)}.faq summary::-webkit-details-marker{display:none}.faq summary:hover{color:var(--brand-deep)}.faq summary svg{width:17px;height:17px;flex:0 0 auto;color:var(--brand);transition:transform .2s}.faq[open] summary svg{transform:rotate(180deg)}.faq p{padding:0 18px 17px;font-size:14.5px;line-height:1.66;color:var(--ink-soft);max-width:66ch}.landing-close{text-align:center;padding:clamp(44px,8vh,88px) clamp(20px,5vw,56px);background:radial-gradient(760px 320px at 50% 0%,var(--brand-wash),transparent 72%),var(--paper);border-top:1px solid var(--rule)}.landing-close h2{font-size:clamp(25px,3.6vw,38px);line-height:1.12;letter-spacing:-.015em}.landing-close p{max-width:520px;margin:14px auto 0;font-size:15.5px;line-height:1.62;color:var(--ink-soft)}.landing-close .landing-cta{justify-content:center}.landing-footer{background:var(--brand-deep);color:#ffffffa6;text-align:center;padding:30px 20px 34px;display:flex;flex-direction:column;gap:4px;font-size:13.5px}.landing-footer strong{color:#ffffffeb}.landing-footer .loreon-link,.door-foot .loreon-link{color:#ffffffeb;font-weight:600;text-decoration:underline;text-underline-offset:2px;text-decoration-color:#ffffff57;transition:text-decoration-color .15s}.landing-footer .loreon-link:hover,.door-foot .loreon-link:hover{color:#fff;text-decoration-color:#fffc}.footnote .loreon-link{color:inherit;text-decoration:underline;text-underline-offset:2px;text-decoration-color:var(--brand-line)}.footnote .loreon-link:hover{color:var(--brand);text-decoration-color:var(--brand)}.landing-footer-sub{font-size:12px;font-style:italic;color:#ffffff73}@media(max-width:560px){.demo-body{padding:12px 11px 10px;min-height:250px}.demo-table{font-size:12px}.demo-thead,.demo-trow{grid-template-columns:1.45fr .5fr .5fr .6fr .6fr .5fr;gap:3px;padding:6px 2px}.demo-table.fees .demo-thead,.demo-table.fees .demo-trow{grid-template-columns:1.1fr 1fr 1fr 1.1fr}.demo-thead{font-size:9.5px;letter-spacing:.04em}.demo-grade{padding:2px 6px;font-size:10px}.demo-report-row{grid-template-columns:1.4fr 1fr auto auto;gap:7px;font-size:12px}.demo-mark{width:24px;height:24px}.demo-tab{font-size:11.5px;padding:4px 10px}.landing-bridge{gap:8px;font-size:13.5px}.landing-bridge span:nth-child(2n){display:none}.how-tab{font-size:13px;padding:6px 14px 6px 6px}.faq summary{font-size:15px;padding:13px 15px}.landing-nav{padding:10px 14px;gap:10px}.landing-nav-actions .btn{padding:8px 13px;font-size:13px}.landing-brand-name{font-size:15px}.landing-brand .crest{width:32px;height:32px;font-size:13px}}@media(prefers-reduced-motion:reduce){.landing *,.demo *{animation:none!important;transition:none!important}}.login-back{display:block;width:100%;background:none;border:none;margin-top:14px;font-size:13px;color:var(--ink-faint);cursor:pointer}.login-back:hover{color:var(--brand)}@media(max-width:860px){.shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;flex-direction:row;align-items:center;gap:10px;padding:10px 14px}.sidebar-school{border:none;padding:0;margin:0}.sidebar-school-sub,.sidebar-user-role{display:none}.nav{flex-direction:row;overflow-x:auto}.nav a{white-space:nowrap;padding:7px 11px}.sidebar-user{border:none;padding:0;margin-left:auto;display:flex;align-items:center;gap:8px}.sidebar-user-name{display:none}.main{padding:20px 16px 60px}}.filter-bar{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;padding:11px 14px;margin-bottom:14px;background:color-mix(in srgb,var(--brand) 3%,var(--paper-raised));border:1px solid var(--rule);border-radius:var(--radius-lg);box-shadow:var(--shadow-soft)}.filter-group{display:flex;flex-direction:column;gap:5px;min-width:0}.filter-group label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-faint);white-space:nowrap}.filter-group select{appearance:none;padding:8px 30px 8px 12px;border:1px solid var(--rule);border-radius:7px;background:#fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='7' viewBox='0 0 10 7'><path d='M1 1l4 4 4-4' fill='none' stroke='%23969c8d' stroke-width='1.6' stroke-linecap='round'/></svg>") no-repeat right 11px center;font-weight:600;font-size:13.5px;color:var(--ink);min-width:168px;cursor:pointer;transition:border-color .12s,box-shadow .12s}.filter-group select:hover{border-color:var(--brand-line)}.filter-group select:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-wash)}.filter-bar .filter-spacer{margin-left:auto}.filter-summary{margin-left:auto;align-self:center;font-size:12px;color:var(--ink-faint);font-style:italic}@media(max-width:720px){.filter-group{flex:1 1 160px}.filter-group select{min-width:0;width:100%}}.stat-good:after{background:var(--good)}.stat-watch:after{background:var(--warn)}.stat-bad:after{background:var(--bad)}.stat-watch .stat-value{color:var(--warn)}.stat-bad .stat-value{color:var(--bad)}.meter-watch{background:var(--warn)}.meter-good{background:var(--good)}.trend-bar-low{background:var(--warn)}.range-toggle{display:inline-flex;gap:2px;padding:3px;background:var(--paper);border:1px solid var(--rule);border-radius:8px;margin-bottom:10px}.range-btn{border:none;background:none;cursor:pointer;padding:5px 11px;border-radius:6px;font:inherit;font-size:12.5px;color:var(--ink-soft)}.range-btn:hover{color:var(--ink)}.range-btn.active{background:var(--brand);color:#fff;font-weight:600}.rate-table td{vertical-align:middle}.rate-cell{width:45%}.mini-meter{height:8px;border-radius:99px;background:var(--brand-wash);overflow:hidden}.mini-meter-fill{height:100%;background:var(--brand);border-radius:99px}.mini-meter-fill.low{background:var(--warn)}.register.clickable tbody tr{cursor:pointer}.register.clickable tbody tr:hover{background:var(--brand-wash)}.register a{color:var(--brand-deep);text-decoration:none;border-bottom:1px solid var(--brand-line)}.register a:hover{border-bottom-color:var(--brand)}.row-current{background:var(--brand-wash)}.delta{font-family:var(--font-mono);font-size:11px;margin-left:6px}.delta.up{color:var(--good)}.delta.down{color:var(--bad)}.day-strip{display:flex;flex-wrap:wrap;gap:4px}.day-dot{width:13px;height:13px;border-radius:3px;display:inline-block;background:var(--rule)}.day-present{background:color-mix(in srgb,var(--good) 65%,transparent)}.day-late{background:color-mix(in srgb,var(--warn) 70%,transparent)}.day-absent{background:color-mix(in srgb,var(--bad) 70%,transparent)}.day-excused{background:color-mix(in srgb,var(--ink-faint) 45%,transparent)}.day-legend{display:flex;gap:16px;margin-top:10px;font-size:12px;color:var(--ink-faint);align-items:center}.day-legend span{display:inline-flex;align-items:center;gap:6px}.detail-list{display:flex;flex-direction:column;gap:8px}.detail-list>div{display:flex;justify-content:space-between;gap:12px;border-bottom:1px dotted var(--rule);padding-bottom:7px}.detail-list>div:last-child{border-bottom:none}.detail-list span{font-size:12.5px;color:var(--ink-faint)}.detail-list strong{font-size:13.5px}.preview-note{display:flex;align-items:center;gap:10px;padding:11px 14px;margin-bottom:14px;background:var(--brand-wash);border:1px dashed var(--brand-line);border-radius:9px;font-size:13px;color:var(--brand-deep)}.preview-note:before{content:"Preview";font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;background:var(--brand);color:#fff;padding:3px 8px;border-radius:99px}.rs-history{margin-top:12px}.rs-history .rs-skills-table{width:100%}.promo-legend{display:flex;gap:16px;font-size:12.5px;color:var(--ink-soft);margin-bottom:12px;flex-wrap:wrap}.promo-choice{display:inline-flex;gap:2px;padding:2px;background:var(--paper);border:1px solid var(--rule);border-radius:7px}.promo-btn{border:none;background:none;cursor:pointer;font:inherit;font-size:12px;padding:4px 10px;border-radius:5px;color:var(--ink-soft)}.promo-btn.active{background:var(--brand);color:#fff;font-weight:600}.promo-btn.active.repeat{background:var(--warn)}.promo-btn.active.leave{background:var(--ink-soft)}.pager{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:10px 2px 2px;font-size:12.5px;color:var(--ink-faint)}.pager-buttons{display:flex;gap:4px;align-items:center}.pager-btn{border:1px solid var(--rule);background:var(--paper-raised);color:var(--ink-soft);font:inherit;font-size:12.5px;border-radius:6px;padding:4px 10px;cursor:pointer;transition:border-color .12s,background .12s}.pager-btn:hover:not(:disabled){border-color:var(--brand-line);color:var(--ink)}.pager-btn.active{background:var(--brand);border-color:var(--brand);color:#fff;font-weight:600}.pager-btn:disabled{opacity:.45;cursor:default}.pager-gap{color:var(--ink-faint);padding:0 2px}.pill-draft{background:color-mix(in srgb,var(--ink-faint) 14%,transparent);color:var(--ink-soft);border-color:var(--rule)}.pill-submitted{background:color-mix(in srgb,var(--warn) 11%,transparent);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 26%,transparent)}.pill-returned{background:color-mix(in srgb,var(--bad) 10%,transparent);color:var(--bad);border-color:color-mix(in srgb,var(--bad) 26%,transparent)}.pill-approved{background:color-mix(in srgb,var(--good) 12%,transparent);color:var(--good);border-color:color-mix(in srgb,var(--good) 28%,transparent)}.class-card-link{text-decoration:none;color:inherit;cursor:pointer}.class-card-link:hover{border-color:var(--brand-line);box-shadow:var(--shadow-soft);transform:translateY(-1px)}.class-card{transition:transform .12s,border-color .12s,box-shadow .12s}.calendar-row{display:grid;grid-template-columns:1.4fr 1fr 1fr auto;gap:10px;align-items:end;padding:10px 0;border-bottom:1px dotted var(--rule)}.calendar-row:last-child{border-bottom:none}.calendar-row .field{margin:0}.calendar-row input[type=date],.calendar-row input[type=text]{width:100%;padding:7px 10px;border:1px solid var(--rule);border-radius:7px;background:#fff}.calendar-term{padding-left:22px;border-left:2px solid var(--brand-wash)}.calendar-current{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--brand)}@media(max-width:760px){.calendar-row{grid-template-columns:1fr 1fr}}.sidebar-logo{width:40px;height:40px;object-fit:contain;border-radius:9px;background:#fffffff0;padding:3px;flex:0 0 auto}.rs-logo{width:74px;height:74px;object-fit:contain;margin:0 auto 6px;display:block}.crest--image{object-fit:contain;background:#fff;padding:6px;border:1px solid var(--rule);box-shadow:var(--shadow-soft);color:transparent}.colour-picker .colour-hex{width:116px;flex:0 0 116px;padding:8px 10px;border:1px solid var(--rule);border-radius:7px;font-family:var(--font-mono);font-size:13px;text-transform:lowercase;background:#fff}.colour-hex:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-wash)}.toolbar-check{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--ink-soft)}.family-results{display:flex;flex-direction:column;gap:4px;margin-top:6px;max-height:190px;overflow-y:auto}.family-result{text-align:left;background:var(--paper);border:1px solid var(--rule);border-radius:7px;padding:8px 10px;cursor:pointer;display:flex;flex-direction:column;gap:2px;font:inherit}.family-result:hover{border-color:var(--brand-line);background:var(--brand-wash)}.family-result span{font-size:12px;color:var(--ink-faint)}.family-chosen{display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid var(--brand-line);background:var(--brand-wash);border-radius:7px;padding:8px 10px;font-size:13px}.column-picker{position:relative}.column-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:20;background:var(--paper-raised);border:1px solid var(--rule);border-radius:9px;box-shadow:var(--shadow-lift);padding:10px 12px;min-width:190px;display:flex;flex-direction:column;gap:6px}.column-menu-title{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-faint);padding-bottom:4px;border-bottom:1px solid var(--rule)}.column-menu label{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-soft);cursor:pointer}.column-menu label.column-fixed{color:var(--ink-faint);cursor:default}.cal-date,.cal-name{padding:6px 9px;border:1px solid var(--rule);border-radius:6px;background:#fff;font:inherit;font-size:13px}.cal-name{width:100%;max-width:180px}.event-form{display:grid;grid-template-columns:2fr 1.2fr 1fr 1fr 1fr auto;gap:10px;align-items:end;padding:12px;margin-bottom:12px;background:var(--paper);border:1px solid var(--rule);border-radius:9px}.event-form .field{margin:0}.event-form input,.event-form select{width:100%;padding:7px 10px;border:1px solid var(--rule);border-radius:6px;background:#fff}@media(max-width:900px){.event-form{grid-template-columns:1fr 1fr}}.dash-grid-even{grid-template-columns:1fr 1fr}@media(max-width:900px){.dash-grid-even{grid-template-columns:1fr}}.chart{width:100%}.ai-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:18px}.ai-model-row{display:flex;align-items:end;gap:14px;flex-wrap:wrap;margin-top:12px;padding-top:12px;border-top:1px dotted var(--rule)}.week-editor{margin-top:14px;padding:14px;border:1px solid var(--brand-line);border-radius:9px;background:var(--brand-wash)}.week-editor .field{margin-bottom:12px}.stars-cell{color:var(--warn);letter-spacing:2px;font-size:15px}.rating-form{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px;padding-top:12px;border-top:1px dotted var(--rule)}.rating-form input[type=text]{flex:1 1 240px;padding:8px 11px;border:1px solid var(--rule);border-radius:7px;background:#fff;font:inherit}.star-picker{display:inline-flex;gap:2px}.star{background:none;border:none;cursor:pointer;padding:0 2px;font-size:24px;line-height:1;color:var(--rule);transition:color .1s,transform .1s}.star:hover{transform:scale(1.12)}.star.on{color:var(--warn)}@media(max-width:720px){.main{padding:14px 12px 80px}.page-title{font-size:21px}.page-sub{font-size:13px}.view-badge{font-size:10.5px;padding:4px 10px}.stat-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.stat{padding:10px 12px 9px}.stat-value{font-size:24px}.stat-label{font-size:10px}.stat-foot{font-size:10.5px}.panel{padding:12px;border-radius:9px}.panel-title{flex-direction:column;align-items:flex-start;gap:2px}.dash-grid,.dash-grid-even,.brand-row{grid-template-columns:1fr}.filter-bar{padding:10px;gap:8px}.filter-group{flex:1 1 100%}.filter-group select{width:100%;min-width:0;padding:10px 30px 10px 12px;font-size:14px}.filter-summary{margin-left:0;flex-basis:100%}.toolbar{gap:8px}.toolbar select,.toolbar input[type=date],.toolbar input[type=search]{flex:1 1 100%;min-width:0}.toolbar .btn{flex:1 1 auto;text-align:center}.toolbar-note{flex-basis:100%}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}table.register{min-width:520px;font-size:13px}table.register th,table.register td{padding:8px 10px}.register-summary{gap:6px}.status-picker{flex-wrap:wrap;gap:4px}.status-btn{padding:8px 12px;font-size:13px;min-height:38px}.attendance-mobile table.register{min-width:0}.quick-grid{grid-template-columns:1fr 1fr}.class-grid{grid-template-columns:1fr}.tab-row{gap:5px}.tab{white-space:nowrap;padding:7px 13px;font-size:12.5px}table.register.rate-table{table-layout:fixed;width:100%;min-width:0}table.register.rate-table .rate-cell,table.register.rate-table thead th:nth-child(2){display:none}table.register.rate-table td,table.register.rate-table th{padding-left:10px;padding-right:10px;white-space:normal}table.register.rate-table thead th:last-child,table.register.rate-table tbody td:last-child{width:74px}table.register.rate-table tbody td:first-child{overflow-wrap:anywhere}.range-toggle{width:100%;overflow-x:auto}.modal{width:calc(100vw - 24px);max-height:88vh;overflow-y:auto;padding:16px}.modal-wide{width:calc(100vw - 24px)}.event-form,.calendar-row{grid-template-columns:1fr}.rating-form{flex-direction:column;align-items:stretch}.pager{justify-content:center;gap:8px}.pager-count{flex-basis:100%;text-align:center}.report-sheet{padding:18px 14px}.rs-pupil-bar{grid-template-columns:1fr 1fr}.rs-grades{font-size:11.5px}.detail-list>div{flex-direction:column;gap:2px}.child-stats{grid-template-columns:1fr 1fr}.day-strip{gap:3px}.day-dot{width:11px;height:11px}}.nav-toggle{display:none}@media(max-width:860px){.nav-toggle{display:inline-flex;align-items:center;gap:8px;background:#ffffff1a;color:#fff;border:1px solid rgb(255 255 255 / .22);border-radius:8px;padding:7px 12px;font:inherit;font-size:13px;font-weight:600;cursor:pointer}.sidebar{flex-wrap:wrap;position:sticky;top:0;z-index:40}.sidebar-school{flex:1 1 auto;min-width:0}.sidebar-school-name{font-size:14px}.nav{flex-direction:column;overflow-x:visible;flex-basis:100%;max-height:62vh;overflow-y:auto;margin-top:8px;padding-top:8px;border-top:1px solid rgb(255 255 255 / .14)}.nav.closed{display:none}.nav a{padding:10px 12px;font-size:14.5px}.nav-section{padding:10px 12px 3px}.sidebar-user{flex-basis:100%;margin-top:8px;border-top:1px solid rgb(255 255 255 / .14);padding-top:8px}.sidebar-user-name{display:block}.sidebar-user button{padding:7px 14px}}.panel,.stat,.dash-grid>*,.stat-row>*{min-width:0}.table-wrap{max-width:100%;overflow-x:auto}.main{min-width:0;overflow-x:hidden}.chart,.generated-doc,.report-sheet{max-width:100%}.generated-doc pre,.generated-doc table{overflow-x:auto;display:block;max-width:100%}@media(max-width:720px){.register-mobile table.register{min-width:0}.register-mobile table.register th:first-child,.register-mobile table.register td:first-child{display:none}.register-mobile table.register td:last-child{width:100%}.register-mobile .status-picker{justify-content:flex-start}.register-mobile .status-btn{flex:1 1 auto;min-width:74px}.scorecard{font-size:12px}}.show-all{margin-top:8px;font-size:12.5px}.table-controls{display:flex;align-items:end;gap:10px;flex-wrap:wrap;margin-bottom:10px}.table-search{flex:1 1 240px;max-width:360px;padding:8px 12px;border:1px solid var(--rule);border-radius:7px;background:var(--paper-raised);font:inherit;font-size:13.5px}.table-search:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-wash)}table.register th.sortable{cursor:pointer;user-select:none;white-space:nowrap}table.register th.sortable:hover{color:var(--ink)}table.register th.right,table.register td.right{text-align:right}.sort-mark{margin-left:5px;font-size:9px;color:var(--ink-faint);opacity:.5}.sort-mark.on{opacity:1;color:var(--brand)}table.register.dense td{padding:5px 10px;font-size:13px}.thread-search{width:100%;padding:8px 11px;margin-bottom:8px;border:1px solid var(--rule);border-radius:7px;background:var(--paper-raised);font:inherit;font-size:13px}@media(max-width:720px){.table-search{max-width:none;flex-basis:100%}.table-controls .filter-group{flex:1 1 100%}}.signup-card{max-width:460px}.field-hint{font-size:12px;color:var(--ink-faint);margin-top:4px;line-height:1.45}.signup-list{list-style:none;padding:0;margin:0 0 10px;display:flex;flex-direction:column;gap:7px}.signup-list li{font-size:13px;color:var(--ink-soft);padding-left:16px;position:relative}.signup-list li:before{content:"·";position:absolute;left:4px;color:var(--brand);font-weight:700}.login-links{display:flex;justify-content:space-between;gap:10px;margin-top:12px}.login-link{background:none;border:none;padding:0;cursor:pointer;font:inherit;font-size:12.5px;color:var(--brand-deep);text-decoration:underline}.login-link:hover{color:var(--brand)}.plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}.plan-card{display:flex;flex-direction:column;gap:8px}.plan-card.current{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand-line)}.plan-name{font-family:var(--font-display);font-size:18px;font-weight:600;display:flex;align-items:center;gap:8px}.plan-price{font-size:13px;color:var(--ink-faint)}.plan-blurb{font-size:13px;color:var(--ink-soft);line-height:1.5}.plan-points{list-style:none;padding:0;margin:0 0 10px;display:flex;flex-direction:column;gap:5px}.plan-points li{font-size:12.5px;color:var(--ink-soft);padding-left:14px;position:relative}.plan-points li:before{content:"·";position:absolute;left:3px;color:var(--brand);font-weight:700}.landing-plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(258px,1fr));gap:16px;align-items:start}.landing-plan{position:relative;background:var(--paper-raised);border:1px solid var(--rule);border-radius:14px;padding:26px 24px 24px;text-align:left;display:flex;flex-direction:column;gap:9px;box-shadow:var(--shadow-soft);transition:transform .2s cubic-bezier(.22,1,.36,1),box-shadow .2s}.landing-plan:hover{transform:translateY(-3px);box-shadow:var(--shadow-lift)}.landing-plan.featured{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand-line),var(--shadow-lift);background:linear-gradient(var(--brand-wash),transparent 140px),var(--paper-raised)}.landing-plan-flag{position:absolute;top:-11px;left:24px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;background:var(--brand);color:#fff;border-radius:99px;padding:4px 12px;box-shadow:var(--shadow-soft)}.landing-plan-name{font-family:var(--font-display);font-size:22px;font-weight:620;color:var(--brand-deep)}.landing-plan-price{font-size:13px;font-weight:600;color:var(--brand);padding-bottom:12px;border-bottom:1px solid var(--rule)}.landing-plan>p{font-size:13.5px;color:var(--ink-soft);line-height:1.55}.landing-plan ul{list-style:none;padding:0;margin:4px 0 14px;display:flex;flex-direction:column;gap:7px;flex:1}.landing-plan li{font-size:13px;color:var(--ink-soft);padding-left:20px;position:relative;line-height:1.45}.landing-plan li:before{content:"";position:absolute;left:0;top:7px;width:11px;height:6px;border-left:2px solid var(--brand);border-bottom:2px solid var(--brand);transform:rotate(-45deg)}.landing-plan .btn{width:100%}.crest--waiting{background:var(--rule);box-shadow:none;opacity:.35}.paper-stage{display:flex;justify-content:center;padding:4px 0 40px}.paper{position:relative;width:210mm;max-width:100%;min-height:240mm;background:#fff;border:1px solid var(--rule);box-shadow:var(--shadow-lift);padding:18mm 16mm;color:#1a1a1a;font-size:12.5px;line-height:1.55}.paper-certificate{width:297mm;min-height:210mm}.paper-head{text-align:center;border-bottom:2px solid var(--brand);padding-bottom:12px;margin-bottom:16px}.paper-crest{width:62px;height:62px;object-fit:contain;margin:0 auto 8px;display:block}.paper-head h1{font-family:var(--font-display);font-size:25px;font-weight:640;letter-spacing:-.015em;color:var(--brand-deep)}.paper-motto{font-family:var(--font-display);font-style:italic;font-size:12.5px;color:#555;margin-top:2px}.paper-contact{font-size:10.5px;color:#666;margin-top:6px}.paper-kind{margin-top:11px;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.18em;color:var(--brand)}.paper-title{font-family:var(--font-display);text-align:center;font-size:22px;margin:14px 0 4px;color:var(--brand-deep)}.paper-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(122px,1fr));gap:9px 16px;margin:14px 0 16px;padding:11px 13px;background:var(--brand-wash);border-radius:6px}.paper-strip span{display:block;font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:#777}.paper-strip strong{font-size:12.5px}.paper-line{margin:9px 0}.paper-amount{font-family:var(--font-display);font-size:27px;font-weight:640;color:var(--brand-deep);text-align:center;margin:12px 0;padding:9px;border-block:1px solid var(--rule)}.paper-small{margin-top:14px;font-size:11px;color:#555}.paper-note{font-size:10.5px;color:#777;font-style:italic}.paper-table{width:100%;border-collapse:collapse;margin:12px 0;font-size:12px}.paper-table th{text-align:left;font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:#666;border-bottom:1.5px solid var(--brand);padding:7px 8px}.paper-table td{padding:6px 8px;border-bottom:1px solid #eee}.paper-table .right,.paper-table th.right{text-align:right}.paper-table tfoot td{border-bottom:none;padding-top:8px;font-size:12px}.paper-table tfoot .paper-total td{font-weight:700;border-top:1.5px solid var(--brand);color:var(--brand-deep)}.paper-table.compact td,.paper-table.compact th{padding:4px 8px}.paper-session{margin-top:18px;break-inside:avoid}.paper-session h3{font-family:var(--font-display);font-size:15px;color:var(--brand-deep);border-bottom:1px solid var(--rule);padding-bottom:4px}.paper-term{margin-top:11px;break-inside:avoid}.paper-term-head{display:flex;flex-wrap:wrap;gap:12px;align-items:baseline;font-size:11.5px;color:#555}.paper-term-head strong{font-size:12.5px;color:#1a1a1a}.paper-signatures{display:flex;gap:40px;justify-content:space-between;margin-top:34px;break-inside:avoid}.paper-signatures>div{flex:1;text-align:center}.paper-signatures span{display:block;border-bottom:1px solid #999;margin-bottom:5px;height:30px}.paper-signatures small{font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:#777}.paper-revoked{opacity:.92}.paper-stamp{position:absolute;top:42%;left:50%;transform:translate(-50%,-50%) rotate(-18deg);font-family:var(--font-display);font-size:62px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:color-mix(in srgb,var(--bad) 28%,transparent);border:5px solid color-mix(in srgb,var(--bad) 28%,transparent);padding:8px 26px;border-radius:8px;pointer-events:none;z-index:2}.paper-certificate{padding:14mm;display:flex}.cert-inner{flex:1;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:10mm 14mm}.paper-certificate.tpl-classic .cert-inner{border:2px solid var(--brand);outline:6px solid var(--brand-wash);outline-offset:4px}.paper-certificate.tpl-modern{padding:0}.paper-certificate.tpl-modern .cert-band{width:26mm;background:var(--brand-deep);flex:0 0 auto}.paper-certificate.tpl-ornate .cert-inner{border:1px solid var(--brand-line)}.cert-corner{position:absolute;width:34px;height:34px;border:3px solid var(--brand)}.cert-corner.tl{top:10mm;left:10mm;border-right:none;border-bottom:none}.cert-corner.tr{top:10mm;right:10mm;border-left:none;border-bottom:none}.cert-corner.bl{bottom:10mm;left:10mm;border-right:none;border-top:none}.cert-corner.br{bottom:10mm;right:10mm;border-left:none;border-top:none}.cert-crest{width:66px;height:66px;object-fit:contain;margin-bottom:9px}.cert-school{font-family:var(--font-display);font-size:19px;font-weight:640;color:var(--brand-deep)}.cert-motto{font-family:var(--font-display);font-style:italic;font-size:11.5px;color:#666;margin-top:2px}.cert-title{font-family:var(--font-display);font-size:30px;font-weight:620;margin:20px 0 12px;color:var(--brand-deep);letter-spacing:-.01em}.cert-preamble{font-size:12px;color:#666;text-transform:uppercase;letter-spacing:.16em}.cert-name{font-family:var(--font-display);font-size:34px;font-weight:620;margin:8px 0 14px;padding-bottom:8px;border-bottom:1px solid var(--brand-line);min-width:60%}.cert-body{max-width:150mm;font-size:13px;line-height:1.6;color:#333}.cert-note{margin-top:10px;font-size:11.5px;font-style:italic;color:#555;max-width:140mm}.cert-seal{margin-top:16px;width:74px;height:74px;border-radius:50%;display:grid;place-items:center;text-align:center;border:2px solid var(--brand);color:var(--brand-deep);font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;padding:6px;line-height:1.2}.cert-signatures{display:flex;gap:30px;align-items:flex-end;justify-content:center;margin-top:26px;width:100%;max-width:170mm}.cert-signatures>div{flex:1;text-align:center}.cert-signatures span{display:block;border-bottom:1px solid #999;margin-bottom:5px;height:26px}.cert-signatures small{font-size:9.5px;text-transform:uppercase;letter-spacing:.1em;color:#777}.cert-date strong{display:block;font-size:12.5px}.cert-reference{margin-top:16px;font-family:var(--font-mono);font-size:9.5px;color:#999}.pupil-hits{list-style:none;margin-top:6px;border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-raised);overflow:hidden}.pupil-hits button{display:block;width:100%;text-align:left;background:none;border:none;padding:8px 12px;border-bottom:1px solid var(--rule)}.pupil-hits li:last-child button{border-bottom:none}.pupil-hits button:hover{background:var(--brand-wash)}.pupil-hits strong{display:block;font-size:13.5px}.pupil-hits small{font-size:11.5px;color:var(--ink-faint)}.picked-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:9px 12px;border:1px solid var(--brand-line);border-radius:var(--radius);background:var(--brand-wash)}@media print{.paper-stage{padding:0}.paper{width:auto;min-height:0;border:none;box-shadow:none;padding:0;font-size:11.5px}.paper-certificate{width:auto}.paper-table{break-inside:auto}.paper-session,.paper-term,.paper-signatures{break-inside:avoid}@page{margin:14mm}}@media(max-width:780px){.paper{padding:14px 13px;font-size:12px}.paper-head h1{font-size:20px}.paper-amount,.cert-title{font-size:22px}.cert-name{font-size:24px}.paper-signatures,.cert-signatures{gap:16px}}.otp{font-family:var(--font-mono);font-size:15px;letter-spacing:.06em;background:var(--brand-wash);border:1px solid var(--brand-line);border-radius:6px;padding:3px 9px;user-select:all}.row-actions{display:flex;gap:6px;flex-wrap:wrap}.row-actions .btn{padding:6px 12px;font-size:12.5px;white-space:nowrap}@media(max-width:720px){.row-actions{flex-direction:column;align-items:stretch}}.week-state{display:flex;flex-direction:column;gap:4px;align-items:flex-start}.week-state small{font-size:11px;color:var(--ink-faint)}.week-state .btn{padding:5px 11px;font-size:12.5px}.week-undo{background:none;border:none;padding:0;font:inherit;font-size:11px;color:var(--ink-faint);text-decoration:underline;cursor:pointer}.week-undo:hover{color:var(--brand)}.nav-group{margin-top:12px}.nav-group-head{display:flex;align-items:center;gap:7px;width:100%;background:none;border:none;padding:5px 10px 5px 12px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.14em;color:#ffffff6b;border-radius:7px;transition:color .15s,background .15s}.nav-group-head:hover{color:#ffffffbf;background:#ffffff0f}.nav-group-head span:first-child{flex:1;text-align:left}.nav-group-head svg{width:13px;height:13px;flex:0 0 auto;transform:rotate(-90deg);transition:transform .18s cubic-bezier(.22,1,.36,1)}.nav-group.open .nav-group-head svg{transform:none}.nav-group-count{font-size:9.5px;letter-spacing:0;padding:1px 6px;border-radius:99px;background:#ffffff24;color:#ffffffb3}.nav-group-items{display:flex;flex-direction:column;gap:1px;margin-top:2px}.provider-choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px;margin-bottom:18px}.provider-choice{display:flex;flex-direction:column;gap:5px;text-align:left;padding:13px 15px;border-radius:var(--radius);border:1px solid var(--rule);background:var(--paper-raised);box-shadow:var(--shadow-soft);transition:border-color .15s,box-shadow .15s,transform .15s}.provider-choice:hover:not(:disabled){transform:translateY(-2px);border-color:var(--brand-line)}.provider-choice.on{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand-line),var(--shadow-soft);background:var(--brand-wash)}.provider-choice:disabled{opacity:.55}.provider-name{display:flex;align-items:center;gap:8px;font-family:var(--font-display);font-size:15.5px;font-weight:620;color:var(--brand-deep)}.provider-note{font-size:12.5px;color:var(--ink-soft);line-height:1.45}.provider-where{font-size:11px;color:var(--ink-faint);font-family:var(--font-mono)}.class-card-link{position:relative;padding:0}.class-card-body{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;text-decoration:none;color:inherit;flex:1}.class-card-edit{position:absolute;top:8px;right:10px;background:var(--paper);border:1px solid var(--rule);border-radius:99px;padding:3px 10px;font-size:11px;font-weight:600;color:var(--ink-faint);opacity:0;transition:opacity .15s,color .15s,border-color .15s}.class-card:hover .class-card-edit,.class-card-edit:focus-visible{opacity:1}.class-card-edit:hover{color:var(--brand-deep);border-color:var(--brand)}@media(hover:none){.class-card-edit{opacity:1}}.landing-promises{list-style:none;display:flex;flex-wrap:wrap;justify-content:center;gap:10px 22px;max-width:760px;margin:0 auto 34px}.landing-promises li{display:flex;align-items:center;gap:8px;font-size:13.5px;font-weight:600;color:var(--brand-deep)}.landing-promises svg{width:15px;height:15px;color:var(--brand);flex:0 0 auto}.tab-badge{margin-left:7px;font-size:10.5px;font-weight:700;letter-spacing:0;padding:1px 7px;border-radius:99px;background:var(--brand-wash);color:var(--brand-deep);border:1px solid var(--brand-line)}.tab.active .tab-badge{background:var(--brand);color:#fff;border-color:var(--brand)}
