/* Lesson player: narration, step log, changed-value pop, stack and heap memory panels. */
#msg{flex-direction:column;align-items:flex-start;gap:4px;font:500 15.5px/1.55 var(--body);padding:14px 18px;min-height:5em}
#msg::before{display:none}
.stepno{font:600 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:color-mix(in srgb,var(--cat) 75%,var(--ink))}
.logbox{border-top:1px solid var(--line);padding:8px 16px}
.logbox summary{cursor:pointer;font:600 12px var(--mono);color:var(--muted)}
.logbox summary small{font-weight:400;margin-left:6px}
#log{list-style:none;margin:8px 0 2px;padding:0;max-height:150px;overflow:auto;display:grid;gap:2px}
#log li{display:flex;gap:10px;padding:4px 8px;border-radius:6px;cursor:pointer;color:var(--muted);font-size:13px}
#log li b{font:600 11px var(--mono);min-width:20px;text-align:right;padding-top:2px}
#log li:hover{background:color-mix(in srgb,var(--cat) 10%,transparent)}
#log li.on{color:var(--ink);background:color-mix(in srgb,var(--cat) 14%,transparent)}
.cell.chg b,.var.chg,.obj.chg{animation:pop .55s ease-out}
@keyframes pop{0%{transform:scale(1.16);box-shadow:0 0 0 3px color-mix(in srgb,var(--cmp) 60%,transparent)}100%{transform:scale(1)}}
.mem{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px;width:100%;max-width:760px;margin:0 auto}
.mem-col{border:1px dashed var(--line);border-radius:12px;padding:12px;display:grid;gap:8px;align-content:start;min-height:150px;background:color-mix(in srgb,var(--panel) 60%,transparent)}
.mem-col h4{margin:0 0 4px;font:700 14px var(--display)}
.mem-col h4 small{font:400 11px var(--mono);color:var(--muted);margin-left:6px}
.mem-empty{margin:0;color:var(--muted);font:12px var(--mono)}
.var{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:9px 12px;border:1.5px solid var(--line);border-radius:10px;background:var(--panel)}
.vn{font:600 13px var(--mono);color:var(--muted)}
.vv{font:600 14px var(--mono)}
.ref{color:var(--rc);border:1px solid var(--rc);border-radius:99px;padding:1px 9px;background:color-mix(in srgb,var(--rc) 14%,transparent)}
.obj{display:flex;gap:10px;align-items:center;padding:10px 12px;border:1.5px solid var(--rc);border-left-width:5px;border-radius:10px;background:color-mix(in srgb,var(--rc) 10%,var(--panel))}
.oid{font:700 12px var(--mono);color:var(--rc)}
.ov{font:600 14px var(--mono)}
.var.s-cmp,.obj.s-cmp{box-shadow:0 0 0 2px var(--cmp)}
.var.s-act,.obj.s-act{box-shadow:0 0 0 2px var(--accent)}
.var.s-ok,.obj.s-ok{box-shadow:0 0 0 2px var(--ok)}
.var.s-bad,.obj.s-bad{box-shadow:0 0 0 2px var(--bad)}
@media (prefers-reduced-motion:reduce){.cell.chg b,.var.chg,.obj.chg{animation:none}}
@media (max-width:520px){.mem{grid-template-columns:minmax(0,1fr)}}
@media (max-width:520px){.arow em{display:none}.stats{gap:20px}}

/* Lesson player layout: the animation and the code sit side by side on wide screens, so the highlighted line
   is always in view while you step. Notes move below. */
