:root{--bg: #fdfaf3;--surface: #ffffff;--surface-2: #f6f2ea;--ink: #16202c;--ink-2: #44525f;--muted: #6b7684;--line: #ddd6c9;--line-strong: #b9b0a0;--tone-a: #0f6f8c;--tone-a-soft: #d9eef4;--tone-b: #bf6b12;--tone-b-soft: #fbebd3;--tone-c: #7340b0;--tone-c-soft: #ece2fa;--tone-student: #2f4fd0;--tone-student-soft: #e1e7fd;--tone-reference: #8b95a3;--good: #17704a;--good-soft: #dcf2e7;--attention: #9e3f1f;--attention-soft: #fbe6dd;--focus: #1b46d6;--radius: 14px;--radius-sm: 9px;--shadow: 0 1px 2px rgba(20, 30, 40, .06), 0 8px 24px rgba(20, 30, 40, .06);--pad: clamp(14px, 2vw, 24px)}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:Segoe UI,system-ui,-apple-system,Helvetica Neue,Arial,sans-serif;font-size:16px;line-height:1.55}h1,h2,h3,h4{line-height:1.22;margin:0 0 .4em}h1{font-size:clamp(1.5rem,2.6vw,2.1rem);letter-spacing:-.015em}h2{font-size:clamp(1.2rem,2vw,1.5rem)}h3{font-size:1.06rem}h4{font-size:.97rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-2)}p{margin:0 0 .75em}ul,ol{margin:0 0 .75em;padding-left:1.25em}li{margin-bottom:.3em}a{color:var(--tone-a)}.muted{color:var(--muted)}.small{font-size:.86rem}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;clip-path:inset(50%);overflow:hidden;white-space:nowrap}:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:4px}.skip-link{position:absolute;left:-999px;top:8px;z-index:50;background:var(--surface);padding:10px 16px;border-radius:var(--radius-sm);box-shadow:var(--shadow)}.skip-link:focus{left:8px}.app{max-width:1280px;margin:0 auto;padding:0 var(--pad) 48px}.app-head{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:center;justify-content:space-between;padding:14px 0}.brand-button{display:flex;align-items:center;gap:12px;background:none;border:0;padding:4px;cursor:pointer;text-align:left;color:inherit}.brand-mark svg{width:40px;height:40px}.brand-mark circle{fill:var(--tone-a-soft);stroke:var(--tone-a);stroke-width:2.4}.brand-mark circle+circle{fill:var(--tone-b-soft);stroke:var(--tone-b)}.brand-mark path{stroke:var(--tone-c);stroke-width:2.4;stroke-linecap:round}.brand-text{display:flex;flex-direction:column}.brand-text strong{font-size:1.16rem;letter-spacing:-.01em}.brand-tag{font-size:.72rem;text-transform:uppercase;letter-spacing:.1em;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);border-radius:999px;padding:1px 9px;width:fit-content;margin-top:2px}.head-controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.view-toggle{display:flex;gap:4px;margin:0;padding:3px;border:1px solid var(--line);border-radius:999px;background:var(--surface)}.view-toggle label{padding:6px 14px;border-radius:999px;cursor:pointer;font-size:.9rem;display:inline-flex;align-items:center}.view-toggle label.is-on{background:var(--ink);color:#fff}.view-toggle input{position:absolute;opacity:0;width:1px;height:1px}.view-toggle:focus-within{outline:3px solid var(--focus);outline-offset:2px}.module-nav{display:flex;gap:6px;flex-wrap:wrap;padding-bottom:12px}.tab{border:1px solid var(--line);background:var(--surface);color:var(--ink-2);border-radius:999px;padding:6px 15px;cursor:pointer;font-size:.9rem}.tab.is-on{background:var(--ink);border-color:var(--ink);color:#fff}main{display:block}main:focus{outline:none}.app-foot{margin-top:40px;padding-top:18px;border-top:1px solid var(--line);color:var(--ink-2);font-size:.9rem}.btn{font:inherit;font-size:.93rem;border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);border-radius:var(--radius-sm);padding:9px 16px;cursor:pointer;min-height:42px}.btn:hover:not(:disabled){background:var(--surface-2)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--tone-a);border-color:var(--tone-a);color:#fff;font-weight:600}.btn-primary:hover:not(:disabled){background:#0c5d76}.btn-quiet{background:transparent;border-color:var(--line);color:var(--ink-2)}.btn-tiny{min-height:32px;padding:3px 10px;font-size:.8rem}.button-row{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end}.activity-buttons{margin:14px 0 6px}.chip{font:inherit;font-size:.87rem;border:1px solid var(--line-strong);background:var(--surface);border-radius:999px;padding:6px 13px;cursor:pointer;min-height:38px}.chip.is-on{background:var(--tone-a);border-color:var(--tone-a);color:#fff}.chip-radio{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--line-strong);background:var(--surface);border-radius:999px;padding:7px 14px;cursor:pointer;font-size:.89rem;min-height:40px}.chip-radio.is-on{background:var(--tone-a-soft);border-color:var(--tone-a);color:#0a4d62;font-weight:600}.chip-radio input{accent-color:var(--tone-a)}.chip-radio.is-toggle{border-style:dashed}.field{display:inline-flex;flex-direction:column;gap:3px}.field label{font-size:.78rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.field input{font:inherit;padding:8px 10px;min-height:42px;border:1.5px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink)}.field-narrow input{width:78px}.field-normal input{width:128px}.field-hint{font-size:.76rem;color:var(--muted);max-width:190px}.field.is-ok input{border-color:var(--good);background:var(--good-soft)}.field.is-wrong input,.field.is-unreadable input{border-color:var(--attention);background:var(--attention-soft)}.field input[aria-invalid=true]{border-color:var(--attention)}.select-field{display:inline-flex;flex-direction:column;gap:3px}.select-field span{font-size:.78rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.select-field select{font:inherit;padding:8px 10px;min-height:42px;border:1.5px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--ink)}.slider-field{display:flex;flex-direction:column;gap:4px;min-width:220px}.slider-field label{font-size:.88rem;font-weight:600}.slider-field output{font-variant-numeric:tabular-nums;background:var(--tone-a-soft);color:#0a4d62;border-radius:6px;padding:1px 8px;margin-left:6px}.slider-field input[type=range]{accent-color:var(--tone-a);height:28px}.choice-group{border:0;margin:14px 0;padding:0}.choice-group legend{font-weight:600;padding:0 0 6px}.control-panel{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-end;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:14px;margin:14px 0}.control-label{font-size:.82rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:4px}.coordinate-entry{margin:10px 0}.hero{background:linear-gradient(120deg,var(--tone-a-soft),var(--tone-c-soft) 55%,var(--tone-b-soft));border:1px solid var(--line);border-radius:20px;padding:clamp(20px,3.5vw,36px);margin-bottom:22px}.hero h1{max-width:22ch}.hero p{max-width:62ch;margin:0;color:var(--ink-2)}.module-cards{list-style:none;padding:0;margin:0 0 28px;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(290px,1fr))}.module-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column;margin:0}.card-art{padding:14px 14px 0;background:var(--surface-2)}.card-art svg{display:block;width:100%;height:auto;max-height:150px}.card-a .card-art{background:var(--tone-a-soft)}.card-b .card-art{background:var(--tone-b-soft)}.card-c .card-art{background:var(--tone-c-soft)}.card-body{padding:16px;display:flex;flex-direction:column;gap:4px;flex:1}.card-body h2{margin-bottom:2px}.card-body h3{font-size:.78rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:10px 0 4px}.card-body ul{flex:1;font-size:.92rem;color:var(--ink-2)}.card-kicker{font-size:.78rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:0}.card-subtitle{color:var(--ink-2);margin:0}.card-body .btn{align-self:flex-start;margin-top:8px}.art-grid{stroke:#16202c24;stroke-width:1}.art-line-a{stroke:var(--tone-a);stroke-width:3.4;stroke-linecap:round}.art-line-b{stroke:var(--tone-b);stroke-width:3.4;stroke-linecap:round}.art-line-c{stroke:var(--tone-c);stroke-width:3.4;stroke-linecap:round}.art-dot-a{fill:var(--tone-a)}.art-dot-b{fill:var(--tone-b)}.art-dot-c{fill:var(--tone-c)}.art-open{fill:#fff;stroke:var(--tone-b);stroke-width:2.6}.art-cell{fill:#fff;stroke:var(--tone-c);stroke-width:2.6}.art-nucleus{fill:var(--tone-c-soft);stroke:var(--tone-c);stroke-width:1.6}.art-dendrite{stroke:var(--tone-c);stroke-width:2.2;stroke-linecap:round}.art-antibody{stroke:var(--tone-b);stroke-width:3;stroke-linecap:round}.method{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:var(--pad)}.method-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));margin:12px 0}.method-grid>div{background:var(--surface-2);border-radius:var(--radius-sm);padding:12px 14px}.method-grid h3{margin-bottom:4px;color:var(--tone-a)}.method-grid p{margin:0;font-size:.9rem;color:var(--ink-2)}.module-head{margin-bottom:14px}.module-subtitle{color:var(--ink-2);max-width:70ch;margin-bottom:4px}.stepper{margin:0 0 14px}.stepper ol{list-style:none;display:flex;flex-wrap:wrap;gap:6px;padding:0;margin:0}.stepper li{margin:0}.step{display:inline-flex;align-items:center;gap:8px;font:inherit;font-size:.86rem;border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:5px 14px 5px 5px;cursor:pointer;min-height:38px;color:var(--ink-2)}.step.is-current{border-color:var(--tone-a);background:var(--tone-a-soft);color:#0a4d62;font-weight:600}.step-index{width:26px;height:26px;border-radius:50%;background:var(--surface-2);display:inline-grid;place-items:center;font-variant-numeric:tabular-nums;font-size:.8rem}.step.is-current .step-index{background:var(--tone-a);color:#fff}.stepper-controls{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:18px;flex-wrap:wrap}.activity{display:grid;gap:16px;grid-template-columns:minmax(0,1fr);align-items:start}@media(min-width:1080px){.view-tutor .activity{grid-template-columns:minmax(0,1fr) 320px}}.activity-main{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:var(--pad);box-shadow:var(--shadow);min-width:0}.activity-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;margin-bottom:8px}.activity-head h2{margin:0;flex:1;min-width:200px}.phase{font-size:.7rem;font-weight:700;letter-spacing:.12em;border-radius:999px;padding:3px 11px;background:var(--surface-2);color:var(--ink-2)}.phase-ask{background:var(--tone-b-soft);color:#7d4507}.phase-guide{background:var(--tone-a-soft);color:#0a4d62}.phase-check{background:var(--tone-c-soft);color:#4d2483}.phase-connect{background:var(--good-soft);color:var(--good)}.minutes{font-size:.84rem;color:var(--muted)}.task{font-size:1.03rem;color:var(--ink);max-width:72ch}.activity-body{margin-top:10px}.focus-note{grid-column:1 / -1;background:var(--tone-c-soft);border:1px dashed var(--tone-c);border-radius:var(--radius-sm);padding:10px 14px;font-size:.9rem;color:#43206f;margin:0}.tutor-panel{background:var(--surface-2);border:1px solid var(--line-strong);border-radius:var(--radius);padding:16px;position:sticky;top:12px;font-size:.92rem;min-width:0}.tutor-panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.tutor-panel h3{margin:0}.reminder{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;background:var(--tone-b-soft);color:#7d4507;border-radius:999px;padding:2px 9px;margin:0}.tutor-note{margin:10px 0;color:var(--ink-2)}.tutor-note strong{color:var(--ink)}.tutor-note.ready{border-top:1px solid var(--line);padding-top:10px}.disclosure{margin:10px 0}.disclosure-button{font:inherit;font-size:.9rem;display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line-strong);background:var(--surface);border-radius:var(--radius-sm);padding:8px 13px;cursor:pointer;min-height:40px;text-align:left}.disclosure.tone-answer .disclosure-button{border-color:var(--tone-c);color:#4d2483;background:var(--tone-c-soft)}.disclosure-caret{font-weight:700;width:1ch;display:inline-block}.disclosure-body{margin-top:10px}.answer-withheld{border:1px dashed var(--tone-c);background:var(--tone-c-soft);color:#43206f;border-radius:var(--radius-sm);padding:9px 13px;margin:10px 0}.hint-ladder{margin:18px 0 0;padding:14px;border:1px dashed var(--line-strong);border-radius:var(--radius-sm);background:var(--surface-2)}.hint-ladder-head h4{margin-bottom:2px}.hint-list{list-style:none;padding:0;margin:10px 0}.hint-list li{border-left:3px solid var(--tone-a);padding-left:11px;margin-bottom:10px}.hint-list li:nth-child(2){border-color:var(--tone-b)}.hint-list li:nth-child(3){border-color:var(--tone-c)}.hint-step{font-size:.74rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted)}.hint-list p{margin:2px 0 0}.solution-list{margin:8px 0}.worked-solution .button-row{margin-top:8px}.feedback{border-radius:var(--radius-sm);padding:11px 14px;margin:12px 0;font-size:.95rem;border-left:5px solid var(--line-strong);background:var(--surface-2)}.feedback-correct{background:var(--good-soft);border-color:var(--good);color:#0d4c31}.feedback-partial{background:var(--tone-b-soft);border-color:var(--tone-b);color:#6f3d06}.feedback-try-again{background:var(--attention-soft);border-color:var(--attention);color:#7a3117}.feedback-info{background:var(--tone-a-soft);border-color:var(--tone-a);color:#0a4d62}.manual-record{margin:18px 0 0;border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px;background:var(--surface)}.manual-record legend{font-weight:600;padding:0 6px}.callout{background:var(--tone-a-soft);border:1px solid var(--tone-a);border-radius:var(--radius-sm);padding:13px 15px;margin:16px 0;color:#0a4353}.callout h4{color:#0a4353;margin-bottom:4px}.callout p{margin-bottom:8px}.graph{margin:0}.graph-svg{display:block;width:100%;height:auto;max-width:520px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm)}.graph-caption{font-size:.84rem;color:var(--muted);max-width:62ch;margin-top:6px}.graph-caption-title{color:var(--ink-2);font-weight:600}.graph-field{fill:#fffdf8}.graph-grid{stroke:#e6e0d4;stroke-width:1}.graph-axis{stroke:#46505c;stroke-width:1.6}.graph-tick{font-size:11px;fill:var(--ink-2);font-variant-numeric:tabular-nums}.graph-axis-label{font-size:13px;font-style:italic;fill:var(--ink-2)}.graph-piece-line{stroke-width:3.6;stroke-linecap:round;fill:none}.graph-piece.tone-a .graph-piece-line,.graph-piece.tone-a .graph-arrow{stroke:var(--tone-a);fill:var(--tone-a)}.graph-piece.tone-b .graph-piece-line,.graph-piece.tone-b .graph-arrow{stroke:var(--tone-b);fill:var(--tone-b)}.graph-piece.tone-c .graph-piece-line,.graph-piece.tone-c .graph-arrow{stroke:var(--tone-c);fill:var(--tone-c)}.graph-piece.tone-student .graph-piece-line,.graph-piece.tone-student .graph-arrow{stroke:var(--tone-student);fill:var(--tone-student)}.graph-piece.tone-reference .graph-piece-line,.graph-piece.tone-reference .graph-arrow{stroke:var(--tone-reference);fill:var(--tone-reference)}.graph-piece.is-dashed .graph-piece-line{stroke-dasharray:8 6;stroke-width:2.4}.graph-piece.is-faint{opacity:.55}.graph-arrow{stroke:none}.graph-piece-label{font-size:12px;font-weight:600;fill:var(--ink);paint-order:stroke;stroke:#fffdf8;stroke-width:4px;stroke-linejoin:round}.graph-endpoint{stroke-width:3}.graph-endpoint.is-open{fill:#fffdf8}.graph-endpoint.tone-a{stroke:var(--tone-a)}.graph-endpoint.tone-a.is-closed{fill:var(--tone-a)}.graph-endpoint.tone-b{stroke:var(--tone-b)}.graph-endpoint.tone-b.is-closed{fill:var(--tone-b)}.graph-endpoint.tone-c{stroke:var(--tone-c)}.graph-endpoint.tone-c.is-closed{fill:var(--tone-c)}.graph-endpoint.tone-student{stroke:var(--tone-student)}.graph-endpoint.tone-student.is-closed{fill:var(--tone-student)}.graph-endpoint.tone-reference{stroke:var(--tone-reference)}.graph-point circle{stroke-width:2.6}.graph-point.tone-student circle{stroke:var(--tone-student);fill:var(--tone-student)}.graph-point.tone-student circle.is-open{fill:#fffdf8}.graph-point.tone-a circle{stroke:var(--tone-a);fill:var(--tone-a)}.graph-point.tone-b circle{stroke:var(--tone-b);fill:var(--tone-b)}.graph-point.tone-c circle{stroke:var(--tone-c);fill:var(--tone-c)}.graph-point path.is-cross{stroke-width:3;stroke-linecap:round;fill:none}.graph-point.tone-student path.is-cross{stroke:var(--tone-student)}.graph-point-label{font-size:11px;fill:var(--ink-2);paint-order:stroke;stroke:#fffdf8;stroke-width:3.5px;stroke-linejoin:round}.graph-hit{fill:transparent;cursor:crosshair}.graph-riserun line{stroke:var(--tone-b);stroke-width:2.4;stroke-dasharray:5 4}.graph-riserun text{font-size:11px;fill:#7d4507;paint-order:stroke;stroke:#fffdf8;stroke-width:3.5px;stroke-linejoin:round}.graph-xmarker line{stroke:var(--tone-student);stroke-width:2.2;stroke-dasharray:3 5}.graph-xmarker text{font-size:12px;font-weight:600;fill:var(--tone-student);paint-order:stroke;stroke:#fffdf8;stroke-width:4px}.workspace{display:grid;gap:16px;grid-template-columns:minmax(0,1fr);align-items:start}@media(min-width:760px){.workspace{grid-template-columns:minmax(0,1fr) minmax(220px,300px)}}.workspace-side{min-width:0}.point-list{list-style:none;padding:0;margin:10px 0;font-variant-numeric:tabular-nums}.point-list li{display:inline-block;margin:0 6px 6px 0;background:var(--tone-student-soft);border:1px solid var(--tone-student);color:#1c3496;border-radius:999px;padding:3px 11px;font-size:.86rem}.point-list li.muted{background:var(--surface-2);border-color:var(--line);color:var(--muted)}.equation{font-size:1.2rem;display:flex;flex-wrap:wrap;align-items:center;gap:2px}.equation-name{font-style:italic;font-weight:600}.term{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:2.4em;padding:3px 9px;border-radius:8px;background:var(--surface-2);border:1.5px solid var(--line);font-variant-numeric:tabular-nums;transition:background .14s ease}.term.is-active{background:var(--tone-b-soft);border-color:var(--tone-b);font-weight:700}.term-tag{position:absolute;top:-9px;left:4px;font-size:.6rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);background:var(--surface);padding:0 3px;border-radius:3px}.equation-op{font-style:italic}.equation-plain{font-size:.92rem;color:var(--muted)}.equation-plain-large{font-size:1.45rem;font-weight:600;letter-spacing:-.01em;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 16px;display:inline-block}.definition{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 15px;margin:12px 0}.definition ul{list-style:none;padding:0;margin:0}.definition li{display:flex;align-items:center;gap:9px;font-size:1.02rem;font-variant-numeric:tabular-nums}.piece-swatch{width:14px;height:14px;border-radius:4px;background:var(--tone-a);display:inline-block;flex:none}.piece-swatch.tone-b,.piece-row.tone-b .piece-swatch{background:var(--tone-b)}.piece-swatch.tone-c,.piece-row.tone-c .piece-swatch{background:var(--tone-c)}.definition li:nth-child(2) .piece-swatch{background:var(--tone-b)}.definition li:nth-child(3) .piece-swatch{background:var(--tone-c)}.piece-rows{display:grid;gap:12px;margin:16px 0}.piece-row{border:1.5px solid var(--line);border-left-width:6px;border-left-color:var(--tone-a);border-radius:var(--radius-sm);padding:12px 14px;margin:0;background:var(--surface)}.piece-row.tone-b{border-left-color:var(--tone-b)}.piece-row.tone-c{border-left-color:var(--tone-c)}.piece-row.is-ok{background:var(--good-soft)}.piece-row legend{font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:0 6px}.piece-given{font-weight:400;color:var(--ink-2);font-size:.9rem}.piece-row-grid{display:grid;gap:14px}@media(min-width:900px){.piece-row-grid{grid-template-columns:auto 1fr}}.piece-rule-label{display:block;font-size:.74rem;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-bottom:4px}.piece-rule-body{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-end;font-size:1.05rem}.piece-preview{font-size:.92rem;color:var(--ink-2);margin:10px 0 0}.piece-notes{list-style:none;padding:0;margin:8px 0 0}.piece-notes li,p.piece-notes{font-size:.89rem;color:#7a3117;background:var(--attention-soft);border-radius:6px;padding:5px 9px;margin-bottom:4px}.piece-ok{font-size:.89rem;color:#0d4c31;background:var(--good-soft);border-radius:6px;padding:5px 9px;margin:8px 0 0}.assembled{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 15px;margin:14px 0}.assembled-list{list-style:none;padding:0;margin:0}.assembled-list li{display:flex;align-items:center;gap:9px;font-variant-numeric:tabular-nums}.value-checker{border:1px dashed var(--line-strong);border-radius:var(--radius-sm);padding:12px 15px;margin:16px 0}.readout{background:var(--tone-a-soft);border-radius:var(--radius-sm);padding:9px 13px;color:#0a4353;font-size:.95rem;margin:10px 0 0}.number-line-figure{margin:14px 0}.number-line-svg{display:block;width:100%;height:auto;max-width:520px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm)}.interval-span line{stroke-width:5;stroke-linecap:butt;opacity:.45}.interval-span.is-active line{opacity:1;stroke-width:7}.interval-span circle{stroke-width:3}.interval-span.tone-a line,.interval-span.tone-a polygon{stroke:var(--tone-a);fill:var(--tone-a)}.interval-span.tone-a circle{stroke:var(--tone-a);fill:var(--tone-a)}.interval-span.tone-b line,.interval-span.tone-b polygon{stroke:var(--tone-b);fill:var(--tone-b)}.interval-span.tone-b circle{stroke:var(--tone-b);fill:var(--tone-b)}.interval-span.tone-c line,.interval-span.tone-c polygon{stroke:var(--tone-c);fill:var(--tone-c)}.interval-span.tone-c circle{stroke:var(--tone-c);fill:var(--tone-c)}.interval-span circle.is-open{fill:#fffdf8}.interval-label{font-size:11px;font-weight:600;fill:var(--ink-2);paint-order:stroke;stroke:var(--surface);stroke-width:3.5px;stroke-linejoin:round}.interval-span.is-active .interval-label{fill:var(--ink)}.number-line-marker line{stroke:var(--tone-student);stroke-width:2.2;stroke-dasharray:3 4}.number-line-marker polygon{fill:var(--tone-student)}.case-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));margin:16px 0}.case{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px}.case h4{font-size:1.05rem;text-transform:none;letter-spacing:0;color:var(--ink)}.case .choice-group{margin:6px 0 10px}.teach-back{font-size:1.05rem}.module-c{max-width:1120px}.overview{margin:16px 0 22px}.overview ol{list-style:none;padding:0;margin:0;display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}.overview li{margin:0}.overview-button{width:100%;height:100%;text-align:left;font:inherit;cursor:pointer;border:1.5px solid var(--line);border-top-width:5px;border-radius:var(--radius-sm);background:var(--surface);padding:11px 13px;display:flex;flex-direction:column;gap:3px}.branch-barrier .overview-button{border-top-color:#6a8f3c}.branch-innate .overview-button{border-top-color:var(--tone-a)}.branch-bridge .overview-button{border-top-color:var(--tone-c)}.branch-humoral .overview-button{border-top-color:var(--tone-b)}.branch-cellmediated .overview-button{border-top-color:#b5406a}.branch-memory .overview-button{border-top-color:#3d7f9e}.overview-button.is-current{background:var(--surface-2);box-shadow:inset 0 0 0 2px var(--ink)}.overview-title{font-weight:700}.overview-where{font-size:.76rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.overview-summary{font-size:.88rem;color:var(--ink-2)}.stage-player{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:var(--pad);box-shadow:var(--shadow)}.stage-head{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:baseline}.stage-where{font-size:.82rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.scene{display:block;width:100%;height:auto;background:#fffdf8;border:1px solid var(--line);border-radius:var(--radius-sm)}.region-tissue{fill:#f3f7ea;stroke:#cfdcb6}.region-node{fill:#eef2fb;stroke:#c6d1ec}.region{stroke-width:1.5}.region-label{font-size:15px;font-weight:700;fill:var(--ink-2);letter-spacing:.04em}.cell{transition:transform .7s cubic-bezier(.4,0,.2,1),opacity .4s ease}.scene.is-static .cell{transition:none}.cell.is-dim{opacity:.38}.cell.is-highlight .cell-body{stroke-width:3.4}.cell-body{fill:#fff;stroke:var(--ink-2);stroke-width:2.2}.cell-face circle{fill:var(--ink)}.cell-face path{stroke:var(--ink);stroke-width:1.5;stroke-linecap:round}.nucleus{fill:#16202c1f;stroke:var(--ink-2);stroke-width:1.2}.cell-label{font-size:11px;font-weight:600;fill:var(--ink-2);paint-order:stroke;stroke:#fffdf8;stroke-width:3.5px;stroke-linejoin:round}.micro-label{font-size:9.5px;fill:var(--muted);paint-order:stroke;stroke:#fffdf8;stroke-width:3px;stroke-linejoin:round}.marker-label{font-size:9px;font-weight:700;fill:#fff}.cell-macrophage .cell-body{fill:#d7eef1;stroke:#1b7a8c}.cell-macrophage .marker-label{fill:#1b7a8c}.cell-dendritic .cell-body{fill:var(--tone-c-soft);stroke:var(--tone-c)}.cell-dendritic .dendrite{stroke:var(--tone-c);stroke-width:2.4;stroke-linecap:round}.cell-helperT .cell-body{fill:#dbe6fb;stroke:#2b52b8}.cell-helperT .marker-label{fill:#2b52b8;stroke:#fff;stroke-width:3px;paint-order:stroke}.cell-cytotoxicT .cell-body{fill:#fbdfe6;stroke:#b5406a}.cell-cytotoxicT .marker-label{fill:#b5406a;stroke:#fff;stroke-width:3px;paint-order:stroke}.cell-bcell .cell-body{fill:#e2f2dc;stroke:#457f34}.cell-plasma .cell-body{fill:#cfe8c5;stroke:#2f6b22}.cell-plasma .er{stroke:#2f6b22;stroke-width:1.8}.cell-memoryB .cell-body{fill:#e2f2dc;stroke:#457f34}.cell-memoryT .cell-body{fill:#dbe6fb;stroke:#2b52b8}.memory-tag{fill:var(--tone-b);stroke:#7d4507;stroke-width:1.2}.cell-epithelial .cell-body{fill:#f5efe2;stroke:#9a8b6c}.cell-infected .cell-body{fill:#f7e3d6;stroke:#b5643a}.viral-protein{fill:#8f2d2d}.cell-apoptotic .cell-body{fill:#ece7df;stroke:#8a8378;stroke-dasharray:5 4}.bleb{fill:#ece7df;stroke:#8a8378;stroke-width:1.4}.apoptosis-mark{stroke:#8a8378;stroke-width:2;stroke-linecap:round}.cell-virus .cell-body{fill:#8f2d2d;stroke:#5c1c1c}.virus-spike{stroke:#5c1c1c;stroke-width:1.8}.virus-knob{fill:#c24b4b;stroke:#5c1c1c;stroke-width:1}.receptor path{stroke:var(--ink-2);stroke-width:2;stroke-linecap:round}.cell-bcell .receptor path,.cell-memoryB .receptor path{stroke:#457f34}.cell-helperT .receptor path,.cell-memoryT .receptor path{stroke:#2b52b8}.cell-cytotoxicT .receptor path{stroke:#b5406a}.mhc-stem{stroke:var(--ink-2);stroke-width:2}.peptide-shape{fill:var(--tone-b);stroke:#7d4507;stroke-width:1.2}.antibody-stem{stroke:var(--tone-b);stroke-width:2.6;stroke-linecap:round}.binding-site{fill:#fff;stroke:var(--tone-b);stroke-width:2}.cytokine-dot{fill:#d68b2c}.mucus{stroke:#7ba9c9;stroke-width:6;stroke-linecap:round;opacity:.65}.epithelium{fill:#f5efe2;stroke:#9a8b6c;stroke-width:1.8}.vesicle{fill:#fff;stroke:var(--ink-2);stroke-width:1.8;stroke-dasharray:3 3}.vesicle.is-fused{stroke-dasharray:none;fill:#f0e4c8}.vesicle-content{fill:#8f2d2d}.lysosome{fill:#e5c46a;stroke:#9a7a1c;stroke-width:1.4}.digest-mark{stroke:#9a7a1c;stroke-width:1.6;stroke-linecap:round}.scene-arrow line{stroke:var(--ink-2);stroke-width:2.2}.scene-arrow polygon{fill:var(--ink-2)}.scene-arrow.is-dashed line{stroke-dasharray:6 5;stroke:var(--tone-c)}.scene-arrow.is-dashed polygon{fill:var(--tone-c)}.arrow-label{font-size:10.5px;fill:var(--ink-2);paint-order:stroke;stroke:#fffdf8;stroke-width:3.5px;stroke-linejoin:round}.beat-caption{font-size:1.04rem;margin:12px 0;max-width:78ch}.player-controls{margin-bottom:12px}.ask-block{background:var(--tone-b-soft);border:1px solid var(--tone-b);border-radius:var(--radius-sm);padding:13px 15px;margin:14px 0}.ask-block h4{text-transform:none;letter-spacing:0;font-size:1.05rem;color:#7d4507}.ask-block .choice-group legend{position:absolute;width:1px;height:1px;margin:-1px;clip-path:inset(50%);overflow:hidden}.teaching{margin-top:16px;border-top:1px solid var(--line);padding-top:12px}.teaching ul{font-size:.95rem;color:var(--ink-2);max-width:80ch}.task-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:var(--pad);box-shadow:var(--shadow);margin-top:18px}.match-target{display:flex;align-items:center;gap:10px;font-weight:600;margin:10px 0}.match-options{display:flex;flex-wrap:wrap;gap:12px;margin:10px 0 14px}.match-option{display:flex;align-items:center;gap:9px;border:1.5px solid var(--line-strong);border-radius:var(--radius-sm);padding:9px 14px;cursor:pointer}.match-option.is-on{border-color:var(--tone-a);background:var(--tone-a-soft)}.shape-glyph{width:44px;height:38px}.shape-antigen path{fill:var(--tone-b);stroke:#7d4507;stroke-width:1.4}.shape-receptor path{fill:#dbe6fb;stroke:#2b52b8;stroke-width:1.6}.role-grid{display:grid;gap:14px}.role-row{border-bottom:1px solid var(--line);padding-bottom:12px}.role-job{font-weight:600;margin-bottom:6px}.lane-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));margin:14px 0}.lane{border:1.5px solid var(--line);border-radius:var(--radius-sm);padding:12px 14px;background:var(--surface-2)}.lane.is-ok{background:var(--good-soft);border-color:var(--good)}.lane ol{padding-left:1.2em}.lane li{display:flex;flex-direction:column;gap:5px;margin-bottom:10px;font-size:.92rem}.whatif-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));margin:12px 0}.whatif-grid>div{background:var(--surface-2);border-radius:var(--radius-sm);padding:12px 14px}.whatif-grid h4{text-transform:none;letter-spacing:0;font-size:1rem;color:var(--ink)}.whatif-grid ul{font-size:.92rem;margin:0}.recall ul{list-style:none;padding:0}.recall li{background:var(--tone-a-soft);border-radius:var(--radius-sm);padding:11px 14px;margin-bottom:9px;color:#0a4353}.glossary div{margin-bottom:10px}.glossary dt{font-weight:700}.glossary dd{margin:0;color:var(--ink-2)}.character-key{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}.character-key figure{margin:0;display:flex;gap:10px;align-items:flex-start;background:var(--surface-2);border-radius:var(--radius-sm);padding:10px}.character-key svg{width:76px;height:86px;flex:none}.character-key figcaption{display:flex;flex-direction:column;gap:3px;font-size:.86rem;color:var(--ink-2)}.response-graph{display:block;width:100%;height:auto;max-width:640px;background:#fffdf8;border:1px solid var(--line);border-radius:var(--radius-sm);margin:10px 0}.response-graph .tone-a{stroke:var(--tone-a)}.response-graph .tone-b{stroke:var(--tone-b)}.response-graph .tone-c{stroke:var(--tone-c)}.micro-label.tone-a{fill:var(--tone-a);stroke:#fffdf8}.micro-label.tone-b{fill:var(--tone-b);stroke:#fffdf8}.micro-label.tone-c{fill:var(--tone-c);stroke:#fffdf8}.exposure-marker{stroke:var(--ink-2);stroke-width:1.6;stroke-dasharray:4 4}.data-table{border-collapse:collapse;width:100%;font-size:.9rem;margin:10px 0}.data-table caption{text-align:left;font-size:.82rem;color:var(--muted);padding-bottom:6px}.data-table th,.data-table td{border:1px solid var(--line);padding:7px 10px;text-align:left}.data-table thead th{background:var(--surface-2)}.data-table td{font-variant-numeric:tabular-nums}.quiz-nav{display:flex;flex-wrap:wrap;gap:5px;margin:12px 0}.question{border-top:1px solid var(--line);padding-top:14px}.question .stem{font-size:1.04rem;max-width:80ch}.options{border:0;padding:0;margin:12px 0;display:grid;gap:8px}.option{display:flex;gap:10px;align-items:flex-start;border:1.5px solid var(--line);border-radius:var(--radius-sm);padding:11px 13px;cursor:pointer;background:var(--surface)}.option.is-on{border-color:var(--tone-a);background:var(--tone-a-soft)}.option.is-correct{border-color:var(--good)}.option-id{font-weight:700;color:var(--muted);flex:none}.explanations{margin:12px 0;padding-left:1.2em}.explanations li{font-size:.93rem;color:var(--ink-2)}.explanations li.is-correct{color:#0d4c31;font-weight:500}.quiz-summary{border-top:1px solid var(--line);margin-top:16px;padding-top:12px}.sources li{font-size:.92rem;color:var(--ink-2);margin-bottom:8px}.summary{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:var(--pad);box-shadow:var(--shadow)}.summary-list{list-style:none;padding:0}.summary-row{display:grid;gap:4px 14px;border-left:5px solid var(--line-strong);background:var(--surface-2);border-radius:var(--radius-sm);padding:10px 14px;margin-bottom:8px}@media(min-width:760px){.summary-row{grid-template-columns:minmax(0,1fr) 210px;align-items:baseline}.summary-notes{grid-column:1 / -1}}.summary-row.outcome-independent{border-left-color:var(--good);background:var(--good-soft)}.summary-row.outcome-with-hints{border-left-color:var(--tone-b);background:var(--tone-b-soft)}.summary-row.outcome-retry{border-left-color:var(--tone-c);background:var(--tone-c-soft)}.summary-outcome{font-weight:600;font-size:.9rem}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}}@media(max-width:520px){.app{padding:0 12px 36px}.head-controls{width:100%}.equation-plain-large{font-size:1.2rem}}.build-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1fr);align-items:start;margin:14px 0}@media(min-width:900px){.build-grid{grid-template-columns:minmax(0,560px) minmax(240px,1fr)}}.build-side{min-width:0;display:flex;flex-direction:column;gap:6px}.build-side .definition{margin-top:0}.build-side .btn{align-self:flex-start}
