:root{
  --bg:#f5f7fb;--card:#fff;--ink:#102434;--muted:#657684;--brand:#173b57;--brand2:#245d82;
  --line:#dfe6ec;--ok:#16794a;--bad:#b53c38;--warn:#9b6815;--shadow:0 12px 30px rgba(22,48,67,.08);
  --safe-bottom:env(safe-area-inset-bottom,0px)
}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Tahoma,Arial,sans-serif;line-height:1.55}
button,input,textarea,select{font:inherit}button{cursor:pointer}.hidden{display:none!important}.app-shell{max-width:980px;margin:auto;min-height:100dvh;padding:18px 18px calc(92px + var(--safe-bottom))}
.center-card{max-width:520px;margin:8vh auto 0;background:var(--card);border:1px solid var(--line);border-radius:24px;padding:28px;box-shadow:var(--shadow);text-align:right}.brand-mark{width:58px;height:58px;border-radius:18px;background:var(--brand);color:#fff;display:grid;place-items:center;font-size:28px;font-weight:800;margin-bottom:18px}
h1,h2,h3,p{margin-top:0}h1{font-size:1.55rem;margin-bottom:4px}h2{font-size:1.35rem;margin-bottom:8px}h3{font-size:1.05rem;margin-bottom:8px}.muted{color:var(--muted)}.eyebrow{font-size:.78rem;color:var(--brand2);font-weight:800;margin-bottom:3px}.stack{display:grid;gap:14px}
label{display:grid;gap:7px;font-weight:700}input,textarea,select{width:100%;border:1px solid #ccd7df;border-radius:14px;background:#fff;color:var(--ink);padding:13px 14px;outline:none}textarea{resize:vertical;min-height:120px}input:focus,textarea:focus,select:focus{border-color:var(--brand2);box-shadow:0 0 0 3px rgba(36,93,130,.11)}
button,.file-button{border:0;border-radius:14px;padding:11px 15px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none}.primary{background:var(--brand);color:#fff}.primary:active{transform:translateY(1px)}.secondary{background:#edf2f6;color:var(--brand);border:1px solid #d6e0e7}.big{min-height:52px;width:100%;font-size:1rem}.small{padding:9px 12px;font-size:.88rem}.tiny{padding:7px 9px;font-size:.8rem}.icon-btn{background:#eef3f6;color:var(--brand);padding:9px 12px}
.topbar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}.topbar h1{margin:0}.course-strip{display:flex;gap:9px;margin-bottom:18px}.course-strip select{min-width:0;flex:1;background:#fff;font-weight:800}
.page{display:none}.page.active{display:block}.hero-card{background:linear-gradient(135deg,#173b57,#245d82);color:#fff;border-radius:24px;padding:24px;display:grid;grid-template-columns:1fr 220px;gap:20px;align-items:center;box-shadow:var(--shadow)}.hero-card .eyebrow{color:#bfe1f3}.hero-card p{color:#e4eef4;margin-bottom:0}.hero-button{background:#fff;color:var(--brand);min-height:72px;font-size:1.1rem}
.stats-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin:14px 0}.stats-grid article,.stats-grid>div{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:17px;display:flex;flex-direction:column}.stats-grid strong{font-size:1.55rem}.stats-grid span{color:var(--muted);font-size:.9rem}.alert{border-radius:15px;padding:13px 15px;margin-top:14px}.alert.info{background:#edf5fb;color:#245d82;border:1px solid #d2e8f7}.alert.danger{background:#fff0ef;color:#9d302d;border:1px solid #f3cfcd}
.section-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:5px 0 12px}.section-head.compact{margin-top:20px}.section-head h2,.section-head h3{margin:0}.badge{background:#e9f0f5;color:var(--brand);border-radius:999px;padding:5px 10px;font-weight:800}.card,.list-card,.table-wrap{background:var(--card);border:1px solid var(--line);border-radius:20px;padding:16px;box-shadow:0 5px 18px rgba(20,45,62,.04);margin-bottom:14px}.list-card:empty{display:none}
.student-row,.lecture-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 3px;border-bottom:1px solid #edf1f4}.student-row:last-child,.lecture-row:last-child{border-bottom:0}.student-name{font-weight:750}.student-alias{display:block;color:var(--muted);font-size:.78rem}.danger-link{background:#fff0ef;color:var(--bad);padding:7px 9px;font-size:.8rem}
.table-wrap{overflow:auto;padding:0}table{width:100%;border-collapse:collapse;min-width:560px}th,td{text-align:right;padding:13px 14px;border-bottom:1px solid #edf1f4}th{background:#f8fafc;color:#506471;font-size:.83rem}tbody tr:last-child td{border-bottom:0}.pct-good{color:var(--ok);font-weight:800}.pct-bad{color:var(--bad);font-weight:800}
.bottom-nav{position:fixed;bottom:0;left:0;right:0;z-index:30;background:rgba(255,255,255,.94);backdrop-filter:blur(14px);border-top:1px solid #dbe4ea;padding:7px max(8px,env(safe-area-inset-right)) calc(7px + var(--safe-bottom)) max(8px,env(safe-area-inset-left));display:flex;justify-content:center;gap:4px}.nav-btn{background:transparent;color:#6c7b87;border:0;min-width:75px;padding:5px 12px;display:grid;gap:1px;place-items:center}.nav-btn span{font-size:1.15rem}.nav-btn small{font-size:.72rem}.nav-btn.active{color:var(--brand)}
.modal{position:fixed;inset:0;z-index:60;background:rgba(8,23,34,.5);display:flex;align-items:flex-end;justify-content:center;padding-top:30px}.modal-sheet{width:min(760px,100%);max-height:94dvh;overflow:auto;background:var(--bg);border-radius:26px 26px 0 0;padding:18px 18px calc(22px + var(--safe-bottom));box-shadow:0 -12px 40px rgba(0,0,0,.18)}.small-sheet{max-width:520px}.modal-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:15px}.modal-head h2{margin:0}.capture-box{background:#fff;border:1px dashed #b9c9d4;border-radius:22px;padding:25px 18px;text-align:center}.camera-icon{font-size:46px;margin-bottom:8px}.capture-box p{color:var(--muted)}.capture-box small{display:block;margin-top:10px}
.progress-card{background:#fff;border:1px solid var(--line);border-radius:22px;padding:28px 18px;text-align:center}.spinner{width:38px;height:38px;border:4px solid #dce6ed;border-top-color:var(--brand);border-radius:50%;margin:0 auto 16px;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.progress{height:9px;background:#e9eef2;border-radius:999px;overflow:hidden}.progress span{display:block;height:100%;width:0;background:var(--brand);transition:width .2s}
.review-toolbar{position:sticky;top:-18px;z-index:3;background:var(--bg);display:flex;justify-content:space-between;align-items:center;gap:8px;padding:10px 0}.toolbar-actions{display:flex;gap:6px}.review-list{display:grid;gap:8px}.review-row{background:#fff;border:1px solid var(--line);border-radius:16px;padding:12px;display:flex;align-items:center;justify-content:space-between;gap:12px}.review-row.present{border-color:#b8ddca;background:#f5fcf8}.review-row.absent{border-color:#efcecc;background:#fff8f7}.review-person{min-width:0}.review-person b{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.review-person small{color:var(--muted)}.status-toggle{min-width:86px}.status-toggle.present{background:#dcf3e7;color:var(--ok)}.status-toggle.absent{background:#fde7e5;color:var(--bad)}.ocr-details{margin:14px 0;background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px}.ocr-details summary{font-weight:800;cursor:pointer}.ocr-details pre{white-space:pre-wrap;direction:auto;font-size:.8rem;color:#51636f}.sticky-action{position:sticky;bottom:0;box-shadow:0 -8px 22px rgba(245,247,251,.9)}
.toast{position:fixed;z-index:100;top:max(16px,env(safe-area-inset-top));left:50%;transform:translateX(-50%) translateY(-12px);background:#102434;color:#fff;padding:11px 15px;border-radius:14px;box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:.2s;max-width:min(90vw,520px);text-align:center}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
@media(max-width:700px){.app-shell{padding:14px 12px calc(88px + var(--safe-bottom))}.center-card{margin-top:3vh;padding:22px 18px}.hero-card{grid-template-columns:1fr;padding:20px}.hero-button{min-height:58px}.topbar{margin-top:env(safe-area-inset-top)}.nav-btn{min-width:0;flex:1;padding:4px}.course-strip{position:sticky;top:0;z-index:20;background:var(--bg);padding:5px 0 8px}.modal-sheet{padding-left:12px;padding-right:12px}.review-toolbar{top:-18px;align-items:flex-start;flex-direction:column}.toolbar-actions{width:100%}.toolbar-actions button{flex:1}.status-toggle{min-width:78px}}
@media(min-width:701px){.bottom-nav{max-width:620px;left:50%;transform:translateX(-50%);border:1px solid #dbe4ea;border-bottom:0;border-radius:18px 18px 0 0}}
.capture-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}
@media(max-width:520px){.capture-actions{grid-template-columns:1fr}}
.text-action{background:transparent;color:var(--brand2);padding:10px;margin-top:6px;text-decoration:underline;text-underline-offset:3px}
.scan-summary{display:grid;gap:8px;margin-bottom:12px}.scan-summary .scan-ok,.scan-summary .scan-warn,.scan-summary .scan-info{border-radius:14px;padding:11px 13px;font-size:.9rem}.scan-summary .scan-ok{background:#eef9f3;border:1px solid #c7e6d5;color:#12673f}.scan-summary .scan-warn{background:#fff8e8;border:1px solid #ead8a4;color:#80580f}.scan-summary .scan-info{background:#edf5fb;border:1px solid #d2e8f7;color:#245d82}.review-row.inactive{border-color:#ead8a4;background:#fffaf0}.status-toggle.inactive{background:#fff0c7;color:#80580f}.review-person small.scan-match{display:block}.bb-hint{font-weight:800}
