:root{--wandr-navy:#12202f;--wandr-slate:#1f2f44;--wandr-cyan:#2ec4d6;--wandr-blue:#2bb5e8;--wandr-violet:#7a5cf0;--wandr-gradient:linear-gradient(135deg, var(--wandr-blue), var(--wandr-violet));--wandr-mark-flat:#5a7ff2;--surface-page:#f4f6f8;--surface-card:#fff;--border-subtle:#dde3ea;--text-primary:#1f2f44;--text-muted:#3c4b5e;--state-active-bg:#d6f2f7;--state-active-fg:#0b4a57;--state-active-dot:#2ec4d6;--state-overdue-bg:#fdebc8;--state-overdue-fg:#6b4400;--state-overdue-dot:#f5a524;--state-returned-bg:#e3e8ee;--state-returned-fg:#2b394b;--state-returned-dot:#6b7c93;--font-display:"Outfit", system-ui, sans-serif;--font-ui:"Manrope", system-ui, sans-serif}@media (prefers-color-scheme:dark){:root{--surface-page:#12202f;--surface-card:#1b2d42;--border-subtle:#2a3f57;--text-primary:#fff;--text-muted:#b9c6d6;--state-active-bg:#123c47;--state-active-fg:#bdeff6;--state-overdue-bg:#4a3510;--state-overdue-fg:#fbdda0;--state-returned-bg:#2a3f57;--state-returned-fg:#d5dee8}}body{font-family:var(--font-ui);background:var(--surface-page);color:var(--text-primary);margin:0}h1{font-family:var(--font-display)}.layout{max-width:40rem;margin:0 auto;padding:1rem}.layout nav{gap:1rem;margin-bottom:1rem;display:flex}.layout nav a{color:var(--text-muted)}.signin{background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:12px;gap:.75rem;padding:1.25rem;display:grid}.signin label{font-weight:600}.signin input{font:inherit;border:1px solid var(--border-subtle);background:var(--surface-page);color:var(--text-primary);border-radius:8px;padding:.75rem}.signin button{font:inherit;background:var(--wandr-gradient);color:#fff;cursor:pointer;border:0;border-radius:8px;padding:.75rem 1rem;font-weight:600}.signin button:disabled{opacity:.6;cursor:default}.signin-note{color:var(--text-muted)}.signin-error{background:var(--state-overdue-bg);color:var(--state-overdue-fg);border-radius:8px;padding:.75rem}.pupil-shell{box-sizing:border-box;color:#1f2f44;background:#f4f6f8;flex-direction:column;gap:24px;max-width:440px;min-height:100dvh;margin:auto;padding:28px 24px 32px;display:flex}.pupil-header{justify-content:space-between;align-items:center;font-weight:700;display:flex}.wordmark{font-family:var(--font-display);letter-spacing:-.02em;font-size:36px;font-weight:500}.wordmark span{background:var(--wandr-gradient);color:#0000;-webkit-background-clip:text;background-clip:text}.pass-card{text-align:center;background:#fff;border:1px solid #dde3ea;border-radius:28px;flex-direction:column;flex:1;align-items:center;gap:20px;min-height:420px;padding:32px 28px;display:flex}.pass-badge{color:#0b4a57;background:#d6f2f7;border-radius:999px;gap:10px;padding:10px 16px;font-weight:700;display:flex}.pass-orbit{color:#2bb5e8;width:168px;height:168px;margin-top:12px}.pass-countdown{font-family:var(--font-display);letter-spacing:-.02em;font-variant-numeric:tabular-nums;font-size:clamp(44px,18vw,88px);font-weight:500;line-height:1}.pass-card p{margin:0}.pass-origin{box-sizing:border-box;text-align:left;background:#f4f6f8;border-radius:16px;gap:4px;width:100%;margin-top:auto;padding:16px 18px;display:grid}.pass-origin small{letter-spacing:.08em;font-weight:700}.pass-origin strong{font-size:20px}.pupil-shell footer{text-align:center;font-weight:600}.scan-instruction{color:#fff;background:#1f2f44;border-radius:16px;padding:18px}.pass-message{background:#fff;border-radius:16px;margin:0;padding:14px}.is-overdue .pass-badge{background:var(--state-overdue-bg);color:var(--state-overdue-fg)}.is-overdue .pass-orbit{color:var(--state-overdue-fg)}.room-qr{width:min(100%,400px);height:auto}.teacher-qr{text-align:center}.teacher-shell{box-sizing:border-box;max-width:1160px;min-height:100dvh;margin:auto;padding:24px}.teacher-shell *,.pupil-search *,.qr-fullscreen *{box-sizing:border-box}.teacher-header{flex-wrap:wrap;align-items:center;gap:24px;margin-bottom:24px;display:flex}.teacher-header .wordmark{color:var(--text-primary);margin-right:auto;font-size:32px;text-decoration:none}.teacher-header label{align-items:center;gap:12px;display:flex}.teacher-shell select,.pupil-search select,.pupil-search input{font:inherit;border:1px solid var(--border-subtle);min-height:44px;color:var(--text-primary);background:var(--surface-card);border-radius:8px;padding:10px 12px}.teacher-grid{grid-template-columns:320px minmax(0,1fr);align-items:start;gap:24px;display:grid}.teacher-live-column{gap:24px;display:grid}.teacher-button{min-height:44px;font:inherit;cursor:pointer;border-radius:8px;padding:10px 16px;font-weight:700;line-height:1.3}.teacher-button.primary{color:#fff;background:var(--wandr-gradient);border:1px solid #0000}.teacher-button.secondary{color:var(--text-primary);border:1px solid var(--border-subtle);background:var(--surface-card)}.teacher-button:disabled{opacity:.55;cursor:default}.teacher-button:hover:not(:disabled){filter:brightness(.95)}.teacher-shell :focus-visible,.pupil-search :focus-visible,.qr-fullscreen :focus-visible{outline:3px solid var(--wandr-blue);outline-offset:3px}.send-pupil{width:100%}.qr-panel{background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:18px;padding:24px}.qr-content{text-align:center;flex-direction:column;align-items:center;gap:16px;display:flex}.qr-heading{text-align:left;width:100%}.qr-heading span{color:var(--text-muted);font-size:14px}.qr-heading h2{font-family:var(--font-display);margin:4px 0 0;font-size:36px}.qr-code{aspect-ratio:1;color:#1f2f44;background:#fff;border-radius:10px;place-items:center;width:100%;padding:8px;display:grid}.qr-code .room-qr{width:100%;max-width:none}.qr-code p{padding:16px}.qr-content>p{color:var(--text-muted);margin:0;line-height:1.5}.qr-countdown{place-items:center;width:112px;height:112px;margin:6px 0 16px;display:grid;position:relative}.qr-countdown svg{fill:none;stroke-width:5px;width:100%;height:100%;position:absolute;inset:0;transform:rotate(-90deg)}.ring-track{stroke:var(--border-subtle)}.ring-progress{stroke:var(--wandr-blue);stroke-linecap:round}.qr-countdown strong{font-size:28px;font-family:var(--font-display);font-variant-numeric:tabular-nums}.qr-panel>button{width:100%}.teacher-status,.teacher-approvals{border:1px solid var(--border-subtle);background:var(--surface-card);border-radius:14px;min-width:0;padding:20px}.teacher-shell h2{margin:0 0 16px;font-size:22px}.qr-heading h2{margin:4px 0 0;font-size:36px}.section-heading{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px 16px;margin-bottom:16px;display:flex}.section-heading h2{margin:0}.section-heading small,.teacher-muted{color:var(--text-muted)}.teacher-list{margin:0;padding:0;list-style:none}.teacher-list li{border-top:1px solid var(--border-subtle)}.teacher-list li:first-child{border-top:0}.pass-row{background:var(--state-active-bg);border-radius:8px;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:12px;margin-bottom:4px;padding:16px 12px;display:grid}.pass-row.overdue{background:var(--state-overdue-bg);color:var(--state-overdue-fg)}.teacher-list strong{overflow-wrap:anywhere;line-height:1.5;display:block}.teacher-list small{margin-top:3px;line-height:1.5;display:block}.time-out{font-variant-numeric:tabular-nums}.time-out small{font-size:12px}.approval-row,.search-row{justify-content:space-between;align-items:center;gap:16px;padding:16px 0;display:flex}.approval-row>div:first-child{min-width:0}.approval-actions{flex-shrink:0;gap:8px;display:flex}.teacher-empty{color:var(--text-muted);margin:0;padding:8px 0}.teacher-message{background:var(--state-returned-bg);color:var(--state-returned-fg);border-radius:8px;padding:12px 16px;line-height:1.5}.pupil-search{border:1px solid var(--border-subtle);background:var(--surface-card);width:min(100% - 32px,480px);max-height:85dvh;color:var(--text-primary);border-radius:18px;padding:24px;overflow:auto}.pupil-search::backdrop,.qr-fullscreen::backdrop{background:#12202f99}.pupil-search header{justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px;display:flex}.pupil-search h2{margin:0;font-size:22px}.pupil-search label{gap:8px;margin-bottom:18px;font-weight:600;display:grid}.pupil-search input,.pupil-search select{width:100%}.qr-fullscreen{background:var(--surface-page);width:100vw;max-width:none;height:100dvh;max-height:none;color:var(--text-primary);border:0;margin:0;padding:24px;position:fixed;inset:0}.qr-fullscreen[open]{justify-content:center;align-items:center;display:flex}.qr-close{position:absolute;top:16px;right:16px}.qr-fullscreen .qr-content{gap:12px;width:min(65vh,560px,85vw);padding-top:44px}.qr-fullscreen .qr-heading{text-align:center}.qr-fullscreen .qr-code{width:auto;max-width:100%;max-height:60dvh}.qr-fullscreen .qr-countdown{width:64px;height:64px;margin:0}.qr-fullscreen .qr-countdown strong{font-size:20px}.duty-grid{grid-template-columns:minmax(0,3fr) minmax(0,2fr);align-items:start;gap:24px;display:grid}.duty-row{grid-template-columns:minmax(0,1fr) auto}@media (width<=760px){.duty-grid{grid-template-columns:minmax(0,1fr);gap:16px}.teacher-shell{padding:20px 16px}.teacher-header{gap:16px}.teacher-header label{width:100%}.teacher-grid{flex-direction:column;gap:16px;display:flex}.teacher-qr-column,.teacher-live-column{display:contents}.send-pupil{order:1}.qr-panel{order:2;width:100%;padding:20px}.teacher-status{order:3;width:100%}.teacher-approvals{order:4;width:100%}.qr-content{text-align:left;grid-template-columns:minmax(0,1fr) 100px;gap:12px 24px;display:grid}.qr-heading{grid-column:1/-1}.qr-code{max-width:200px}.qr-countdown{grid-area:2/2;width:100px;height:100px;margin:0}.qr-content>p{grid-column:1/-1;font-size:14px}.qr-panel>button{margin-top:16px}.teacher-status,.teacher-approvals{padding:16px 12px}.teacher-shell h2{font-size:20px}.qr-heading h2{font-size:28px}.pass-row{gap:8px;padding:12px 8px}.pass-row .teacher-button{max-width:100px;padding:10px}.teacher-list strong{font-size:15px}.approval-actions .teacher-button{padding:10px 12px}.pupil-search{border-radius:18px 18px 0 0;width:100%;max-height:90dvh;margin:auto 0 0;padding:24px 20px}.qr-fullscreen .qr-content{text-align:center;display:flex}.qr-fullscreen .qr-code{max-width:none}}@media (height<=580px) and (orientation:landscape){.qr-fullscreen .qr-content{grid-template-columns:minmax(0,1fr) 100px;width:min(75vw,620px);padding:0;display:grid}.qr-fullscreen .qr-heading,.qr-fullscreen .qr-content>p{text-align:left;grid-column:2}.qr-fullscreen .qr-code{grid-area:1/1/4;max-height:85dvh}.qr-fullscreen .qr-countdown{grid-area:2/2}}.admin-tabs{flex-wrap:wrap;gap:8px;margin-bottom:24px;display:flex}.admin-form{flex-wrap:wrap;gap:8px;margin-bottom:16px;display:flex}.admin-form input{font:inherit;border:1px solid var(--border-subtle);min-height:44px;color:var(--text-primary);background:var(--surface-card);border-radius:8px;padding:10px 12px}.admin-rules{gap:16px;max-width:640px;display:grid}.admin-rules label{gap:4px;font-weight:600;display:grid}.admin-rules input:not([type=checkbox]){font:inherit;border:1px solid var(--border-subtle);min-height:44px;color:var(--text-primary);background:var(--surface-card);border-radius:8px;padding:10px 12px}.admin-rules fieldset{border:1px solid var(--border-subtle);border-radius:8px;gap:12px;display:grid}.quiet-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.quiet-days{flex-wrap:wrap;gap:8px;display:flex}.quiet-days label{align-items:center;gap:4px;font-weight:400;display:flex}.inactive strong{color:var(--text-muted)}.admin-code{font-weight:700}.admin-tabs~section .approval-row{flex-wrap:wrap}.admin-form input,.admin-form select{flex:140px;min-width:0}.admin-tabs~section .approval-actions{flex-wrap:wrap;flex-shrink:1;justify-content:flex-start}.admin-tabs~section .approval-row>*{min-width:0;max-width:100%}.devbar{background:var(--surface-card);border-bottom:1px solid var(--border-subtle);align-items:center;gap:.75rem;padding:.5rem 1rem;font-size:.875rem;display:flex}.devbar a{color:var(--text-muted)}.devbar a[aria-current]{color:var(--text-primary);font-weight:600}.signin .dev-login{flex-wrap:wrap;gap:.5rem;display:flex}.signin .dev-login a{border:1px solid var(--border-subtle);color:var(--text-primary);border-radius:8px;padding:.5rem .75rem;text-decoration:none}
