:root{--bg:#fff;--fg:#000;--muted:#6b6b6b;--line:#e2e2e2;--line-strong:#000;--accent:#000;--accent-fg:#fff;--ok:#0a7d32;--radius:10px;--maxw:640px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;margin:0;padding:0}html,body{height:100%}body{color:var(--fg);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.4}a{color:inherit;text-decoration:none}.app{max-width:var(--maxw);flex-direction:column;min-height:100%;margin:0 auto;display:flex}.header{border-bottom:2px solid var(--line-strong);align-items:center;gap:12px;padding:16px 20px;display:flex}.header .back{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:999px;padding:6px 14px;font-size:15px}.header .back:active{background:#f2f2f2}.header .logo{width:auto;max-width:120px;height:22px}.header .title{letter-spacing:-.01em;font-size:17px;font-weight:700}.header .spacer{flex:1}.content{flex:1;padding:20px}.page-title{letter-spacing:-.02em;margin-bottom:4px;font-size:22px;font-weight:800}.page-sub{color:var(--muted);margin-bottom:20px;font-size:14px}.tiles{gap:14px;margin-top:8px;display:grid}.tile{border:2px solid var(--line-strong);border-radius:var(--radius);cursor:pointer;text-align:left;background:#fff;width:100%;padding:28px 22px;font-size:20px;font-weight:700;display:block}.tile:active{color:#fff;background:#000}.tile.disabled{border-color:var(--line);color:var(--muted);cursor:not-allowed}.tile .tile-sub{color:var(--muted);margin-top:4px;font-size:13px;font-weight:500;display:block}.list{border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;display:flex;overflow:hidden}.list-item{border-bottom:1px solid var(--line);cursor:pointer;text-align:left;background:#fff;justify-content:space-between;align-items:center;width:100%;padding:16px 18px;font-size:17px;font-weight:600;display:flex}.list-item:last-child{border-bottom:none}.list-item:active{background:#f2f2f2}.list-item .chev{color:var(--muted);font-size:20px}.datebar{align-items:center;gap:10px;margin-bottom:18px;display:flex}.datebar label{font-size:14px;font-weight:600}.datebar input[type=date]{border:1px solid var(--line-strong);border-radius:var(--radius);background:#fff;flex:1;padding:10px 12px;font-family:inherit;font-size:16px}.roster{border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;display:flex;overflow:hidden}.roster-row{border-bottom:1px solid var(--line);cursor:pointer;-webkit-user-select:none;user-select:none;background:#fff;justify-content:space-between;align-items:center;padding:14px 18px;font-size:17px;display:flex}.roster-row:last-child{border-bottom:none}.roster-row.present{background:#f6fbf7}.roster-row .name{font-weight:600}.roster-row .box{border:2px solid var(--line-strong);color:#fff;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;width:26px;height:26px;font-size:18px;display:flex}.roster-row.present .box{background:var(--ok);border-color:var(--ok)}.actions{background:var(--bg);margin-top:20px;padding:16px 0 20px;position:sticky;bottom:0}.btn{border-radius:var(--radius);border:2px solid var(--accent);background:var(--accent);width:100%;color:var(--accent-fg);cursor:pointer;padding:16px;font-family:inherit;font-size:18px;font-weight:700;display:block}.btn:active{opacity:.85}.btn:disabled{opacity:.4;cursor:default}.btn.secondary{color:var(--accent);background:#fff}.summary{color:var(--muted);text-align:center;margin-bottom:10px;font-size:14px}.selectbar{gap:10px;margin-bottom:14px;display:flex}.selectbar button{border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;background:#fff;flex:1;padding:10px;font-size:14px;font-weight:600}.login{text-align:center;max-width:360px;margin:0 auto;padding:60px 20px}.login .logo{height:56px;margin-bottom:20px}.login h1{margin-bottom:24px;font-size:20px}.login input{border:2px solid var(--line-strong);border-radius:var(--radius);width:100%;margin-bottom:14px;padding:14px;font-family:inherit;font-size:17px}.error{color:#c0392b;margin-bottom:14px;font-size:14px}.toast{color:#fff;z-index:50;background:#000;border-radius:999px;padding:12px 20px;font-size:15px;font-weight:600;position:fixed;bottom:28px;left:50%;transform:translate(-50%)}.center-note{text-align:center;color:var(--muted);padding:40px 0}.linkbtn{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:4px;font-family:inherit;font-size:14px;text-decoration:underline}.tick-ok{color:var(--ok);font-weight:700}.checkin{max-width:480px;min-height:100%;margin:0 auto;padding:28px 20px 40px}.checkin-head{text-align:center;margin-bottom:24px}.checkin-head .logo{width:auto;height:34px;margin-bottom:10px}.checkin-school{letter-spacing:.02em;text-transform:uppercase;color:var(--muted);font-size:15px;font-weight:700}.search{border:2px solid var(--line-strong);border-radius:var(--radius);width:100%;margin-bottom:14px;padding:16px;font-family:inherit;font-size:20px}.results{flex-direction:column;gap:10px;display:flex}.result{text-align:left;border:2px solid var(--line-strong);border-radius:var(--radius);cursor:pointer;background:#fff;justify-content:space-between;align-items:center;width:100%;padding:16px 18px;font-family:inherit;font-size:19px;font-weight:600;display:flex}.result:active{color:#fff;background:#000}.result:disabled{opacity:.5}.result-status{color:var(--muted)}.checked{text-align:center;padding:50px 10px}.checked-tick{background:var(--ok);color:#fff;border-radius:50%;width:96px;height:96px;margin:0 auto 20px;font-size:56px;font-weight:700;line-height:96px}.checked-title{font-size:24px;font-weight:800}.checked-name{margin:6px 0 24px;font-size:20px}.qr-card{border:1px solid var(--line);border-radius:var(--radius);text-align:center;margin-bottom:24px;padding:20px}.qr{cursor:pointer;width:240px;max-width:100%;margin:0 auto 14px}.qr svg{width:100%;height:auto;display:block}.qr-url{color:var(--muted);word-break:break-all;margin-bottom:14px;font-size:13px}.present-head{justify-content:space-between;align-items:center;margin-bottom:10px;font-size:15px;font-weight:700;display:flex}.qr-full{z-index:100;cursor:pointer;background:#fff;flex-direction:column;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.qr-full-school{text-align:center;margin-bottom:20px;font-size:28px;font-weight:800}.qr-full-code{width:min(70vh,90vw);height:auto}.qr-full-code svg{width:100%;height:auto;display:block}.qr-full-hint{color:var(--muted);margin-top:20px;font-size:15px}
