/* Result screen.
   Palette validated with the dataviz validator rather than chosen by eye:
   correct/wrong separate at deltaE 11.6 under deuteranopia and protanopia
   (target 8), every slot clears 3:1 against the surface. "Not attempted" is
   deliberately neutral - it is an absence, not another category - and every
   segment carries a direct label and a legend entry, so nothing depends on
   colour alone. */
:root{
  --r-ok:#0B7F66;
  --r-bad:#C8410E;
  --r-none:#74827B;
  --r-ok-soft:#E3F2ED;
  --r-bad-soft:#FBEBE3;
  --r-grid:#E5EAE8;
  --r-on-seg:#fff;        /* the number printed ON a coloured segment */
}

/* The same palette re-picked against the dark ground, with the separations
   the comment above describes preserved: correct and wrong still part at
   deltaE 11+ under deuteranopia and protanopia, "not attempted" is still the
   neutral one, and each still clears 3:1 against the surface it sits on.
   Because the fills get lighter, the number printed on them goes dark. */
:root[data-theme="dark"]{
  --r-ok:#4FD3B0;
  --r-bad:#FF8A5B;
  --r-none:#7E8D86;
  --r-ok-soft:#142925;
  --r-bad-soft:#331F17;
  --r-grid:#2C2F32;
  --r-on-seg:#101214;
}

/* ---------- hero ---------- */
.rs-hero{display:grid;grid-template-columns:auto minmax(0,1fr);gap:28px;align-items:center;
  background:var(--ink-2);border:1px solid var(--line);border-radius:var(--r);padding:26px 24px}
