/* ch3.css — widgets for chapter 3 (memory hierarchy). --lk-* tokens only. */

/* coalescing visualizer: one cell per 32-byte sector */
.cz-lanes{display:grid;grid-template-columns:repeat(32,1fr);gap:2px;margin:.2rem 0 .6rem}
.cz-lane{height:.9rem;border:1px solid var(--lk-rule-soft);background:var(--lk-paper);font:9px/0.9rem var(--lk-mono);text-align:center;color:var(--lk-ink-soft);overflow:hidden}
.cz-map{display:grid;gap:2px;margin:.3rem 0 .4rem}
.cz-sec{position:relative;height:1.1rem;border:1px solid var(--lk-rule-soft);background:var(--lk-paper)}
.cz-sec.hit{border-color:var(--lk-cobalt);background:var(--lk-hl)}
.cz-sec .use{position:absolute;left:0;top:0;bottom:0;background:var(--lk-cobalt)}
.cz-sec.bcast .use{background:var(--lk-forest)}
.cz-legend{display:flex;gap:1rem;flex-wrap:wrap;font:.75rem var(--lk-mono);color:var(--lk-ink-soft);margin:.2rem 0 .6rem}
.cz-legend i{display:inline-block;width:.8rem;height:.8rem;vertical-align:-2px;margin-right:.3rem;border:1px solid var(--lk-rule-soft)}
.cz-legend i.u{background:var(--lk-cobalt)} .cz-legend i.h{background:var(--lk-hl);border-color:var(--lk-cobalt)} .cz-legend i.e{background:var(--lk-paper)}
body.lk .cz-note{font:.72rem/1.4 var(--lk-mono);color:var(--lk-ink-soft);margin:0 0 .3rem}

/* bank-conflict visualizer: 32 bank columns, a stack of requested words per bank */
.bk-grid{display:grid;grid-template-columns:repeat(32,1fr);gap:2px;align-items:end;margin:.4rem 0 .2rem;min-height:4rem}
.bk-col{display:flex;flex-direction:column-reverse;gap:1px}
.bk-cell{height:.55rem;background:var(--lk-cobalt);opacity:.85}
.bk-cell.bc{background:var(--lk-forest)}
.bk-col.worst .bk-cell{background:var(--lk-vermilion)}
.bk-axis{display:grid;grid-template-columns:repeat(32,1fr);gap:2px;font:8px var(--lk-mono);color:var(--lk-ink-soft);text-align:center;border-top:1px solid var(--lk-rule)}
.bk-axis span{overflow:visible;white-space:nowrap}
@media(max-width:560px){.cz-lane{font-size:0;height:.6rem}.bk-axis span{visibility:hidden}.bk-axis span:nth-child(8n+1){visibility:visible}}

