/* ============================================================
   GATE 3C — generic curriculum engine styling.
   Subject-agnostic: every rule here is keyed by block_type /
   interaction_type / stage_type class names, never by a subject name.
   Reuses the design tokens from tokens.css (no new colors introduced).
   Inert while CONFIG.curriculumEnabled is false — #view-curriculum stays
   empty and unreached, so none of this ever paints anything.
   ============================================================ */

.cur-crumb{display:inline-flex;align-items:center;gap:7px;color:var(--muted);font-size:13.5px;font-weight:600;background:none;border:none;cursor:pointer;padding:6px 4px;margin-bottom:14px;font-family:var(--font);border-radius:8px}
.cur-crumb:hover{color:var(--text)}
.cur-crumb:focus-visible{outline:2px solid var(--crimson-light);outline-offset:2px}

.cur-item-card{padding:30px 32px}
.cur-item-title{font-size:23px;font-weight:800;letter-spacing:-.3px;margin-bottom:18px}
.cur-preview-banner{display:flex;flex-direction:column;gap:3px;margin-bottom:18px;padding:12px 15px;border:1px solid rgba(233,180,76,.5);border-left:3px solid var(--gold);border-radius:10px;background:rgba(233,180,76,.08);color:#F3DCAF;font-size:12.5px;line-height:1.5}
.cur-preview-banner strong{font-size:11px;letter-spacing:.7px;text-transform:uppercase;color:#F5EBD4}
.cur-teacher-diagnostics{margin:0 0 18px;padding:12px 15px;border:1px solid rgba(126,160,192,.38);border-left:3px solid var(--steel);border-radius:10px;background:rgba(126,160,192,.07);color:var(--muted);font-size:12px;line-height:1.5}
.cur-teacher-diagnostics strong{display:block;color:var(--text);font-size:12px;margin-bottom:3px}
.cur-teacher-diagnostics p{margin:0 0 10px}
.cur-diagnostics-kicker{font-size:10px;font-weight:900;letter-spacing:1px;text-transform:uppercase;color:var(--steel);margin-bottom:3px}
.cur-diagnostics-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:7px;margin:0}
.cur-diagnostics-grid div{padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.025)}
.cur-diagnostics-grid dt{font-size:10px;color:var(--faint)}
.cur-diagnostics-grid dd{margin:2px 0 0;color:var(--text);font-size:14px;font-weight:800}
.cur-teacher-review{margin:0 0 18px;padding:12px 15px;border:1px solid rgba(126,160,192,.38);border-left:3px solid var(--steel);border-radius:10px;background:rgba(126,160,192,.05);color:var(--muted);font-size:12px;line-height:1.5}
.cur-review-kicker{font-size:10px;font-weight:900;letter-spacing:1px;text-transform:uppercase;color:var(--steel);margin-bottom:3px}
.cur-teacher-review>strong{display:block;color:var(--text);font-size:13px;margin-bottom:5px}
.cur-teacher-review>p{margin:0 0 10px}
.cur-review-status{min-height:1.3em;margin-top:9px;color:var(--faint);font-size:11.5px}
.cur-review-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:7px;margin:12px 0}
.cur-review-summary div,.cur-review-row{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.025)}
.cur-review-summary dt,.cur-review-fields dt{font-size:10px;color:var(--faint)}
.cur-review-summary dd{margin:2px 0 0;color:var(--text);font-size:14px;font-weight:800}
.cur-review-list{display:grid;gap:8px;margin-top:10px}
.cur-review-row-head{display:flex;justify-content:space-between;gap:10px;color:var(--text);font-size:11.5px}
.cur-review-row-head span{color:var(--faint);font-size:10.5px;text-align:right}
.cur-review-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:7px;margin:8px 0 0}
.cur-review-fields dd{margin:2px 0 0;color:var(--text);font-size:11px;overflow-wrap:anywhere}
.cur-review-empty{margin:10px 0 0;color:var(--faint)}
.cur-empty-kicker{font-size:10.5px;font-weight:900;letter-spacing:1.2px;text-transform:uppercase;color:var(--steel);margin-bottom:5px}
.cur-empty-note{font-size:12.5px;line-height:1.55;color:var(--muted);margin-top:12px}
.cur-stage-nav{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 24px;padding:0 0 16px;border-bottom:1px solid var(--line)}
.cur-stage-tab{display:inline-flex;align-items:center;gap:7px;padding:8px 11px;border:1px solid var(--line);border-radius:9px;background:rgba(255,255,255,.025);color:var(--muted);font:700 12px var(--font);cursor:pointer}
.cur-stage-tab:hover{border-color:var(--steel);color:var(--text)}
.cur-stage-tab.active{border-color:var(--crimson-light);background:rgba(214,40,40,.1);color:var(--text)}
.cur-stage-tab:focus-visible{outline:2px solid var(--crimson-light);outline-offset:2px}
.cur-stage-tab-number{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:rgba(255,255,255,.08);font-size:11px}
.cur-stage-tab.active .cur-stage-tab-number{background:var(--crimson);color:#fff}
.cur-stage[hidden]{display:none}

/* Gate 3J-A — transient local-preview learner-session shell. These controls
   describe preview position only; they do not represent mastery or saved
   progress. */
.cur-session-shell{padding:26px 30px}
.cur-session-progress{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:0 0 18px;padding:12px 15px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.025)}
.cur-session-kicker{font-size:10.5px;font-weight:900;letter-spacing:1.1px;text-transform:uppercase;color:var(--faint)}
.cur-session-progress-label{font-size:15px;font-weight:800;color:var(--text)}
.cur-session-stage-name{font-size:13px;color:var(--muted)}
.cur-session-stage-name::before{content:"·";margin-right:10px;color:var(--steel)}
.cur-session-controls{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}
.cur-session-btn{min-width:124px}
.cur-session-btn:disabled{opacity:.45;cursor:not-allowed}
.cur-session-note{margin:12px 0 0;color:var(--faint);font-size:12px;line-height:1.5;text-align:center}
.cur-empty-item{padding:28px 30px}