@media(max-width:620px){.rs-hero{grid-template-columns:1fr;gap:18px;text-align:center;justify-items:center}}
.rs-ring{position:relative;width:132px;height:132px;flex:0 0 auto}
.rs-ring svg{transform:rotate(-90deg)}
.rs-ring .rs-mid{position:absolute;inset:0;display:grid;place-content:center;text-align:center}
.rs-ring .rs-mid b{display:block;font-family:var(--ui);font-weight:700;font-size:1.9rem;
  line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.rs-ring .rs-mid span{display:block;font-size:.72rem;color:var(--dim);margin-top:3px}
.rs-head h2{margin:0 0 4px;font-size:1.55rem}
.rs-head .rs-sub{color:var(--muted);margin:0 0 14px}
.rs-quick{display:flex;gap:8px 20px;flex-wrap:wrap;margin:0;padding:0;list-style:none;
  font-family:var(--ui);font-size:.86rem}
.rs-quick li{display:flex;align-items:baseline;gap:7px;margin:0;color:var(--muted)}
.rs-quick b{font-size:1.05rem;color:var(--bone);font-variant-numeric:tabular-nums}

/* ---------- stacked composition bar ---------- */
.rs-block{margin-top:26px}
.rs-block h3{font-family:var(--ui);font-size:1rem;margin:0 0 4px}
.rs-block .rs-note{color:var(--dim);font-size:.86rem;margin:0 0 14px}
.rs-stack{display:flex;height:30px;border-radius:3px;overflow:hidden;gap:2px;background:var(--ink-3)}
.rs-stack > span{display:grid;place-items:center;color:var(--r-on-seg);font-family:var(--ui);
  font-weight:600;font-size:.8rem;min-width:0;overflow:hidden;font-variant-numeric:tabular-nums}
.rs-seg-ok{background:var(--r-ok)}
.rs-seg-bad{background:var(--r-bad)}
.rs-seg-none{background:var(--r-none)}
.rs-legend{display:flex;gap:8px 20px;flex-wrap:wrap;margin:12px 0 0;padding:0;list-style:none;
  font-size:.84rem;color:var(--muted)}
.rs-legend li{display:flex;align-items:center;gap:7px;margin:0}
.rs-swatch{width:11px;height:11px;border-radius:2px;flex:0 0 auto}

/* ---------- accuracy bars ---------- */
.rs-bars{margin:0;padding:0;list-style:none;display:grid;gap:11px}
.rs-bar{display:grid;grid-template-columns:minmax(96px,1.1fr) minmax(0,2.4fr) auto;
  gap:12px;align-items:center;font-size:.9rem}
@media(max-width:560px){.rs-bar{grid-template-columns:1fr auto;gap:4px 10px}
  .rs-bar .rs-track{grid-column:1 / -1;order:3}}
.rs-bar .rs-lab{color:var(--muted);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rs-track{display:block;background:var(--r-grid);height:12px;border-radius:6px;overflow:hidden}
/* a span is inline, and an inline box ignores width and height - the bars
   rendered as empty tracks until this was blockified */
.rs-fill{display:block;height:100%;border-radius:6px;background:var(--brand);min-width:2px}
.rs-bar .rs-val{font-family:var(--ui);font-weight:700;font-variant-numeric:tabular-nums;
  min-width:44px;text-align:right}
.rs-bar.is-weak .rs-fill{background:var(--r-bad)}
.rs-bar.is-weak .rs-val{color:var(--r-bad)}
.rs-focus{display:inline-block;background:var(--r-bad-soft);color:var(--r-bad);
  font-family:var(--ui);font-weight:700;font-size:.62rem;letter-spacing:.1em;
  text-transform:uppercase;padding:3px 7px;border-radius:2px;margin-left:8px}

/* ---------- callouts ---------- */
.rs-alert{border-left:3px solid var(--r-bad);background:var(--r-bad-soft);
  padding:16px 18px;border-radius:0 var(--r) var(--r) 0;margin:22px 0}
.rs-alert h3{margin:0 0 5px;font-family:var(--ui);font-size:.98rem;color:var(--r-bad)}
.rs-alert p{margin:0;color:var(--muted);font-size:.92rem}
.rs-good{border-left-color:var(--r-ok);background:var(--r-ok-soft)}
.rs-good h3{color:var(--r-ok)}

/* ---------- review ---------- */
.rs-filters{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 16px}
.rs-filters button{font-family:var(--ui);font-size:.84rem;font-weight:600;padding:8px 14px;
  border:1px solid var(--line);background:var(--ink-2);color:var(--muted);
  border-radius:20px;cursor:pointer}
.rs-filters button[aria-pressed="true"]{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}
.rs-q{background:var(--ink-2);border:1px solid var(--line);border-left-width:3px;
  border-radius:var(--r);padding:20px 22px;margin:0 0 12px}
.rs-q.v-correct{border-left-color:var(--r-ok)}
.rs-q.v-wrong{border-left-color:var(--r-bad)}
.rs-q.v-blank{border-left-color:var(--r-none)}
.rs-qtop{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin:0 0 10px;
  font-family:var(--ui);font-size:.76rem;color:var(--dim)}
.rs-verdict{font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.v-correct .rs-verdict{color:var(--r-ok)}
.v-wrong .rs-verdict{color:var(--r-bad)}
.v-blank .rs-verdict{color:var(--r-none)}
.rs-stem{margin:0 0 12px}
.rs-opts{list-style:none;margin:0 0 14px;padding:0;display:grid;gap:5px}
.rs-opts li{display:flex;gap:9px;align-items:flex-start;padding:8px 11px;
  border:1px solid var(--line);border-radius:3px;font-size:.92rem;color:var(--muted)}
.rs-opts li.is-ans{border-color:var(--r-ok);background:var(--r-ok-soft);color:var(--bone)}
.rs-opts li.is-chosen{border-color:var(--r-bad);background:var(--r-bad-soft);color:var(--bone)}
.rs-opts li.is-ans.is-chosen{border-color:var(--r-ok);background:var(--r-ok-soft)}
.rs-mark{font-family:var(--ui);font-weight:700;font-size:.72rem;flex:0 0 auto;min-width:58px}
.is-ans .rs-mark{color:var(--r-ok)}
.is-chosen:not(.is-ans) .rs-mark{color:var(--r-bad)}
.rs-why{background:var(--ink);border:1px solid var(--line);border-radius:3px;padding:14px 16px}
.rs-why b{display:block;font-family:var(--ui);font-size:.72rem;letter-spacing:.1em;
  text-transform:uppercase;color:var(--dim);margin-bottom:6px}
.rs-why p{margin:0;color:var(--muted);font-size:.93rem;line-height:1.6}
.rs-src{margin-top:10px;font-size:.8rem;color:var(--dim);display:flex;gap:14px;flex-wrap:wrap}

/* expanded explanation, where a chapter has one */
.rs-plain p{margin:0 0 10px;color:var(--muted);font-size:.93rem;line-height:1.65}
.rs-plain p:last-child{margin-bottom:0}
.rs-short{margin:12px 0 0;padding-top:10px;border-top:1px solid var(--line);
  color:var(--dim);font-size:.87rem}

/* "How you sat this paper" — behaviour, not knowledge. Indigo, because these
   are observations about method, neither a correct answer nor a trap. */
.rs-habit{
  display:flex;flex-direction:column;gap:3px;
  background:var(--hard-soft,#E2E6F5);border-left:3px solid var(--hard,#334EA0);
  border-radius:0 5px 5px 0;padding:12px 14px;margin-bottom:10px;
}
.rs-habit b{font-family:var(--ui);font-size:.86rem;color:var(--hard,#334EA0)}
.rs-habit span{font-size:.92rem;color:var(--muted)}
.rs-habit strong{color:var(--bone)}


/* ---------------------------------------------------------------- learn
   One question at a time. Deliberately calmer than the exam: no palette,
   no clock, and the verdict is said in words as well as in colour, because
   red/green alone is the one thing this site refuses to rely on. */
.ln-top{display:flex;align-items:baseline;justify-content:space-between;gap:14px;flex-wrap:wrap}
.ln-count{font-family:var(--ui);font-size:.86rem;color:var(--dim);margin:0 0 14px}
.ln-sec{font-family:var(--ui);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--dim);margin:0 0 12px}
.ln-opts{display:grid;gap:10px;margin:18px 0 0}
.ln-opt{display:flex;gap:12px;align-items:flex-start;width:100%;text-align:left;
  background-color:var(--ink-2);border:1px solid var(--line);border-radius:var(--r);
  padding:14px 16px;font:inherit;font-size:.97rem;cursor:pointer;
  transition:border-color .12s,background .12s;min-height:44px}
.ln-opt:hover:not([aria-disabled]){border-color:var(--brand)}
/* Locking the options after an answer must not grey them out. Chrome paints
   disabled controls through -webkit-text-fill-color at 30% opacity, which
   `color` alone cannot override - and the text it was washing out is the
   correct answer, the one thing the student is here to read. */
/* aria-disabled rather than :disabled, so the browser does not paint these
   through its own washed-out treatment - see learn.js for why that matters. */
.ln-opt[aria-disabled="true"]{cursor:default}
.ln-opt b{font-family:var(--ui);font-weight:700;color:var(--dim);flex:0 0 auto}
.ln-opt.is-right{border-color:var(--brand);background-color:var(--brand-soft)}
.ln-opt.is-wrong{border-color:var(--red);background-color:var(--red-soft)}
.ln-opt .ln-tag{margin-left:auto;font-family:var(--ui);font-size:.74rem;font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;flex:0 0 auto}
.ln-opt.is-right .ln-tag{color:var(--brand)}
.ln-opt.is-wrong .ln-tag{color:var(--red)}
#ln-why{margin-top:20px;padding-top:18px;border-top:1px solid var(--line)}
#ln-why h4{font-family:var(--ui);font-size:.76rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--dim);margin:0 0 10px}
#ln-why p{margin:0 0 .8em;font-size:.95rem}
.ln-pg{color:var(--dim);font-size:.8rem;margin:10px 0 0}
.ln-foot{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:22px}
/* Next is the action; finishing early is the escape hatch, not the headline. */
.ln-foot #ln-next{order:1;flex:1 1 200px}
.ln-foot #ln-quit{order:2}
@media(max-width:520px){.ln-foot #ln-quit{flex:1 1 100%}}
.ln-verdict{font-family:var(--ui);font-weight:800;font-size:1.05rem;margin:0 0 4px}
body.learn-open .site-head{display:none}
