html{text-size-adjust:100%}:root{color-scheme:dark;--bg:#0b0f14;--panel:#121922;--border:#243044;--text:#e8eef7;--muted:#9fb0c8;--accent:#3ddc97;--accent-2:#4da3ff;--danger:#ff6b6b;--radius:12px;font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif}*{box-sizing:border-box}body{margin:0;min-height:100vh;min-height:100dvh;background:radial-gradient(1200px 600px at 20% -10%,#132032 0,var(--bg) 55%);color:var(--text);touch-action:manipulation;padding-left:env(safe-area-inset-left,0);padding-right:env(safe-area-inset-right,0);padding-bottom:env(safe-area-inset-bottom,0)}.site-header{border-bottom:1px solid var(--border);background:rgba(10,14,20,.85);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding-top:env(safe-area-inset-top,0)}.site-header-inner{max-width:960px;margin:0 auto;padding:14px 20px;display:flex;align-items:center;gap:16px}.site-logo{border-radius:50%;border:2px solid rgba(255,255,255,.12);box-shadow:0 4px 20px rgba(0,0,0,.45);flex-shrink:0}.site-header a{display:flex;line-height:0;text-decoration:none;color:inherit}.site-header-text{display:flex;flex-direction:column;gap:2px;min-width:0}.site-brand{font-weight:700;font-size:1.15rem;letter-spacing:-.02em;color:var(--text)}.site-tagline{font-size:.85rem;color:var(--muted)}a{color:var(--accent-2)}main{max-width:960px;margin:0 auto;padding:32px max(20px,env(safe-area-inset-right,0px)) max(64px,env(safe-area-inset-bottom,0px)) max(20px,env(safe-area-inset-left,0px))}.card{background:linear-gradient(180deg,rgba(255,255,255,.04),rgba(255,255,255,.02));border:1px solid var(--border);border-radius:var(--radius);padding:20px}.row{display:flex;flex-wrap:wrap;gap:12px;align-items:center}label{font-size:.9rem;color:var(--muted)}button,input,select,textarea{font:inherit}input,select{padding:10px 12px;border-radius:10px;border:1px solid var(--border);background:#0c121a;color:var(--text);min-width:220px;max-width:100%}button{padding:10px 16px;min-height:44px;border-radius:10px;border:1px solid transparent;cursor:pointer;background:var(--accent);color:#04120c;font-weight:600}button.secondary{background:transparent;border-color:var(--border);color:var(--text)}button:disabled{opacity:.55;cursor:not-allowed}.notice{margin-top:16px;padding:14px 16px;border-radius:10px;border:1px solid rgba(61,220,151,.35);background:rgba(61,220,151,.08);color:var(--text)}.notice.warn{border-color:rgba(255,200,87,.45);background:rgba(255,200,87,.08)}.error{margin-top:12px;color:var(--danger);font-size:.95rem}video{width:100%;max-width:520px;border-radius:12px;border:1px solid var(--border);background:#000}.face-camera-card{max-width:420px;margin:0 auto}.face-camera-stage{position:relative;width:min(100%,320px);margin:0 auto;aspect-ratio:3/4;border-radius:12px;overflow:hidden;background:#000;border:1px solid var(--border)}.face-video{display:block;width:100%;height:100%;max-height:none;object-fit:cover;aspect-ratio:auto;border:none;border-radius:0}.face-guide-34{position:absolute;inset:8%;border:2px dashed rgba(255,255,255,.55);border-radius:8px;pointer-events:none;box-shadow:inset 0 0 0 9999px rgba(0,0,0,.25);display:flex;align-items:flex-end;justify-content:center;padding-bottom:10px;transition:border-color .2s,box-shadow .2s}.face-guide-label{font-size:.75rem;letter-spacing:.08em;color:rgba(255,255,255,.75);text-transform:uppercase}.face-guide-ready{position:absolute;inset:8%;border:2px solid var(--accent);border-radius:8px;pointer-events:none;box-shadow:0 0 0 2px rgba(61,220,151,.25);animation:face-guide-pulse .8s ease-in-out infinite alternate}@keyframes face-guide-pulse{0%{opacity:.65}to{opacity:1}}h1{font-size:1.75rem;letter-spacing:-.02em;margin:0 0 8px}.sub{color:var(--muted);margin:0 0 24px}.topnav{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:12px;margin-bottom:16px}.topnav a{display:inline-flex;align-items:center;min-height:44px;padding:6px 2px}table{width:100%;border-collapse:collapse;font-size:.95rem}td,th{border-bottom:1px solid var(--border);padding:10px 8px;text-align:left;vertical-align:top}th{color:var(--muted);font-weight:600}.modal{position:fixed;inset:0;background:rgba(0,0,0,.65);display:grid;place-items:center;align-content:center;padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));z-index:50}.modal,.modal .card{overflow-y:auto;-webkit-overflow-scrolling:touch}.modal .card{width:min(720px,100%);max-height:min(92dvh,900px)}.confirm-modal{z-index:60}.confirm-dialog{width:min(420px,100%);max-height:none;text-align:center}.confirm-message{margin:0 0 12px;line-height:1.5}.confirm-extras{margin:0 0 12px;padding:12px;border-radius:10px;border:1px solid rgba(255,200,87,.45);background:rgba(255,200,87,.08);line-height:1.45;text-align:left}.confirm-hint{font-size:.8rem;margin:0 0 16px}.confirm-ok-btn{width:100%;min-height:48px;font-size:1.05rem}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-x:contain}.table-scroll table{min-width:720px}.input-fluid{width:100%;min-width:0!important;max-width:100%;box-sizing:border-box}@media (max-width:640px){main{padding-top:16px;padding-left:max(14px,env(safe-area-inset-left,0px));padding-right:max(14px,env(safe-area-inset-right,0px))}.card{padding:16px}h1{font-size:1.4rem}.site-header-inner{padding:10px max(14px,env(safe-area-inset-left)) 10px max(14px,env(safe-area-inset-right));gap:12px}.site-brand{font-size:1rem}.site-tagline{font-size:.72rem}.site-logo,.site-logo img{width:56px!important;height:56px!important;max-width:56px;max-height:56px}input,select,textarea{font-size:16px!important}input,select{min-width:0!important;width:100%}.mobile-form-row{flex-direction:column!important;align-items:stretch!important}.mobile-form-row label{width:100%}.mobile-form-row button[type=submit]{width:100%;min-height:48px}.mobile-btn-row,.professor-grade-row,.stack-mobile{flex-direction:column;align-items:stretch}.professor-grade-row{gap:8px}.mobile-btn-row button{width:100%;min-height:48px}.topnav{justify-content:space-between}}.professor-picker-card{position:relative}.professor-search-input{margin-top:6px}.professor-picker-list{list-style:none;margin:10px 0 0;padding:0;max-height:min(45vh,340px);overflow-y:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--border);border-radius:10px;background:#0c121a}.professor-picker-item{width:100%;text-align:left;padding:12px 14px;border:none;border-bottom:1px solid var(--border);background:transparent;color:var(--text);cursor:pointer;display:flex;flex-direction:column;gap:4px;align-items:flex-start;min-height:48px;font:inherit}.professor-picker-item:last-child{border-bottom:none}.professor-picker-item.is-active,.professor-picker-item:hover{background:rgba(61,220,151,.1)}.professor-picker-empty{padding:16px;color:var(--muted);margin:0}.professor-picker-name{font-weight:600}.professor-picker-meta{font-size:.8rem;color:var(--muted)}.btn-danger{background:rgba(255,107,107,.12);color:#ffc9c9;border:1px solid rgba(255,107,107,.45)}.btn-danger:hover:not(:disabled){background:rgba(255,107,107,.22)}.professor-editor-grid{display:flex;flex-direction:column;gap:16px}.professor-editor-grid>label{display:flex;flex-direction:column;gap:6px}.professor-actions-row{flex-direction:column;align-items:stretch;gap:10px;margin-top:8px}@media (min-width:640px){.professor-actions-row{flex-direction:row;flex-wrap:wrap}.professor-actions-row button{width:auto}}.professor-topbar{max-width:960px;margin:0 auto;padding:12px max(20px,env(safe-area-inset-left)) 0 max(20px,env(safe-area-inset-right));display:flex;flex-direction:column;gap:10px}.professor-nav{display:flex;flex-wrap:wrap;gap:8px}.professor-nav-link{padding:8px 14px;border-radius:999px;border:1px solid var(--border);color:var(--muted);text-decoration:none;font-size:.9rem;min-height:40px;display:inline-flex;align-items:center}.professor-nav-link.is-active{background:rgba(61,220,151,.12);border-color:rgba(61,220,151,.45);color:var(--text)}.professor-topbar-actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:flex-end}.day-attendance-list{list-style:none;margin:0;padding:0}.day-attendance-item{padding:12px 0;border-bottom:1px solid var(--border)}.day-attendance-row{display:flex;flex-direction:column;gap:12px}@media (min-width:520px){.day-attendance-row{flex-direction:row;align-items:flex-start;justify-content:space-between}}.day-attendance-item:last-child{border-bottom:none}.day-attendance-main{display:flex;flex-direction:column;gap:4px;min-width:0}.day-attendance-meta,.day-attendance-time{font-size:.85rem;color:var(--muted)}.day-attendance-actions{display:flex;flex-wrap:wrap;gap:8px;flex-shrink:0}.day-attendance-actions button{min-height:44px}.photo-preview-card{width:min(520px,100%)}.attendance-photo-preview{display:block;width:100%;max-height:min(70dvh,640px);object-fit:contain;border-radius:var(--radius);border:1px solid var(--border);background:#000}.photo-preview-actions{margin-top:16px;display:flex;justify-content:center}.belt-summary-grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:10px;gap:10px}@media (min-width:520px){.belt-summary-grid{grid-template-columns:repeat(3,1fr)}}@media (min-width:768px){.belt-summary-grid{grid-template-columns:repeat(4,1fr)}}.belt-summary-card{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:88px;padding:12px 10px;border-radius:var(--radius);border:1px solid var(--border);background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.02));color:var(--text);cursor:pointer;transition:border-color .15s,background .15s}.belt-summary-card:hover:not(:disabled){border-color:rgba(61,220,151,.45)}.belt-summary-card.is-active{border-color:var(--accent);background:rgba(61,220,151,.12)}.belt-summary-card.is-empty{opacity:.45;cursor:not-allowed}.belt-summary-count{font-size:1.75rem;font-weight:700;line-height:1;color:var(--accent)}.belt-summary-label{font-size:.8rem;text-align:center;line-height:1.25;color:var(--muted)}.belt-summary-card.is-active .belt-summary-label{color:var(--text)}.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}.belt-students-table{width:100%;min-width:520px;border-collapse:collapse}.belt-students-table td,.belt-students-table th{padding:10px 12px;text-align:left;border-bottom:1px solid var(--border)}.belt-students-table tbody tr:last-child td{border-bottom:none}.belt-students-table td:nth-child(4),.belt-students-table td:nth-child(5),.belt-students-table th:nth-child(4),.belt-students-table th:nth-child(5){text-align:center}.retro-attendance-list{list-style:none;margin:0;padding:0}.retro-attendance-item{padding:14px 0;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:6px}.retro-attendance-item:last-child{border-bottom:none}.retro-attendance-meta{font-size:.85rem;color:var(--muted)}.retro-attendance-desc{margin:0;line-height:1.5;color:var(--text);font-size:.95rem}.preset-row{display:flex;flex-wrap:wrap;gap:8px}.preset-row button{min-height:40px}.stats-grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:12px;gap:12px;margin:16px 0}@media (min-width:640px){.stats-grid{grid-template-columns:repeat(4,1fr)}}.stat-card{background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.02));border:1px solid var(--border);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;gap:4px}.stat-value{font-size:1.75rem;font-weight:700;letter-spacing:-.02em;color:var(--accent)}.stat-label{font-size:.8rem;color:var(--muted)}.chart-bars{margin-top:12px;overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}.chart-bars-inner{display:flex;align-items:flex-end;gap:6px;min-height:180px;min-width:min(100%,480px)}.chart-bar-col{flex:1 1;min-width:28px;max-width:48px;display:flex;flex-direction:column;align-items:center;gap:4px}.chart-bar-value{font-size:.7rem;color:var(--muted);min-height:1em}.chart-bar-track{height:120px;display:flex;align-items:flex-end;background:rgba(255,255,255,.04)}.chart-bar-fill,.chart-bar-track{width:100%;border-radius:6px 6px 0 0}.chart-bar-fill{background:linear-gradient(180deg,var(--accent),rgba(61,220,151,.45));min-height:2px;transition:height .25s ease}.chart-bar-label{font-size:.65rem;color:var(--muted);text-align:center}.top-students-list{margin:0;padding:0;list-style:none}.top-students-list li{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;padding:10px 0;border-bottom:1px solid var(--border)}.top-students-list li:last-child{border-bottom:none}.top-rank{color:var(--muted);min-width:1.5em}.top-name{flex:1 1;font-weight:600}.top-count{color:var(--muted);font-size:.9rem}