:root{font-family:system-ui,-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;color:#18332f;background:#f5f7f4;line-height:1.6;font-size:16px}*{box-sizing:border-box}body{margin:0}header{background:#fff;border-bottom:1px solid #dce4dd;padding:18px max(24px,calc((100vw - 1080px)/2));display:flex;justify-content:space-between;gap:20px}a{color:#216d5c;text-decoration:none}a:hover{text-decoration:underline}nav{display:flex;gap:22px}main{max-width:1080px;margin:40px auto;padding:0 24px 64px}.eyebrow{font-size:12px;font-weight:700;letter-spacing:.16em;color:#56766d}h1{font-size:34px;margin:10px 0}h2{font-size:21px;margin:0}.lead{color:#5d7069;margin-bottom:26px}.panel{padding:26px;background:#fff;border:1px solid #dce4dd;border-radius:14px;margin-top:22px}label{display:block;font-weight:600}input,select,textarea{display:block;width:100%;border:1px solid #a9bdb2;border-radius:7px;background:#fff;padding:12px;font:inherit;color:inherit;margin:7px 0 17px}input:focus,button:focus-visible{outline:3px solid #b6d8ca;outline-offset:2px}button{font:inherit;border:1px solid #abc1b5;color:#245e50;background:#fff;border-radius:7px;padding:9px 17px;cursor:pointer}button:disabled{opacity:.45;cursor:not-allowed}.primary{background:#246b58;color:#fff;border-color:#246b58;margin-top:10px}.danger{background:#a73a38;color:#fff;border-color:#a73a38}.fields{display:grid;grid-template-columns:1fr 130px;gap:20px}.search-wrap{position:relative}#matches{position:absolute;top:83px;left:0;right:0;z-index:3;background:#fff;box-shadow:0 8px 25px #163d3022;border:1px solid #abc1b5;border-radius:8px;list-style:none;margin:0;padding:6px;max-height:290px;overflow:auto}#matches button{border:0;display:block;text-align:left;width:100%}#matches button:hover,#matches button:focus{background:#edf5f0}.selection{background:#edf5f0;border-left:4px solid #38806a;padding:14px;margin:16px 0 24px;min-height:54px}.section-head{display:flex;align-items:center;justify-content:space-between;gap:20px}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;margin-top:18px;font-size:14px}th,td{text-align:left;padding:13px 12px;border-bottom:1px solid #e5ebe6;vertical-align:top}th{background:#f5f8f5;white-space:nowrap}td small{display:block;color:#64786e}tr.revoked{opacity:.58}#notice:not(:empty){background:#fff6d9;border:1px solid #e9d899;border-radius:8px;padding:12px 16px;margin:18px 0}dialog{max-width:480px;width:calc(100% - 32px);padding:28px;border:0;border-radius:12px}dialog::backdrop{background:#122c2a88}.actions{display:flex;gap:12px;justify-content:flex-end}summary{cursor:pointer;font-weight:600}[hidden]{display:none!important}@media(max-width:620px){header{padding:14px;flex-wrap:wrap}nav{gap:14px}main{margin:24px auto;padding:0 14px}.panel{padding:18px}.fields{grid-template-columns:1fr 100px}h1{font-size:29px}}
.fields{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.muted{color:#63766d;font-size:14px}.sessions{display:grid;gap:10px;margin-top:18px}.session-row{border:1px solid #dce4dd;border-radius:9px;padding:14px 16px;display:flex;justify-content:space-between;align-items:center;gap:16px}.session-row p{margin:0}.session-row small{color:#64786e}.session-actions{display:flex;gap:8px;flex-wrap:wrap}#qr-dialog{max-width:720px;text-align:center;max-height:95vh;overflow:auto}#qr-image{display:block;width:min(54vh,480px);height:auto;margin:12px auto;background:#fff;image-rendering:pixelated}#qr-dialog .close{float:right}#qr-title{clear:both;padding-top:10px}#qr-frame{font-weight:700;font-size:20px}#create-form{margin-top:22px}#stats{font-weight:600}#roster td{white-space:nowrap}@media(max-width:620px){.session-row{display:block}.session-actions{margin-top:12px}#qr-image{width:min(70vw,52vh)}}
#qr-settings{padding:14px 0 4px;border-top:1px solid #e2e9e3}#qr-settings>.fields{margin-top:18px}.rollcall{background:#f1f7f3;border:1px solid #cbded1;border-radius:14px;padding:26px;text-align:center;margin:22px 0}.rollcall-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.rollcall-top p{margin:0;color:#567368}.status-chip{font-size:14px;padding:5px 14px;border-radius:20px;background:#fff;border:1px solid #cbded1}.student-id{font-size:24px;font-variant-numeric:tabular-nums;letter-spacing:.04em;margin:24px 0 5px}#current-name{font-size:clamp(36px,6vw,58px);line-height:1.3;margin:0 0 4px;overflow-wrap:anywhere}.rollcall-buttons{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:24px auto 18px;max-width:720px}.rollcall-buttons button{font-size:24px;font-weight:650;padding:17px 8px}.mark-present{background:#246b58;color:#fff;border-color:#246b58}.mark-absent{background:#fff4ed;color:#8e4b24;border-color:#d7b395}.mark-excused{background:#edf2ff;color:#3d5a91;border-color:#b4c3df}.rollcall-note{max-width:720px;margin:0 auto;text-align:left;font-size:14px;color:#587365}.rollcall-note input{font-size:16px}.rollcall-navigation{display:flex;align-items:center;justify-content:space-between;gap:14px}.rollcall-navigation p{font-size:14px;color:#577266;margin:0}.secondary{margin-top:25px;padding:18px;border:1px solid #dce4dd;border-radius:9px}.secondary>summary{color:#496c5c}.secondary>button{margin:4px 8px 4px 0}.roster-filter{display:flex;align-items:end;gap:22px;margin-top:28px}.roster-filter>label:first-child{flex:1}.roster-filter input{margin-bottom:0}.check{display:flex;align-items:center;white-space:nowrap;padding-bottom:12px;font-weight:500}.check input{display:inline-block;width:auto;margin:0 7px 0 0}.row-actions{display:flex;gap:6px;flex-wrap:wrap;min-width:220px}.row-actions button{font-size:13px;padding:6px 9px}.row-actions button[aria-pressed=true]{box-shadow:inset 0 0 0 2px currentColor}.student-link{border:0;background:transparent;padding:0;text-align:left;font-weight:650}.student-link small{font-weight:400}#roster tr.current-row{background:#f1f7f3}#roster td:nth-child(4){white-space:normal;min-width:100px;max-width:210px;overflow-wrap:anywhere}#retry-save{border-color:#bb8738;background:#fff8e6;color:#795514}#roster-empty{color:#667b70}.session-actions button{font-size:14px}@media(max-width:620px){.rollcall{padding:18px 14px}.rollcall-buttons{gap:8px}.rollcall-buttons button{font-size:20px;padding:15px 5px}.student-id{font-size:21px}.rollcall-navigation{gap:7px;flex-wrap:wrap}.rollcall-navigation p{flex-basis:100%;order:3;margin-top:8px}.roster-filter{display:block}.check{padding-top:15px}.rollcall-top{font-size:13px}.section-head{flex-wrap:wrap}#qr-settings summary{font-size:14px}}

/* Public site links stay usable before a teacher or student signs in. */
header{flex-wrap:wrap}header .site-home{color:inherit;text-decoration:none;font-size:18px;font-weight:700;white-space:nowrap}header .site-switcher{display:flex;gap:18px;align-items:center;font-size:14px}header nav{flex-wrap:wrap}header nav a{white-space:nowrap}header .site-switcher a{display:inline-flex;align-items:center;min-height:40px}
@media(max-width:620px){header{gap:8px 16px}header .site-home{font-size:17px}header nav{gap:8px 14px;font-size:13px}}
