:root{--wandr-teal:#155e56;--wandr-ink:#17312f;--wandr-warm-white:#f7f6f0;--wandr-mint:#d9eee4;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--surface-page:var(--wandr-warm-white);--surface-card:#fff;--surface-support:var(--wandr-mint);--border-subtle:#c9d7d1;--text-primary:var(--wandr-ink);--text-muted:#4d655f;--action-primary-bg:var(--wandr-teal);--action-primary-fg:#fff;--focus-ring:var(--wandr-teal);--overlay-backdrop:#17312f99;--state-active-bg:#dcfce7;--state-active-fg:#14532d;--state-active-dot:#15803d;--state-warning-bg:#fef3c7;--state-warning-fg:#78350f;--state-warning-dot:#b45309;--state-overdue-bg:#fee2e2;--state-overdue-fg:#991b1b;--state-overdue-dot:#dc2626;--state-returned-bg:#e6ece6;--state-returned-fg:#354b43;--state-returned-dot:#64796e;--font-display:"Outfit", system-ui, sans-serif;--font-ui:"Manrope", system-ui, sans-serif}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--surface-page:#102825;--surface-card:#193630;--border-subtle:#36534b;--text-primary:#f7f6f0;--text-muted:#b9d0c6;--surface-support:#244c40;--action-primary-bg:#d9eee4;--action-primary-fg:#17312f;--focus-ring:#a7d7c2;--state-active-bg:#143b27;--state-active-fg:#bbf7d0;--state-active-dot:#4ade80;--state-warning-bg:#422f0b;--state-warning-fg:#fde68a;--state-warning-dot:#fbbf24;--state-overdue-dot:#f87171;--state-overdue-bg:#451a1a;--state-overdue-fg:#fecaca;--state-returned-bg:#36534b;--state-returned-fg:#dae6e0}}body{line-height:1.5;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{flex-wrap:wrap;gap:.5rem;margin-bottom:1rem;display:flex}.layout nav a{box-sizing:border-box;min-width:44px;min-height:44px;color:var(--text-muted);justify-content:center;align-items:center;padding:8px;display:inline-flex}.layout :focus-visible{outline:3px solid var(--focus-ring);outline-offset:3px}.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(--action-primary-bg);min-height:44px;color:var(--action-primary-fg);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;background:var(--surface-page);max-width:440px;min-height:100dvh;color:var(--text-primary);flex-direction:column;gap:24px;margin:auto;padding:28px 24px 32px;display:flex}.pupil-header{justify-content:space-between;align-items:center;font-weight:700;display:flex}.wordmark{flex-shrink:0;align-items:center;text-decoration:none;display:inline-flex}.brand-logo{box-sizing:content-box;width:164px;height:auto;padding:10px 14px;display:block}.layout-header{margin:16px 0 24px}.layout nav a{text-transform:capitalize;border-radius:8px;text-decoration:none}.layout nav a:hover{color:var(--text-primary);background:var(--surface-support)}:root{accent-color:var(--action-primary-bg);scrollbar-color:var(--border-subtle) var(--surface-page)}::selection{background:var(--wandr-mint);color:var(--wandr-ink)}a{color:var(--text-primary);text-underline-offset:.2em}input,textarea{caret-color:var(--focus-ring)}@media (prefers-color-scheme:dark){.brand-logo{background:var(--wandr-warm-white);border-radius:10px}}@media (width<=440px){.brand-logo{width:140px;padding:8px 10px}.pupil-header{gap:12px}.pupil-header>span{font-size:14px}}.pass-card{background:var(--surface-card);border:1px solid var(--border-subtle);text-align:center;border-radius:28px;flex-direction:column;flex:1;align-items:center;gap:20px;min-height:420px;padding:32px 28px;display:flex}.pass-badge{background:var(--state-active-bg);color:var(--state-active-fg);border-radius:999px;gap:10px;padding:10px 16px;font-weight:700;display:flex}.pass-orbit{width:168px;height:168px;color:var(--wandr-teal);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;background:var(--surface-page);text-align:left;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{background:var(--action-primary-bg);color:var(--action-primary-fg);border-radius:16px;padding:18px}.pass-message{background:var(--surface-card);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:var(--action-primary-fg);background:var(--action-primary-bg);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(--focus-ring);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;width:100%;color:var(--wandr-ink);background:#fff;border-radius:10px;place-items:center;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(--action-primary-bg);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}.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:var(--overlay-backdrop)}.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{grid-template-columns:minmax(0,1fr);gap:16px;max-width:640px;display:grid}.admin-rules input:not([type=checkbox]),.admin-rules select{min-width:0;max-width:100%}.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%}.admin-rules select{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}.import-help{margin:0;line-height:1.5}.admin-rules .import-check{align-items:center;gap:8px;font-weight:400;display:flex}.import-preview{border:1px solid var(--border-subtle);background:var(--surface-card);border-radius:14px;margin:24px 0;padding:20px}.import-preview h3{margin-top:0}.import-summary{flex-wrap:wrap;gap:8px;padding:0;list-style:none;display:flex}.import-summary li{background:var(--state-returned-bg);color:var(--state-returned-fg);border-radius:8px;padding:8px 12px}.import-summary li.has-errors{background:var(--state-overdue-bg);color:var(--state-overdue-fg)}.table-scroll{max-width:100%;margin-bottom:16px;overflow-x:auto}.admin-table{border-collapse:collapse;width:100%;font-size:14px}.admin-table th,.admin-table td{text-align:left;border-top:1px solid var(--border-subtle);vertical-align:top;overflow-wrap:anywhere;padding:8px}.class-members{margin:0 0 16px;line-height:1.5}.admin-form select{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}.approval-actions select{font:inherit;max-width:100%;min-height:44px}.admin-rules textarea{font:inherit;border:1px solid var(--border-subtle);color:var(--text-primary);background:var(--surface-card);resize:vertical;border-radius:8px;padding:10px 12px}.picker{gap:8px;display:grid}.picker-list{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.picker-chosen{border:1px solid var(--border-subtle);border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:8px 12px;display:flex}.conflict-filter{align-items:center;gap:8px;margin:16px 0;display:flex}.audit-filters .audit-date{flex:180px;align-items:center;gap:8px;display:flex}.admin-table code{overflow-wrap:anywhere;font-size:13px}.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}button.scan-instruction{width:100%;font:inherit;cursor:pointer;border:0;min-height:56px}.pupil-shell :focus-visible,.pupil-scanner :focus-visible{outline:3px solid var(--focus-ring);outline-offset:3px}.pupil-scanner{box-sizing:border-box;border:1px solid var(--border-subtle);background:var(--surface-card);width:min(100% - 32px,440px);max-height:90dvh;color:var(--text-primary);border-radius:20px;padding:24px;overflow:auto}.pupil-scanner::backdrop{background:var(--overlay-backdrop)}.pupil-scanner h2{margin-top:0}.pupil-scanner video{background:var(--wandr-ink);border-radius:12px;width:100%;max-height:50dvh;display:block}.pupil-scanner p{line-height:1.5}.pupil-scanner button{width:100%}.pass-row{background:var(--state-active-bg);color:var(--state-active-fg)}.pass-row.warning{background:var(--state-warning-bg);color:var(--state-warning-fg)}.pass-row.overdue{background:var(--state-overdue-bg);color:var(--state-overdue-fg)}.pass-card{--pass-bg:var(--state-active-bg);--pass-fg:var(--state-active-fg);--pass-accent:var(--state-active-dot)}.pass-card.is-warning{--pass-bg:var(--state-warning-bg);--pass-fg:var(--state-warning-fg);--pass-accent:var(--state-warning-dot)}.pass-card.is-overdue{--pass-bg:var(--state-overdue-bg);--pass-fg:var(--state-overdue-fg);--pass-accent:var(--state-overdue-dot)}.pass-card.is-idle,.pass-card.is-unverified{--pass-bg:var(--state-returned-bg);--pass-fg:var(--state-returned-fg);--pass-accent:var(--state-returned-dot)}.pass-card .pass-badge{background:var(--pass-bg);color:var(--pass-fg)}.pass-pupil-name{overflow-wrap:anywhere;max-width:100%;margin:0;font-size:clamp(24px,7vw,32px);line-height:1.25}.pass-seal{flex-shrink:0;place-items:center;width:176px;height:176px;display:grid;position:relative}.pass-card .pass-orbit{width:100%;height:100%;color:var(--pass-accent);fill:none;stroke-width:5px;margin:0;position:absolute;inset:0}.pass-ring-track{stroke:currentColor;opacity:.16}.pass-ring-progress{stroke:currentColor;stroke-linecap:round;transition:stroke-dasharray 1s linear}.pass-hologram{background:var(--pass-bg);width:126px;height:126px;color:var(--pass-fg);border-radius:50%;place-items:center;display:grid;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px #fffc}.pass-hologram.is-live{background:var(--pass-bg);color:var(--pass-fg)}.pass-hologram.is-live:after{content:"";background:linear-gradient(110deg,#0000 40%,#ffffffbf 50%,#0000 60%);animation:4s linear infinite pass-shine;position:absolute;inset:-60%}.pass-hologram svg{fill:none;stroke:currentColor;stroke-width:7px;stroke-linecap:round;stroke-linejoin:round;z-index:1;width:80px;height:80px}.pass-live-proof{font-variant-numeric:tabular-nums;color:var(--text-muted);gap:6px;display:grid}.pass-live-proof small{font-size:12px}.pass-card .pass-countdown{color:var(--pass-fg);font-size:clamp(40px,16vw,72px)}@keyframes pass-shine{0%{transform:translate(-60%)rotate(15deg)}to{transform:translate(60%)rotate(15deg)}}@media (prefers-reduced-motion:reduce){.pass-hologram.is-live,.pass-hologram.is-live:after{animation:none}.pass-ring-progress{transition:none}}.notify-panel{background:var(--surface-card);border:1px solid var(--border-subtle);color:var(--text-primary);border-radius:12px;margin:0 0 24px}.pupil-shell .notify-panel{border-radius:16px;margin:0}.notify-panel summary{cursor:pointer;align-items:center;gap:12px;min-height:44px;padding:8px 16px;font-weight:700;display:flex}.notify-state{background:var(--state-returned-bg);color:var(--state-returned-fg);border-radius:999px;margin-left:auto;padding:4px 12px;font-size:14px}.notify-state.is-on{background:var(--state-active-bg);color:var(--state-active-fg)}.notify-state.is-blocked,.notify-state.is-not{background:var(--state-overdue-bg);color:var(--state-overdue-fg)}.notify-body{gap:12px;padding:0 16px 16px;display:grid}.notify-body p{margin:0}.notify-help{background:var(--state-overdue-bg);color:var(--state-overdue-fg);border-radius:8px;padding:12px}.notify-categories{border:1px solid var(--border-subtle);border-radius:8px;gap:8px;margin:0;padding:12px;display:grid}.notify-categories label{align-items:center;gap:10px;min-height:32px;display:flex}.notify-categories input{width:20px;height:20px}.notify-actions{flex-wrap:wrap;gap:12px;display:flex}.notify-message{font-weight:600}.notify-note{color:var(--text-muted);font-size:14px}.class-roster{background:var(--surface-card);border:1px solid var(--border-subtle);border-radius:16px;padding:20px}.class-roster .section-heading{flex-wrap:wrap;gap:12px}.class-roster select{max-width:100%;font:inherit;padding:8px}.pupil-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:12px;margin:16px 0 0;padding:0;list-style:none;display:grid}.pupil-tile{border:1px solid var(--border-subtle);background:var(--surface-card);width:100%;height:100%;color:var(--text-primary);font:inherit;cursor:pointer;border-radius:12px;flex-direction:column;align-items:center;gap:8px;padding:12px 6px;display:flex}.pupil-tile:focus-visible{outline:3px solid var(--focus-ring);outline-offset:3px}.pupil-tile strong{text-align:center;overflow-wrap:anywhere;font-size:14px}.pupil-tile small{color:var(--text-muted);text-align:center;font-size:12px}.pupil-tile:disabled{cursor:wait;opacity:.65}.pupil-avatar{box-sizing:border-box;border:4px solid var(--border-subtle);background:var(--surface-page);border-radius:50%;place-items:center;width:64px;height:64px;font-size:22px;font-weight:700;display:grid}.pupil-tile.active .pupil-avatar{border-color:var(--state-active-dot);background:var(--state-active-bg);color:var(--state-active-fg)}.pupil-tile.warning .pupil-avatar{border-color:var(--state-warning-dot);background:var(--state-warning-bg);color:var(--state-warning-fg)}.pupil-tile.overdue .pupil-avatar{border-color:var(--state-overdue-dot);background:var(--state-overdue-bg);color:var(--state-overdue-fg)}
