:root{--bg: #f3f5f8;--panel: #ffffff;--panel-2: #edf0f4;--text: #16202e;--muted: #5a6573;--accent: #1746c7;--accent-2: #123aa6;--on-accent: #ffffff;--danger: #dc2626;--warn: #b45309;--ok: #15803d;--border: #d6dce4;color-scheme:light;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}:root[data-theme=academy-blue]{--bg: #ffffff;--panel: #ffffff;--panel-2: #f0f4ff;--text: #0f1b33;--muted: #54648a;--accent: #1e5eff;--accent-2: #1a50db;--on-accent: #ffffff;--danger: #dc2626;--warn: #b45309;--ok: #15803d;--border: #d2ddf7;color-scheme:light}:root[data-theme=slate-dark]{--bg: #07111f;--panel: #0e1b2d;--panel-2: #16263b;--text: #e2e8f0;--muted: #93a4bc;--accent: #3b82f6;--accent-2: #2563eb;--on-accent: #ffffff;--danger: #f87171;--warn: #fbbf24;--ok: #4ade80;--border: #21344c;color-scheme:dark}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text)}a{color:var(--accent)}button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--panel-2);color:var(--text);padding:.5rem .9rem;border-radius:10px}button.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:600}button.danger{background:transparent;border-color:var(--danger);color:var(--danger)}button:disabled{opacity:.5;cursor:not-allowed}input,select,textarea{font:inherit;background:var(--panel-2);color:var(--text);border:1px solid var(--border);border-radius:10px;padding:.6rem .75rem;width:100%;transition:border-color .15s ease,box-shadow .15s ease}input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}textarea{resize:vertical}h2{margin:0 0 1rem;font-size:1.05rem}.stack{display:flex;flex-wrap:wrap;gap:.5rem}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem;margin-top:1rem}.form-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.form-grid button{width:fit-content}.setup-grid{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:1rem;align-items:start}.review-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:1rem;align-items:start}.detail-panel{position:sticky;top:1rem}.detail-list,.flag-list{display:grid;gap:.65rem}.detail-list>div,.flag-list>div{display:grid;gap:.15rem}.detail-list span,.flag-list span{color:var(--muted);font-size:.86rem;overflow-wrap:anywhere}.hash{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.cluster-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:.75rem}.cluster-card{display:grid;gap:.55rem;text-align:left;align-content:start;min-height:112px;border-radius:8px;background:var(--panel-2)}.cluster-card.active{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)}.cluster-card span{display:grid;gap:.15rem}.cluster-card small{color:var(--muted);overflow-wrap:anywhere}.user-hub{display:grid;gap:1rem}.user-hub-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.user-hub-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,340px);gap:1rem;align-items:start}.map-editor{position:relative;min-height:280px;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:linear-gradient(90deg,rgba(148,163,184,.12) 1px,transparent 1px),linear-gradient(rgba(148,163,184,.12) 1px,transparent 1px),#132033;background-size:28px 28px}.map-dot{position:absolute;left:50%;top:50%;width:12px;height:12px;border-radius:999px;background:var(--accent);transform:translate(-50%,-50%)}.map-ring{position:absolute;left:50%;top:50%;width:min(54%,220px);aspect-ratio:1;border:2px solid var(--accent);border-radius:999px;transform:translate(-50%,-50%);background:#38bdf814}.map-label{position:absolute;left:1rem;bottom:1rem;color:var(--muted);font-size:.9rem}.card{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:1.4rem;box-shadow:0 10px 30px #0f1b330f}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:.6rem .5rem;border-bottom:1px solid var(--border);font-size:.9rem}th{color:var(--muted);font-weight:600}.badge{display:inline-block;padding:.15rem .5rem;border-radius:999px;font-size:.75rem;font-weight:600}.badge.ok{background:color-mix(in srgb,var(--ok) 16%,transparent);color:var(--ok)}.badge.warn{background:color-mix(in srgb,var(--warn) 16%,transparent);color:var(--warn)}.badge.risk{background:color-mix(in srgb,var(--danger) 16%,transparent);color:var(--danger)}.badge.muted{background:color-mix(in srgb,var(--muted) 16%,transparent);color:var(--muted)}.teacher-shell{min-height:100vh;background:var(--bg)}.teacher-topbar{min-height:64px;padding:.75rem 1rem;border-bottom:1px solid var(--border);background:var(--panel);display:flex;align-items:center;justify-content:space-between;gap:1rem}.teacher-topbar div{display:grid;gap:.1rem}.teacher-topbar span,.teacher-meta,.teacher-note{color:var(--muted);font-size:.88rem}.teacher-main{max-width:760px;margin:0 auto;padding:1rem}.teacher-panel{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:1.25rem;box-shadow:0 10px 30px #0f1b330f}.teacher-heading{display:flex;justify-content:space-between;gap:1rem;align-items:start}.teacher-heading h1{margin:0;font-size:1.35rem}.teacher-meta{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:.45rem}.teacher-note{margin-top:.75rem;padding:.65rem .75rem;border:1px solid var(--border);border-radius:8px;background:var(--panel-2)}.teacher-note.warn{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 35%,var(--border))}.teacher-form{display:grid;gap:.9rem;margin-top:1rem}.teacher-form label{display:grid;gap:.35rem;color:var(--muted);font-size:.88rem}.teacher-form label>input,.teacher-form label>select,.teacher-form label>textarea{color:var(--text)}.teacher-row,.teacher-class-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.teacher-class-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.teacher-wide{grid-column:1 / -1}.scan-box{display:grid;gap:.65rem}.scan-box video{width:100%;min-height:180px;aspect-ratio:16 / 9;border-radius:8px;border:1px solid var(--border);background:#111827;object-fit:cover}.teacher-result{border-radius:8px;padding:.75rem;font-weight:600}.teacher-result.ok{color:var(--ok);background:color-mix(in srgb,var(--ok) 12%,transparent)}.teacher-result.danger{color:var(--danger);background:color-mix(in srgb,var(--danger) 12%,transparent)}.teacher-inbox{margin-top:1rem}.teacher-thread-list{display:grid;gap:.9rem;margin-top:1rem}.teacher-thread{display:grid;gap:.75rem;padding:.9rem;border:1px solid var(--border);border-radius:8px;background:var(--panel-2)}.teacher-thread>div:first-child,.teacher-replies>div{display:grid;gap:.15rem}.teacher-thread span,.teacher-thread p{color:var(--muted);margin:0}.teacher-replies{display:grid;gap:.5rem;padding-left:.75rem;border-left:2px solid var(--border)}.report-filters{display:grid;grid-template-columns:repeat(4,minmax(0,1fr)) auto;gap:.75rem;align-items:end}.report-filters label{display:grid;gap:.35rem;color:var(--muted);font-size:.88rem}.report-metrics{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.75rem}.metric-card{display:grid;gap:.25rem}.metric-card span{color:var(--muted);font-size:.86rem}.metric-card strong{font-size:1.45rem}.report-grid{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:1rem}.report-status-list,.report-day-list{display:grid;gap:.55rem}.report-status-list>div,.report-day-list>div{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.45rem 0;border-bottom:1px solid var(--border)}.qr-print{background:#fff;color:#0f172a;border-radius:12px;padding:2.5rem 2rem;display:grid;justify-items:center;gap:1rem;text-align:center}.qr-print .qr-school{font-size:1.1rem;color:#475569;letter-spacing:.04em;text-transform:uppercase}.qr-print .qr-campus{font-size:2.2rem;font-weight:800;margin:0}.qr-print .qr-instruction{font-size:1.1rem;color:#334155;max-width:30rem}.qr-print .qr-meta{font-size:.8rem;color:#94a3b8}@media(max-width:900px){.setup-grid,.form-grid,.form-grid.three,.teacher-row,.teacher-class-grid,.report-filters,.report-metrics,.report-grid,.user-hub-grid,.user-hub-split{grid-template-columns:1fr}}@media print{body *{visibility:hidden}.qr-print,.qr-print *{visibility:visible}.qr-print{position:absolute;inset:0;margin:auto;width:100%;box-shadow:none;border-radius:0}}@media(min-width:1180px){.review-layout{grid-template-columns:minmax(0,1fr) 330px}}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:1.5rem;background:var(--bg)}.auth-card{width:100%;max-width:400px;background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:2.1rem 1.8rem;box-shadow:0 18px 50px #0f1b331f;display:grid;gap:.85rem}.auth-logo-img{justify-self:center;width:72px;height:72px;object-fit:contain;margin-bottom:.4rem}.auth-title{margin:0;text-align:center;font-size:1.6rem;font-weight:800;letter-spacing:-.01em}.auth-sub{margin:0 0 .55rem;text-align:center;color:var(--muted);font-size:.92rem}.auth-field{display:grid;gap:.4rem}.auth-label{font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.auth-input{position:relative;display:flex;align-items:center}.auth-input-icon{position:absolute;left:.8rem;display:inline-flex;color:var(--muted);pointer-events:none}.auth-input input{padding-left:2.5rem;height:46px}.auth-input input[type=password],.auth-input input[type=text]{padding-right:2.7rem}.pw-toggle{position:absolute;right:.4rem;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;padding:.45rem;color:var(--muted);border-radius:8px}.pw-toggle:hover{color:var(--text);background:var(--panel-2)}.auth-error{color:var(--danger);font-size:.85rem;margin-top:-.1rem}.auth-submit{width:100%;height:48px;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;font-size:.98rem;border-radius:10px;margin-top:.35rem}.auth-footer{text-align:center;color:var(--muted);font-size:.78rem;margin-top:.4rem}.auth-controls{display:flex;gap:.5rem;justify-content:center;margin-top:.1rem}.auth-controls select{width:auto;font-size:.82rem;padding:.4rem .55rem}.admin-shell{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh}.admin-topbar{display:none}.admin-sidebar{background:var(--panel);border-right:1px solid var(--border);padding:1.25rem 1rem;display:flex;flex-direction:column;gap:.4rem}.admin-brand{font-weight:700;font-size:1.05rem;margin-bottom:1rem}.admin-brand span{display:block;color:var(--muted);font-weight:400;font-size:.8rem}.nav-link{display:block;padding:.6rem .9rem;border-radius:8px;text-decoration:none;color:var(--text);font-weight:400}.nav-link.active{background:var(--accent);color:var(--on-accent);font-weight:600}.nav-section{margin-top:.8rem;padding-top:.6rem;border-top:1px solid var(--border);color:var(--muted);font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.school-switcher{display:grid;gap:.25rem;margin-bottom:.6rem;padding-bottom:.6rem;border-bottom:1px solid var(--border)}.school-switcher label{color:var(--muted);font-size:.7rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase}.school-switcher select{font-size:.88rem;padding:.45rem .55rem}.admin-foot{margin-top:auto;padding-top:1rem;color:var(--muted);font-size:.85rem}.admin-main{padding:1.75rem 2rem;max-width:1100px;min-width:0;width:100%}.admin-overlay{display:none}@media(max-width:1100px){.admin-shell{grid-template-columns:210px minmax(0,1fr)}.admin-main{padding:1.5rem}}@media(max-width:900px){.admin-shell{grid-template-columns:1fr}.admin-topbar{display:flex;align-items:center;gap:.75rem;padding:.6rem .9rem;background:var(--panel);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:30}.admin-burger{font-size:1.25rem;line-height:1;padding:.35rem .6rem}.admin-topbar-title{font-weight:700}.admin-sidebar{position:fixed;top:0;left:0;bottom:0;width:264px;max-width:82vw;transform:translate(-100%);transition:transform .2s ease;z-index:40;overflow-y:auto}.admin-sidebar.open{transform:translate(0);box-shadow:0 0 40px #0000004d}.admin-overlay{display:block;position:fixed;inset:0;background:#00000073;z-index:35}.admin-main{padding:1rem;max-width:100%}.card{overflow-x:auto}}
