/* Memory lab (psychology/assets/tools/memory-lab.js). OWNED BY THIS TOOL ONLY (builder T3).
   Colors by role: the course cerulean for you, the immediate condition and
   the memory you want; vermillion for the delayed condition, the reviews and
   what interferes (Okabe-Ito, lighter in dark mode). Every value is also
   written, so color is never the only cue. */
.ml-svg,.ml-qfig{--ml-acc:#084F78;--ml-acc-fill:rgba(8,79,120,.12);--ml-alt:#C24E00;--ml-alt-ink:#A84400;--ml-alt-tint:#FBEADF;--ml-acc-tint:#E3F0F8;--ml-bub:#084F78;--ml-bub-ink:#FFFFFF;}
:root[data-theme="dark"] .ml-svg,:root[data-theme="dark"] .ml-qfig{--ml-acc:#8CC8E8;--ml-acc-fill:rgba(140,200,232,.14);--ml-alt:#F29A5C;--ml-alt-ink:#F6B082;--ml-alt-tint:rgba(242,154,92,.14);--ml-acc-tint:rgba(80,170,220,.14);--ml-bub:#A8D8F0;--ml-bub-ink:#0B2130;}
.ml-card{display:grid;gap:14px;}
.ml-fig{position:relative;min-height:340px;height:min(70vh,600px);}
.ls-root .ml-fig{flex:1 1 auto;height:auto;min-height:300px;}
.ml-svg{display:block;width:100%;height:100%;font-family:var(--font-ui);user-select:none;-webkit-user-select:none;}
.ml-fig .ml-svg{position:absolute;inset:0;}
.ml-svg.is-tap{cursor:pointer;}
/* dock */
.ml-ctl{display:flex;flex-direction:column;gap:10px;}
.ml-views{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));}
.ml-views button,.ml-when button,.ml-want button{min-height:44px;}
.ml-grp{display:flex;flex-direction:column;gap:10px;}
.ml-grp[hidden],.ml-o[hidden],.ml-recall[hidden]{display:none !important;}
.ml-go .btn-press{width:100%;}
.ml-recall label{display:block;font:800 var(--ls-s,13px) var(--font-ui);color:var(--muted);margin:0 0 6px;}
.ml-recall-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;}
.ml-recall input{min-height:48px;padding:0 14px;border:0;border-radius:12px;background:var(--white);box-shadow:inset 0 0 0 2px var(--line);color:var(--ink);font:700 17px var(--font-ui);min-width:0;}
.ml-recall input:focus{box-shadow:inset 0 0 0 2px var(--cink);outline:none;}
.ml-recall .bt-btn{min-height:48px;padding:0 18px;}
.ml-presets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;}
.ml-pre{min-height:44px;padding:0 10px;border-radius:12px;border:1.5px solid var(--line);background:var(--white);color:var(--ink);font:800 14px var(--font-ui);cursor:pointer;}
.ml-pre[aria-pressed="true"]{border-color:var(--cink);color:var(--cink);background:var(--ctint);}
.ml-rv-act{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px;}
.ml-rv-act .bt-btn{min-height:44px;}
/* scene text */
.ml-tv{fill:var(--muted);font-weight:700;font-size:12.5px;font-variant-numeric:tabular-nums;}
.ml-axn{fill:var(--ink);font-weight:800;font-size:13px;}
.ml-lab{font-weight:900;font-size:13px;paint-order:stroke;stroke:var(--white);stroke-width:3.5px;stroke-linejoin:round;}
.ml-c-imm{fill:var(--ml-acc);} .ml-c-del,.ml-c-rv{fill:var(--ml-alt-ink);} .ml-c-f0{fill:var(--muted);}
.ml-hint{fill:var(--muted);font-weight:700;font-size:12px;}
.ml-grid{stroke:var(--line);stroke-width:1;}
.ml-axis{stroke:var(--ink);stroke-width:1.5;}
.ml-bub rect{fill:var(--ml-bub);}
.ml-bt{fill:var(--ml-bub-ink);font-weight:900;font-size:14px;}
.ml-bub-intr rect{fill:var(--ml-alt);}
:root[data-theme="dark"] .ml-bub-intr .ml-bt{fill:#2A1405;}
/* list scene */
.ml-cardbg{fill:var(--white);stroke:var(--line);stroke-width:1.5;filter:drop-shadow(0 2px 6px rgba(20,40,60,.08));}
.ml-cardk{fill:var(--muted);font-weight:800;font-size:13px;}
.ml-cardh{fill:var(--muted);font-weight:700;font-size:14px;}
.ml-word{fill:var(--ink);font-weight:900;font-size:40px;letter-spacing:.01em;}
.ml-bar0{fill:var(--track,#E6ECEF);} .ml-bar1{fill:var(--ml-alt);}
.ml-chip{fill:var(--ml-acc-tint);stroke:var(--ml-acc);stroke-opacity:.35;}
.ml-chipt{fill:var(--ink);font-weight:800;font-size:14px;}
.ml-zone{fill:var(--ml-acc-fill);}
:root[data-theme="dark"] .ml-zone{fill:rgba(140,200,232,.07);}
.ml-zt{fill:var(--ml-acc);font-weight:900;font-size:12.5px;letter-spacing:.02em;}
.ml-now{fill:var(--ml-acc);fill-opacity:.12;stroke:var(--ml-acc);stroke-width:1.5;}
.ml-imm{fill:none;stroke:var(--ml-acc);stroke-width:3;stroke-linejoin:round;}
.ml-imm-pt{fill:var(--ml-acc);stroke:var(--white);stroke-width:1.5;}
.ml-del{fill:none;stroke:var(--ml-alt);stroke-width:3;stroke-dasharray:7 5;stroke-linejoin:round;}
.ml-del-pt{fill:var(--ml-alt);stroke:var(--white);stroke-width:1.5;}
.ml-imm.is-dim,.ml-del.is-dim{stroke-opacity:.35;stroke-width:2;}
.ml-imm-pt.is-dim,.ml-del-pt.is-dim{opacity:.35;}
.ml-you{fill:var(--white);stroke:var(--line);stroke-width:2;}
.ml-you.is-hit{fill:var(--ml-acc);stroke:var(--ml-acc);}
.ml-tick{fill:none;stroke:var(--white);stroke-width:2.6;stroke-linecap:round;stroke-linejoin:round;}
:root[data-theme="dark"] .ml-tick{stroke:#0B2130;}
/* forgetting scene */
.ml-f0{fill:none;stroke:var(--muted);stroke-width:2;stroke-dasharray:5 5;}
.ml-f1{fill:none;stroke:var(--ml-acc);stroke-width:3.2;stroke-linejoin:round;}
.ml-farea{fill:var(--ml-acc-fill);}
.ml-f1-pt{fill:var(--ml-acc);stroke:var(--white);stroke-width:2;}
.ml-rvl{stroke:var(--ml-alt);stroke-width:1.5;stroke-dasharray:3 4;}
.ml-rvm{fill:var(--ml-alt);}
/* interference scene */
.ml-time{stroke:var(--muted);stroke-width:2;}
.ml-timeh{fill:var(--muted);}
.ml-tdot{fill:var(--muted);}
.ml-tstem{stroke:var(--line);stroke-width:1.5;stroke-dasharray:3 4;}
.ml-tdot.is-test{fill:var(--ml-acc);}
.ml-tc{fill:var(--white);stroke:var(--line);stroke-width:2;}
.ml-tc.is-want{fill:var(--ml-acc-tint);stroke:var(--ml-acc);stroke-width:2.5;}
.ml-tc.is-intr{fill:var(--ml-alt-tint);stroke:var(--ml-alt);stroke-width:2.5;}
.ml-tc.is-test{stroke:var(--ml-acc);stroke-dasharray:6 4;stroke-width:2;}
.ml-tck{fill:var(--muted);font-weight:800;font-size:12.5px;}
.ml-tcv{fill:var(--ink);font-weight:900;}
.ml-tcw{fill:var(--muted);font-weight:700;font-size:12px;}
.ml-arr{fill:none;stroke:var(--ml-alt);stroke-width:3;}
.ml-arrh{fill:var(--ml-alt);}
/* drills */
.ml-data{font:800 16px/1.7 var(--font-mono);}
.ml-means{margin:6px 0 0;text-align:center;font:700 calc(15px * var(--ls-scale,1)) var(--font-ui);color:var(--ink);}
.ml-qfig .table-wrap{margin-top:8px;}
.ml-qtl{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto minmax(0,1fr);gap:8px;align-items:center;width:100%;max-width:820px;margin:auto;}
.ml-qc{display:flex;flex-direction:column;gap:6px;align-items:center;justify-content:center;min-height:110px;padding:12px;border-radius:14px;border:2px solid var(--line);background:var(--white);text-align:center;}
.ml-qc span{font:800 12.5px var(--font-ui);color:var(--muted);}
.ml-qc b{font:900 calc(17px * var(--ls-scale,1)) var(--font-ui);color:var(--ink);overflow-wrap:anywhere;}
.ml-qc.is-want{border-color:var(--ml-acc);background:var(--ml-acc-tint);}
.ml-qc.is-intr{border-color:var(--ml-alt);background:var(--ml-alt-tint);}
.ml-qc.is-test{border-style:dashed;border-color:var(--ml-acc);}
.ml-qa{font:900 22px var(--font-ui);color:var(--muted);}
@media (max-width:560px){ .ml-qtl{grid-template-columns:minmax(0,1fr);} .ml-qa{transform:rotate(90deg);justify-self:center;line-height:1;} .ml-qc{min-height:76px;} }
.ls-root .ls-drill-stage .ml-qfig{justify-content:center;}
.ls-root .ls-drill-stage .ml-qfig > svg.psy-plot{flex:1 1 auto;}
/* Room for the first-run tip while it shows (hintSlot). */
/* The primary row sits in the dock's flow (not stuck to the screen's foot), so the first-run tip above it never covers the scene switch. */
.ls-dock .ml-go{position:static !important;box-shadow:none !important;}
