:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#193247;background:#eef3f7;font-synthesis:none;font-size:16px;--navy:#102b42;--ink:#193247;--muted:#62788b;--line:#dbe4ec;--accent:#f1b544;--blue:#176fa1;--danger:#a83135;--green:#157357;--surface:#fff}
*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button,a,input,select,textarea{touch-action:manipulation}button,a{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:wait;opacity:.55}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:3px solid #f1b544;outline-offset:3px}a{color:var(--blue)}button{border:0}svg{width:1.25rem;height:1.25rem;flex-shrink:0}h1,h2,h3,p{margin-top:0}h1{font-size:2rem;letter-spacing:-.04em;line-height:1.18;margin-bottom:.4rem}h2{font-size:1.125rem;letter-spacing:-.015em;margin-bottom:1.2rem}h3{font-size:1rem}p{line-height:1.6}small,.meta{font-size:.875rem;color:var(--muted);line-height:1.5}.muted{color:var(--muted)}.boot{min-height:100vh;display:flex;align-items:center;justify-content:center;gap:1rem}.brand-mark{width:2.6rem;height:2.6rem;display:inline-grid;place-items:center;border-radius:.7rem;background:var(--accent);font-weight:850;font-size:1.8rem;color:var(--navy);flex-shrink:0}.brand{display:flex;align-items:center;gap:.8rem;font-size:1.25rem;font-weight:750;letter-spacing:.06em}.brand small{display:block;font-weight:400;letter-spacing:.015em;font-size:.875rem;color:inherit;opacity:.7;margin-top:.2rem}
.login-layout{min-height:100vh;display:grid;grid-template-columns:minmax(300px,.85fr) minmax(480px,1.15fr)}.login-aside{background:var(--navy);color:white;padding:3rem;display:flex;flex-direction:column;justify-content:space-between}.login-aside h1{font-size:clamp(2.4rem,4vw,4.3rem);line-height:1.03;max-width:8em;font-weight:700;margin-top:3rem}.login-aside p{color:#b8ccd9;max-width:26rem;font-size:1.125rem}.login-caption{border-top:1px solid #365067;padding-top:1.5rem;color:#b8ccd9;font-size:.875rem;display:flex;justify-content:space-between;gap:1rem}.login-main{display:flex;align-items:center;justify-content:center;padding:3rem}.login-box{width:100%;max-width:470px}.login-box h1{font-size:2rem}.eyebrow{text-transform:uppercase;letter-spacing:.11em;font-size:.8125rem;font-weight:750;color:var(--blue);margin-bottom:1rem}.role-picker{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.5rem;margin:2rem 0}.role{background:white;padding:1rem .5rem;border:1px solid var(--line);border-radius:.8rem;display:flex;flex-direction:column;align-items:center;gap:.55rem;color:var(--muted);font-size:.875rem;font-weight:650}.role[aria-pressed=true]{border:2px solid var(--navy);color:var(--navy);padding:calc(1rem - 1px) calc(.5rem - 1px);background:#e4edf4}.role svg{width:1.5rem;height:1.5rem}.field{display:flex;flex-direction:column;gap:.45rem;margin-bottom:1rem;text-align:left}.field label{font-size:.875rem;font-weight:650}.field input,.field select,.field textarea{width:100%;padding:.8rem .85rem;border:1px solid #c4d2de;border-radius:.55rem;background:white;min-height:2.8rem;color:var(--ink)}.field textarea{resize:vertical;min-height:5rem}.field input[type=checkbox]{width:1.2rem;min-height:1.2rem;margin:0}.check-field{display:flex;gap:.7rem;align-items:center;margin:1rem 0;font-size:.9375rem}.check-field input{width:1.2rem;height:1.2rem;accent-color:var(--blue)}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 1rem}.span-two{grid-column:1/-1}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.55rem;border-radius:.55rem;padding:.75rem 1rem;font-size:.9375rem;font-weight:650;line-height:1.25;background:var(--navy);color:white;min-height:2.7rem;text-decoration:none;white-space:normal}.btn:hover{background:#1e4562}.btn.secondary{color:var(--ink);background:white;border:1px solid #c8d6e1}.btn.secondary:hover{background:#f0f5f8}.btn.soft{background:#e7eff5;color:var(--ink)}.btn.danger{background:#fceeee;color:var(--danger);border:1px solid #f3cbd0}.btn.small{font-size:.875rem;padding:.55rem .75rem;min-height:2.2rem}.btn.full{width:100%}.text-btn{color:var(--blue);background:transparent;padding:.5rem 0;font-size:.875rem;font-weight:600}.login-footer{margin-top:1.5rem;display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}.notice{padding:.85rem 1rem;border-radius:.6rem;background:#fff5db;color:#77500b;border:1px solid #efd599;font-size:.9375rem;line-height:1.5;margin:1rem 0}.notice.error{color:var(--danger);background:#fff0f1;border-color:#f0cdd1}.notice.info{background:#edf5fb;color:#285a78;border-color:#c8e0ef}.notice.success{background:#edf8f2;color:var(--green);border-color:#bbdfcf}
.shell{min-height:100vh;display:grid;grid-template-columns:245px minmax(0,1fr)}.sidebar{background:var(--navy);color:white;display:flex;flex-direction:column;position:sticky;top:0;height:100vh;z-index:20;padding:1.7rem 1rem 1rem}.sidebar .brand{padding:0 .75rem 1.8rem}.nav-caption{font-size:.75rem;text-transform:uppercase;letter-spacing:.13em;color:#93adbf;margin:1.5rem .75rem .6rem;font-weight:600}.nav-item{display:flex;align-items:center;gap:.75rem;padding:.8rem .85rem;text-decoration:none;color:#b9ccda;border-radius:.55rem;font-size:.9375rem;font-weight:500;margin:.15rem 0}.nav-item:hover{background:#1c3c55;color:white}.nav-item.active{background:#244861;color:white;box-shadow:inset 3px 0 var(--accent)}.sidebar-bottom{margin-top:auto;padding:.8rem .75rem 0;border-top:1px solid #304b60}.user-chip{display:flex;gap:.7rem;align-items:center;margin-bottom:.8rem}.user-chip .avatar{background:#395770;color:#dce9f1}.user-details{min-width:0}.user-details strong{display:block;font-size:.875rem;overflow-wrap:anywhere}.user-details small{color:#adc1d0}.sidebar .text-btn{color:#bed0dc}.main{min-width:0}.topbar{height:4.6rem;border-bottom:1px solid var(--line);background:#fff;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:0 2rem}.breadcrumbs{font-size:.875rem;color:var(--muted);display:flex;align-items:center;gap:.65rem}.breadcrumbs strong{color:var(--ink);font-weight:650}.top-actions{display:flex;align-items:center;gap:.75rem}.connection{font-size:.8125rem;font-weight:600;display:flex;align-items:center;gap:.4rem;color:var(--muted)}.connection.offline{color:#9b640b}.connection svg{width:1rem;height:1rem}.mobile-toggle{display:none;background:transparent;color:var(--ink);padding:.5rem}.content{padding:2rem;max-width:1580px;margin:auto}.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:1.75rem}.page-heading p{color:var(--muted);margin-bottom:0;font-size:.9375rem}.heading-actions{display:flex;gap:.6rem;flex-wrap:wrap;justify-content:flex-end}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem;margin:1.5rem 0}.stat{background:#fff;border:1px solid var(--line);padding:1.35rem;border-radius:.75rem;position:relative}.stat-label{font-size:.875rem;color:var(--muted);display:flex;justify-content:space-between;gap:.4rem}.stat-label svg{color:#8ca4b5}.stat-number{font-size:2.25rem;letter-spacing:-.05em;font-weight:730;margin:.6rem 0 .15rem}.stat small{font-size:.8125rem}.stat.highlight{background:var(--navy);color:white;border-color:var(--navy)}.stat.highlight .stat-label,.stat.highlight small{color:#b9cfdd}.stat.highlight .stat-label svg{color:var(--accent)}.panel{background:white;border:1px solid var(--line);border-radius:.8rem;margin-bottom:1.25rem;overflow:hidden}.panel-body{padding:1.4rem}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:1.3rem 1.4rem;border-bottom:1px solid var(--line)}.panel-head h2{margin:0}.panel-head small{display:block;margin-top:.3rem}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:1.25rem}.quick-links{display:grid;grid-template-columns:1fr 1fr;gap:.85rem}.quick-link{background:#f3f7fa;color:var(--ink);text-align:left;display:flex;flex-direction:column;gap:.6rem;padding:1.1rem;border-radius:.65rem;text-decoration:none;border:1px solid #e1eaf0;min-height:7rem}.quick-link:hover{border-color:#a3bed0;background:#eaf2f8}.quick-link svg{color:var(--blue)}.quick-link strong{font-size:.9375rem}.quick-link small{font-size:.8125rem}.empty{text-align:center;padding:3rem 1.5rem;color:var(--muted)}.empty svg{width:2.5rem;height:2.5rem;opacity:.65;margin-bottom:1rem}.empty h3{margin:.3rem 0 .5rem;color:var(--ink);font-size:1.125rem}.empty p{max-width:30rem;margin:.3rem auto 1.2rem;font-size:.9375rem}.toolbar{display:flex;align-items:end;gap:.8rem;flex-wrap:wrap;margin-bottom:1.25rem}.toolbar .field{margin-bottom:0;min-width:150px;flex:1}.toolbar .field.search{flex:2;min-width:220px}.toolbar .field label{font-size:.8125rem}.toolbar .field input,.toolbar .field select{min-height:2.7rem;padding:.65rem .75rem}.table-wrap{overflow-x:auto;width:100%}table{border-collapse:collapse;width:100%;font-size:.875rem;text-align:left}th{background:#f6f8fb;font-size:.75rem;letter-spacing:.05em;text-transform:uppercase;color:#6a8092;font-weight:700;padding:.85rem 1.1rem;white-space:nowrap;border-bottom:1px solid var(--line)}td{padding:1rem 1.1rem;border-bottom:1px solid #e9eef3;vertical-align:middle;line-height:1.45}tr:last-child td{border-bottom:0}tbody tr:hover{background:#f8fbfd}.person{display:flex;gap:.7rem;align-items:center}.person strong{font-size:.9375rem;font-weight:650;display:block}.person small{display:block;font-size:.8125rem;margin-top:.12rem}.avatar{width:2.4rem;height:2.4rem;border-radius:.6rem;background:#e4edf4;color:#476780;display:inline-flex;align-items:center;justify-content:center;font-weight:700;flex-shrink:0;font-size:.875rem;object-fit:cover}.badge{display:inline-flex;align-items:center;gap:.3rem;border-radius:.35rem;font-size:.75rem;font-weight:650;line-height:1.4;padding:.25rem .5rem;white-space:nowrap;background:#edf1f5;color:#607789}.badge.green{background:#e8f6ee;color:#257154}.badge.amber{background:#fff1d2;color:#906510}.badge.red{background:#fcebed;color:#a64047}.badge.blue{background:#e8f2fb;color:#2c7099}.row-actions{display:flex;gap:.35rem;justify-content:flex-end}.icon-btn{padding:.5rem;background:transparent;color:#6b8395;border-radius:.45rem;display:inline-flex}.icon-btn:hover{color:var(--ink);background:#e9f0f6}.icon-btn.danger:hover{color:var(--danger);background:#fcebed}.table-footer{padding:.9rem 1.3rem;border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:.7rem;font-size:.8125rem;color:var(--muted)}.pager{display:flex;gap:.5rem;align-items:center}.centers-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.1rem}.center-card{background:white;border:1px solid var(--line);border-radius:.8rem;overflow:hidden}.center-card-top{padding:1.3rem;display:flex;gap:1rem;align-items:center}.center-symbol{display:grid;place-items:center;width:3rem;height:3rem;background:#e6eff6;color:var(--blue);border-radius:.7rem;flex-shrink:0}.center-symbol svg{width:1.6rem;height:1.6rem}.center-card h2{margin:0 0 .3rem;font-size:1.05rem}.center-card small{font-size:.8125rem}.center-card-metrics{display:flex;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:.9rem 1.3rem;gap:2rem;background:#f9fbfd}.center-card-metrics strong{display:block;font-size:1.3rem}.center-card-metrics small{font-size:.75rem}.center-card-actions{display:flex;flex-wrap:wrap;gap:.4rem;padding:.85rem 1rem}.code{font:600 1.2rem ui-monospace,monospace;letter-spacing:.07em;overflow-wrap:anywhere;padding:1rem;background:#edf3f7;border:1px dashed #9db4c7;border-radius:.5rem;user-select:all}.detail-list{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin:1rem 0}.detail-list dt{font-size:.8125rem;color:var(--muted);margin-bottom:.3rem}.detail-list dd{margin:0;font-size:.9375rem;font-weight:550}.photo-preview{max-width:100%;width:12rem;height:12rem;object-fit:cover;border-radius:.75rem;display:block;margin:1rem auto}.skeleton{height:10rem;display:grid;place-items:center;color:var(--muted)}.spinner{border:3px solid #dce6ed;border-top-color:var(--blue);width:1.5rem;height:1.5rem;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
dialog{border:0;padding:0;border-radius:1rem;box-shadow:0 25px 100px #0b26373d;max-width:calc(100vw - 2rem);width:580px;max-height:calc(100dvh - 2rem);color:var(--ink)}dialog::backdrop{background:#0c243b88;backdrop-filter:blur(3px)}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.4rem 1.5rem;border-bottom:1px solid var(--line)}.modal-head h2{margin:0;font-size:1.25rem}.modal-body{padding:1.5rem}.modal-actions{display:flex;gap:.7rem;justify-content:flex-end;padding:1.1rem 1.5rem;background:#f6f9fb;border-top:1px solid var(--line)}.modal-error{margin-bottom:1rem}.notifications{position:fixed;right:1.25rem;bottom:1.25rem;z-index:100;display:flex;flex-direction:column;gap:.6rem;max-width:calc(100vw - 2.5rem);width:390px;pointer-events:none}.toast{background:var(--navy);color:#fff;border:1px solid #375069;padding:1rem 1.2rem;border-radius:.75rem;box-shadow:0 8px 30px #17364c24;font-size:.9375rem;line-height:1.5;pointer-events:auto}.toast.error{background:#84343c}.toast.success{background:#185b48}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.2rem}.settings-grid h2{display:flex;gap:.6rem;align-items:center}.settings-grid p{font-size:.9375rem;color:var(--muted)}.inline-controls{display:flex;gap:.7rem;align-items:center;flex-wrap:wrap}.separator{border:0;border-top:1px solid var(--line);margin:1.5rem 0}.chip-filter{display:flex;gap:.5rem;flex-wrap:wrap}.chip-filter button{font-size:.875rem;padding:.65rem .9rem;border-radius:.5rem;background:#fff;border:1px solid #c8d6e1;color:var(--muted)}.chip-filter button.active{background:var(--navy);border-color:var(--navy);color:white}
.kiosk{min-height:100vh;background:#f1f5f8}.kiosk-header{background:var(--navy);color:white;padding:1.2rem 2rem;display:flex;align-items:center;justify-content:space-between;gap:1rem}.kiosk-header .brand small{font-size:.9375rem;letter-spacing:0}.kiosk-header .icon-btn{color:white}.kiosk-header .connection{color:#c9d8e3}.kiosk-clock{text-align:right}.kiosk-clock strong{font-variant-numeric:tabular-nums;font-size:1.5rem;display:block}.kiosk-clock small{color:#b5cbd9}.kiosk-content{max-width:1500px;margin:auto;padding:1.5rem 2rem 3rem}.kiosk-heading{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.3rem}.kiosk-heading h1{font-size:1.65rem}.kiosk-heading p{margin:0;color:var(--muted);font-size:.9375rem}.kiosk-mode{display:flex;gap:.5rem}.kiosk-mode button{padding:.8rem 1rem;border:1px solid #c2d3df;border-radius:.6rem;background:white;color:var(--ink);font-weight:600}.kiosk-mode button.active{background:var(--navy);color:white;border-color:var(--navy)}.pupil-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1rem;margin-top:1.3rem}.pupil-card{position:relative;border:2px solid #dbe5ed;border-radius:.85rem;background:white;color:var(--ink);padding:.75rem;text-align:center;min-height:230px;box-shadow:0 3px 0 #e1e9ef;transition:transform .12s,border-color .12s}.pupil-card:hover{border-color:#8cabbf;transform:translateY(-2px)}.pupil-card .pupil-photo{width:100%;height:140px;object-fit:cover;border-radius:.55rem;display:grid;place-items:center;background:#e8eff5;color:#718fa5;font-size:2.8rem;font-weight:650}.pupil-card strong{font-size:1rem;display:block;line-height:1.3;margin:.75rem 0 .4rem;overflow-wrap:anywhere}.pupil-card .pupil-flags{display:flex;justify-content:center;gap:.3rem;flex-wrap:wrap}.pupil-card.marked{border-color:#459276;background:#eff9f4;box-shadow:0 3px 0 #c7e4d5}.pupil-card.pending{border-color:#deb252;background:#fffaf0;box-shadow:0 3px 0 #e8d8b6}.mark-status{position:absolute;top:.4rem;right:.4rem;background:var(--green);color:#fff;width:1.9rem;height:1.9rem;border:3px solid white;border-radius:50%;display:grid;place-items:center}.pending .mark-status{background:#ac7714}.mark-status svg{width:1rem;height:1rem}.kiosk-bottom{display:flex;justify-content:space-between;gap:1rem;margin-top:1.5rem;color:var(--muted);font-size:.875rem}.progress-track{height:.45rem;border-radius:1rem;background:#e3edf4;overflow:hidden;margin:1rem 0}.progress-track span{display:block;height:100%;background:var(--blue)}.error-page{text-align:center;padding:4rem 1rem}.error-page p{max-width:36rem;margin:1rem auto;color:var(--muted)}.readonly{white-space:pre-wrap;overflow-wrap:anywhere;background:#f3f6f9;padding:1rem;border-radius:.6rem;font-size:.875rem;max-height:320px;overflow:auto}.pending-banner{display:flex;align-items:center;justify-content:space-between;gap:1rem;background:#fff6df;border:1px solid #ecd59e;border-radius:.65rem;padding:.85rem 1rem;font-size:.875rem;margin-bottom:1rem}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.mobile-scrim{display:none}
dialog form{display:flex;flex-direction:column;max-height:calc(100dvh - 2rem)}.modal-head,.modal-actions{flex-shrink:0}.modal-body{min-height:0;overflow:auto}
@media(min-width:1500px){.content{padding:2.5rem 3rem}.topbar{padding:0 3rem}}
@media(max-width:1100px){.shell{grid-template-columns:215px minmax(0,1fr)}.content{padding:1.5rem}.topbar{padding:0 1.5rem}.stats{grid-template-columns:1fr 1fr}.dashboard-grid{grid-template-columns:1fr}.settings-grid{grid-template-columns:1fr}.login-aside{padding:2rem}.login-main{padding:2rem}.kiosk-content{padding:1.5rem}}
@media(max-width:760px){.shell{display:block}.sidebar{position:fixed;top:0;bottom:0;left:0;max-width:85vw;width:260px;height:100dvh;transform:translateX(-100%);transition:transform .18s}.sidebar.open{transform:translateX(0)}.mobile-scrim.open{display:block;position:fixed;inset:0;background:#0c243b77;z-index:19}.mobile-toggle{display:inline-flex}.topbar{height:4.2rem;padding:0 1rem}.breadcrumbs>span{display:none}.top-actions .btn span{display:none}.content{padding:1.2rem 1rem}h1{font-size:1.7rem}.page-heading{flex-direction:column;margin-bottom:1.2rem}.heading-actions{justify-content:flex-start;width:100%}.stats{gap:.65rem}.stat{padding:1rem}.stat-number{font-size:1.9rem}.stat-label{font-size:.8125rem}.toolbar .field{min-width:130px}.table-footer{flex-wrap:wrap}.login-layout{display:block}.login-aside{padding:1.5rem;min-height:0}.login-aside h1,.login-aside>div:nth-child(2),.login-caption{display:none}.login-main{padding:2rem 1.25rem;align-items:start}.login-box h1{font-size:1.8rem}.form-grid{grid-template-columns:1fr}.span-two{grid-column:auto}.modal-body,.modal-head{padding:1.2rem}.modal-actions{padding:1rem;flex-wrap:wrap}.detail-list{grid-template-columns:1fr}.kiosk-header{padding:1rem}.kiosk-header .brand{font-size:1.05rem;letter-spacing:.03em}.kiosk-header .brand small{font-size:.75rem}.kiosk-header .brand-mark{width:2.2rem;height:2.2rem;font-size:1.5rem}.kiosk-clock strong{font-size:1.1rem}.kiosk-clock small{font-size:.75rem}.kiosk-content{padding:1rem}.kiosk-heading{flex-direction:column;align-items:stretch}.kiosk-mode{display:grid;grid-template-columns:1fr 1fr}.kiosk-mode button{font-size:.875rem;padding:.8rem .5rem}.pupil-grid{grid-template-columns:repeat(auto-fill,minmax(135px,1fr));gap:.65rem}.pupil-card{padding:.55rem;min-height:215px}.pupil-card .pupil-photo{height:125px}.pupil-card strong{font-size:.9375rem}.connection{font-size:.75rem}.notifications{bottom:.7rem;right:.7rem;max-width:calc(100vw - 1.4rem)}.quick-links{gap:.6rem}.quick-link{padding:.9rem}.kiosk-bottom{flex-wrap:wrap}.pending-banner{flex-direction:column;align-items:start}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media print{.sidebar,.topbar,.heading-actions,.toolbar,.row-actions,.notifications,.table-footer,.pending-banner{display:none!important}.shell{display:block}.content{padding:0}.panel{border:0}.table-wrap{overflow:visible}body{background:white}th,td{padding:.4rem;font-size:.75rem}.stats{grid-template-columns:repeat(4,1fr)}.stat.highlight{background:white;color:#102b42}.stat.highlight .stat-label{color:#62788b}}

.pupil-grid{grid-template-columns:repeat(auto-fill,minmax(var(--pupil-min,160px),1fr))}.pupil-card .pupil-photo{width:var(--pupil-photo,140px);height:var(--pupil-photo,140px)}.pupil-card.marked .pupil-photo{filter:grayscale(1);opacity:.6}
