:root{--page:#f3f4f6;--card:#fff;--border:#d9dce1;--text:#1f2933;--muted:#5f6b7a;--accent:#2554c7;--accent-soft:#e8eefb;--good:#1d7a46;--good-soft:#e6f4ec;--bad:#b42318;--bad-soft:#fdecea;--warn:#92560b;--warn-soft:#fff4e0;--radius:8px;color:var(--text);background:var(--page);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:17px;line-height:1.5}*{box-sizing:border-box}body{background:var(--page);min-height:100vh;margin:0}h1,h2,h3{margin:0 0 .6em;line-height:1.25}h1{font-size:1.6rem}h2{font-size:1.25rem}h3{font-size:1.05rem}p{margin:0 0 .8em}a{color:var(--accent)}.topbar{background:var(--card);border-bottom:1px solid var(--border);align-items:center;gap:1.5rem;height:56px;padding:0 1.5rem;display:flex}.topbar .brand{color:var(--accent);font-size:1.1rem;font-weight:700}.topbar nav{flex:1;gap:.25rem;display:flex}.topbar nav a{border-radius:var(--radius);color:var(--text);padding:.4rem .8rem;font-weight:500;text-decoration:none}.topbar nav a.active{background:var(--accent-soft);color:var(--accent)}.topbar .who{color:var(--muted);font-size:.9rem}a.who{text-decoration:none}a.who:hover{color:var(--accent);text-decoration:underline}.page{max-width:1040px;margin:0 auto;padding:1.5rem}.page.narrow{max-width:760px}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:1rem;padding:1.25rem 1.5rem}.row{flex-wrap:wrap;align-items:center;gap:.75rem;display:flex}.spread{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;display:flex}.stack>*+*{margin-top:.75rem}.muted{color:var(--muted)}.small{font-size:.875rem}.pre-wrap{white-space:pre-wrap}label{margin-bottom:.25rem;font-weight:500;display:block}input[type=text],input[type=password],input[type=email],input[type=date],input[type=number],select,textarea{width:100%;font:inherit;border:1px solid var(--border);border-radius:var(--radius);color:var(--text);background:#fff;padding:.5rem .65rem}textarea{resize:vertical;min-height:6rem}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:-1px}button,.button{font:inherit;border-radius:var(--radius);border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer;padding:.5rem 1rem;font-weight:500;text-decoration:none;display:inline-block}button:disabled{opacity:.5;cursor:not-allowed}button.secondary,.button.secondary{color:var(--accent);background:#fff}button.quiet{color:var(--muted);background:0 0;border-color:#0000;padding:.25rem .5rem}button.quiet:hover{color:var(--text)}button.danger{border-color:var(--bad);color:var(--bad);background:#fff}.notice{border-radius:var(--radius);border:1px solid;margin-bottom:1rem;padding:.75rem 1rem}.notice.good{background:var(--good-soft);border-color:var(--good);color:var(--good)}.notice.bad{background:var(--bad-soft);border-color:var(--bad);color:var(--bad)}.notice.warn{background:var(--warn-soft);border-color:var(--warn);color:var(--warn)}.notice.info{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.badge{background:var(--page);color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:.1rem .5rem;font-size:.8rem;font-weight:600;display:inline-block}.badge.good{background:var(--good-soft);color:var(--good);border-color:var(--good)}.badge.bad{background:var(--bad-soft);color:var(--bad);border-color:var(--bad)}.badge.warn{background:var(--warn-soft);color:var(--warn);border-color:var(--warn)}.table-wrap{overflow-x:auto}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:.5rem .75rem}th{color:var(--muted);font-size:.85rem;font-weight:600}tr.clickable{cursor:pointer}tr.clickable:hover td{background:var(--page)}.auth-page{max-width:420px;margin:8vh auto;padding:0 1rem}.auth-page .brand{color:var(--accent);text-align:center;margin-bottom:1rem;font-size:1.8rem;font-weight:700}.good-text{color:var(--good)}.bad-text{color:var(--bad)}.warn-text{color:var(--warn)}label.inline{margin:0;display:inline}.hint{margin:-.15rem 0 .4rem}.file-button{align-self:flex-start}.section-title{max-width:28rem;font-size:1.2rem;font-weight:600}.section-card textarea{min-height:5rem}.questions-heading{margin-top:1.25rem}.question-row{border-top:1px solid var(--border);grid-template-columns:2rem 1fr auto;gap:.75rem;padding:.75rem 0;display:grid}.question-row:last-of-type{margin-bottom:.75rem}.q-number{color:var(--muted);text-align:right;padding-top:.5rem;font-weight:700}.q-body{flex-direction:column;gap:.4rem;min-width:0;display:flex}.q-prompt{min-height:0}.answer-row{gap:.5rem}.answer-input{max-width:14rem}.answer-type{width:auto}.q-actions{flex-direction:column;align-items:flex-end;gap:.1rem;display:flex}.small-button{padding:.2rem .6rem;font-size:.85rem}.savebar{background:var(--card);border-top:1px solid var(--border);border-bottom:1px solid var(--border);margin:1.5rem -1.5rem 1rem;padding:1rem 1.5rem;position:sticky;bottom:0}.savebar .problems{color:var(--bad);margin:0 0 .75rem;padding-left:1.2rem}.danger-zone{border-color:var(--bad)}.player-card{padding:1.75rem 2rem}.question-text{margin:.5rem 0 1.25rem;font-size:1.5rem;line-height:1.45}.teaching-text{margin-bottom:1rem;font-size:1.15rem;line-height:1.6}.answer-form{gap:.75rem;display:flex}.answer-box{max-width:22rem;padding:.6rem .8rem!important;font-size:1.35rem!important}.answer-form button{padding:.6rem 1.4rem;font-size:1.1rem}.player-actions{justify-content:space-between;align-items:center;margin-top:1.25rem;display:flex}.review-card{border-color:var(--accent);background:var(--accent-soft)}.section-nav{flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:.75rem;display:flex}.nav-dot{border:1px solid var(--border);background:var(--card);min-width:2rem;height:2rem;color:var(--muted);border-radius:999px;padding:0 .4rem;font-size:.85rem}.nav-dot.solved{background:var(--good-soft);border-color:var(--good);color:var(--good)}.nav-dot.current{border:2px solid var(--accent);color:var(--accent);font-weight:700}.preview-header{align-items:flex-end;margin-bottom:1rem}.preview-header h1{margin:0}.teacher-box{border-radius:var(--radius);background:#eceef1;border:1px dashed #b9bec7;flex-direction:column;gap:.5rem;margin-bottom:1rem;padding:.9rem 1.1rem;display:flex}.teacher-label{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:.75rem;font-weight:700}.teacher-box h3,.teacher-box p{margin:0}.left-out-list{margin:.5rem 0 0;padding-left:1.2rem}.left-out-list li{margin-bottom:.3rem}details.card>summary{cursor:pointer}.focus-cover{z-index:100;background:var(--page);justify-content:center;align-items:center;padding:1.5rem;display:flex;position:fixed;inset:0}.focus-cover .card{width:100%;max-width:32rem}.step-nav{flex-wrap:wrap;align-items:center;gap:.5rem 1.25rem;margin-bottom:.75rem;display:flex}.step-group{align-items:center;gap:.35rem;display:flex}.step-pill{padding:0 .8rem}.nav-dot:disabled{opacity:.45}.step-text{font-size:1.15rem;line-height:1.6}.step-image{border:1px solid var(--border);border-radius:var(--radius);max-width:100%;height:auto;margin:0 auto 1rem;display:block}.video-frame{aspect-ratio:16/9;border-radius:var(--radius);background:#000;margin-bottom:.75rem;position:relative;overflow:hidden}.video-frame iframe{border:0;width:100%;height:100%;position:absolute;inset:0}.part{margin:1.5rem 0 .5rem}.part-prompt{gap:.6rem;margin-bottom:.6rem;font-size:1.2rem;line-height:1.5;display:flex}.part-label{color:var(--accent);font-weight:700}.part-feedback{margin-top:.5rem;font-weight:500}.answer-text{font-size:1.1rem}table.two-way{border:1px solid #8a919c;width:auto;min-width:60%;margin:.25rem 0 1rem}table.two-way th,table.two-way td{text-align:center;vertical-align:middle;border:1px solid #8a919c;padding:.55rem .9rem;font-size:1.05rem}table.two-way th{color:var(--text);background:#e8e9ec;font-weight:700}table.two-way td.given{color:var(--text)}table.fill-in td{min-width:7rem;padding:.35rem .5rem}.cell-entry{align-items:center;gap:.25rem;display:inline-flex}.cell-entry input{text-align:center;width:5.5rem;padding:.35rem;font-size:1.1rem}td.cell-good{background:var(--good-soft)}td.cell-recheck{background:var(--warn-soft);outline:2px solid var(--warn);outline-offset:-2px}.cell-answer{color:var(--bad);margin-top:.2rem;font-size:.95rem;font-weight:700;display:block}.choices{flex-direction:column;align-items:flex-start;gap:.4rem;display:flex}.choice{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;align-items:center;gap:.6rem;padding:.35rem .8rem;font-size:1.1rem;font-weight:400;display:flex}.choice.cell-good{background:var(--good-soft);border-color:var(--good)}.choice-inline{align-items:center;gap:.4rem;margin:0;font-weight:400;display:inline-flex}.check-button{padding:.6rem 1.6rem;font-size:1.1rem}.modal-backdrop{z-index:90;background:#1f293373;justify-content:center;align-items:center;padding:1.5rem;display:flex;position:fixed;inset:0}.modal{width:100%;max-width:30rem;margin:0}.modal-actions{justify-content:flex-end;margin-top:1rem}.tabs{gap:.25rem;display:flex}.lesson-grid{grid-template-columns:repeat(auto-fill,minmax(17rem,1fr));gap:1rem;display:grid}.lesson-card{color:var(--text);margin:0;text-decoration:none;display:block}a.lesson-card:hover{border-color:var(--accent)}.lesson-card.disabled{opacity:.6}.mastery-number{color:var(--accent);font-size:2.2rem;font-weight:700;line-height:1.1}.progress-bar{background:var(--page);border-radius:999px;height:.5rem;margin:.4rem 0 .2rem;overflow:hidden}.progress-bar span{background:var(--accent);height:100%;display:block}.exit-line{margin-top:.6rem}.stuck-banner{background:var(--warn-soft);border-bottom:1px solid var(--warn);color:var(--warn);padding:.6rem 1.5rem}.stuck-banner ul{color:var(--text);margin:.3rem 0 0;padding-left:1.2rem}.stuck-banner li{margin-bottom:.25rem}.notification-prompt{margin:.75rem 1.5rem 0}.student-work h4{margin:.75rem 0 .25rem}.work-part ol{margin:.2rem 0 .5rem;padding-left:1.4rem}.part-action{margin-top:.5rem}.part-check{color:var(--accent);border-color:var(--accent);background:#fff;padding:.4rem 1rem;font-size:.95rem}.percent-cell{align-items:center;gap:.5rem;min-width:8rem;display:inline-flex}.percent-cell .progress-bar{flex:1;min-width:4rem;margin:0}.summary-row{flex-wrap:wrap;gap:1.5rem 2.5rem;display:flex}.step-heading{margin:0}.question-history{border-top:1px solid var(--border);margin-top:.9rem;padding-top:.9rem}.question-history .part-prompt{margin-bottom:.25rem;font-size:1.05rem}.history-meta{margin-bottom:.4rem}.tries{margin:.25rem 0 0;padding-left:1.3rem}.tries li{margin-bottom:.6rem}.typed-answer{background:var(--page);border-radius:var(--radius);white-space:pre-wrap;margin:.2rem 0;padding:.3rem .6rem}.shown-hint{color:var(--bad)}.live-dot{background:var(--good);border-radius:50%;width:.55rem;height:.55rem;margin-right:.3rem;animation:2s ease-in-out infinite live-pulse;display:inline-block}@keyframes live-pulse{50%{opacity:.3}}.pin-form{margin-top:1rem}.pin-form input{letter-spacing:.3em;text-align:center;max-width:10rem;font-size:1.4rem}.focus-banner{background:var(--bad-soft);border-bottom-color:var(--bad);color:var(--bad)}.pin-missing{border-color:var(--warn);background:var(--warn-soft)}.profile-row{gap:1rem;padding:.3rem 0;display:flex}.profile-row span{width:6rem}.password-form{max-width:22rem;margin-top:.75rem}.link-button{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:none;padding:0;text-decoration:underline}.edit-table input{padding:.35rem .5rem}.add-actions{margin-top:1rem}.reset-password{text-align:right;max-width:28rem}.frac{vertical-align:middle;text-align:center;flex-direction:column;margin:0 .15em;line-height:1.2;display:inline-flex}.frac>span:first-child{border-bottom:1.5px solid;padding:0 .2em}.frac>span:last-child{padding:0 .2em}.choice .frac{font-size:1.05em}.work-lines{width:auto;margin:.25rem 0 1rem}.work-lines th,.work-lines td{color:var(--text);border:none;padding:.3rem 1.25rem .3rem 0;font-size:1.15rem}.work-lines th{color:var(--muted);font-weight:500}tr.row-working td{background:#fff3bf}tr.row-working:hover td{background:#ffe991}.working-now{color:var(--warn);font-weight:600}.live-alert{margin-top:.25rem}.video-bar{justify-content:flex-end;margin:0 0 .75rem;display:flex}.video-size-button{padding:.4rem .9rem;font-size:.95rem}.video-big{z-index:80;background:#000;flex-direction:column;display:flex;position:fixed;inset:0}.video-big .video-frame{aspect-ratio:auto;border-radius:0;flex:1;margin:0}.video-big .video-bar{background:#000;margin:0;padding:.6rem 1rem}.video-size-button.big{color:#111;background:#fff;border-color:#fff}.help-text{white-space:pre-line}.announcement-bar{z-index:150;background:var(--warn-soft);border-bottom:3px solid var(--warn);height:10vh;min-height:3.5rem;color:var(--text);align-items:center;gap:1rem;padding:0 4.5rem 0 1.5rem;display:flex;position:fixed;top:0;left:0;right:0;box-shadow:0 2px 8px #0000001f}.announcement-text{font-size:clamp(1.05rem,2.6vh,1.6rem);line-height:1.3;overflow:hidden}.announcement-more{color:var(--muted);font-size:.8em}.announcement-close{color:var(--warn);background:0 0;border:none;padding:.2rem;line-height:0;position:absolute;top:.4rem;right:.6rem}.announcement-close:hover{color:var(--text)}body.has-announcement{padding-top:max(10vh,3.5rem)}body.has-announcement .focus-cover,body.has-announcement .modal-backdrop,body.has-announcement .video-big{top:max(10vh,3.5rem)}.announcement-form textarea{min-height:0}.sent-list ul{margin:.3rem 0 0;padding-left:1.2rem}