.wrap{max-width:1440px}
#lesson{gap:20px}
.lesson-play{display:grid;grid-template-columns:minmax(0,1fr);gap:18px;align-items:start}
.code-pane{display:grid;gap:12px;min-width:0}
.code-card h2,.lower h2{display:flex;align-items:center;gap:8px;margin:0 0 8px}
.code-pane .code{max-height:min(62vh,560px);overflow:auto}
.logbox{border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--panel) 82%,transparent);padding:10px 14px}
.logbox #log{max-height:210px}
.board .legend{align-items:center}
.board .legend .keys{font-size:12px;color:var(--muted)}
.board #stage{min-height:300px}
.lower{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:24px;align-items:start}
.lower .notes p,.lower .notes ul{max-width:68ch}
#lesson{container-type:inline-size}
@container (min-width:900px){
  .lesson-play{grid-template-columns:minmax(0,1.3fr) minmax(320px,1fr)}
  .code-pane{position:sticky;top:84px}
}
@media (max-width:980px){.lower{grid-template-columns:minmax(0,1fr)}}
@media (max-width:640px){.board .legend .keys{display:none}.board #stage{min-height:220px}}
.board .ctl{flex-wrap:nowrap;gap:6px}
.board .ctl .btn{padding-inline:12px}
.board #scrub{flex:1 1 60px}
.board #count{min-width:48px}
@media (max-width:560px){.board .ctl{flex-wrap:wrap}.board #scrub{flex-basis:100%;order:5}}
.code-pane>*{min-width:0}

/* Sidebar: areas grouped under the learning-path sections. Each area is a quiet row with its glyph, name and a
   small progress ring; the open area is tinted and lists its lessons on a coloured rail. */
aside #list{display:grid;gap:6px}
aside .side-sec{display:grid;gap:2px}
aside .side-sec+.side-sec{margin-top:10px}
aside .side-sec-h{margin:0 0 4px 10px;font:600 12px/1.3 var(--body);color:var(--muted)}
aside .grp{border-radius:10px}
aside .grp.open{background:color-mix(in srgb,var(--cat) 8%,transparent);padding-bottom:6px}
aside .cat{display:flex;align-items:center;gap:10px;width:100%;margin:0;padding:6px 8px;border:0;border-radius:10px;
  font:500 14px/1.25 var(--body);letter-spacing:0;text-transform:none;color:color-mix(in srgb,var(--ink) 88%,var(--muted));background:none;cursor:pointer;text-align:left}
aside .cat::before,aside .cat::after{content:none;display:none}
aside .cat:hover{color:var(--ink);background:color-mix(in srgb,var(--cat) 10%,transparent)}
aside .grp.open .cat,aside .grp.here .cat{color:var(--ink);font-weight:600}
aside .cat:focus-visible{outline:2px solid var(--cat);outline-offset:1px}
aside .cat-gl{flex:none;display:grid;place-items:center;width:26px;height:26px;border-radius:7px;font:700 10.5px var(--mono);
  color:var(--cat);background:color-mix(in srgb,var(--cat) 15%,transparent)}
aside .cat-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
aside .ring{flex:none;width:16px;height:16px}
aside .ring svg{display:block;width:100%;height:100%;transform:rotate(-90deg)}
aside .ring circle{fill:none;stroke:color-mix(in srgb,var(--line) 90%,transparent);stroke-width:3}
aside .ring circle.fg{stroke:var(--cat);stroke-linecap:round}
aside .ring:not(.full) circle.fg[stroke-dasharray^="0 "]{stroke:none}
aside .cat em{flex:none;min-width:30px;text-align:right;font:500 11px var(--mono);font-style:normal;color:var(--muted);letter-spacing:0}
aside .grp-items{margin:2px 6px 0 20px;padding-left:12px;border-left:1.5px solid color-mix(in srgb,var(--cat) 40%,transparent)}
aside .lk{border:0;border-radius:7px;padding:5px 8px;margin:1px 0;font-size:13.5px;font-weight:400;line-height:1.35;color:color-mix(in srgb,var(--ink) 78%,var(--muted));box-shadow:none}
aside .lk:hover{color:var(--ink);background:color-mix(in srgb,var(--cat) 12%,transparent)}
aside .lk.cur{font-weight:500;color:var(--ink);background:color-mix(in srgb,var(--cat) 22%,transparent)}
aside .lk span:first-child{flex:1}
aside .lk .ck{flex:none;display:grid;place-items:center;width:16px;height:16px;border-radius:50%;font-size:9.5px;color:var(--on-cat);background:var(--ok)}
aside #list,aside .side-sec{grid-template-columns:minmax(0,1fr)}
aside .grp,aside .lk{min-width:0}
aside .lk span:first-child{white-space:normal;overflow-wrap:anywhere}
/* keep the header on one row on mid-size screens: the menu scrolls sideways instead of pushing buttons down */
@media (min-width:821px){header.top{flex-wrap:nowrap}header.top .nav{flex:1 1 auto;min-width:0;overflow-x:auto;scrollbar-width:none;white-space:nowrap}header.top .nav::-webkit-scrollbar{display:none}header.top>*{flex-shrink:0}header.top>.nav{flex-shrink:1}}
