:root{--ink: #1c1914;--paper: #f4efe4;--panel: #ece4d4;--card: #fffdf8;--line: #d7ccb8;--muted: #6f675c;--accent: #7a2e23;--accent-dark: #5c2118;--ok: #2f4f3e;--error: #8b1e1e;--series-1: #2a78d6;--series-2: #eb6834;--series-3: #1baf7a;--series-4: #eda100;--series-5: #e87ba4;--series-6: #008300;--series-7: #4a3aa7;--series-8: #e34948;--status-good: #0ca30c;--status-warning: #fab219;--status-serious: #ec835a;--status-critical: #d03b3b}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;color:var(--ink);background:var(--paper);font-family:IBM Plex Sans,sans-serif}h1,h2,.brand-mark{font-family:Fraunces,Georgia,serif;font-weight:650}a{color:var(--accent)}button,input{font:inherit}.auth-shell{min-height:100vh;display:grid;grid-template-columns:1.1fr 1fr}.auth-shell.compact{grid-template-columns:1fr}.auth-panel{padding:72px 64px;background:#2a241c;color:#f6f0e4}.auth-panel h1{font-size:64px;margin:8px 0 16px}.lede{font-size:18px;max-width:28ch;line-height:1.5;color:#e4d8c4}.eyebrow{letter-spacing:.14em;text-transform:uppercase;font-size:12px;color:#c9b79a}.quiet-list{padding-left:18px;color:#d8cbb6;line-height:1.8}.auth-card-wrap{display:grid;place-items:center;padding:32px}.auth-card{width:min(420px,100%);background:var(--card);border:1px solid var(--line);padding:36px 32px}.auth-card.wide{width:min(520px,100%)}.brand-mark{margin:0;color:var(--accent)}.auth-card h2{margin:8px 0 4px}.hint,.muted{color:var(--muted)}label{display:grid;gap:6px;margin:16px 0;font-size:14px}label.inline{display:flex;align-items:center;gap:8px}select,input[type=email],input[type=password],input[type=text],input:not([type]){border:1px solid var(--line);background:#fff;padding:12px 10px}button[type=submit],button.ghost{width:100%;margin-top:8px;border:0;background:var(--accent);color:#fff;padding:12px;cursor:pointer}button.ghost{width:auto;background:transparent;color:var(--accent);border:1px solid var(--line);padding:8px 14px}button[type=submit]:disabled{opacity:.6}.auth-links{margin-top:20px;display:grid;gap:10px;text-align:center}.rule{display:block;height:1px;background:var(--line)}.error{color:var(--error);background:#f8ece8;padding:10px 12px}.dash{max-width:960px;margin:0 auto;padding:40px 24px}.dash-bar{display:flex;justify-content:space-between;align-items:start;margin-bottom:32px}.dash-bar h1{margin:4px 0 0}.dash-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.dash-grid article{background:var(--card);border:1px solid var(--line);padding:24px}.page-center{min-height:100vh;display:grid;place-items:center}.users-panel{margin-top:32px;background:var(--card);border:1px solid var(--line);padding:24px}.users-panel h2{margin-top:0}.user-form{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:16px 0 24px}.user-form button{grid-column:1 / -1;width:auto;justify-self:start;padding:10px 18px}.users-table{width:100%;border-collapse:collapse;font-size:14px}.users-table th,.users-table td{border-bottom:1px solid var(--line);text-align:left;padding:10px 8px}.app-shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.app-nav{background:#2a241c;color:#f6f0e4;padding:28px 20px;display:flex;flex-direction:column;gap:16px;max-height:100vh;overflow:auto}.app-nav nav{display:grid;gap:6px;flex:1}.app-nav a{color:#d8cbb6;text-decoration:none;padding:8px 10px;border-radius:8px}.app-nav a.active{background:#3b3329;color:#fff}.nav-school{color:#c9b79a;font-size:13px;margin:0}.app-main{padding:32px}.app-topbar,.app-nav-brand,.nav-backdrop{display:none}.row-actions{display:flex;gap:6px;flex-wrap:wrap}.row-actions button{width:auto;margin:0;padding:6px 10px;font-size:12.5px}.btn-danger{background:transparent;border:1px solid var(--error);color:var(--error)}.btn-danger:hover{background:var(--error);color:#fff}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.badge-active{background:#e3f3e9;color:var(--status-good, #0ca30c)}.badge-inactive{background:#f3e6e6;color:var(--error)}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}.table-scroll .users-table{min-width:560px}.flash{color:var(--status-good, #0ca30c);background:#eaf6ee;padding:10px 12px;margin:8px 0;border-radius:8px}.editing-row{background:#fbf6ea}.stack-forms{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin:16px 0 28px}.stack-forms form,.list-card{background:var(--card);border:1px solid var(--line);padding:16px}.stack-forms h3{margin-top:0}.option-row{display:flex;gap:8px;align-items:center;margin:8px 0}.option-row input[type=text],.option-row input:not([type]){flex:1}.option-row .inline{margin:0;white-space:nowrap}.question-marks{display:grid;grid-template-columns:1fr 1fr;gap:8px}.cbt-timer{font-variant-numeric:tabular-nums;font-weight:700}.cbt-timer.urgent{color:var(--error)}.stack-forms button{width:auto}.attend-row{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--line)}.attend-toolbar{display:grid;grid-template-columns:minmax(180px,1fr) minmax(160px,220px) auto;gap:12px 16px;align-items:end;margin:8px 0 4px}.attend-toolbar label{margin:0}.attend-weekdays{padding-bottom:10px}.attend-duration{margin:8px 0 16px}.attend-presets{display:flex;flex-wrap:wrap;gap:8px}.attend-preset{width:auto;margin:0;padding:8px 12px;background:var(--card);border:1px solid var(--line);color:var(--ink)}.attend-preset.on{background:var(--accent);border-color:var(--accent);color:#fff}.attend-custom{display:grid;grid-template-columns:1fr 1fr;gap:12px;max-width:420px;margin-top:10px}.attend-custom label{margin:0}.attend-strip{display:flex;gap:8px;overflow-x:auto;padding:4px 0 12px;-webkit-overflow-scrolling:touch}.attend-day{flex:0 0 64px;margin:0;padding:8px 6px;display:grid;gap:2px;justify-items:center;background:var(--card);border:1px solid var(--line);color:var(--ink)}.attend-day span,.attend-day em{font-size:11px;color:var(--muted);font-style:normal}.attend-day strong{font-size:18px;line-height:1.1}.attend-day.has-record{border-color:#c9b79a}.attend-day.on{background:var(--accent);border-color:var(--accent);color:#fff}.attend-day.on span,.attend-day.on em{color:#f3e6d8}.attend-bulk{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:8px 0 16px}.attend-bulk>span{color:var(--muted);font-size:13px}.attend-bulk button[type=submit]{margin-left:auto;width:auto}.attend-student{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.attend-student .hint{margin:2px 0 0}.attend-pills{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}.attend-pill{width:auto;margin:0;padding:6px 10px;font-size:12.5px;background:var(--card);border:1px solid var(--line);color:var(--ink)}.attend-pill-present.on{background:#e3f3e9;border-color:var(--status-good);color:var(--ok)}.attend-pill-absent.on{background:#f3e6e6;border-color:var(--error);color:var(--error)}.attend-pill-late.on{background:#fff4dd;border-color:var(--status-warning);color:#8a5a00}.attend-pill-excused.on{background:#e8eef8;border-color:var(--series-1);color:#1d4f8c}.attend-tag{text-transform:capitalize}.attend-tag-present{color:var(--ok)}.attend-tag-absent{color:var(--error)}.attend-tag-late{color:#8a5a00}.attend-tag-excused{color:#1d4f8c}textarea{border:1px solid var(--line);padding:10px;font:inherit;width:100%}.report-card{background:var(--card);border:1px solid var(--line);padding:24px;margin:24px 0;page-break-after:always}@media print{.print-hide,.app-nav,.eyebrow{display:none!important}.app-shell{display:block}.app-main{padding:0}.report-card{border:0}}.nav-role{margin:0;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#c9b79a}.role-dash{max-width:1180px}.role-hero{display:flex;justify-content:space-between;gap:16px;align-items:flex-end;margin-bottom:24px;padding:28px;border-radius:20px;color:#f8f4ea}.role-hero h1{margin:6px 0 8px;font-size:34px}.role-hero p{margin:0;color:#e8dcc8}.hero-pills{display:flex;flex-wrap:wrap;gap:8px}.hero-pills span{background:#ffffff1f;border:1px solid rgba(255,255,255,.18);padding:8px 12px;border-radius:999px;font-size:13px}.student-hero{background:linear-gradient(135deg,#0b1f3a,#16325c 55%,#7a2e23 120%)}.teacher-hero{background:linear-gradient(135deg,#0f3d3e,#1a5c57,#c9a227 140%)}.admin-hero{background:linear-gradient(135deg,#3b1410,#7a2e23 60%,#1c1914 130%)}.parent-hero{background:linear-gradient(135deg,#243016,#3f4f2f,#8a6a2f 130%)}.kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px}.kpi-row.dense{grid-template-columns:repeat(6,1fr)}.kpi-row article,.panel{background:var(--card);border:1px solid var(--line);padding:18px;border-radius:16px;box-shadow:0 1px 2px #1c19140a,0 8px 20px #1c19140d;transition:transform .15s ease,box-shadow .15s ease}.kpi-row article{position:relative;overflow:hidden;border-top:3px solid var(--series-1)}.kpi-row article:nth-child(8n+1){border-top-color:var(--series-1)}.kpi-row article:nth-child(8n+2){border-top-color:var(--series-2)}.kpi-row article:nth-child(8n+3){border-top-color:var(--series-3)}.kpi-row article:nth-child(8n+4){border-top-color:var(--series-4)}.kpi-row article:nth-child(8n+5){border-top-color:var(--series-5)}.kpi-row article:nth-child(8n+6){border-top-color:var(--series-6)}.kpi-row article:nth-child(8n+7){border-top-color:var(--series-7)}.kpi-row article:nth-child(8n+8){border-top-color:var(--series-8)}.kpi-row article:hover,.panel:hover{transform:translateY(-2px);box-shadow:0 2px 4px #1c19140f,0 14px 28px #1c191414}.kpi-row h2{margin:4px 0;font-size:28px}.kpi-row p{margin:0;color:var(--muted);font-size:13px}.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px}.chart-grid.two{grid-template-columns:1fr 1fr}.split-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px}.panel h3{margin:0 0 12px;font-size:15px}.chart-svg{width:100%;height:auto;overflow:visible}.chart-gridline{stroke:var(--line);stroke-width:1;opacity:.6}.chart-label{font-size:10px;fill:var(--muted)}.chart-value{font-size:11px;font-weight:600;fill:var(--ink)}.chart-center{font-size:13px;font-weight:700;fill:var(--ink)}.pie-hole{fill:var(--card)}.pie-wrap{display:grid;grid-template-columns:160px 1fr;gap:16px;align-items:center}.pie-legend{list-style:none;margin:0;padding:0;display:grid;gap:10px;font-size:13px}.pie-legend li{display:flex;align-items:center;gap:8px}.pie-legend i{width:11px;height:11px;border-radius:3px;display:inline-block;flex-shrink:0}.pie-legend span{margin-left:auto;color:var(--muted);font-size:12px}.chart-empty{padding:24px 0}.hbar-list{display:grid;gap:12px}.hbar-row{display:grid;grid-template-columns:120px 1fr 52px;gap:10px;align-items:center;font-size:13px}.hbar-track{background:var(--panel);border-radius:99px;height:12px;overflow:hidden}.hbar-fill{height:100%;border-radius:99px;transition:width .3s ease}.hbar-row strong{font-variant-numeric:tabular-nums;text-align:right}.passport-card{display:grid;grid-template-columns:180px 1fr;gap:24px;background:linear-gradient(#fffdf8,#f7f1e4);border:1px solid var(--line);border-radius:20px;padding:20px;margin-bottom:20px;box-shadow:0 16px 40px #1c19140f}.passport-photo{aspect-ratio:3 / 4;background:#e7dfd0;border:8px solid #fff;box-shadow:0 0 0 1px #d7ccb8;display:grid;place-items:center;overflow:hidden;position:relative;cursor:default}.passport-photo[role=button]{cursor:pointer}.passport-photo img{width:100%;height:100%;object-fit:cover}.passport-photo span{font-family:Fraunces,serif;font-size:42px;color:#7a2e23}.passport-photo em{position:absolute;bottom:0;left:0;right:0;background:#0b1f3ac7;color:#fff;font-style:normal;font-size:11px;text-align:center;padding:6px}.passport-meta h2{margin:4px 0 12px}.passport-meta dl{display:grid;grid-template-columns:1fr 1fr;gap:10px 18px;margin:0}.passport-meta dt{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.passport-meta dd{margin:2px 0 0;font-weight:600}.guardian-list,.timeline{list-style:none;padding:0;margin:0;display:grid;gap:10px}.guardian-list li,.timeline li{display:grid;gap:2px;padding-bottom:10px;border-bottom:1px solid var(--line)}.timeline time{color:var(--muted);font-size:12px}.notice{padding:10px 0;border-bottom:1px solid var(--line)}.notice p{margin:4px 0 0;color:var(--muted)}.child-block{margin-bottom:28px}.fee-lock{position:fixed;inset:0;z-index:80;background:#1a120eb8;display:grid;place-items:center;padding:24px}.fee-lock-card{width:min(640px,100%);max-height:90vh;overflow:auto;background:var(--card);border:1px solid var(--line);padding:28px 24px}.fee-lock-card h2{margin:4px 0 12px}.fee-lock-pay{display:grid;gap:8px;margin:0 0 16px}.fee-lock-pay div{display:grid;grid-template-columns:140px 1fr;gap:8px}.fee-lock-pay dt{color:var(--muted);font-size:13px}.fee-lock-pay dd{margin:0;font-weight:600}.app-shell[data-role=student] .app-nav{background:#0b1f3a}.app-shell[data-role=student] .app-nav a.active{background:#16325c}.app-shell[data-role=teacher] .app-nav{background:#123836}.app-shell[data-role=teacher] .app-nav a.active{background:#1a5c57}.app-shell[data-role=parent] .app-nav{background:#243016}.app-shell[data-role=parent] .app-nav a.active{background:#3f4f2f}.app-shell[data-role=school_super_admin] .app-nav,.app-shell[data-role=school_admin] .app-nav{background:#2a1814}.app-shell[data-role=school_super_admin] .app-nav a.active,.app-shell[data-role=school_admin] .app-nav a.active{background:#5c2118}@media(max-width:860px){.auth-shell{grid-template-columns:1fr}.auth-panel{padding:40px 24px}.auth-panel h1{font-size:44px}.dash-grid,.user-form{grid-template-columns:1fr}.attend-toolbar,.attend-custom,.attend-student{grid-template-columns:1fr;display:grid}.attend-pills,.attend-bulk{justify-content:flex-start}.attend-bulk button[type=submit]{margin-left:0;width:100%}.app-shell,.kpi-row,.kpi-row.dense,.chart-grid,.split-grid,.passport-card,.pie-wrap{grid-template-columns:1fr}.role-hero{display:grid}.app-topbar{display:flex;align-items:center;gap:14px;background:#2a241c;color:#f6f0e4;padding:14px 18px;position:sticky;top:0;z-index:30}.app-topbar .brand-mark{margin:0;color:inherit}.nav-toggle{width:36px;height:32px;border:0;background:transparent;display:grid;gap:5px;align-content:center;justify-items:center;padding:0;cursor:pointer}.nav-toggle span{display:block;width:22px;height:2px;background:#f6f0e4;border-radius:2px}.app-nav{position:fixed;inset:0 25% 0 0;z-index:40;transform:translate(-100%);transition:transform .2s ease;box-shadow:4px 0 24px #00000040}.app-nav.open{transform:translate(0)}.app-nav-brand{display:block}.nav-backdrop{display:block;position:fixed;inset:0;background:#0b0b0b73;z-index:35}.app-main{padding:18px}.row-actions{flex-direction:column;align-items:stretch}.row-actions button{width:100%}.dash-bar{flex-direction:column;align-items:stretch;gap:10px}.dash-bar button{width:100%}.table-scroll .users-table{min-width:480px}}