.cur-stage{margin-bottom:26px;padding-bottom:22px;border-bottom:1px solid var(--line)}
.cur-stage:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0}
.cur-stage-label{font-size:11px;font-weight:900;letter-spacing:1.4px;text-transform:uppercase;color:#F3B6B9;margin-bottom:14px}

.cur-block{margin-bottom:14px}
.cur-text{font-size:15.5px;line-height:1.7;color:#D5DBF0;white-space:pre-line}
.cur-math{font-family:var(--eq-font);font-style:italic;font-size:17px;color:#F5EBD4;line-height:1.7;background:rgba(233,180,76,.06);border:1px solid rgba(233,180,76,.3);border-radius:10px;padding:12px 16px}
.cur-worked-step{font-size:15px;line-height:1.7;color:#DCE1F5;background:rgba(255,255,255,.02);border:1px solid var(--line);border-left:3px solid var(--steel);padding:14px 18px;border-radius:10px}
.cur-step-label{font-size:11px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:var(--faint);margin-bottom:6px}

.cur-resource{margin-top:10px}
.cur-resource video,.cur-resource img{max-width:100%;border-radius:10px;display:block}
.cur-resource-link a{color:var(--crimson-light);font-weight:700;text-decoration:none}
.cur-resource-link a:hover{text-decoration:underline}
.cur-resource-blocked{font-size:12.5px;color:var(--faint);font-style:italic;padding:8px 12px;background:rgba(255,255,255,.02);border:1px dashed var(--line);border-radius:8px}
.cur-caption{font-size:12.5px;color:var(--muted);margin-top:6px}

.cur-task{margin-top:18px;padding:18px 22px;background:rgba(255,255,255,.02);border:1px solid var(--line);border-left:3px solid var(--crimson);border-radius:12px}
.cur-task-prompt{margin-bottom:12px}
.cur-unsupported-task,.cur-stage-empty{padding:12px 14px;border:1px dashed var(--line);border-radius:9px;color:var(--muted);font-size:13px;line-height:1.5;background:rgba(255,255,255,.02)}
.cur-stage-empty{margin-top:14px}

.cur-given-list{list-style:none;margin:0 0 16px;padding:0;display:flex;flex-wrap:wrap;gap:10px}
.cur-given-list li{display:flex;flex-direction:column;gap:2px;background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:10px;padding:8px 14px;min-width:110px}
.cur-given-label{font-size:10.5px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--faint)}
.cur-given-value{font-size:15px;font-weight:700;color:var(--text)}

.cur-choice-list{display:flex;flex-direction:column;gap:9px;margin-bottom:16px}
.cur-choice{display:flex;align-items:center;gap:10px;padding:11px 14px;background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:10px;cursor:pointer;font-size:14.5px;color:var(--text)}
.cur-choice:has(input:checked){border-color:var(--crimson-light);background:rgba(214,40,40,.08)}
.cur-choice input{accent-color:var(--crimson)}

.cur-answer-row{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.cur-answer-input{flex:1;min-width:160px;max-width:320px;background:rgba(255,255,255,.04);border:1px solid var(--line);border-radius:12px;padding:12px 16px;color:var(--text);font-family:var(--font);font-size:16px;font-weight:700}
.cur-answer-input:focus{outline:none;border-color:var(--crimson-light);box-shadow:0 0 0 3px rgba(214,40,40,.22)}

/* Notation entry: insert pad + "reads as" echo. The keys are 44px because
   that is the platform touch-target guidance, and most revision happens on a
   phone. Kept subject-neutral, like the rest of this stylesheet. */
.cur-math-pad{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:-4px 0 12px}
.cur-math-key{min-width:44px;min-height:44px;padding:0 11px;background:rgba(255,255,255,.045);
  border:1px solid var(--line);border-radius:10px;color:var(--text);
  font-family:var(--eq-font);font-size:17px;line-height:1;cursor:pointer;
  transition:border-color .15s,background .15s}
.cur-math-key:hover{border-color:var(--line-strong);background:rgba(255,255,255,.08)}
.cur-math-key:active{background:rgba(214,40,40,.14);border-color:var(--crimson-light)}
.cur-math-key:focus-visible{outline:none;border-color:var(--crimson-light);box-shadow:0 0 0 3px rgba(214,40,40,.22)}
.cur-math-pad-hint{font-size:12px;color:var(--faint);margin-left:2px}
.cur-math-pad-hint code{font-family:var(--eq-font);font-size:12.5px;color:var(--muted);
  background:rgba(255,255,255,.05);border-radius:5px;padding:1px 5px}

.cur-answer-readback[hidden]{display:none}
.cur-answer-readback{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
  margin:0 0 14px;padding:9px 14px;border-left:2px solid var(--line-strong);
  background:rgba(255,255,255,.025);border-radius:0 10px 10px 0}
.cur-readback-label{font-size:10.5px;font-weight:800;letter-spacing:.6px;
  text-transform:uppercase;color:var(--faint)}
.cur-readback-value{font-family:var(--eq-font);font-size:19px;color:var(--text)}

/* Prose: an extended written answer. Not marked — the student judges it
   against the scheme they are shown afterwards. */
.cur-prose-row{flex-direction:column;align-items:stretch;gap:6px}
.cur-prose-label{font-size:11px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--faint)}
.cur-prose-input{width:100%;min-height:160px;resize:vertical;background:rgba(255,255,255,.04);
  border:1px solid var(--line);border-radius:12px;padding:13px 16px;color:var(--text);
  font:15px/1.65 var(--font)}
.cur-prose-input:focus{outline:none;border-color:var(--crimson-light);box-shadow:0 0 0 3px rgba(214,40,40,.22)}
.cur-prose-note{margin:-4px 0 14px;font-size:12.5px;line-height:1.5;color:var(--faint);max-width:60ch}
.cur-fb-neutral{background:rgba(143,163,208,.09);border:1px solid rgba(143,163,208,.35);color:#D6DEF2}
.cur-prose-saved{margin:0 0 10px;font-weight:800;font-size:14.5px;color:#D6DEF2}
.cur-prose-scheme{border-top:1px solid rgba(143,163,208,.28);padding-top:11px}

/* A clip attached to the specific mistake that was made. */
.cur-remedial{margin:12px 0 4px;padding:12px 14px;border-radius:12px;
  background:rgba(233,180,76,.07);border:1px solid rgba(233,180,76,.32)}
.cur-remedial-kicker{margin:0 0 8px;font-size:10.5px;font-weight:900;letter-spacing:.9px;
  text-transform:uppercase;color:var(--gold)}
.cur-remedial .cur-resource{margin:0}

.cur-submit-btn.busy{opacity:.7;pointer-events:none}

.cur-feedback:empty{display:none}
.cur-fb-card{padding:13px 17px;border-radius:12px;font-size:14px;margin-top:12px;animation:viewIn .4s cubic-bezier(.16,1,.3,1)}
.cur-fb-message{margin:0;line-height:1.55}
/* Method marks: earned, but not the full answer. Deliberately styled apart
   from the correct/incorrect colours — it is neither. */
.cur-fb-partial{margin:0 0 7px;font-weight:800;font-size:14.5px;color:#F3D8A0;
  display:flex;align-items:baseline;gap:7px}
.cur-fb-partial::before{content:"";width:6px;height:6px;border-radius:50%;
  background:var(--gold);flex:none;transform:translateY(-2px)}
.cur-fb-good{background:rgba(60,145,60,.1);border:1px solid rgba(60,145,60,.4);color:#B7E3B7}
.cur-fb-bad{background:rgba(233,180,76,.09);border:1px solid rgba(233,180,76,.4);color:#F3DCAF}
.cur-next-step{margin-top:7px;font-size:12.5px;color:var(--muted)}

/* Gate 4A - local-preview-only suspected-wrong options. */
.cur-options{margin-top:16px;padding-top:14px;border-top:1px solid rgba(233,180,76,.25)}
.cur-options-title{margin:0 0 10px;color:var(--text);font-size:13px}
.cur-option-list{display:flex;flex-wrap:wrap;gap:8px}
.cur-option-btn{font-size:12px;line-height:1.25;text-align:left}
.cur-option-status{min-height:1.3em;margin-top:10px;color:var(--muted);font-size:12.5px;line-height:1.45}

/* Gate 8H - student-facing canonical solution. The solution is fetched only
   after the server has accepted a wrong submission; it never represents a
   marking, mastery, or progression control. */
.cur-solution-area{margin-top:14px;padding-top:12px;border-top:1px solid rgba(233,180,76,.25)}
.cur-solution-area[hidden],.cur-solution-body[hidden]{display:none}
.cur-solution-btn{font-size:12px}
.cur-solution-btn.busy{opacity:.7;pointer-events:none}
.cur-solution-body{margin-top:10px}
.cur-solution-card{padding:14px 16px;border:1px solid rgba(126,160,192,.5);border-left:3px solid var(--steel);border-radius:10px;background:rgba(126,160,192,.08);color:var(--muted)}
.cur-solution-title{margin:3px 0 8px;color:var(--text);font-size:14px}
.cur-solution-answer{display:inline-block;padding:8px 11px;border:1px solid rgba(126,160,192,.5);border-radius:8px;background:rgba(255,255,255,.05);color:var(--text);font-weight:800;font-size:15px}
.cur-solution-explanation{margin-top:13px;color:var(--text);font-size:13px;line-height:1.6}
.cur-solution-explanation>strong{display:block;margin-bottom:5px;color:var(--steel);font-size:10px;letter-spacing:1px;text-transform:uppercase}
.cur-solution-block{margin-top:9px}
.cur-solution-step-label{margin-bottom:3px;color:var(--faint);font-size:10px;font-weight:900;letter-spacing:.8px;text-transform:uppercase}
.cur-solution-note,.cur-solution-empty{margin:12px 0 0;color:var(--muted);font-size:12px;line-height:1.45}
.cur-solution-status{min-height:1.3em;margin-top:8px;color:var(--muted);font-size:12px;line-height:1.45}

/* Gate 4B - local-preview-only tapered support. */
.cur-help-panel{margin-top:14px;padding:14px 16px;border:1px solid rgba(126,160,192,.38);border-left:3px solid var(--steel);border-radius:10px;background:rgba(126,160,192,.07);color:var(--muted)}
.cur-help-panel:focus{outline:2px solid var(--crimson-light);outline-offset:2px}
.cur-help-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.cur-help-kicker{font-size:10px;font-weight:900;letter-spacing:1px;text-transform:uppercase;color:var(--steel)}
.cur-help-title{margin:3px 0 0;color:var(--text);font-size:14px}
.cur-help-toggle,.cur-help-restore{font-size:12px;white-space:nowrap}
.cur-help-body{margin-top:10px}
.cur-help-body[hidden]{display:none}
.cur-help-copy{margin:0;line-height:1.55;font-size:13px}

/* Gate 4C - local-preview-only self-check capture. */
.cur-self-check-panel{margin-top:14px;padding:14px 16px;border:1px solid rgba(233,180,76,.38);border-left:3px solid var(--gold);border-radius:10px;background:rgba(233,180,76,.06);color:var(--muted)}
.cur-self-check-panel:focus{outline:2px solid var(--crimson-light);outline-offset:2px}
.cur-self-check-title{margin:3px 0 6px;color:var(--text);font-size:14px}
.cur-self-check-copy{margin:0 0 12px;font-size:13px;line-height:1.55}
.cur-self-check-choices{display:flex;flex-wrap:wrap;gap:8px}
.cur-self-check-judgement{font-size:12px;text-align:left}
.cur-self-check-judgement.selected{border-color:var(--crimson-light);background:rgba(214,40,40,.1);color:var(--text)}
.cur-self-check-fields{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.cur-self-check-fields label,.cur-self-check-note{display:flex;flex-direction:column;gap:5px;color:var(--faint);font-size:11px;font-weight:800;letter-spacing:.3px}
.cur-self-check-fields select,.cur-self-check-note textarea{border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.04);color:var(--text);font:13px var(--font);padding:8px 10px}
.cur-self-check-fields select{color-scheme:dark}
.cur-self-check-note{margin-top:12px}
.cur-self-check-note textarea{resize:vertical;min-width:min(100%,360px);font-weight:400;letter-spacing:0}
.cur-self-check-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.cur-self-check-actions button{font-size:12px}
.cur-self-check-status{min-height:1.3em;margin-top:10px;color:var(--muted);font-size:12.5px;line-height:1.45}

/* Gate 5A - teacher-only local-preview review queue. Advisory triage only;
   nothing styled here represents a marking, XP, mastery, or publication
   control. */
.cur-review-queue{margin-top:18px;padding:16px 18px}
.cur-review-queue-filters{display:flex;flex-wrap:wrap;gap:10px;margin:0 0 12px}
.cur-review-queue-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.cur-review-queue-actions button:disabled{opacity:.55;cursor:not-allowed}
.cur-review-guide{margin:10px 0 12px;border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.025);color:var(--muted);font-size:11.5px}
.cur-review-guide summary{cursor:pointer;padding:8px 10px;color:var(--text);font-weight:800}
.cur-review-guide ol{margin:0;padding:0 12px 10px 28px;line-height:1.55}
.cur-review-desk{margin:12px 0 4px;padding:12px;border:1px solid var(--gold);border-radius:9px;background:rgba(233,180,76,.08)}
.cur-review-desk-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.cur-review-desk-head strong{display:block;color:var(--text);font-size:14px}
.cur-review-desk-position{margin-top:3px;color:var(--faint);font-size:11px}
.cur-review-desk-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}
.cur-review-desk-copy{margin:9px 0 0;color:var(--muted);font-size:11.5px;line-height:1.45}
.cur-review-row[aria-current="true"]{border-color:var(--gold);box-shadow:0 0 0 1px rgba(233,180,76,.16)}
.cur-review-queue-filters label,.cur-review-decision label{display:flex;flex-direction:column;gap:5px;color:var(--faint);font-size:11px;font-weight:800;letter-spacing:.3px}
.cur-review-queue-filters select,.cur-review-decision select,.cur-review-decision input{border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.04);color:var(--text);font:13px var(--font);padding:8px 10px}
.cur-review-subhead{display:block;color:var(--text);font-size:12px;margin:14px 0 8px}
.cur-review-patterns{margin-top:4px}
.cur-review-decision{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.cur-review-decision input{min-width:min(100%,260px);font-weight:400;letter-spacing:0}
.cur-review-decision button{font-size:12px}
.cur-review-decision button.busy{opacity:.7;pointer-events:none}
.cur-review-decision .cur-review-status{flex-basis:100%;margin-top:2px}
.cur-review-triage{margin-top:9px;padding:8px 10px;border-left:3px solid var(--steel);border-radius:6px;background:rgba(143,163,208,.07)}
.cur-review-triage strong{display:block;color:var(--text);font-size:11px}
.cur-review-triage p{margin:3px 0 0;color:var(--muted);font-size:11.5px;line-height:1.45}
.cur-review-triage-potential-mismatch{border-left-color:var(--gold);background:rgba(233,180,76,.09)}
.cur-review-triage-partial-credit{border-left-color:#8FA3D0}
.cur-review-triage-uncertain{border-left-color:#B7A0D8}
.cur-review-triage-confirmed-mismatch{border-left-color:var(--crimson-light)}
@media (max-width:640px){
  .cur-review-desk-head{display:block}
  .cur-review-desk-actions{justify-content:flex-start;margin-top:9px}
  .cur-review-queue-filters label,.cur-review-decision label{width:100%}
  .cur-review-queue-filters select,.cur-review-decision select,.cur-review-decision input{width:100%}
}

/* Gate 5B - teacher-only answer-variant candidate workbench. Advisory review
   and explicit, audited promotion controls only. */
.cur-candidate-workbench{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.cur-candidate-workbench>p{margin:6px 0 10px}
.cur-candidate-value{font-family:var(--eq-font);font-style:normal;font-size:12.5px;color:#F5EBD4;background:rgba(233,180,76,.08);border:1px solid rgba(233,180,76,.3);border-radius:6px;padding:2px 7px;overflow-wrap:anywhere}
.cur-candidate-actions{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.cur-candidate-actions label{display:flex;flex-direction:column;gap:5px;color:var(--faint);font-size:11px;font-weight:800;letter-spacing:.3px}
.cur-candidate-actions input{border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.04);color:var(--text);font:13px var(--font);padding:8px 10px;min-width:min(100%,240px);font-weight:400;letter-spacing:0}
.cur-candidate-actions button{font-size:12px}
.cur-candidate-actions button.busy{opacity:.7;pointer-events:none}
.cur-candidate-hint{margin:8px 0 0;color:var(--faint);font-size:11.5px;line-height:1.5;flex-basis:100%}
.cur-candidate-context-actions{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.cur-candidate-context-actions button{font-size:12px}
.cur-candidate-context-actions button:disabled{opacity:.7;pointer-events:none}
.cur-candidate-context{margin-top:10px}
.cur-candidate-context-card{padding:12px 14px;border:1px solid rgba(233,180,76,.35);border-radius:10px;background:rgba(233,180,76,.06)}
.cur-candidate-context-kicker{color:var(--faint);font-size:10px;font-weight:800;letter-spacing:.6px;text-transform:uppercase}
.cur-candidate-context-title{display:inline-block;margin-top:4px;font-size:13px}
.cur-candidate-context-stage{display:inline-block;margin-left:8px;color:var(--muted);font-size:11px}
.cur-candidate-context-question{margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.cur-candidate-context-question>strong,.cur-candidate-context-given>strong,.cur-candidate-context-claim>strong{display:block;color:var(--faint);font-size:11px;margin-bottom:5px}
.cur-candidate-context-question .cur-block{margin:5px 0}
.cur-candidate-context-given{margin-top:8px}
.cur-candidate-context-claim{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
.cur-candidate-context-note,.cur-candidate-context-empty{margin:9px 0 0;color:var(--muted);font-size:11.5px;line-height:1.5}
.cur-candidate-status-chip{display:inline-block;padding:2px 8px;border-radius:999px;border:1px solid var(--line);font-size:10.5px;font-weight:800;letter-spacing:.4px;text-transform:uppercase}
.cur-candidate-status-open{color:#F3DCAF;border-color:rgba(233,180,76,.5);background:rgba(233,180,76,.1)}
.cur-candidate-status-approved{color:#B7E3B7;border-color:rgba(60,145,60,.5);background:rgba(60,145,60,.12)}
.cur-candidate-status-promoted{color:#B7E3B7;border-color:rgba(60,145,60,.7);background:rgba(60,145,60,.2)}
.cur-candidate-status-rejected{color:var(--muted);border-color:var(--line);background:rgba(255,255,255,.03)}
.cur-candidate-stale{display:inline-block;margin-left:6px;color:#F3B6B9;font-size:10.5px;font-weight:800}
.cur-candidate-promote[data-cur-armed="1"]{border-color:var(--crimson-light);color:var(--text);background:rgba(214,40,40,.12)}
@media (max-width:640px){
  .cur-candidate-actions label,.cur-candidate-actions input{width:100%}
}

.cur-hint-rung{margin-top:12px;padding:16px 20px;border-radius:12px;background:rgba(233,180,76,.07);border:1px solid rgba(233,180,76,.5)}

/* Gate 3D — generic hint-reveal UI (id/index-driven only, no content here). */
.cur-hint-area{margin-top:14px}
.cur-hint-btn.busy{opacity:.7;pointer-events:none}
.cur-hint-display:empty{display:none}

/* Gate 3K — local-preview learner-shell polish. These rules only style
   generic curriculum markup; they do not create progression state or change
   the normal V1 views. */
.cur-session-shell{max-width:900px;margin-inline:auto}
.cur-session-shell .cur-item-title{max-width:38rem;line-height:1.18}
.cur-stage-nav{align-items:stretch;overflow-x:auto;scrollbar-width:thin}
.cur-stage-tab{min-height:44px;flex:1 1 118px;justify-content:flex-start;white-space:nowrap}
.cur-stage-tab.active{box-shadow:0 0 0 2px rgba(214,40,40,.12)}
.cur-stage-tab[aria-current="step"]{font-weight:800}
.cur-stage-panel[hidden]{display:none}
.cur-session-controls .cur-session-btn{min-height:42px}
.cur-session-shell .cur-task{box-shadow:0 10px 24px rgba(0,0,0,.12)}
.cur-session-shell .cur-hint-area{border-top:1px solid rgba(255,255,255,.08);padding-top:12px}

@media (max-width:640px){
  .cur-item-card,.cur-session-shell{padding:20px 16px}
  .cur-session-progress{align-items:flex-start;flex-direction:column;gap:4px}
  .cur-session-stage-name::before{content:"";margin-right:0}
  .cur-stage-nav{gap:6px;margin-bottom:18px;padding-bottom:12px}
  .cur-stage-tab{flex:0 0 auto;padding:9px 10px}
  .cur-stage-tab-number{width:18px;height:18px}
  .cur-task{padding:15px 14px}
  .cur-session-controls{gap:8px}
  .cur-session-btn{flex:1 1 0;min-width:0}
  .cur-answer-input{max-width:none;width:100%;min-width:0}
  /* The typing hint drops to its own line rather than squeezing the keys. */
  .cur-math-pad-hint{flex:1 0 100%;margin:2px 0 0}
  .cur-self-check-fields label,.cur-self-check-note{width:100%}
  .cur-self-check-fields select,.cur-self-check-note textarea{width:100%}
}

/* Gate 6A - saved-progress display. Advisory presentation only: nothing here
   hides, disables, or locks a stage. */
.cur-session-progress-saved{flex-basis:100%;font-size:12px;font-weight:700;color:#B7E3B7}
.cur-stage-status-chip{margin-left:auto;font-size:9.5px;font-weight:900;letter-spacing:.5px;text-transform:uppercase;padding:2px 7px;border-radius:999px;border:1px solid var(--line);color:var(--faint);background:rgba(255,255,255,.03);white-space:nowrap}
.cur-stage-status-chip.done{color:#B7E3B7;border-color:rgba(60,145,60,.5);background:rgba(60,145,60,.12)}
.cur-stage-status-chip.next{color:#F3DCAF;border-color:rgba(233,180,76,.5);background:rgba(233,180,76,.1)}
.cur-stage-status-chip.optional{color:#C7D8F7;border-color:rgba(111,151,214,.48);background:rgba(111,151,214,.1)}

/* Gate 6B - compact dashboard progress badges. Advisory only: these never
   affect item ordering, availability, grading, or navigation. */
.cur-dashboard-progress{display:block;margin-top:4px;color:var(--faint);font-size:11px;line-height:1.35}
.cur-dashboard-progress-loading{color:var(--faint)}
.cur-dashboard-progress-not-started{color:var(--faint)}
.cur-dashboard-progress-in-progress,.cur-dashboard-progress-review-due{color:#F3DCAF}
.cur-dashboard-progress-mastered{color:#B7E3B7}
.cur-dashboard-progress-unavailable{color:var(--faint)}
.cur-stage-read{margin-top:14px;padding-top:12px;border-top:1px dashed var(--line);display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.cur-stage-read button.busy{opacity:.7;pointer-events:none}
.cur-stage-read-hint{color:var(--faint);font-size:11.5px;line-height:1.5}
.cur-stage-read-done{margin:0;color:#B7E3B7;font-size:12.5px}

/* Gate 5A cosmetic follow-up: native dropdown option contrast (options do not
   inherit the themed select colors on some platforms). */
.cur-self-check-fields select option,.cur-review-queue select option,.cur-review-decision select option,.cur-candidate-actions select option{background:#12131C;color:#EAECF6}

/* ============================================================
   PILOT LAUNCH POLISH — the shared "study cockpit" panel system.

   The Today plan, practice queue, mistake notebook, and course-lesson
   list are the four surfaces a student actually lives in, so they share
   one card shape, one type scale, and one action pattern. Hierarchy is
   carried by a single accent: the Today plan (the "what now?" surface)
   wears the brand crimson; every supporting panel wears neutral steel.
   Presentational only — no rule here locks, hides, ranks, or sells.
   ============================================================ */
.cur-study-panel{
  position:relative;overflow:hidden;margin:0 0 18px;padding:22px 24px;
  border:1px solid var(--line);background:var(--card);
  color:var(--muted);font-size:13.5px;line-height:1.6;
}
.cur-study-panel::before{content:"";position:absolute;top:0;left:0;bottom:0;width:3px;background:var(--steel);opacity:.55}
.cur-study-panel-lead::before{background:var(--grad);opacity:1}
.cur-study-panel .cur-review-kicker{color:var(--steel);margin-bottom:4px}
.cur-study-panel-lead .cur-review-kicker{color:#F0A2A5}
.cur-panel-title{margin:0 0 6px;color:var(--text);font-size:17px;font-weight:800;letter-spacing:-.15px;line-height:1.3}
.cur-study-panel>p{margin:0 0 14px;max-width:64ch}
.cur-panel-actions{display:flex;flex-wrap:wrap;align-items:center;gap:9px;margin-top:4px}
.cur-study-panel .cur-review-status{margin-top:10px;color:var(--faint);font-size:12.5px;line-height:1.5}
.cur-study-panel .cur-review-empty{margin:12px 0 0;color:var(--faint);font-size:13px;line-height:1.6;max-width:60ch}
.cur-study-panel .cur-review-list{gap:10px;margin-top:12px}
.cur-study-panel .cur-review-row{padding:13px 15px;border-radius:13px;border-color:var(--line);background:rgba(255,255,255,.022)}
.cur-study-panel .cur-review-row-head{align-items:baseline;font-size:14px}
.cur-study-panel .cur-review-row-head strong{color:var(--text);font-size:14px;font-weight:800;line-height:1.35}
.cur-study-panel .cur-review-row-head span{color:var(--faint);font-size:11px;white-space:nowrap}
.cur-study-panel .cur-review-summary{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:9px;margin:0 0 14px}
.cur-study-panel .cur-review-summary div{padding:10px 13px;border-radius:11px;background:rgba(255,255,255,.022)}
.cur-study-panel .cur-review-summary dt{font-size:10.5px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:var(--faint)}
.cur-study-panel .cur-review-summary dd{margin:3px 0 0;font-size:19px;font-weight:800;font-variant-numeric:tabular-nums}
.cur-study-panel .cur-review-subhead{margin:16px 0 2px;color:var(--muted);font-size:11px;font-weight:900;letter-spacing:1px;text-transform:uppercase}
.cur-study-panel .cur-review-patterns:first-of-type .cur-review-subhead{margin-top:6px}

/* Gate 6C - student practice & review panel. Suggestions only: nothing here
   locks, hides, or disables learning content. */
.cur-practice-meta{margin:7px 0 0;color:var(--faint);font-size:12px;line-height:1.5}
.cur-practice-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:11px}
@media (max-width:640px){
  .cur-practice-actions button{flex:1 1 0;min-width:0}
}

/* Gate 3S - printable worksheet mode (canonical principles section 6/7:
   pen-and-paper is authentic subject practice). Printing an open item hides
   interactive chrome and reveals every stage as one worksheet: prompts,
   givens, transcripts, worked steps, and blank answer boxes survive; videos,
   buttons, hints, self-check, and teacher/practice panels do not. */
.cur-worksheet-licence{display:none}

@media print{
  .cur-crumb,.cur-stage-nav,.cur-session-controls,.cur-session-note,
  .cur-session-progress,.cur-submit-btn,.cur-feedback,.cur-hint-area,
  .cur-options,.cur-solution-area,.cur-help-panel,.cur-self-check-panel,.cur-teacher-diagnostics,
  .cur-teacher-review,.cur-practice-panel,.cur-stage-read,.cur-preview-banner,
  .cur-stage-status-chip,.cur-resource video,.cur-resource-blocked,
  .cur-reflection-panel,.cur-post-attempt-actions,
  .cur-math-pad,.cur-answer-readback,.cur-remedial{display:none !important}
  /* A prose box printed as a worksheet should be blank lines to write on. */
  .cur-prose-input{background:#fff;border:1px solid #999;color:#000;min-height:9em}

  /* The licence line is pinned, so it lands on every printed page rather
     than only the last one. */
  .cur-worksheet-licence{
    display:block !important;position:fixed;bottom:0;left:0;right:0;
    margin:0;padding:6px 0;border-top:1px solid #999;
    color:#444 !important;background:#fff !important;
    font-size:9pt;text-align:center;
  }
  @page{margin:14mm 14mm 20mm}
  #view-curriculum [data-cur-stage-panel][hidden]{display:block !important}
  .cur-stage{page-break-inside:avoid;border-bottom:1px solid #999;margin-bottom:16px;padding-bottom:14px}
  .cur-item-card,.cur-session-shell{border:none;box-shadow:none;background:#fff;color:#000;padding:0}
  .cur-item-title,.cur-stage-label,.cur-step-label,.cur-text,.cur-math,
  .cur-worked-step,.cur-given-label,.cur-given-value,.cur-caption{color:#000 !important;background:#fff !important;border-color:#999 !important}
  .cur-task{background:#fff;border:1px solid #999;border-left:3px solid #000}
  .cur-answer-input{background:#fff;border:1px solid #999;color:#000;min-height:2.2em}
  .cur-choice{background:#fff;border:1px solid #999;color:#000}
}

/* Gate 6D - Today plan card. A suggestion surface: nothing here locks,
   pressures, or sells. */
.cur-today-controls{
  display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin:0 0 16px;padding:12px 14px;
  border:1px solid var(--line);border-radius:13px;background:rgba(255,255,255,.022);
}
.cur-today-exam-label{display:flex;flex-direction:column;gap:6px;color:var(--faint);font-size:11px;font-weight:800;letter-spacing:.5px;text-transform:uppercase}
.cur-today-exam-label input,.cur-today-exam-label select{border:1px solid var(--line-strong);border-radius:9px;background:rgba(255,255,255,.04);color:var(--text);font:13.5px var(--font);font-weight:700;padding:9px 11px;color-scheme:dark;letter-spacing:0}
.cur-today-exam-label input:focus,.cur-today-exam-label select:focus{outline:none;border-color:var(--crimson-light);box-shadow:0 0 0 3px rgba(214,40,40,.2)}
/* When the date is a published fact there is nothing to ask, so it is stated
   rather than offered as an empty field a student has to go and look up. */
.cur-today-exam-fixed{color:var(--muted);font-size:13px;line-height:1.5;max-width:34ch}
.cur-today-exam-fixed b{color:var(--text);font-weight:800}
/* The dropdown LIST is drawn by the operating system, not by this stylesheet.
   color-scheme:dark alone left pale text on a white sheet on Windows Chrome —
   unreadable — so the options are given an explicit ground of their own. */
.cur-today-exam-label select option{background:#1B1D28;color:#EAECF6;font-weight:600}
.cur-today-exam-label select optgroup{background:#1B1D28;color:#EAECF6}
.cur-today-exam-note{color:var(--faint);font-size:11.5px;line-height:1.45;max-width:22ch}
.cur-today-countdown{color:#F3DCAF;font-size:13px;font-weight:800;min-height:1.2em;letter-spacing:.1px}
.cur-today-countdown:empty{display:none}
.cur-today-beyond{margin:0 0 4px;color:var(--faint);font-size:12px;letter-spacing:.2px}
.cur-today-entry .cur-review-row-head strong{display:flex;gap:9px;align-items:baseline}
.cur-today-position{
  flex:0 0 auto;min-width:22px;height:22px;padding:0 6px;border-radius:7px;
  display:inline-flex;align-items:center;justify-content:center;
  font-size:11.5px;font-weight:900;color:#F0A2A5;background:rgba(214,40,40,.13);border:1px solid rgba(214,40,40,.38);
}
@media print{.cur-today-panel{display:none !important}}

/* Gate 5F - teacher review desk pedagogy pass. A report reads top to bottom
   in teaching order (question, claim, why, evidence, decision); the raw
   identifiers and audit history live inside a collapsed technical section.
   Presentation only: no new data, no marking authority. */
.cur-review-report{display:flex;flex-direction:column;gap:10px}
.cur-review-report-head{display:flex;justify-content:space-between;color:var(--faint);font-size:11px}
.cur-review-block-label{font-size:9.5px;font-weight:900;letter-spacing:1px;text-transform:uppercase;color:var(--steel);margin-bottom:4px}
.cur-review-block-question{padding:9px 11px;border:1px solid rgba(233,180,76,.35);border-left:3px solid var(--gold);border-radius:8px;background:rgba(233,180,76,.05)}
.cur-review-block-question .cur-candidate-context-actions{margin-top:0}
.cur-review-block-question .cur-review-block-label{color:#D9BC7A}
.cur-review-claim-line{margin:0;color:var(--text);font-size:13px;font-weight:700}
.cur-review-claim-note{margin:4px 0 0;color:var(--faint);font-size:11px;line-height:1.45}
.cur-review-triage .cur-review-block-label{color:#9DB4D6}
.cur-review-evidence{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:7px;margin:0}
.cur-review-evidence div{padding:7px 9px;border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.02)}
.cur-review-evidence dt{font-size:10px;color:var(--faint)}
.cur-review-evidence dd{margin:2px 0 0;color:var(--text);font-size:12px}
.cur-review-technical{margin-top:2px;border:1px solid var(--line);border-radius:8px;background:rgba(255,255,255,.015)}
.cur-review-technical summary{cursor:pointer;padding:7px 10px;color:var(--faint);font-size:10.5px;font-weight:800;letter-spacing:.3px;text-transform:uppercase}
.cur-review-technical .cur-review-fields{padding:0 10px 10px}
.cur-review-technical dd{color:var(--muted);font-size:10.5px}
.cur-review-area-head{padding-top:12px;border-top:1px solid var(--line);font-size:12.5px;letter-spacing:.2px}
@media print{.cur-teacher-review{display:none !important}}

/* Gate 11 - live Masterclasses. This is a real product Forkhill sells, so it
   is presented as an offer rather than an apology: gold accent (the one
   premium colour in the system), a proper title, and the booking action as a
   primary button. It still cannot see a single piece of student evidence. */
.cur-masterclass::before{background:var(--grad-gold);opacity:1}
.cur-masterclass .cur-review-kicker{color:#E0BE7A}
.cur-masterclass-list{margin:0 0 16px;padding:0;list-style:none;display:grid;gap:8px}
.cur-masterclass-list li{
  position:relative;padding:10px 14px 10px 34px;border:1px solid var(--line);border-radius:12px;
  background:rgba(233,180,76,.05);color:var(--muted);font-size:13px;line-height:1.5;
}
.cur-masterclass-list li::before{
  content:"";position:absolute;left:14px;top:17px;width:7px;height:7px;border-radius:50%;
  background:var(--gold);
}
.cur-masterclass-list strong{color:var(--text)}
.cur-masterclass-book{
  color:#241A05;background:var(--grad-gold);border-color:rgba(255,240,200,.55);
  box-shadow:0 6px 20px rgba(233,180,76,.3);text-decoration:none;
}
.cur-masterclass-book:hover{color:#241A05;box-shadow:0 10px 26px rgba(233,180,76,.45)}
.cur-masterclass-adult{margin:14px 0 0;color:var(--faint);font-size:12px;line-height:1.55;max-width:60ch}
.cur-masterclass-note{color:var(--faint);font-size:12px}
@media print{.cur-masterclass{display:none !important}}

/* Gate 7I - dashboard study-area group headings. Quiet framing that separates
   a student's own learning from teacher tools; no new panel. */
.cur-area-heading{
  display:flex;align-items:center;gap:12px;margin:26px 0 14px;
  font-size:11.5px;font-weight:900;letter-spacing:1.4px;text-transform:uppercase;color:var(--faint);
}
.cur-area-heading::after{content:"";flex:1;height:1px;background:var(--line)}
@media print{.cur-area-heading{display:none !important}}

/* The course-lesson list is a supporting surface too: it drops the V1
   chapter-wall crimson bar so the Today plan stays the one accented card. */
.cur-lessons-card::before{background:var(--steel);opacity:.55}

/* Gate 7R - private structured reflection. Optional, collapsed by default,
   visually secondary; hidden in print. */
.cur-reflection-panel{margin-top:16px;border:1px solid var(--line);border-radius:12px;background:rgba(255,255,255,.018)}
.cur-reflection-panel summary{cursor:pointer;padding:12px 16px;color:var(--muted);font-size:13px;font-weight:700;list-style:none}
.cur-reflection-panel summary:hover{color:var(--text)}
.cur-reflection-panel summary::-webkit-details-marker{display:none}
.cur-reflection-panel summary::before{content:"+ ";color:var(--faint)}
.cur-reflection-panel[open] summary::before{content:"– "}
.cur-reflection-panel[open] summary{color:var(--text);border-bottom:1px solid var(--line)}
.cur-reflection-body{padding:14px 16px 16px}
.cur-reflection-copy{margin:0 0 14px;color:var(--muted);font-size:12.5px;line-height:1.6;max-width:62ch}
.cur-reflection-fields{display:flex;flex-direction:column;gap:13px}
.cur-reflection-field{display:flex;flex-direction:column;gap:6px;color:var(--muted);font-size:12.5px;font-weight:700;line-height:1.4}
.cur-reflection-field textarea{border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.04);color:var(--text);font:13.5px/1.55 var(--font);padding:10px 12px;resize:vertical;font-weight:400}
.cur-reflection-field textarea:focus{outline:none;border-color:var(--crimson-light);box-shadow:0 0 0 3px rgba(214,40,40,.18)}
.cur-reflection-hint{margin:10px 0 0;color:var(--faint);font-size:11.5px;line-height:1.5}
.cur-reflection-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:13px}
.cur-reflection-status{min-height:1.2em;margin-top:10px;color:var(--muted);font-size:12.5px;line-height:1.5}
.cur-reflection-list{margin-top:12px;display:grid;gap:9px}
.cur-reflection-empty{color:var(--faint);font-size:12.5px;line-height:1.55}

/* One saved note, on the question it belongs to: a readable prompt/answer
   stack rather than the raw definition-list dump it used to be. */
.cur-reflection-entry{border:1px solid var(--line);border-radius:11px;background:rgba(255,255,255,.022);padding:12px 14px}
.cur-reflection-entry-head{color:var(--faint);font-size:11px;font-weight:700;letter-spacing:.3px;margin-bottom:9px}
.cur-reflection-entry dl{display:grid;gap:9px;margin:0}
.cur-reflection-entry dt{font-size:10.5px;font-weight:800;letter-spacing:.6px;text-transform:uppercase;color:var(--steel)}
.cur-reflection-entry dd{margin:3px 0 0;color:var(--text);font-size:13.5px;line-height:1.55;overflow-wrap:anywhere}

/* The dashboard mistake notebook. Deliberately quiet: it is a private
   workbook, not a scoreboard, so it wears the same neutral panel as the
   other supporting surfaces with a single steel accent. */
.cur-notebook-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:6px}
.cur-notebook-badge{
  flex:0 0 auto;border:1px solid rgba(143,163,208,.42);border-radius:999px;padding:4px 11px;
  color:#B9C6E8;background:rgba(143,163,208,.1);font-size:10px;font-weight:900;letter-spacing:.8px;text-transform:uppercase;
}
.cur-reflection-note-card{border:1px solid var(--line);border-radius:13px;background:rgba(255,255,255,.022);padding:14px 16px}
.cur-reflection-note-meta{
  display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:8px;
  color:var(--steel);font-size:10.5px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;
}
.cur-reflection-note-meta time{color:var(--faint);font-weight:700;letter-spacing:.3px;text-transform:none;font-size:11.5px;white-space:nowrap}
.cur-reflection-note-text{margin:0;color:var(--text);font-size:14px;line-height:1.55;overflow-wrap:anywhere}
.cur-reflection-note-card .cur-practice-actions{margin-top:12px}
.cur-post-attempt-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:14px;padding-top:12px;border-top:1px solid rgba(255,255,255,.08)}
@media print{.cur-reflection-panel{display:none !important}}

/* Gate 8F - formula rendering (safe plain renderer + optional local KaTeX). */
/* ------------------------------------------------------------
   Pilot launch polish — inside a lesson.
   Bigger touch targets, a clearer stage rail, and more air around the
   question itself. Navigation only: nothing here changes grading,
   progression, or what a student is allowed to open.
   ------------------------------------------------------------ */
.cur-session-shell .cur-item-title{font-size:25px;margin-bottom:20px}
.cur-session-progress{padding:13px 16px;border-radius:12px;gap:11px}
.cur-session-progress-label{font-size:16px}
.cur-stage-nav{gap:9px;padding-bottom:18px}
.cur-stage-tab{padding:10px 13px;border-radius:11px;font-size:12.5px;gap:9px}
.cur-stage-tab-number{width:21px;height:21px;font-weight:800}
.cur-task{margin-top:22px;padding:22px 24px;border-radius:14px}
.cur-task-prompt{margin-bottom:16px}
.cur-answer-row{margin-bottom:16px}
.cur-answer-input{padding:13px 16px}
.cur-session-controls{margin-top:26px;padding-top:20px}
.cur-session-note{margin-top:14px;font-size:12.5px;max-width:60ch;margin-inline:auto}
.cur-fb-card{padding:16px 19px;border-radius:13px;font-size:14.5px}
.cur-hint-rung{border-radius:13px}

@media (max-width:640px){
  /* Thumb-sized controls. The stage rail already guarantees 44px; the study
     panels and lesson list were shipping 35px .btn-sm targets on a phone,
     which is the main way this reads as a school project rather than a
     product on the device most students will actually use. */
  .cur-study-panel .btn-sm,.cur-lessons-card .btn-sm,.cur-reflection-actions .btn-sm{min-height:42px;padding-left:16px;padding-right:16px}
  .cur-study-panel{padding:18px 16px;font-size:13px}
  .cur-panel-title{font-size:16px}
  .cur-panel-actions{gap:8px}
  .cur-panel-actions .btn{flex:1 1 auto}
  .cur-today-controls{padding:11px 12px;gap:11px}
  .cur-today-exam-label,.cur-today-exam-label input,.cur-today-exam-label select{width:100%}
  .cur-today-exam-note,.cur-today-exam-fixed{max-width:none}
  .cur-notebook-head{flex-direction:column;gap:8px}
  .cur-reflection-note-meta{flex-direction:column;gap:3px}
  .cur-session-shell .cur-item-title{font-size:21px;margin-bottom:16px}
  .cur-task{padding:16px 15px;margin-top:18px}
  .cur-reflection-body{padding:12px 13px 14px}
  .cur-reflection-actions .btn{flex:1 1 auto}
  .cur-post-attempt-actions .btn{flex:1 1 auto}
}

.cur-math sup{font-size:.72em;vertical-align:super;line-height:0}
.cur-math sub{font-size:.72em;vertical-align:sub;line-height:0}
.cur-sqrt-arg{border-top:1px solid currentColor;padding:0 .18em;margin-left:.04em}
.cur-frac{display:inline-flex;flex-direction:column;text-align:center;vertical-align:middle;margin:0 .18em;font-size:.9em;line-height:1.1}
.cur-frac-num{border-bottom:1px solid currentColor;padding:0 .32em}
.cur-frac-den{padding:2px .32em 0}
.cur-math-katex{font-style:normal}
.cur-inline-math{display:inline-block;vertical-align:baseline;white-space:nowrap;font-style:normal}
.cur-inline-math .katex{font-size:1em}

/* ============================================================
   READINESS — the "am I on target?" card.

   Modelled on a training watch, not a to-do list. It leads the study
   group because a list of due reviews is meaningless until a student
   knows whether the work is enough. Status colour is deliberately
   restrained: "slightly behind" must read as information, never as
   failure, or the student stops opening the dashboard at all.
   ============================================================ */
.readiness-card::before{background:var(--steel);opacity:.55}
.readiness-ahead::before,.readiness-complete::before{background:#3C913C;opacity:.9}
.readiness-on-track::before{background:var(--grad);opacity:1}
.readiness-push::before{background:var(--grad-gold);opacity:1}
.readiness-behind::before{background:var(--grad-gold);opacity:1}

.readiness-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.readiness-pill{
  flex:0 0 auto;padding:5px 13px;border-radius:999px;
  font-size:11px;font-weight:900;letter-spacing:.7px;text-transform:uppercase;
  color:var(--muted);background:rgba(255,255,255,.04);border:1px solid var(--line-strong);
}
.readiness-ahead .readiness-pill,.readiness-complete .readiness-pill{
  color:#B7E3B7;background:rgba(60,145,60,.13);border-color:rgba(60,145,60,.5);
}
.readiness-on-track .readiness-pill{
  color:#FFB4B9;background:rgba(214,40,40,.13);border-color:rgba(229,72,77,.5);
}
.readiness-push .readiness-pill,.readiness-behind .readiness-pill{
  color:#F3DCAF;background:rgba(233,180,76,.12);border-color:rgba(233,180,76,.5);
}
.readiness-headline{font-size:20px;margin-top:2px}
.readiness-detail{margin:0 0 16px;color:var(--muted);font-size:14px;line-height:1.6;max-width:62ch}

.readiness-bar{height:9px;border-radius:99px;background:rgba(255,255,255,.07);overflow:hidden;margin-bottom:8px}
.readiness-bar span{
  display:block;height:100%;border-radius:99px;background:var(--grad);
  transition:width .8s cubic-bezier(.16,1,.3,1);
}
.readiness-ahead .readiness-bar span,.readiness-complete .readiness-bar span{background:linear-gradient(90deg,#3C913C,#7FB77F)}
.readiness-coverage{margin:0;color:var(--faint);font-size:12.5px;font-variant-numeric:tabular-nums}
.readiness-coverage b{color:var(--text);font-weight:800}
.readiness-pace{margin:10px 0 0;color:var(--faint);font-size:12.5px}
.readiness-pace b{color:var(--muted)}

.readiness-session{
  display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  margin-top:18px;padding:15px 17px;border:1px solid var(--line);border-radius:14px;
  background:rgba(255,255,255,.028);
}
.readiness-session-count{display:block;font-size:16px;font-weight:800;color:var(--text)}
.readiness-session-time{display:block;margin-top:2px;font-size:13px;color:var(--muted)}
.readiness-session-rest{border-color:rgba(60,145,60,.35);background:rgba(60,145,60,.06)}
.readiness-session-rest .readiness-session-count{color:#B7E3B7}

@media (max-width:640px){
  .readiness-headline{font-size:18px}
  .readiness-session{flex-direction:column;align-items:stretch;gap:12px}
  .readiness-session .btn{width:100%}
}
@media print{.readiness-card{display:none !important}}

/* The secondary half of the practice queue, folded away by default. Weak
   areas and the forward schedule are real, but a student scrolling past two
   lists they were not going to act on today is the clutter that makes a
   revision app feel like a chore. */
.cur-review-later{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.cur-review-later summary{
  cursor:pointer;list-style:none;color:var(--muted);font-size:12.5px;font-weight:700;padding:4px 0;
}
.cur-review-later summary::-webkit-details-marker{display:none}
.cur-review-later summary::before{content:"+ ";color:var(--faint)}
.cur-review-later[open] summary::before{content:"– "}
.cur-review-later summary:hover{color:var(--text)}

/* Embedded video and simulations. The 16:9 box is a padding hack rather than
   aspect-ratio because a PhET sim inside an iframe needs a resolved height. */
.cur-resource-embed{margin-top:10px}
.cur-embed-frame{position:relative;width:100%;padding-top:56.25%;border-radius:10px;
  overflow:hidden;background:#0C0D14;border:1px solid var(--line)}
.cur-embed-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
@media print{ .cur-resource-embed{display:none} }

/* ---- expand media to fill the screen -----------------------------------
   The reading column is capped for readability, which is right for text and
   cramped for a simulation. Expanding is display only: nothing loads, nothing
   is recorded, and Escape closes it. */
.cur-media-holder{position:relative}
.cur-expand-btn{position:absolute;top:8px;right:8px;z-index:3;display:inline-flex;
  align-items:center;gap:6px;padding:6px 10px;border-radius:8px;cursor:pointer;
  border:1px solid rgba(255,255,255,.22);background:rgba(12,13,20,.78);
  color:#EAECF6;font:700 11.5px var(--font);backdrop-filter:blur(3px)}
.cur-expand-btn:hover{background:rgba(12,13,20,.92);border-color:rgba(255,255,255,.4)}
.cur-expand-btn:focus-visible{outline:2px solid var(--crimson-light);outline-offset:2px}
.cur-expand-in{font-size:13px;line-height:1}

/* Fills the viewport below the app header rather than covering it, so the way
   out is always visible — a student who cannot find the exit is trapped. */
.cur-media-expanded{position:fixed;left:0;right:0;top:56px;bottom:0;z-index:90;
  margin:0;padding:14px 18px 18px;background:#0B0C12;overflow:auto;
  display:flex;flex-direction:column;gap:10px}
.cur-media-expanded .cur-embed-frame{flex:1;padding-top:0;height:auto;min-height:0}
.cur-media-expanded .cur-media-holder{flex:1;display:flex;align-items:center;justify-content:center;min-height:0}
.cur-media-expanded video,.cur-media-expanded img{max-height:100%;max-width:100%;width:auto;height:auto}
.cur-media-expanded .cur-caption{flex:none;margin:0;text-align:center}
body.cur-media-open{overflow:hidden}
@media (max-width:640px){ .cur-media-expanded{top:48px;padding:10px} }
@media print{ .cur-expand-btn{display:none} }

/* ---- AI help, when the owner has switched it on -------------------------
   Deliberately quiet: an outline button, not a primary one. This is an aside
   a student may take or leave, not the next step. If it ever starts looking
   like the main action on the card, something has gone wrong with the product
   rather than with the styling. */
.cur-assist { margin-top: 10px; }
.cur-assist-btn { font-size: 13px; }
.cur-assist-body {
  margin-top: 10px; padding: 12px 14px;
  border: 1px solid rgba(143, 163, 208, .22); border-left: 3px solid rgba(143, 163, 208, .5);
  border-radius: 10px; background: rgba(143, 163, 208, .05);
}
.cur-assist-answer p { margin: 0 0 9px; font-size: 14px; line-height: 1.62; }
.cur-assist-answer p:last-child { margin-bottom: 0; }
.cur-assist-note { margin: 0; font-size: 12.5px; line-height: 1.55; color: var(--muted, #8FA3D0); }
.cur-assist-answer + .cur-assist-caveat {
  margin-top: 10px; padding-top: 9px; border-top: 1px solid rgba(143, 163, 208, .18);
}

/* ---------------------------------------------------------------------------
   MASTERCLASS REQUEST FORM

   Replaced a mailto: link. It stays hidden behind the button so the panel
   reads as information rather than a form demanding to be filled in.
   --------------------------------------------------------------------------- */
.cur-masterclass-form{
  display:grid;gap:4px;margin-top:14px;padding:15px 16px;
  border:1px solid rgba(233,180,76,.34);border-radius:11px;
  background:rgba(233,180,76,.05)}
.cur-masterclass-form[hidden]{display:none}
.cur-mc-label{
  margin-top:9px;font-size:12.5px;font-weight:700;color:var(--text);line-height:1.4}
.cur-mc-hint{font-weight:400;color:var(--muted)}
.cur-mc-input{
  width:100%;padding:8px 10px;font:inherit;font-size:13.5px;color:var(--text);
  background:rgba(255,255,255,.04);border:1px solid var(--line);border-radius:8px}
.cur-mc-input:focus-visible{outline:2px solid var(--gold);outline-offset:1px;border-color:var(--gold)}
textarea.cur-mc-input{resize:vertical;min-height:64px}
.cur-mc-privacy{
  margin-top:11px;font-size:12px;line-height:1.5;color:var(--muted)}
.cur-mc-actions{display:flex;flex-wrap:wrap;gap:9px;margin-top:12px}
/* role="status": empty until something is worth announcing, so a screen
   reader is not told "blank" every time the form re-renders. */
.cur-mc-status:empty{display:none}
.cur-mc-status{margin-top:9px;font-size:13px;color:var(--muted)}
.cur-mc-status.is-error{color:#F3A1A1}
.cur-mc-sent{
  margin:0;padding:2px;font-size:13.5px;line-height:1.6;color:var(--text)}
