:root{--paper: #fff8ec;--paper-card: #ffffff;--ink: #2d2a32;--ink-soft: #6d6875;--line: rgba(45, 42, 50, .14);--sunshine: #ffd166;--mint: #06d6a0;--coral: #ef476f;--sky: #118ab2;--font-display: "Baloo 2", "Trebuchet MS", sans-serif;--font-body: "Nunito", "Segoe UI", sans-serif}*{box-sizing:border-box;margin:0}body{font-family:var(--font-body);background:var(--paper);color:var(--ink)}.topbar{display:flex;justify-content:space-between;align-items:center;max-width:980px;margin:0 auto;padding:18px 26px 0}.brand{font-family:var(--font-display);font-weight:800;font-size:24px}.back{color:var(--sky);font-weight:800;text-decoration:none;font-size:14px}.dash{max-width:980px;margin:0 auto;padding:18px 26px 60px}.summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:20px}.stat{background:var(--paper-card);border:2px solid var(--line);border-radius:16px;padding:14px 18px}.stat b{font-family:var(--font-display);font-size:28px;display:block;font-variant-numeric:tabular-nums}.stat span{font-size:12px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft)}.panel{background:var(--paper-card);border:2px solid var(--line);border-radius:18px;padding:20px 24px;margin-bottom:20px}.panel h2{font-family:var(--font-display);font-size:20px}.panel-head{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px}.panel-sub{color:var(--ink-soft);font-size:13.5px;font-weight:600;margin:4px 0 14px}.legend{display:flex;gap:14px;font-size:12px;font-weight:800;color:var(--ink-soft);flex-wrap:wrap}.legend .sw{display:inline-block;width:12px;height:12px;border-radius:4px;margin-right:4px;vertical-align:-1px}.sw.fluent,.cell.fluent{background:var(--mint)}.sw.practicing,.cell.practicing{background:var(--sunshine)}.sw.learning,.cell.learning{background:#9fd6ea}.sw.unseen,.cell.unseen{background:#2d2a3214}.sw.flagged,.cell.flagged{background:var(--coral)}.grid-scroll{overflow-x:auto}.heat{display:grid;gap:4px;width:max-content}.cell,.axis{width:34px;height:34px;border-radius:8px;display:grid;place-items:center;font-size:12px;font-weight:800}.axis{color:var(--ink-soft);background:transparent}.cell{cursor:pointer;border:none;color:#2d2a328c;transition:transform .08s}.cell:hover{transform:scale(1.12)}.cell.fluent,.cell.flagged{color:#fff}.cell.empty{visibility:hidden}.detail{margin-top:16px;border-top:2px solid var(--line);padding-top:14px}.detail[hidden]{display:none}.detail h3{font-family:var(--font-display);font-size:17px;margin-bottom:8px}.fact-row{display:flex;gap:10px;align-items:center;font-size:14px;font-weight:700;padding:4px 0;font-variant-numeric:tabular-nums}.fact-row .dot{width:10px;height:10px;border-radius:50%;flex:none}.fact-row small{color:var(--ink-soft);font-weight:600}.flag-item{border:2px solid var(--coral);border-radius:14px;padding:12px 16px;margin:10px 0;background:#ef476f0d}.flag-item b{font-family:var(--font-display)}.flag-item p{font-size:13.5px;color:var(--ink-soft);font-weight:600;margin-top:2px}.empty-note{color:var(--ink-soft);font-weight:700;font-size:14px}.dash-foot{text-align:center}.danger{font-family:var(--font-body);font-weight:800;font-size:13px;color:var(--coral);background:transparent;border:2px solid var(--coral);border-radius:12px;padding:8px 16px;cursor:pointer}.student-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 14px}.student-tab{font-family:var(--font-display);font-weight:800;font-size:14px;padding:6px 14px;border-radius:999px;border:2px solid var(--line);background:var(--paper);color:var(--ink);cursor:pointer}.student-tab.active{border-color:var(--sky);background:#118ab21a}.roster-form{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.roster-form input,.roster-form select{font-family:var(--font-body);font-weight:700;font-size:14px;padding:8px 12px;border:2px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink)}.roster-form input#rfName{width:160px}.roster-form input#rfPin{width:110px}.roster-form button{font-family:var(--font-display);font-weight:800;font-size:14px;padding:8px 16px;border-radius:10px;border:2px solid var(--sky);background:var(--sky);color:#fff;cursor:pointer}.ops-select{font-family:var(--font-body);font-weight:700;font-size:13px;padding:7px 10px;border:2px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);margin-right:10px}.dash-foot{display:flex;justify-content:center;gap:10px;align-items:center;flex-wrap:wrap}.foot-status{margin:10px auto 0;text-align:center;font-size:13px;font-weight:800;color:var(--sky)}.foot-status[hidden]{display:none}
