:root{color:#162025;background:#f5f7f8;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{margin:0;min-height:100vh}button,input,select{font:inherit}button{border:0;background:#0f766e;color:#fff;height:42px;border-radius:8px;padding:0 16px;display:inline-flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;font-weight:700}button:disabled{opacity:.45;cursor:not-allowed}.spin{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}button.secondary{background:#fff;color:#314247;border:1px solid #c8d3d7}button.secondary:hover:not(:disabled){background:#eef6f4;border-color:#8bbdb5;color:#0f766e}button.icon-btn{height:32px;padding:0 10px;font-size:13px}button.danger-btn{background:#b42318}button.ghost-btn{width:36px;height:36px;padding:0;background:#eef3f2;color:#162025}input,select{width:100%;height:42px;border:1px solid #d5dde1;border-radius:8px;padding:0 12px;background:#fff;color:#162025}select[multiple]{height:92px;padding:8px}.student-shell{min-height:100vh;display:grid;place-items:center;padding:32px 20px;background:#f3f6f6}.student-access{width:min(440px,100%);display:grid;gap:22px;padding:28px;background:#fff;border:1px solid #d8e1e5;border-radius:8px;box-shadow:0 16px 45px #14232814}.access-brand{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding-bottom:18px;border-bottom:1px solid #edf1f3}.access-brand span{font-size:17px;font-weight:850}.access-brand small,.passes-heading small{color:#637277;font-weight:700}.access-heading{display:grid;gap:7px}.access-heading h1,.passes-heading h1{margin:0;font-size:27px;line-height:1.15}.access-heading p{margin:0;color:#637277;line-height:1.5}.access-form,.settings-form{width:100%;display:grid;gap:15px}.access-form input{height:48px;font-size:16px}.access-form>button:not(.text-button){height:48px;width:100%}.otp-input{letter-spacing:4px;font-weight:750}button.text-button{height:auto;min-height:32px;padding:4px;background:transparent;color:#0f766e}.student-passes{display:grid;gap:18px}.passes-heading{display:flex;align-items:end;justify-content:space-between;gap:12px}.notice{padding:12px 14px;background:#e6f4f1;border:1px solid #b8ded7;border-radius:8px;margin-bottom:14px}.danger{background:#fff1f2;border-color:#fecdd3;color:#9f1239}.pass-grid{display:grid;gap:16px;width:100%}.pass-card{border:1px solid #d8e1e5;border-radius:8px;background:#fff;overflow:hidden}.pass-card img{width:100%;display:block;aspect-ratio:2 / 3;object-fit:contain;background:#f7f9f9}.pass-card div{padding:14px;display:flex;justify-content:space-between}.pass-card button{width:calc(100% - 28px);margin:0 14px 14px}.admin-login{min-height:100vh;display:grid;place-items:center;padding:20px;background:#f3f6f6}.login-box{width:min(390px,100%);border:1px solid #d5dde1;border-radius:8px;background:#fff;padding:30px;display:grid;gap:14px;box-shadow:0 20px 60px #14232814}.login-heading{display:grid;gap:5px;margin-bottom:6px}.login-heading>span{color:#0f766e;font-size:13px;font-weight:850;text-transform:uppercase}.login-heading h1{margin:0;font-size:26px}.login-heading p{margin:0;color:#637277}.login-box>button{height:46px;margin-top:3px}.admin-shell{min-height:100vh;display:grid;grid-template-columns:248px 1fr}.mobile-menu,.mobile-close,.nav-backdrop{display:none}aside{background:#10201f;color:#fff;padding:18px;display:flex;flex-direction:column;gap:8px}.brand{display:flex;gap:10px;align-items:center;font-weight:800;margin-bottom:18px}aside button{background:transparent;justify-content:flex-start;color:#d7e7e4}aside button.active,aside button:hover{background:#1f3c39}.workspace{padding:28px;overflow:auto}header{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}header p{margin:0;color:#637277;text-transform:capitalize}header h1{margin:0;text-transform:capitalize;font-size:30px}.stack{display:grid;gap:18px}.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.event-filter{max-width:320px}.student-controls{display:grid;gap:12px;padding:14px;background:#fff;border:1px solid #d8e1e5;border-radius:8px}.student-filters{display:grid;grid-template-columns:minmax(280px,1fr) minmax(200px,300px) minmax(150px,190px);gap:10px}.search-field{height:42px;display:flex;align-items:center;gap:8px;padding:0 12px;border:1px solid #d5dde1;border-radius:8px;background:#fff;color:#637277}.search-field:focus-within{border-color:#0f766e;box-shadow:0 0 0 3px #0f766e1f}.search-field input{height:38px;padding:0;border:0;outline:0}.student-actions{justify-content:flex-end}.metric-grid{display:grid;grid-template-columns:repeat(5,minmax(130px,1fr));gap:14px}.metric,.table-wrap{background:#fff;border:1px solid #d8e1e5;border-radius:8px}.metric{padding:18px}.metric span{color:#637277}.metric strong{display:block;font-size:34px;margin-top:8px}.split{display:grid;grid-template-columns:1fr 1fr;gap:18px}.table-wrap{overflow:auto}.table-wrap h2{margin:0;padding:16px;font-size:18px;border-bottom:1px solid #e5ecef}.table-heading{padding:15px 16px;border-bottom:1px solid #e5ecef}.table-heading>div{display:flex;align-items:baseline;gap:10px}.table-heading h2{padding:0;border:0}.table-heading span,.student-identity span{color:#637277;font-size:13px}table{width:100%;border-collapse:collapse;font-size:14px}th,td{text-align:left;padding:12px 14px;border-bottom:1px solid #edf1f3;white-space:nowrap}th{color:#637277;font-weight:800;background:#fafbfb}.student-table tbody tr:hover{background:#f8fbfa}.student-identity{display:grid;gap:3px;min-width:170px}.status-pill{display:inline-flex;align-items:center;min-height:26px;padding:3px 9px;border-radius:999px;font-size:12px;font-weight:800}.status-pill.ready{color:#08745f;background:#e6f4ef}.status-pill.pending{color:#875b13;background:#fff4d6}.status-pill.used{color:#7a271a;background:#fee4e2}.status-pill.unused{color:#08745f;background:#e6f4ef}.actions-column{position:sticky;right:0;width:76px;text-align:center;background:#fff;box-shadow:-1px 0 #edf1f3;z-index:2}.actions-column:has(.action-menu){z-index:12}th.actions-column{background:#fafbfb;z-index:3}.row-actions{position:relative;display:inline-flex}button.menu-trigger{width:34px;height:34px;padding:0;background:transparent;color:#46555a}button.menu-trigger:hover{background:#e6f4f1;color:#0f766e}.action-menu{position:absolute;right:0;top:38px;z-index:20;width:200px;padding:6px;display:grid;grid-template-columns:1fr;gap:2px;border:1px solid #d5dde1;border-radius:8px;background:#fff;box-shadow:0 12px 32px #14232829}.action-menu.open-up{top:auto;bottom:38px}.action-menu button{width:100%;min-width:0;height:38px;display:flex;justify-content:flex-start;padding:0 10px;background:transparent;color:#26363b;font-size:13px;white-space:nowrap}.action-menu button:hover{background:#eef6f4}.action-menu button.danger-action{color:#b42318;border-top:1px solid #edf1f3;border-radius:0 0 6px 6px;margin-top:2px}.action-menu button.danger-action:hover{background:#fff1f0}.empty-state{height:120px;text-align:center;color:#637277}.confirm-dialog{padding:18px}.confirm-dialog p{margin:0 0 20px;line-height:1.55}.confirm-actions{justify-content:flex-end}.student-edit-form{grid-template-columns:1fr 1fr}.student-edit-form .modal-actions{grid-column:1 / -1}.form-field{display:grid;gap:7px;color:#46555a;font-size:13px;font-weight:700}.inline-form{display:grid;grid-template-columns:repeat(6,minmax(120px,1fr));gap:10px;align-items:start}.edit-form{background:#fff;border:1px solid #d8e1e5;border-radius:8px;padding:14px}.actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.actions label{height:42px;border:1px solid #d5dde1;border-radius:8px;padding:0 12px;display:inline-flex;align-items:center;gap:8px;background:#fff;cursor:pointer}.actions input{display:none}.file-picker{height:42px;border:1px solid #d5dde1;border-radius:8px;padding:0 12px;display:inline-flex;align-items:center;gap:8px;background:#fff;cursor:pointer;font-weight:800}.file-picker input{display:none}.file-picker.disabled{opacity:.55;cursor:wait}.modal-backdrop{position:fixed;inset:0;background:#0a141675;display:grid;place-items:center;padding:20px;z-index:50}.modal{width:min(920px,100%);max-height:min(760px,calc(100vh - 40px));overflow:auto;background:#fff;border-radius:8px;border:1px solid #d8e1e5;box-shadow:0 24px 80px #0e1b1f3d}.modal-header{position:sticky;top:0;background:#fff;padding:16px;border-bottom:1px solid #e5ecef;z-index:1}.modal-header h2{margin:0;font-size:20px;text-transform:none}.modal-form{display:grid;gap:14px;padding:16px}.modal-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.check-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;padding:10px;border:1px solid #d5dde1;border-radius:8px;background:#fbfcfc}.check-grid label{min-height:38px;display:flex;align-items:center;gap:8px;padding:8px;border-radius:6px;background:#fff}.check-grid input{width:16px;height:16px;padding:0;accent-color:#0f766e}.muted{color:#637277}.event-page{display:grid;gap:18px;max-width:1120px}.template-upload-panel,.event-create-panel,.events-panel{background:#fff;border:1px solid #d8e1e5;border-radius:8px}.section-heading{min-height:72px;padding:15px 18px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e5ecef}.section-heading div{display:grid;gap:3px}.section-heading span{color:#637277;font-size:12px;font-weight:700;text-transform:uppercase}.section-heading h2{margin:0;font-size:19px}.template-upload-content{padding:20px;display:flex;align-items:center;justify-content:space-between;gap:24px}.template-upload-content>div:first-child{display:grid;gap:6px}.template-upload-content p{max-width:620px;margin:0;color:#637277;font-size:13px;line-height:1.5}.template-upload-actions{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}.template-upload-actions .file-picker{max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.event-create-form{display:grid;grid-template-columns:minmax(260px,360px) 1fr;gap:22px;padding:20px;align-items:start}.event-name-field{align-self:start}.template-fieldset{min-width:0;margin:0;padding:0;border:0}.template-fieldset legend{margin-bottom:7px;color:#46555a;font-size:13px;font-weight:700}.template-options{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}.template-option{position:relative;height:112px;min-width:0;padding:8px;display:grid;grid-template-columns:74px minmax(0,1fr);gap:12px;justify-content:stretch;background:#fff;color:#26363b;border:1px solid #d5dde1;text-align:left}.template-option:hover{border-color:#8bbdb5;background:#f7fbfa}.template-option.selected{border:2px solid #0f766e;background:#f2faf8;padding:7px}.template-option img{width:74px;height:94px;object-fit:cover;object-position:center;border-radius:5px;background:#eef3f2}.template-option>span:not(.selected-mark){display:grid;align-content:center;gap:5px;min-width:0}.template-option small{color:#637277;font-weight:600}.selected-mark{position:absolute;right:8px;bottom:8px;display:inline-flex;align-items:center;gap:4px;color:#08745f;font-size:11px}.event-form-actions{grid-column:1 / -1;display:flex;justify-content:flex-end;padding-top:2px}.event-form-actions button{min-width:150px}.event-list-heading>strong{width:30px;height:30px;display:grid;place-items:center;border-radius:50%;color:#0f766e;background:#e6f4f1}.event-list{display:grid}.event-row{min-height:92px;padding:12px 18px;display:grid;grid-template-columns:56px minmax(200px,1fr) auto auto;gap:16px;align-items:center;border-bottom:1px solid #edf1f3}.event-row:last-child{border-bottom:0}.event-row>img{width:56px;height:68px;object-fit:cover;border-radius:5px;border:1px solid #e5ecef}.event-details{display:grid;gap:5px}.event-details>strong{font-size:15px}.event-details>span{color:#637277;font-size:13px}.event-toggle{min-width:126px}.scanner-page{width:min(1080px,100%);display:grid;gap:16px}.scanner-setup{width:100%;padding:16px;display:grid;grid-template-columns:minmax(190px,1fr) minmax(260px,420px) auto;gap:16px;align-items:end;background:#fff;border:1px solid #d8e1e5;border-radius:8px}.scanner-intro{display:grid;gap:4px;align-self:center}.scanner-intro span{color:#0f766e;font-size:12px;font-weight:800;text-transform:uppercase}.scanner-intro strong{font-size:18px}.scanner-setup>button{min-width:140px}.scanner-empty{min-height:340px;display:grid;place-items:center;align-content:center;gap:8px;padding:24px;color:#637277;background:#fff;border:1px dashed #bfcdd1;border-radius:8px;text-align:center}.scanner-empty h2,.scanner-empty p{margin:0}.scanner-empty h2{color:#26363b;font-size:20px}.scanner-empty-icon{width:58px;height:58px;display:grid;place-items:center;color:#0f766e;background:#e6f4ef;border-radius:50%}.scanner-layout{display:grid;grid-template-columns:minmax(320px,600px) minmax(280px,1fr);gap:16px;align-items:start}.scanner-layout.scanner-camera-only{grid-template-columns:minmax(320px,680px)}.camera-panel,.scan-panel{background:#fff;border:1px solid #d8e1e5;border-radius:8px;overflow:hidden}.panel-heading{min-height:68px;padding:13px 16px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #edf1f3}.panel-heading>div{display:grid;gap:2px}.panel-heading small{color:#637277;font-weight:700}.panel-heading h2{margin:0;font-size:18px}.live-indicator{display:inline-flex;align-items:center;gap:6px;color:#08745f;font-size:12px;font-weight:800}.live-indicator:before{content:"";width:7px;height:7px;border-radius:50%;background:#10a37f}.reader{width:100%;min-height:430px;background:#101a1c;overflow:hidden}.reader video{width:100%!important;min-height:360px;object-fit:cover}.reader>div{border:0!important}.scan-panel{min-height:300px}.scan-waiting{min-height:300px;display:grid;place-items:center;align-content:center;gap:8px;padding:24px;text-align:center;color:#637277}.scan-waiting strong{color:#26363b}.scan-result{min-height:300px;display:grid;align-content:start;gap:14px;padding:20px;border-top:4px solid #b42318}.scan-result.success{border-top-color:#10a37f}.scan-result.duplicate{border-top-color:#d89518}.result-label{color:#b42318;font-size:12px;font-weight:850;text-transform:uppercase}.scan-result.success .result-label{color:#08745f}.scan-result.duplicate .result-label{color:#875b13}.scan-result h2{margin:0;font-size:20px;line-height:1.3}.scan-result dl{margin:0;display:grid;border:1px solid #e5ecef;border-radius:8px;overflow:hidden}.scan-result dl>div{min-height:44px;padding:9px 11px;display:grid;grid-template-columns:90px 1fr;gap:10px;align-items:center;border-bottom:1px solid #edf1f3}.scan-result dl>div:last-child{border-bottom:0}.scan-result dt{color:#637277;font-size:12px;font-weight:700}.scan-result dd{margin:0;font-weight:700;overflow-wrap:anywhere}.scan-result button{width:100%}.public-pass{min-height:100vh;display:grid;place-items:center;gap:18px;padding:28px}.public-pass img{width:min(920px,100%);border-radius:8px;box-shadow:0 20px 60px #1423281f}.download-link{height:44px;padding:0 18px;border-radius:8px;background:#0f766e;color:#fff;display:inline-flex;align-items:center;gap:8px;text-decoration:none;font-weight:800}@media(max-width:900px){.admin-shell,.split,.scanner-layout{grid-template-columns:1fr}.admin-shell aside{position:fixed;inset:0 auto 0 0;z-index:42;width:min(292px,84vw);padding:18px;transform:translate(-102%);transition:transform .2s ease;box-shadow:12px 0 36px #0a141638}.admin-shell.menu-open aside{transform:translate(0)}.admin-shell aside button{width:100%;flex:0 0 auto;justify-content:flex-start;white-space:nowrap}.admin-shell .brand{margin:0 0 18px}.mobile-close{display:inline-flex;width:38px!important;height:38px;padding:0;margin-left:auto;justify-content:center!important}.mobile-menu{display:inline-flex;width:42px;height:42px;padding:0;flex:0 0 auto}.nav-backdrop{display:block;position:fixed;inset:0;z-index:41;width:100%;height:100%;padding:0;border-radius:0;background:#0812147a}.workspace>header{justify-content:flex-start;gap:12px}.metric-grid,.inline-form{grid-template-columns:1fr 1fr}.event-create-form{grid-template-columns:1fr}.template-upload-content{align-items:stretch;flex-direction:column}.template-upload-actions{justify-content:flex-start}.student-filters{grid-template-columns:1fr}.event-filter{max-width:none}.student-actions{justify-content:flex-start}.scanner-setup{grid-template-columns:1fr 1fr}.scanner-intro{grid-column:1 / -1}}@media(max-width:560px){.workspace{width:100%;padding:14px 12px 20px;overflow-x:hidden}.workspace>header{margin-bottom:16px}.workspace>header h1{font-size:25px}.metric-grid,.inline-form{grid-template-columns:1fr}.template-upload-actions{align-items:stretch;flex-direction:column}.template-upload-actions .file-picker,.template-upload-actions button{width:100%;max-width:none}.student-shell{padding:0;place-items:stretch;background:#fff}.student-access{width:100%;min-height:100vh;padding:22px 18px;border:0;box-shadow:none;align-content:start}.login-box{padding:24px 20px}.admin-login{align-items:start;padding-top:7vh}.admin-shell aside{padding:18px 14px}.admin-shell aside button{height:46px;padding:0 14px;font-size:15px}.admin-shell aside button svg{width:19px;height:19px}.admin-shell .brand{padding:0 4px}.scanner-page{gap:12px}.scanner-setup{max-width:none;padding:14px;grid-template-columns:1fr;gap:12px}.scanner-intro{grid-column:auto}.scanner-setup>button{width:100%;height:48px}.scanner-empty{min-height:260px;padding:20px}.camera-panel,.scan-panel{width:100%;min-width:0}.reader{min-height:0;aspect-ratio:1 / 1}.reader video{min-height:0;height:100%!important;aspect-ratio:1 / 1}.panel-heading{min-height:60px}.scan-panel,.scan-waiting,.scan-result{min-height:0}.scan-waiting{padding:20px}.scan-result{gap:12px;padding:16px}.scan-result h2{font-size:18px}.scan-result dl>div{grid-template-columns:76px minmax(0,1fr)}.scanner-page .modal-backdrop{align-items:end;padding:0}.scanner-page .modal{width:100%;max-height:88vh;border-radius:8px 8px 0 0;border-bottom:0}.student-controls{padding:10px}.student-actions button{flex:1 1 calc(50% - 10px);padding:0 10px}.student-edit-form{grid-template-columns:1fr}.student-edit-form .modal-actions{grid-column:auto}.event-create-form{padding:14px}.event-row{grid-template-columns:48px minmax(0,1fr) auto;gap:10px;padding:10px 12px}.event-row>img{width:48px;height:58px}.event-row .status-pill{justify-self:end}.event-toggle{grid-column:2 / -1;width:100%}}
