.page.desk{height:100dvh;max-height:100dvh;min-height:100dvh;overflow:hidden}.page.desk .topbar{flex-direction:row;flex-wrap:nowrap;flex-shrink:0;align-items:center;height:52px;min-height:52px;max-height:52px;padding:0 max(.55rem,env(safe-area-inset-right)) 0 max(.85rem,env(safe-area-inset-left));gap:.4rem;background:#101820;border-bottom:1px solid rgba(255,255,255,.08);box-shadow:none;color:#f3f6f8}.page.desk .topbar h1{display:flex;align-items:baseline;gap:.5rem;flex:1 1 auto;min-width:0;font-size:.95rem;font-weight:650;letter-spacing:-.015em;line-height:1.2;color:#f3f6f8}.page.desk .desk-hall{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.page.desk .desk-station{flex:0 0 auto;max-width:7rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9aabba;font-size:.78rem;font-weight:600;letter-spacing:.01em}.page.desk .topbar .links{flex:0 0 auto;flex-wrap:nowrap;gap:.05rem}.page.desk .topbar a,.page.desk .topbar button.linkish{display:inline-flex;align-items:center;min-height:40px;padding:0 .55rem;border-radius:6px;color:#c5d3de;font-size:.82rem;font-weight:650;letter-spacing:.01em;white-space:nowrap;text-decoration:none}.page.desk .topbar a:hover,.page.desk .topbar button.linkish:hover{color:#fff;background:#ffffff14;text-decoration:none}.page.desk .topbar a:focus,.page.desk .topbar a:focus-visible,.page.desk .topbar button.linkish:focus,.page.desk .topbar button.linkish:focus-visible{outline:none;color:#fff;background:#ffffff1a}.desk-camera{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;background:#101820;overflow:hidden}.desk-stage{position:relative;flex:1;min-height:0;overflow:hidden;background:#101820}.desk-video{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;background:#101820}.desk-overlay{pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center}.desk-frame{width:min(86vw,520px);aspect-ratio:1.4 / 1;max-height:min(58%,280px);border:3px solid #fff;border-radius:16px;box-shadow:0 0 0 9999px #08111a85,0 0 0 1px #fff6}.desk-hint{margin:.75rem .75rem 0;padding:.55rem .9rem;background:#08111ac7;border-radius:8px;color:#fff;font-weight:700;font-size:1.05rem;text-align:center}.desk-flash{pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;opacity:0;z-index:1}.desk-camera.is-capturing .desk-flash{animation:desk-flash .22s ease-out}.desk-actions{flex-shrink:0;z-index:2;display:flex;flex-direction:column;gap:.65rem;padding:.85rem 1rem max(1rem,env(safe-area-inset-bottom));background:#fff;border-top:1px solid var(--line)}.desk-actions .banner{margin:0}.desk-actions .btn{min-height:56px;font-size:1.1rem}.desk-actions .btn-primary{min-height:64px;font-size:1.2rem}.desk-panel{padding:2rem 1.25rem;max-width:560px;width:100%;margin:0 auto;flex:1;min-height:0;overflow-y:auto}.desk-panel h2{margin:0 0 .5rem;font-size:1.6rem}@keyframes desk-flash{0%{opacity:.72}to{opacity:0}}@media (prefers-reduced-motion: reduce){.desk-camera.is-capturing .desk-flash{animation:none}}:root{--bg: #f5f7fa;--surface: #ffffff;--surface-muted: #f0f3f7;--line: #d9e0e8;--panel: var(--surface);--panel-2: var(--line);--text: #17212b;--muted: #607080;--accent: #0067b8;--accent-press: #004f8d;--warn: #a45a00;--danger: #b42318;--frame: #0078d4;--radius: 12px;--tap: 48px}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:Segoe UI,-apple-system,BlinkMacSystemFont,sans-serif;font-size:16px;-webkit-tap-highlight-color:transparent}button,input,select{font:inherit}a{color:var(--accent)}.page{min-height:100dvh;display:flex;flex-direction:column}.btn{min-height:var(--tap);padding:.7rem 1rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);color:var(--text);font-weight:600;font-size:1rem;letter-spacing:.01em;cursor:pointer;transition:background .14s ease,border-color .14s ease,box-shadow .14s ease,transform .14s ease}.btn:hover:not(:disabled){border-color:#aab7c5;background:var(--surface-muted)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn:focus,.btn:focus-visible{outline:none}.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-primary:hover:not(:disabled){background:var(--accent-press);border-color:var(--accent-press);color:#fff}.btn-primary:active:not(:disabled){background:var(--accent-press);transform:translateY(1px)}.btn-danger{background:var(--danger);color:#fff;border-color:var(--danger)}.btn-danger:hover:not(:disabled){background:#8f1c14;border-color:#8f1c14;color:#fff}.btn-warn{background:var(--warn);color:#fff;border-color:var(--warn)}.btn-warn:hover:not(:disabled){background:#7a4200;border-color:#7a4200;color:#fff}.btn-block{width:100%}.field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:1.1rem}.field label{color:var(--muted);font-size:.875rem;font-weight:600}.field input,.field select,select,input:not([type=checkbox]){min-height:var(--tap);padding:.75rem 1rem;border-radius:10px;border:1px solid var(--line);background:var(--surface);color:var(--text)}.field input:focus,.field select:focus,select:focus,input:not([type=checkbox]):focus{outline:none;border-color:#aab7c5;box-shadow:none}input:-webkit-autofill,input:-webkit-autofill:hover,input:-webkit-autofill:focus{-webkit-text-fill-color:var(--text);caret-color:var(--text);box-shadow:0 0 0 1000px var(--surface) inset;transition:background-color 99999s ease-out}.password-field{position:relative}.password-field input{width:100%;padding-right:3.4rem}.password-toggle{position:absolute;top:50%;right:.25rem;transform:translateY(-50%);width:44px;height:44px;display:grid;place-items:center;padding:0;border:0;border-radius:8px;background:transparent;color:var(--muted);cursor:pointer}.password-toggle:hover{color:var(--text);background:var(--surface-muted)}.password-toggle:focus,.password-toggle:focus-visible{outline:none}.password-toggle svg{width:22px;height:22px;display:block}.banner{padding:1rem 1.1rem;border-radius:10px;background:var(--surface-muted);border:1px solid var(--line);margin:.75rem 0}.banner.error{background:#fff1f0;border-color:#f0aaa5;color:#8c1d18}.banner.ok{background:#eaf6ee;border-color:#9bd1ad;color:#176b36}.banner.warn{background:#fff5e5;border-color:#e5bc7d;color:#7a4200}.topbar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.8rem max(1rem,calc((100vw - 1200px)/2));background:#fffffff0;border-bottom:1px solid var(--line);box-shadow:0 1px 8px #17212b0a;position:relative;z-index:2}.topbar h1{margin:0;font-size:1.05rem;font-weight:650;letter-spacing:-.01em}.topbar .links{display:flex;gap:.5rem;flex-wrap:wrap}.topbar a,.topbar button.linkish{background:transparent;border:none;color:var(--accent);font-weight:600;min-height:44px;padding:.4rem .6rem;cursor:pointer;text-decoration:none}.topbar a:hover,.topbar button.linkish:hover{color:var(--accent-press);text-decoration:underline}.page.dashboard{background:#fff}.page.dashboard .topbar{flex-direction:row;flex-wrap:nowrap;flex-shrink:0;align-items:center;height:44px;min-height:44px;max-height:44px;padding:0 .55rem 0 .75rem;gap:.35rem;background:#fff;border-bottom:1px solid #333;box-shadow:none}.page.dashboard .topbar h1{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.92rem;font-weight:700;letter-spacing:0;line-height:1.2}.page.dashboard .topbar .links{flex:0 0 auto;flex-wrap:nowrap;gap:0}.page.dashboard .topbar a,.page.dashboard .topbar button.linkish{display:inline-flex;align-items:center;min-height:36px;padding:0 .45rem;font-size:.8rem;font-weight:650;white-space:nowrap}.workbook{flex:1;width:100%;min-height:0;padding:0;display:flex;flex-direction:column;gap:0}.sheet{background:#fff;border:0;box-shadow:none;border-radius:0}.sheet-primary{flex:1;min-height:0;display:flex;flex-direction:column}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.table-wrap{overflow:auto;-webkit-overflow-scrolling:touch;flex:1;min-height:0}.sheet-grid{background:#fff}.sheet-grid-tall{max-height:none}table.data{width:100%;border-collapse:collapse;table-layout:fixed;font-size:.875rem;background:#fff;border:1px solid #333}table.data th,table.data td{text-align:left;padding:0 .5rem;border:1px solid #333;background:#fff;color:#111;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:38px;min-height:38px;vertical-align:middle}table.data thead th{position:sticky;top:0;z-index:1;background:#e6e6e6;color:#111;font-size:.78rem;font-weight:700;border:1px solid #333}table.data tbody tr:nth-child(2n) td{background:#fff}table.data tbody tr:hover td{background:#f3f3f3}table.data tbody tr.row-hold td{background:#fff;font-weight:650}.col-idx{width:3rem;font-variant-numeric:tabular-nums;color:#111}table.data th.col-idx,table.data td.col-idx{background:#fff;text-align:center;padding:0 .25rem}table.data thead th.col-idx{background:#e6e6e6}table.data tbody td.col-idx{color:#222}table.data tbody tr:hover td.col-idx{background:#f3f3f3}.col-name{width:auto}.col-student{width:8.5rem}.col-room{width:5.8rem}.col-key{width:6.6rem}.col-updated{width:8.6rem}.col-code{width:8rem}.col-action{width:6.5rem}.col-paid{width:7.2rem}.cell-id{font-variant-numeric:tabular-nums}.num{text-align:right;font-variant-numeric:tabular-nums}table.data th.num,table.data td.num{text-align:right}.team-code{font-weight:700;letter-spacing:.1em}.empty-cell{color:var(--muted);text-align:center;font-style:italic}.status-text{font-weight:650}.status-text.key_issued{color:#176b36}.status-text.verified{color:#075a98}.status-text.claimed{color:#7a4200}.status-pill,.status-cell{display:inline-block;padding:.12rem .4rem;border-radius:2px;background:var(--surface-muted);color:var(--muted);font-size:.75rem;font-weight:700;line-height:1.2}.status-pill{border-radius:999px;text-transform:uppercase;font-size:.85rem;padding:.25rem .55rem}.status-cell.key_issued,.status-pill.key_issued{background:#d9efe0;color:#176b36}.status-cell.verified,.status-pill.verified{background:#d7ebf8;color:#075a98}.status-cell.claimed,.status-pill.claimed{background:#fbe7c6;color:#7a4200}.paid-cell{display:inline-flex;align-items:center;gap:.4rem;font-size:.85rem;cursor:pointer}.paid-cell input{width:22px;height:22px;margin:0;accent-color:var(--accent)}.login-page{justify-content:center;padding:2.5rem 1.5rem 4rem;background:var(--bg)}.login-page input::placeholder{color:var(--muted);opacity:.62}.login-shell{max-width:400px;width:100%;margin:0 auto;padding:0;background:none;border:0;border-radius:0;box-shadow:none}.login-shell h1{margin:0 0 .35rem;font-family:ui-rounded,Hiragino Maru Gothic ProN,Arial Rounded MT Bold,Candara,Trebuchet MS,Segoe UI,sans-serif;font-size:2rem;font-weight:700;letter-spacing:.03em}.login-tabs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.25rem;margin-bottom:1.25rem;padding:.25rem;position:relative;background:var(--surface-muted);border:1px solid var(--line);border-radius:999px}.login-tabs-indicator{grid-column:1;grid-row:1;border-radius:999px;background:var(--accent);pointer-events:none;transition:transform .24s cubic-bezier(.25,1,.5,1),background-color .14s ease}.login-tabs[data-selected=signup] .login-tabs-indicator{transform:translate(calc(100% + .25rem))}.login-tabs .btn{grid-row:1;z-index:1;width:100%;background:transparent;border-color:transparent;border-radius:999px;color:var(--muted);box-shadow:none;touch-action:manipulation;transition:color .24s cubic-bezier(.25,1,.5,1),background .14s ease,border-color .14s ease}.login-tabs .btn[data-tab=code]{grid-column:1}.login-tabs .btn[data-tab=signup]{grid-column:2}.login-tabs .btn:hover:not(:disabled){background:#fff;border-color:transparent;color:var(--text)}.login-tabs .btn[aria-selected=true]{background:transparent;border-color:transparent;color:#fff}.login-tabs .btn[aria-selected=true]:hover:not(:disabled){background:transparent;border-color:transparent;color:#fff}.login-tabs:has(.btn[aria-selected=true]:hover) .login-tabs-indicator{background:var(--accent-press)}.login-tabs .btn:active:not(:disabled){transform:none}.login-tabs .btn:focus,.login-tabs .btn:focus-visible{outline:none}.login-form-view[data-animate]{animation:login-form-in .22s cubic-bezier(.22,1,.36,1)}@keyframes login-form-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.login-tabs-indicator,.login-tabs .btn{transition:none}.login-form-view[data-animate]{animation:none}}@media (max-width: 640px){.page.dashboard .topbar{flex-direction:row;flex-wrap:nowrap;align-items:center;height:44px;min-height:44px;max-height:44px;padding:0 .4rem 0 .65rem;gap:.2rem}.page.dashboard .topbar h1{font-size:.88rem}.page.dashboard .topbar a,.page.dashboard .topbar button.linkish{min-height:36px;padding:0 .35rem;font-size:.78rem}.workbook{padding:0}.col-updated{width:9.2rem}}
