:root{--color-primary:var(--c-primary,#2563eb);--color-primary-hover:var(--c-secondary,#1d4ed8);--color-primary-dark:var(--c-secondary,#1d4ed8);--color-primary-light:#dbeafe;--color-primary-soft:#2563eb1a;--color-secondary:var(--c-secondary,#1d4ed8);--color-sidebar:var(--c-sidebar,var(--color-primary));--color-sidebar-text:var(--c-sidebar-text,#fff);--color-accent:var(--c-accent,#f59e0b);--color-accent-light:#fef3c7;--color-accent-soft:#f59e0b24;--color-success:var(--brand-success,#15803d);--color-success-soft:#15803d1f;--color-warning:var(--brand-warning,#d97706);--color-warning-soft:#d9770624;--color-danger:var(--brand-danger,#dc2626);--color-danger-soft:#dc26261a;--color-info:#2563eb;--color-info-soft:#2563eb1a;--color-background:var(--c-paper,#f8fafc);--color-surface:#fff;--color-surface-muted:#f1f5f9;--color-surface-hover:#f4f7fb;--color-border:var(--c-rule,#e2e8f0);--color-border-strong:#cbd5e1;--color-text:var(--c-ink,#0f172a);--color-text-secondary:var(--c-muted,#64748b);--color-text-muted:#94a3b8;--color-text-inverse:#fff;--font-sans:"Manrope", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-display:"Manrope", ui-sans-serif, system-ui, -apple-system, sans-serif;--text-xs:.75rem;--text-sm:.8125rem;--text-base:var(--brand-text-base,.875rem);--text-lg:1rem;--text-xl:1.125rem;--text-2xl:1.375rem;--text-3xl:1.625rem;--radius-sm:var(--brand-radius-sm,10px);--radius-md:var(--brand-radius-md,12px);--radius-lg:var(--brand-radius-lg,16px);--radius-xl:var(--brand-radius-xl,22px);--shadow-xs:0 1px 2px #17201e0d;--shadow-sm:0 1px 3px #17201e14, 0 1px 2px #17201e0d;--shadow-md:0 4px 12px -2px #17201e1a, 0 2px 4px -2px #17201e0d;--shadow-lg:0 12px 32px -8px #17201e2e, 0 4px 10px -4px #17201e14;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-12:3rem;--duration-fast:.15s;--duration-base:.2s;--duration-slow:.3s;--ease:cubic-bezier(.16, 1, .3, 1);--z-header:30;--z-backdrop:39;--z-drawer:40;--z-modal:50;--z-toast:60;--z-command:70}html[data-theme=dark]{--color-background:#0f172a;--color-surface:#1e293b;--color-surface-muted:#243447;--color-surface-hover:#243447;--color-border:#ffffff1a;--color-border-strong:#fff3;--color-text:#f1f5f9;--color-text-secondary:#a7b4c7;--color-text-muted:#7c8ba1;--color-primary-light:#60a5fa29;--color-primary-soft:#3b82f624;--color-accent-soft:#f59e0b33;--shadow-sm:0 1px 3px #0006;--shadow-md:0 4px 12px -2px #00000080;--shadow-lg:0 12px 32px -8px #0009}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{font-family:var(--font-sans);font-size:var(--text-base);color:var(--color-text);background-color:var(--color-background);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5}.school-admin body,body.paper{font-family:var(--font-sans)}:where(h1,h2,h3,h4,h5,h6){color:var(--color-text);font-weight:600}a{color:var(--color-primary)}:where(a,button,input,select,textarea,[tabindex]):focus-visible{outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--radius-sm)}::selection{background:var(--color-accent-soft)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:999;background:var(--color-primary);color:#fff;border-radius:var(--radius-sm);transition:top var(--duration-fast) ease;padding:.6rem 1rem;font-weight:600;text-decoration:none;position:fixed;top:-100px;left:1rem}.skip-link:focus{top:.75rem}[x-cloak]{display:none!important}.btn,.btn-brand{font-family:var(--font-sans);font-size:var(--text-sm);color:#fff;background:var(--color-primary);border-radius:var(--radius-md);cursor:pointer;white-space:nowrap;transition:background var(--duration-fast) ease, border-color var(--duration-fast) ease, transform var(--duration-fast) ease, box-shadow var(--duration-fast) ease;border:1px solid #0000;justify-content:center;align-items:center;gap:.5rem;min-height:38px;padding:.55rem 1rem;font-weight:600;line-height:1.25rem;text-decoration:none;display:inline-flex}.btn:hover,.btn-brand:hover{background:var(--color-primary-hover);box-shadow:var(--shadow-sm);transform:translateY(-1px)}.btn:active,.btn-brand:active{transform:translateY(0)}.btn:disabled,.btn-brand:disabled{opacity:.55;cursor:not-allowed}.btn-secondary{background:var(--color-surface);color:var(--color-text);border-color:var(--color-border-strong)}.btn-secondary:hover{background:var(--color-surface-hover)}.btn-ghost{color:var(--color-text-secondary);border-color:var(--color-border);background:0 0}.btn-ghost:hover{background:var(--color-surface-hover);color:var(--color-text)}.btn-success{background:var(--color-success)}.btn-success:hover{filter:brightness(.92)}.btn-warning{background:var(--color-warning);color:#1f2937}.btn-warning:hover{filter:brightness(.94)}.btn-danger{background:var(--color-danger)}.btn-danger:hover{filter:brightness(.92)}.btn-accent{background:var(--color-accent)}.btn-accent:hover{filter:brightness(.92)}.btn-sm{font-size:var(--text-xs);min-height:32px;padding:.375rem .75rem}.btn-lg{font-size:var(--text-base);min-height:44px;padding:.7rem 1.4rem}.btn-icon{border-radius:var(--radius-md);width:38px;height:38px;color:var(--color-text-secondary);cursor:pointer;transition:background var(--duration-fast) ease, color var(--duration-fast) ease;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0;display:inline-flex}.btn-icon:hover{background:var(--color-surface-hover);color:var(--color-text)}.btn-icon svg{width:1.25rem;height:1.25rem}.badge{color:var(--color-text-secondary);background:var(--color-surface-hover);border:1px solid var(--color-border);white-space:nowrap;border-radius:999px;align-items:center;gap:.3rem;padding:.15rem .55rem;font-size:11px;font-weight:600;line-height:1.35;display:inline-flex}.badge-success{color:#15803d;background:var(--color-success-soft);border-color:#0000}.badge-warning{color:#a16207;background:var(--color-warning-soft);border-color:#0000}.badge-danger{color:#b91c1c;background:var(--color-danger-soft);border-color:#0000}.badge-info{color:#1d4ed8;background:var(--color-info-soft);border-color:#0000}.badge-accent{color:var(--color-accent);background:var(--color-accent-soft);border-color:#0000}.badge-primary{color:var(--color-primary);background:var(--color-accent-soft);border-color:#0000}html[data-theme=dark] .badge-success{color:#86efac}html[data-theme=dark] .badge-warning{color:#fde047}html[data-theme=dark] .badge-danger{color:#fca5a5}html[data-theme=dark] .badge-info{color:#93c5fd}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs);overflow:hidden}.card-pad{padding:var(--space-5)}.card-hover{transition:box-shadow var(--duration-base) ease, transform var(--duration-base) ease, border-color var(--duration-base) ease}.card-hover:hover{box-shadow:var(--shadow-md);border-color:var(--color-border-strong)}.section-title{font-size:var(--text-lg);color:var(--color-text);letter-spacing:-.01em;font-weight:700}.page-title{font-size:var(--text-2xl);color:var(--color-text);letter-spacing:-.02em;font-weight:700;line-height:1.25}.label{font-size:var(--text-sm);color:var(--color-text);margin-bottom:.35rem;font-weight:600;display:block}.label .req{color:var(--color-danger)}.input,.select,.textarea{width:100%;font-family:var(--font-sans);font-size:var(--text-base);color:var(--color-text);background:var(--color-surface);border:1.5px solid var(--color-border-strong);border-radius:var(--radius-md);transition:border-color var(--duration-fast) ease, box-shadow var(--duration-fast) ease;padding:.55rem .75rem}.input:focus,.select:focus,.textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-accent-soft);outline:none}.input[aria-invalid=true],.input.is-invalid{border-color:var(--color-danger)}.input::placeholder,.textarea::placeholder{color:var(--color-text-muted)}.form-hint{font-size:var(--text-xs);color:var(--color-text-muted);margin-top:.3rem}.form-error{font-size:var(--text-xs);color:var(--color-danger);margin-top:.3rem;font-weight:500}.alert{border-radius:var(--radius-md);border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);font-size:var(--text-sm);align-items:flex-start;gap:.65rem;padding:.85rem 1rem;display:flex}.alert-success{background:var(--color-success-soft);color:#15803d;border-color:#0000}.alert-warning{background:var(--color-warning-soft);color:#a16207;border-color:#0000}.alert-danger{background:var(--color-danger-soft);color:#b91c1c;border-color:#0000}.alert-info{background:var(--color-info-soft);color:#1d4ed8;border-color:#0000}html[data-theme=dark] .alert-success{color:#86efac}html[data-theme=dark] .alert-warning{color:#fde047}html[data-theme=dark] .alert-danger{color:#fca5a5}html[data-theme=dark] .alert-info{color:#93c5fd}.toast-stack{z-index:var(--z-toast);flex-direction:column;gap:.6rem;width:min(360px,100vw - 2rem);display:flex;position:fixed;bottom:1.25rem;right:1.25rem}.toast{border-radius:var(--radius-md);background:var(--color-surface);border:1px solid var(--color-border);box-shadow:var(--shadow-lg);font-size:var(--text-sm);color:var(--color-text);animation:toast-in var(--duration-slow) var(--ease);align-items:flex-start;gap:.65rem;padding:.85rem 1rem;display:flex}.toast-success{border-left:4px solid var(--color-success)}.toast-warning{border-left:4px solid var(--color-warning)}.toast-danger{border-left:4px solid var(--color-danger)}.toast-info{border-left:4px solid var(--color-info)}@keyframes toast-in{0%{opacity:0;transform:translate(1.5rem)}to{opacity:1;transform:translate(0)}}.avatar{background:var(--color-accent-soft);width:2.5rem;height:2.5rem;color:var(--color-primary);font-weight:700;font-size:var(--text-sm);border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.avatar-sm{width:2rem;height:2rem;font-size:var(--text-xs)}.avatar-lg{width:3.25rem;height:3.25rem;font-size:var(--text-lg)}.dropdown-panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);min-width:14rem;box-shadow:var(--shadow-lg);z-index:var(--z-modal);animation:pop-in var(--duration-fast) var(--ease);margin-top:.4rem;position:absolute;overflow:hidden}.dropdown-item{width:100%;font-size:var(--text-sm);color:var(--color-text);text-align:left;cursor:pointer;transition:background var(--duration-fast) ease;background:0 0;border:none;align-items:center;gap:.6rem;padding:.55rem .85rem;text-decoration:none;display:flex}.dropdown-item:hover{background:var(--color-surface-hover)}.dropdown-item.danger{color:var(--color-danger)}.dropdown-divider{background:var(--color-border);height:1px;margin:.35rem 0}.dropdown-label{letter-spacing:.04em;text-transform:uppercase;color:var(--color-text-muted);padding:.4rem .85rem;font-size:11px;font-weight:600}@keyframes pop-in{0%{opacity:0;transform:translateY(-4px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.modal-backdrop{z-index:var(--z-modal);animation:fade-in var(--duration-fast) ease;background:#0b1d3a99;justify-content:center;align-items:flex-start;padding:1rem;display:flex;position:fixed;inset:0;overflow-y:auto}.modal-panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);width:100%;max-width:32rem;box-shadow:var(--shadow-lg);animation:modal-in var(--duration-base) var(--ease);margin:3rem auto}.modal-header{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:center;padding:1rem 1.25rem;display:flex}.modal-body{padding:1.25rem}.modal-footer{border-top:1px solid var(--color-border);justify-content:flex-end;gap:.6rem;padding:.9rem 1.25rem;display:flex}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-in{0%{opacity:0;transform:translateY(-10px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}.empty-state{text-align:center;color:var(--color-text-secondary);flex-direction:column;justify-content:center;align-items:center;padding:3rem 1.5rem;display:flex}.empty-state .empty-icon{background:var(--color-accent-soft);width:3.5rem;height:3.5rem;color:var(--color-primary);border-radius:999px;justify-content:center;align-items:center;margin-bottom:1rem;display:flex}.empty-state .empty-title{font-size:var(--text-lg);color:var(--color-text);margin-bottom:.3rem;font-weight:700}.empty-state .empty-desc{font-size:var(--text-sm);max-width:24rem}.skeleton{background:var(--color-surface-hover);border-radius:var(--radius-sm);position:relative;overflow:hidden}.skeleton:after{content:"";background:linear-gradient(90deg,#0000,#ffffff8c,#0000);animation:1.4s infinite shimmer;position:absolute;inset:0;transform:translate(-100%)}@keyframes shimmer{to{transform:translate(100%)}}html[data-theme=dark] .skeleton:after{background:linear-gradient(90deg,#0000,#ffffff14,#0000)}.spinner{border:2px solid var(--color-border-strong);border-top-color:var(--color-primary);border-radius:50%;width:1.25rem;height:1.25rem;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.table-elite{border-collapse:collapse;width:100%;font-family:var(--font-sans);font-size:var(--text-sm)}.table-elite thead th{letter-spacing:.04em;text-transform:uppercase;color:var(--color-text-secondary);background:var(--c-table-header,var(--color-surface-hover));border-bottom:1px solid var(--color-border-strong);text-align:left;white-space:nowrap;padding:.65rem .85rem;font-size:11px;font-weight:600}.table-elite tbody td{border-bottom:1px solid var(--color-border);color:var(--color-text);vertical-align:middle;padding:.7rem .85rem}.table-elite tbody tr{transition:background var(--duration-fast) ease}.table-elite tbody tr:hover{background:var(--color-surface-hover)}.table-scroll{-webkit-overflow-scrolling:touch;width:100%;overflow-x:auto}.table-scroll>table{max-width:none}.pagination{flex-wrap:wrap;align-items:center;gap:.3rem;display:flex}.pagination a,.pagination span{min-width:2.25rem;height:2.25rem;font-size:var(--text-sm);border-radius:var(--radius-sm);border:1px solid var(--color-border);color:var(--color-text-secondary);transition:background var(--duration-fast) ease, color var(--duration-fast) ease;justify-content:center;align-items:center;padding:0 .5rem;text-decoration:none;display:inline-flex}.pagination a:hover{background:var(--color-surface-hover);color:var(--color-text)}.pagination .current,.pagination [aria-current=page]{background:var(--color-primary);color:#fff;border-color:var(--color-primary);font-weight:600}.pagination .disabled{opacity:.45;pointer-events:none}.app-sidebar{transition:width var(--duration-base) var(--ease)}.app-sidebar.collapsed{width:4.25rem!important}.app-sidebar.collapsed .sidebar-brand-text,.app-sidebar.collapsed .sidebar-search,.app-sidebar.collapsed .sidebar-section-body,.app-sidebar.collapsed .sidebar-section-header span,.app-sidebar.collapsed .sidebar-footer-text{display:none!important}.app-sidebar.collapsed .sidebar-section-header{justify-content:center}.app-sidebar.collapsed .sidebar-section-header .chev{display:none}.sidebar-link{font-family:var(--font-sans);letter-spacing:0;text-transform:none;color:color-mix(in srgb, var(--color-sidebar-text) 82%, transparent);border-radius:var(--radius-sm);transition:background var(--duration-fast) ease, color var(--duration-fast) ease;border-left:3px solid #0000;align-items:center;gap:.75rem;padding:.55rem .9rem;font-size:14px;font-weight:500;display:flex}.sidebar-link:hover{color:var(--color-sidebar-text);background:color-mix(in srgb, var(--color-sidebar-text) 10%, transparent)}.sidebar-link.active{color:var(--color-sidebar-text);background:color-mix(in srgb, var(--color-sidebar-text) 14%, transparent);border-left-color:var(--color-accent)}.sidebar-section{border-bottom:1px solid color-mix(in srgb, var(--color-sidebar-text) 8%, transparent)}.sidebar-badge{background:var(--color-accent);min-width:1.25rem;height:1.25rem;color:var(--color-primary);border-radius:999px;justify-content:center;align-items:center;margin-left:auto;padding:0 .35rem;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.sidebar-section-header{width:100%;font-family:var(--font-sans);letter-spacing:.05em;text-transform:uppercase;color:color-mix(in srgb, var(--color-sidebar-text) 55%, transparent);cursor:pointer;text-align:left;transition:color var(--duration-fast) ease, background var(--duration-fast) ease;background:0 0;border:none;justify-content:space-between;align-items:center;gap:.4rem;padding:.55rem .85rem;font-size:11px;font-weight:600;display:flex}.sidebar-section-header:hover{color:color-mix(in srgb, var(--color-sidebar-text) 92%, transparent);background:color-mix(in srgb, var(--color-sidebar-text) 6%, transparent)}.sidebar-section-body{padding:.15rem 0 .5rem;overflow:hidden}.sidebar-sub-link{font-family:var(--font-sans);letter-spacing:0;text-transform:none;color:color-mix(in srgb, var(--color-sidebar-text) 68%, transparent);transition:background var(--duration-fast) ease, color var(--duration-fast) ease;border-left:3px solid #0000;align-items:center;gap:.5rem;padding:.4rem .85rem .4rem 2.35rem;font-size:13px;font-weight:500;display:flex}.sidebar-sub-link:hover{color:var(--color-sidebar-text);background:color-mix(in srgb, var(--color-sidebar-text) 8%, transparent)}.sidebar-sub-link.active{color:var(--color-accent);background:color-mix(in srgb, var(--color-sidebar-text) 10%, transparent);border-left-color:var(--color-accent)}.app-sidebar [class*=text-white]{color:color-mix(in srgb, var(--color-sidebar-text) 85%, transparent)!important}.fav-toggle{color:color-mix(in srgb, var(--color-sidebar-text) 40%, transparent);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;margin-left:auto;padding:3px;display:none}.fav-toggle:hover{color:var(--color-accent)}.sidebar-link:hover .fav-toggle,.sidebar-sub-link:hover .fav-toggle{display:inline-flex}.fav-toggle.on{color:var(--color-accent);display:inline-flex}.app-sidebar.collapsed .sidebar-link,.app-sidebar.collapsed .sidebar-sub-link{justify-content:center;padding:.55rem}.app-sidebar.collapsed .sidebar-link>:not(svg,.sidebar-icon),.app-sidebar.collapsed .sidebar-sub-link>:not(svg,.sidebar-icon){display:none}.topbar{background:var(--color-surface);border-bottom:1px solid var(--color-border)}.crumb{font-size:var(--text-sm);color:var(--color-text-muted);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.crumb a{color:var(--color-text-secondary);text-decoration:none}.crumb a:hover{color:var(--color-text)}.crumb .sep{color:var(--color-text-muted);margin:0 .35rem}.crumb .current{color:var(--color-text);font-weight:600}.command-overlay{z-index:var(--z-command);background:#0b1d3ab3;justify-content:center;align-items:flex-start;padding:12vh 1rem 1rem;display:flex;position:fixed;inset:0}.command-panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);width:100%;max-width:40rem;box-shadow:var(--shadow-lg);animation:modal-in var(--duration-base) var(--ease);overflow:hidden}.command-item{width:100%;font-size:var(--text-sm);color:var(--color-text);text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:.75rem;padding:.6rem 1rem;text-decoration:none;display:flex}.command-item:hover,.command-item.active{background:var(--color-accent-soft)}.command-item .cmd-kbd{color:var(--color-text-muted);border:1px solid var(--color-border);border-radius:4px;margin-left:auto;padding:.05rem .35rem;font-size:11px}.notif-item{border-bottom:1px solid var(--color-border);color:var(--color-text);transition:background var(--duration-fast) ease;gap:.65rem;padding:.7rem .85rem;text-decoration:none;display:flex}.notif-item:hover{background:var(--color-surface-hover)}.notif-item.unread{background:var(--color-accent-soft)}.notif-dot{background:var(--color-primary);border-radius:999px;flex-shrink:0;width:8px;height:8px;margin-top:.45rem}.notif-item.read .notif-dot{background:var(--color-border-strong)}@media (width<=1023px){.app-sidebar.collapsed{width:16rem!important}.page-title{font-size:1.375rem}}@media (width<=768px){.lp-section{padding-top:3rem;padding-bottom:3rem}}@media (width<=640px){.grid{grid-template-columns:1fr!important}.page-title{font-size:1.25rem}.section-title{font-size:1rem}.btn,.btn-icon,.btn-sm,.dropdown-item,[role=tab],.sidebar-section-header,.sidebar-link,.sidebar-sub-link{min-height:44px}.input,.select,.textarea{min-height:44px;font-size:16px}.card-pad{padding:1rem}.table-elite thead th,.table-elite tbody td{padding:.55rem .6rem;font-size:12.5px}.modal-backdrop{align-items:flex-end;padding:.75rem}.modal-panel{border-radius:var(--radius-lg) var(--radius-lg) 0 0;max-height:92vh;margin:0 auto}.dropdown-panel{width:min(22rem,100vw - 2rem)}.toast-stack{width:auto;left:1rem;right:1rem}.app-sidebar{width:84vw!important;max-width:320px!important}.topbar .lp-container{gap:.5rem}}@media (width<=400px){.page-title{font-size:1.15rem}.btn{padding:.5rem .85rem;font-size:.8125rem}.card-pad{padding:.85rem}}@media (pointer:coarse){.dropdown-item,.command-item,.sidebar-sub-link{min-height:44px}}@media print{.no-print,.app-sidebar,.topbar,.sidebar-backdrop,.sidebar-mobile-drawer,.toast-stack,.command-overlay,header,aside,nav{display:none!important}main{padding:0!important;overflow:visible!important}body{color:#000!important;background:#fff!important}.card,.elite-card{box-shadow:none!important;border:1px solid #ddd!important}}
