:root{--bg:#f4f6f8;--card:#fff;--ink:#14202b;--muted:#6e7a86;--brand:#173a5e;--brand2:#245d93;--line:#e2e7eb;--ok:#127a53;--warn:#a66a00;--bad:#b33a3a;--r:18px;--shadow:0 8px 26px rgba(12,30,48,.07);font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",sans-serif;color:var(--ink)}
*{box-sizing:border-box}body{margin:0;background:var(--bg);min-height:100vh;padding-bottom:96px}.topbar{position:sticky;top:0;z-index:20;background:rgba(244,246,248,.92);backdrop-filter:blur(18px);padding:max(14px,env(safe-area-inset-top)) 18px 12px;display:flex;align-items:end;justify-content:space-between;border-bottom:1px solid rgba(226,231,235,.7)}.eyebrow{font-size:10px;font-weight:800;letter-spacing:.12em;color:var(--muted)}h1{font-size:22px;margin:2px 0 0}h2{font-size:20px;margin:0}h3{margin:0 0 8px}.app-shell{max-width:760px;margin:0 auto;padding:14px}.view{display:none}.view.active{display:block}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow);padding:16px;margin-bottom:12px}.hero{display:flex;justify-content:space-between;align-items:center;background:linear-gradient(135deg,#fff,#edf4fa)}.hero-date{font-size:24px;font-weight:800;margin-top:4px}.muted{color:var(--muted)}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}.stat{text-align:center}.stat span{display:block;font-size:25px;font-weight:800;color:var(--brand)}.stat small{color:var(--muted)}.section-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.sticky-head{padding:4px 2px}.list{display:flex;flex-direction:column;gap:8px}.list-item{background:#fff;border:1px solid var(--line);border-radius:16px;padding:13px 14px;display:flex;align-items:center;gap:12px;box-shadow:0 3px 12px rgba(12,30,48,.04)}.list-item.clickable{cursor:pointer}.list-main{min-width:0;flex:1}.list-title{font-weight:750}.list-sub{font-size:13px;color:var(--muted);margin-top:2px;white-space:normal}.badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:750;background:#edf3f8;color:var(--brand)}.badge.ok{background:#e6f5ef;color:var(--ok)}.badge.warn{background:#fff3d8;color:var(--warn)}.badge.bad{background:#fdeaea;color:var(--bad)}button,.file-btn{font:inherit;border:none;cursor:pointer}.primary,.secondary,.danger,.file-btn{padding:10px 13px;border-radius:12px;font-weight:750}.primary{background:var(--brand);color:#fff}.secondary,.file-btn{background:#edf2f6;color:var(--brand)}.danger{background:var(--bad);color:#fff}.ghost{background:#fdeaea;color:var(--bad)}.link{background:transparent;color:var(--brand2);font-weight:700}.icon-btn{width:38px;height:38px;border-radius:50%;background:#edf2f6;color:var(--brand);font-size:24px;line-height:1}.search,input,select,textarea{width:100%;border:1px solid #d7dee5;background:#fff;border-radius:12px;padding:11px 12px;font:inherit;color:var(--ink);outline:none}.search{margin-bottom:12px}input:focus,select:focus,textarea:focus{border-color:#7ea8cc;box-shadow:0 0 0 3px rgba(36,93,147,.12)}label{display:flex;flex-direction:column;gap:6px;font-size:13px;font-weight:700;color:#465563}.form-grid,.dialog-form{display:flex;flex-direction:column;gap:12px}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:10px}.check{flex-direction:row;align-items:center}.check input{width:auto}.row{display:flex;align-items:center}.gap{gap:8px}.wrap{flex-wrap:wrap}.flex{flex:1}.spacer{flex:1}.empty-state{color:var(--muted);font-size:14px;padding:8px 0}.bottom-nav{position:fixed;z-index:30;bottom:0;left:0;right:0;padding:7px 10px calc(8px + env(safe-area-inset-bottom));background:rgba(255,255,255,.94);backdrop-filter:blur(18px);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(5,1fr)}.nav-btn{background:transparent;color:#71808c;display:flex;flex-direction:column;align-items:center;gap:2px;padding:4px}.nav-btn span{font-size:22px}.nav-btn small{font-size:10px}.nav-btn.active{color:var(--brand);font-weight:800}dialog{width:min(94vw,560px);border:none;border-radius:22px;padding:0;box-shadow:0 30px 80px rgba(0,0,0,.25)}dialog::backdrop{background:rgba(7,18,29,.45);backdrop-filter:blur(3px)}.dialog-form{padding:18px;max-height:88vh;overflow:auto}.qr-area{text-align:center;padding:14px;border:1px dashed #ccd6df;border-radius:15px;background:#fafcfd}.qr-area img{width:180px;height:180px;max-width:70vw;border-radius:8px;background:#fff}.scanner-card{margin-top:6px}.video-wrap{position:relative;background:#111;border-radius:16px;overflow:hidden;aspect-ratio:3/4;margin:12px 0}.video-wrap video{width:100%;height:100%;object-fit:cover}.scan-frame{position:absolute;width:64%;aspect-ratio:1;left:18%;top:20%;border:3px solid rgba(255,255,255,.9);border-radius:18px;box-shadow:0 0 0 2000px rgba(0,0,0,.18)}.manual-code{display:grid;grid-template-columns:1fr auto;gap:8px;margin-top:10px}.status{margin-top:10px;padding:10px;border-radius:12px;background:#edf2f6;color:#506070}.filters{padding:12px}.att-buttons{display:flex;gap:6px}.att-buttons button{padding:7px 9px;border-radius:10px;background:#edf2f6;color:#435667;font-weight:750}.att-buttons button.active.present{background:#e2f4ed;color:var(--ok)}.att-buttons button.active.excused{background:#fff3d8;color:var(--warn)}.att-buttons button.active.absent{background:#fdeaea;color:var(--bad)}.progress{height:10px;background:#edf0f3;border-radius:999px;overflow:hidden;margin-top:7px}.progress>span{display:block;height:100%;background:linear-gradient(90deg,#245d93,#173a5e)}.report-row{display:flex;align-items:center;gap:12px}.report-pct{font-size:18px;font-weight:800;min-width:54px;text-align:right}.toast{position:fixed;z-index:100;left:50%;bottom:105px;transform:translate(-50%,20px);background:#17212b;color:#fff;padding:10px 14px;border-radius:12px;opacity:0;pointer-events:none;transition:.2s;max-width:90vw;text-align:center}.toast.show{opacity:1;transform:translate(-50%,0)}.danger-zone{margin-bottom:24px}.report-summary{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.summary-cell{background:#f5f8fa;border-radius:14px;padding:12px}.summary-cell b{display:block;font-size:22px;color:var(--brand)}
@media(max-width:420px){.hero{align-items:flex-start;gap:10px}.hero-date{font-size:20px}.stats-grid{gap:6px}.stat{padding:12px 6px}.two-col{grid-template-columns:1fr}.att-buttons{flex-direction:column}.list-item{align-items:flex-start}.report-summary{grid-template-columns:1fr 1fr}}

.print-sheet{display:none}
@page{size:A4 portrait;margin:10mm}
@media print{
  html,body{background:#fff!important;margin:0!important;padding:0!important}
  .topbar,.bottom-nav,.app-shell,dialog,.toast{display:none!important}
  .print-sheet{display:grid!important;grid-template-columns:repeat(2,90mm);grid-auto-rows:62mm;gap:5mm;width:185mm;margin:0 auto;align-content:start}
  .print-card{width:90mm;height:62mm;border:0.35mm solid #9ba7b2;border-radius:4mm;padding:5mm;break-inside:avoid;page-break-inside:avoid;background:#fff;display:flex;flex-direction:column;overflow:hidden;box-shadow:none}
  .print-card:nth-child(8n+1){break-before:page;page-break-before:always}
  .print-card:first-child{break-before:auto;page-break-before:auto}
  .print-card-head{border-bottom:0.35mm solid #d9e0e6;padding-bottom:2.5mm;margin-bottom:3mm}
  .print-card-kicker{font-size:7pt;letter-spacing:.08em;text-transform:uppercase;color:#657381;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .print-card-title{font-size:11pt;font-weight:800;color:#173a5e;margin-top:1mm;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .print-card-body{display:grid;grid-template-columns:31mm 1fr;gap:4mm;align-items:center;min-height:0;flex:1}
  .print-card img{width:31mm;height:31mm;display:block;background:#fff}
  .print-card-person{min-width:0;display:flex;flex-direction:column;gap:1.8mm}
  .print-card-person strong{font-size:13pt;line-height:1.1;color:#14202b;overflow-wrap:anywhere}
  .print-card-person span{font-size:9pt;font-weight:700;color:#173a5e;letter-spacing:.04em}
  .print-card-person small{font-size:7.5pt;line-height:1.2;color:#6e7a86}
}
.status.error{background:#fdeaea;color:var(--bad)}
.parent-access-card input[readonly]{font-size:12px;background:#f7f9fb}