/* tile animation (tile-anim.js): naive vs tiled loads, A = cobalt, B = vermilion */
.ta-stage{margin:.2rem 0 .3rem}
.ta-svg{display:block;width:100%;height:auto}
.ta-panel{fill:var(--lk-paper);stroke:var(--lk-rule-soft)}
.ta-ptitle{font:600 11px var(--lk-utility);letter-spacing:.06em;fill:var(--lk-ink-soft)}
.ta-lbl{font:11px var(--lk-mono);fill:var(--lk-ink-soft)}
.ta-cell{fill:var(--lk-paper-light);stroke:var(--lk-rule-soft)}
.ta-cell.a.n1,.ta-cell.a.n2,.ta-cell.a.n3,.ta-cell.a.n4{fill:var(--lk-cobalt)}
.ta-cell.b.n1,.ta-cell.b.n2,.ta-cell.b.n3,.ta-cell.b.n4{fill:var(--lk-vermilion)}
.ta-cell.n1{fill-opacity:.16}.ta-cell.n2{fill-opacity:.34}.ta-cell.n3{fill-opacity:.52}.ta-cell.n4{fill-opacity:.7}
.ta-cnt{font:600 10px var(--lk-mono);fill:var(--lk-ink);text-anchor:middle;dominant-baseline:central;pointer-events:none}
.ta-hi{fill:none;stroke:var(--lk-ink);stroke-width:1.6;stroke-dasharray:4 3}
.ta-shbox{fill:var(--lk-paper-light);stroke:var(--lk-rule)}
.ta-sh.idle{opacity:.4}
.ta-slot{fill:var(--lk-paper);stroke:var(--lk-rule-soft)}
.ta-slot.a.full{fill:var(--lk-cobalt);fill-opacity:.3}
.ta-slot.b.full{fill:var(--lk-vermilion);fill-opacity:.3}
.ta-slot.fresh{fill-opacity:.75}
.ta-bar{transition:opacity .15s}
.ta-bar rect{fill:var(--lk-ink)}
.ta-bar text{font:600 11px var(--lk-mono);fill:var(--lk-paper-light);dominant-baseline:central}
.ta-th{fill:var(--lk-paper-light);stroke:var(--lk-rule)}
.ta-th.hot{stroke:var(--lk-forest);stroke-width:2.5}
.ta-acc{fill:var(--lk-forest);fill-opacity:.55}
.ta-pk.a{fill:var(--lk-cobalt)}.ta-pk.b{fill:var(--lk-vermilion)}
.ta-scrub{display:block;width:100%;margin:.2rem 0 .8rem;accent-color:var(--lk-cobalt)}
.ta-cap{min-height:4.4em}
@media(prefers-reduced-motion:reduce){.ta-bar{transition:none}}
.ta-btns{display:flex;gap:.4rem;flex-wrap:wrap;align-items:center;margin:.2rem 0 .6rem}
.ta-btns button{font-family:var(--lk-utility);font-size:.82rem;font-weight:600;cursor:pointer;padding:.35rem .8rem;border-radius:3px;border:1px solid var(--lk-cobalt);background:var(--lk-paper-light);color:var(--lk-cobalt)}
.ta-btns button[aria-pressed="true"]{background:var(--lk-cobalt);color:var(--lk-paper-light)}
.ta-btns button:focus-visible{outline:2px solid var(--lk-cobalt);outline-offset:2px}
.ta-sep{width:1px;height:1.4rem;background:var(--lk-rule-soft);margin:0 .2rem}
/* tile animation: the two points of view */
.ta-tabs{display:flex;gap:0;border-bottom:1px solid var(--lk-rule);margin:.1rem 0 .8rem}
.ta-tabs button{font-family:var(--lk-utility);font-size:.85rem;font-weight:600;cursor:pointer;padding:.45rem .9rem;border:1px solid transparent;border-bottom:0;border-radius:3px 3px 0 0;background:none;color:var(--lk-ink-soft);margin-bottom:-1px}
.ta-tabs button[aria-selected="true"]{background:var(--lk-paper);border-color:var(--lk-rule);color:var(--lk-cobalt-dark)}
.ta-tabs button:focus-visible{outline:2px solid var(--lk-cobalt);outline-offset:-2px}
.ta-pick{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem 1rem;margin:0 0 .7rem;font-family:var(--lk-utility);font-size:.85rem;font-weight:600;color:var(--lk-ink-soft)}
.ta-pick select{font:inherit;font-family:var(--lk-mono);margin-left:.3rem;padding:.2rem .3rem;border:1px solid var(--lk-rule);border-radius:3px;background:var(--lk-paper)}
.ta-hint{font-weight:400;font-style:italic}
.ta-pov{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);gap:.8rem;align-items:start}
@container (max-width:640px){.ta-pov{grid-template-columns:minmax(0,1fr)}}
.w#w-tileanim{container-type:inline-size}
body.lk pre.ta-code{margin:0;padding:.6rem 0;font-size:.74rem;line-height:1.55;overflow-x:auto;background:var(--lk-paper)}
.ta-ln{display:block;padding:0 .7rem;white-space:pre;border-left:3px solid transparent}
.ta-ln.on{background:var(--lk-hl);border-left-color:var(--lk-cobalt);color:var(--lk-cobalt-dark);font-weight:600}
.ta-vars{margin:0;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.25rem .7rem;padding:.6rem .7rem;border:1px solid var(--lk-rule-soft);border-radius:3px;background:var(--lk-paper);font-size:.8rem}
.ta-vars dt{font-family:var(--lk-utility);font-weight:600;color:var(--lk-ink-soft);white-space:nowrap}
.ta-vars dd{margin:0;font-family:var(--lk-mono);overflow-wrap:break-word}
.ta-said{margin-top:.8rem}
.ta-pk.dim{opacity:.12}
.ta-th.me{stroke:var(--lk-cobalt);stroke-width:3}
.ta-th.other{opacity:.45}
.ta-slot.mine{stroke:var(--lk-ink);stroke-width:2}
.ta-hit{fill:transparent;cursor:pointer}
@container (max-width:440px){body.lk pre.ta-code{font-size:.66rem}.ta-ln{padding:0 .5rem}}
