/* SPDX-License-Identifier: MIT */
/* Fonts: Literata, Schibsted Grotesk, Fragment Mono. SIL Open Font License 1.1; see /fonts/OFL.txt. */
@font-face{font-family:Literata;src:url(/fonts/literata.woff2) format("woff2");font-weight:200 900;font-style:normal;font-display:swap}
@font-face{font-family:Literata;src:url(/fonts/literata-italic.woff2) format("woff2");font-weight:200 900;font-style:italic;font-display:swap}
@font-face{font-family:"Schibsted Grotesk";src:url(/fonts/schibsted-grotesk.woff2) format("woff2");font-weight:400 900;font-style:normal;font-display:swap}
@font-face{font-family:"Fragment Mono";src:url(/fonts/fragment-mono.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}

:root{
  --paper:#ffffff; --raised:#ffffff; --ink:#1c1c1c; --body:#2e2e2e; --muted:#5e5e5e; --faint:#8a8a8a;
  --rule:#e6e6e6; --rule-strong:#cfcfcf; --wash:#f5f5f4; --code:#f6f6f5;
  --link:#1d7a6e; --link-hover:#135a51;
  --accent:#2a8a7d; --accent-strong:#1d6f64; --accent-soft:#e6f3f1;
  --mark:#ffe45c; --mark-soft:#fff4b8; --mark-ink:#1c1c1c;
  --focus:#2a8a7d; --error-bg:#fdeeee; --error:#a12a2a;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Inter,Roboto,"Helvetica Neue",Arial,sans-serif;
  --serif:var(--sans);
  --mono:"Fragment Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
  --masthead:60px; --rail:264px; --measure:44rem;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){
  :root{
    --paper:#171717; --raised:#212121; --ink:#f0f0f0; --body:#d4d4d4; --muted:#a3a3a3; --faint:#7d7d7d;
    --rule:#2e2e2e; --rule-strong:#404040; --wash:#212121; --code:#1f1f1f;
    --link:#6fd1c3; --link-hover:#a6e5dc;
    --accent:#4fbfb0; --accent-strong:#86dacd; --accent-soft:rgba(79,191,176,.14);
    --mark:#ffe45c; --mark-soft:rgba(255,228,92,.16); --mark-ink:#1c1c1c;
    --focus:#4fbfb0; --error-bg:#3a2222; --error:#ffb3b3;
    color-scheme:dark;
  }
}

*{box-sizing:border-box}
html{background:var(--paper);-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--body);font:400 1.0625rem/1.75 var(--sans);font-optical-sizing:auto;text-rendering:optimizeLegibility}
a{color:var(--link);text-decoration-thickness:1px;text-underline-offset:.18em}
a:hover{color:var(--link-hover);text-decoration-thickness:2px}
button,input,select{font:inherit}
button{cursor:pointer;font:500 .875rem/1.4 var(--sans);color:var(--ink);background:var(--raised);border:1px solid var(--rule-strong);border-radius:6px;padding:.5rem .85rem}
button:hover{border-color:var(--ink)}
button:disabled{opacity:.55;cursor:default}
:focus-visible{outline:3px solid var(--focus);outline-offset:3px}
[hidden]{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.skip-link{position:fixed;z-index:50;left:1rem;top:.6rem;padding:.6rem .9rem;background:var(--raised);font-family:var(--sans);transform:translateY(-200%)}
.skip-link:focus{transform:none}
mark{background:var(--mark);color:var(--mark-ink);border-radius:2px;padding:0 .08em}

/* Masthead */
.masthead{position:sticky;top:0;z-index:30;height:var(--masthead);display:flex;align-items:center;gap:1.5rem;padding:0 2rem;background:color-mix(in srgb,var(--paper) 92%,transparent);backdrop-filter:saturate(1.4) blur(10px);-webkit-backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--rule);font-family:var(--sans)}
.brand{display:flex;align-items:center;gap:.55rem;color:var(--ink);text-decoration:none;font:650 1.2rem/1 var(--sans);letter-spacing:-.02em;flex-shrink:0}
.brand:hover{color:var(--ink)}
.brand-mark{width:26px;height:26px}
.brand-window{fill:var(--mark)}
.brand-bounds{stroke:var(--ink);stroke-width:2.6;stroke-linecap:round;fill:none}
.sections{display:flex;gap:.25rem;min-width:0;margin-left:auto;overflow-x:auto;scrollbar-width:none}
.sections a{position:relative;color:var(--muted);text-decoration:none;font-size:.9rem;font-weight:500;padding:.45rem .6rem;border-radius:5px;white-space:nowrap}
.sections a:hover{color:var(--ink);background:var(--wash)}
.sections a[aria-current]{color:var(--accent-strong);font-weight:600}
.search{position:relative;display:flex;align-items:center;gap:.5rem;width:15rem;flex-shrink:1;min-width:0;border:1px solid var(--rule-strong);border-radius:7px;padding:0 .6rem;height:2.35rem;background:var(--raised)}
.search:focus-within{border-color:var(--ink)}
.search svg{width:16px;height:16px;fill:none;stroke:var(--muted);stroke-width:1.8;flex-shrink:0}
.search input{flex:1;min-width:0;border:0;background:none;color:var(--ink);font-size:.9rem;outline:none}
.search input::placeholder{color:var(--faint)}
.search input::-webkit-search-cancel-button{display:none}
.search kbd{font:.75rem var(--mono);color:var(--muted);border:1px solid var(--rule-strong);border-radius:4px;padding:0 .35rem}
.search-panel{position:absolute;top:calc(100% + .5rem);left:0;width:min(30rem,calc(100vw - 2rem));max-height:min(70vh,36rem);overflow-y:auto;overscroll-behavior:contain;background:var(--raised);border:1px solid var(--rule-strong);border-radius:9px;box-shadow:0 18px 40px -18px rgba(0,0,0,.35);padding:.5rem}
.search-status{font-size:.8rem;color:var(--muted);margin:.35rem .6rem .4rem}
.search-result{display:block;text-decoration:none;color:var(--body);padding:.6rem .7rem;border-radius:6px}
.search-result:hover,.search-result:focus-visible{background:var(--wash)}
.search-result strong{display:block;color:var(--ink);font-weight:600;font-size:.95rem}
.search-result p{margin:.2rem 0 0;font-size:.82rem;line-height:1.5;color:var(--muted)}
.empty-search{font-size:.88rem;color:var(--muted);margin:.4rem .7rem .7rem}
.menu-button{display:none;place-items:center;width:38px;height:38px;padding:0}
.menu-button svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.masthead-brand{display:none}

/* Frame */
.shell{margin-left:var(--rail);min-width:0}
.rail{position:fixed;z-index:35;top:0;left:0;bottom:0;width:var(--rail);display:flex;flex-direction:column;padding:1rem .85rem 1rem 1rem;background:var(--paper);font-family:var(--sans);border-right:1px solid var(--rule)}
.side-brand{height:calc(var(--masthead) - 1rem);margin:0 0 1rem .45rem}
.chapter-navigation{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--rule-strong) transparent;margin-right:-.5rem;padding-right:.5rem}
.sidebar-footer{border-top:1px solid var(--rule);margin-top:1rem;padding:1rem .6rem 0;font-size:.78rem;line-height:1.5;color:var(--faint)}
.sidebar-footer p{margin:0 0 .6rem}
.sidebar-footer a{display:block;color:var(--muted);font-size:.82rem;margin:.2rem 0}
.page{display:grid;grid-template-columns:minmax(0,var(--measure)) 13rem;justify-content:center;gap:4rem;padding:3.5rem 2.5rem 0}
#reader{min-width:0;outline:none}
.scrim{display:none}

/* Article */
.chapter-heading{margin-bottom:2.25rem}
h1{font:700 clamp(2rem,1.4rem + 2vw,2.75rem)/1.15 var(--sans);letter-spacing:-.022em;color:var(--ink);margin:0;text-wrap:balance;outline:none}
.prose{overflow-wrap:break-word}
.prose>:first-child{margin-top:0}
.prose p,.prose ul,.prose ol{margin:0 0 1.15em}
.prose li{margin:.3em 0}
.prose li::marker{color:var(--faint)}
.prose h2{font:680 1.55rem/1.25 var(--sans);letter-spacing:-.015em;color:var(--ink);margin:2.6em 0 .7em;scroll-margin-top:calc(var(--masthead) + 1.5rem);outline:none;text-wrap:balance}
.prose h3{font:650 1.08rem/1.35 var(--sans);color:var(--ink);margin:2em 0 .5em;scroll-margin-top:calc(var(--masthead) + 1.5rem)}
.prose strong{color:var(--ink);font-weight:650}
.prose em{font-style:italic}
.prose hr{border:0;border-top:1px solid var(--rule);margin:2.5em 0}
.prose code{font:.84em var(--mono);background:var(--wash);border-radius:4px;padding:.1em .3em;color:var(--ink);overflow-wrap:break-word}
.prose blockquote{margin:1.4em 0;padding:.9em 1.2em;background:var(--code);border-left:4px solid var(--mark);border-radius:0 6px 6px 0;font:1rem/1.6 var(--mono);color:var(--ink)}
.prose blockquote p{margin:0}
.prose pre{position:relative;margin:1.6em 0;background:var(--code);border:1px solid var(--rule);border-radius:8px;overflow:auto;font:.86rem/1.65 var(--mono);color:var(--ink);tab-size:4}
.prose pre code{display:block;background:none;border:0;padding:1rem 1.2rem 1.15rem;font-size:inherit;overflow-wrap:normal;white-space:pre}
.code-toolbar{position:sticky;left:0;display:flex;justify-content:space-between;align-items:center;padding:.45rem .6rem .45rem 1.2rem;border-bottom:1px solid var(--rule);font:500 .75rem/1 var(--sans);color:var(--muted)}
.code-toolbar button{font-size:.75rem;padding:.3rem .6rem}
.table-scroll{overflow-x:auto;margin:1.6em 0;max-width:100%}
.prose table{border-collapse:collapse;width:100%;font:.9rem/1.5 var(--sans);color:var(--body)}
.prose thead th{white-space:nowrap;text-align:left;font-weight:650;color:var(--ink);padding:.55rem .9rem .55rem 0;border-bottom:2px solid var(--ink);vertical-align:bottom}
.prose td{padding:.65rem .9rem .65rem 0;border-bottom:1px solid var(--rule);vertical-align:top}
.prose td code{font-size:.82em;white-space:nowrap}
.prose table a{overflow-wrap:normal}
.prose>p:first-child em:only-child{font:500 .85rem/1.4 var(--sans);font-style:normal;color:var(--muted)}
.notice{font:.9rem/1.5 var(--sans);background:var(--wash);border-left:4px solid var(--mark);padding:.8rem 1rem;border-radius:0 6px 6px 0}
.chapter-pagination{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin:3.5rem 0 0;padding-top:1.5rem;border-top:1px solid var(--rule);font-family:var(--sans)}
.chapter-pagination a{text-decoration:none;color:var(--ink);padding:.9rem 1rem;border-radius:8px;border:1px solid var(--rule)}
.chapter-pagination a:hover{border-color:var(--ink);color:var(--ink)}
.chapter-pagination span{display:block;font-size:.8rem;color:var(--muted);margin-bottom:.2rem}
.chapter-pagination strong{font-weight:600;font-size:.95rem;line-height:1.35}
.chapter-pagination .next{grid-column:2;text-align:right}
.reader-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:.75rem 1.5rem;margin:4.5rem 0 0;padding:1.5rem 0 2.5rem;border-top:1px solid var(--rule);font:.8rem/1.5 var(--sans);color:var(--faint)}
.reader-footer div{display:flex;gap:1.1rem;flex-wrap:wrap}
.reader-footer a{color:var(--muted)}
.page-outline{min-width:0;font-family:var(--sans)}
.page-outline>div{position:sticky;top:calc(var(--masthead) + 3.5rem);max-height:calc(100vh - var(--masthead) - 5rem);overflow-y:auto;scrollbar-width:thin}
.page-outline h2{font:650 .8rem/1.3 var(--sans);color:var(--ink);margin:0 0 .7rem}
.page-outline a{display:block;color:var(--muted);text-decoration:none;font-size:.82rem;line-height:1.4;padding:.3rem 0 .3rem .75rem;border-left:2px solid var(--rule)}
.page-outline a:hover{color:var(--ink);border-left-color:var(--ink)}
.outline-note{font-size:.82rem;line-height:1.5;color:var(--faint);margin:0}
.copy-status{position:fixed;right:1.25rem;bottom:1.25rem;z-index:40;font:.85rem var(--sans);background:var(--ink);color:var(--paper);border-radius:6px;padding:.55rem .9rem}
.copy-status:empty{display:none}

/* Home */

.trace{margin:2.4rem 0 1rem;padding:1.4rem 1.5rem 1.2rem;background:var(--raised);border:1px solid var(--rule-strong);border-radius:12px;font-family:var(--sans)}
.trace-top{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}
.prose .trace-question{margin:0;font:600 1rem/1.4 var(--sans);color:var(--ink)}
.trace-question code{font-size:.9em}
.trace-buttons{display:flex;gap:.4rem;flex-shrink:0}
.trace-buttons button{font-size:.8rem;padding:.35rem .7rem}
.prose .trace-cells{list-style:none;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:0;margin:1.6rem 0 2.2rem;padding:0}
.prose .trace-cells li{position:relative;margin:0;text-align:center;padding:.15rem .25rem}
.trace-cells span{display:block;font:400 clamp(1.4rem,1rem + 1.8vw,2.1rem)/1 var(--mono);color:var(--ink);padding:.85rem 0;border:1.5px solid var(--rule-strong);border-radius:8px;background:var(--paper);transition:background-color .25s ease,border-color .25s ease}
.trace-cells li.in span{background:var(--mark);border-color:var(--mark);color:var(--mark-ink)}
.trace-cells li.left::after,.trace-cells li.right::before{position:absolute;top:calc(100% + .2rem);font:600 .72rem/1 var(--sans);color:var(--ink)}
.trace-cells li.left::after{content:"▲ left";left:.3rem}
.trace-cells li.right::before{content:"right ▲";right:.3rem}
.trace-cells li.left.right::after{content:"▲ left, right";left:.3rem}
.trace-cells li.left.right::before{content:none}
.trace-readout{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;border-top:1px solid var(--rule);padding-top:.9rem}
.prose .trace-readout p{margin:0;font-size:.92rem;line-height:1.45}
#trace-say{color:var(--ink);min-height:2.7em}
.trace-tally{display:flex;gap:1.1rem;color:var(--muted);white-space:nowrap}
.trace-tally strong{font:1rem var(--mono);color:var(--ink);font-weight:400}
.trace figcaption{margin-top:.8rem;font-size:.85rem;line-height:1.5;color:var(--muted)}

/* Labs */
.lab{margin:2rem 0;padding:1.4rem 1.5rem;background:var(--raised);border:1px solid var(--rule-strong);border-radius:12px;font:.92rem/1.55 var(--sans)}
.lab h3{font:600 1.35rem/1.25 var(--serif);color:var(--ink);margin:0}
.lab-heading{display:flex;justify-content:space-between;align-items:center;gap:1rem}
.lab-kicker,.panel-label{font:600 .8rem/1.3 var(--sans);color:var(--muted)}
.lab .lab-instruction{color:var(--muted);margin:.8rem 0 1rem;font-size:.9rem}
.lab select,.lab input{font:.9rem var(--sans);color:var(--ink);background:var(--paper);border:1px solid var(--rule-strong);border-radius:6px;padding:.45rem .55rem;min-width:0;max-width:100%}
.lab label{display:flex;flex-direction:column;gap:.3rem;font-size:.8rem;color:var(--muted)}
.lab-heading label{flex-direction:row;align-items:center;gap:.5rem;white-space:nowrap}
.lab-controls{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;margin:1rem 0}
.lab .primary-button{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.lab-controls>span{font-size:.8rem;color:var(--muted)}
.recency-labels{display:flex;justify-content:space-between;gap:1rem;font-size:.78rem;color:var(--muted);margin:1.2rem 0 .4rem}
.lru-nodes{display:flex;gap:.6rem;align-items:center;min-height:5rem;padding:.9rem;background:var(--paper);border:1px solid var(--rule);border-radius:8px;overflow:auto}
.lru-nodes>p{margin:0;color:var(--muted)}
.cache-node{min-width:4.2rem;text-align:center;padding:.45rem .9rem;border-radius:7px;background:var(--mark-soft);border:1.5px solid var(--mark)}
.cache-node:first-child{background:var(--mark);color:var(--mark-ink)}
.cache-node strong{display:block;font:1.15rem var(--mono);color:inherit;overflow-wrap:anywhere}
.cache-node span{font:.8rem var(--mono);opacity:.75;overflow-wrap:anywhere}
.lab-summary{display:flex;justify-content:space-between;flex-wrap:wrap;gap:.5rem;font-size:.78rem;color:var(--muted);margin:.6rem 0 1rem}
.lab .operation-result{margin:1rem 0 0;padding:.75rem 1rem;background:var(--wash);border-left:4px solid var(--mark);border-radius:0 6px 6px 0;color:var(--ink);overflow-wrap:anywhere}
.lab .operation-error{background:var(--error-bg);border-left-color:var(--error);color:var(--error)}
.lab details{margin-top:1rem;border-top:1px solid var(--rule);padding-top:.8rem}
.lab summary{cursor:pointer;font-weight:600;color:var(--ink)}
.lab form{display:grid;grid-template-columns:1fr 1.3fr 1fr;gap:.75rem;margin:.9rem 0}
.lab form button{grid-column:1/-1;justify-self:start}
.lab-history ol{font-size:.85rem;padding-left:1.4rem}
.lab-history li{margin:.4rem 0}
.filesystem-view{display:grid;grid-template-columns:1fr 1fr;gap:1.2rem;margin-top:1.2rem}
.filesystem-view>div{min-width:0}
.filesystem-view .operation-result{margin-top:.6rem}
.fs-tree{margin-top:.6rem;background:var(--paper);border:1px solid var(--rule);border-radius:8px;padding:.75rem;min-height:9rem;overflow:auto}
.fs-tree ul{list-style:none;margin:0;padding-left:1.1rem}
.fs-tree>ul{padding:0}
.fs-tree li{margin:.2rem 0;font:.82rem/1.7 var(--mono);white-space:nowrap}
.directory-name{color:var(--ink);font-weight:600}
.file-name{color:var(--muted)}
#fs-search-result{font-size:.85rem;overflow-wrap:anywhere;margin-top:.7rem}

/* Problem library */
.problem-filters{display:grid;grid-template-columns:2fr 1.4fr 1fr;gap:.8rem 1rem;margin:1.8rem 0 .5rem;font:.82rem var(--sans);color:var(--muted)}
.problem-filters label{display:flex;flex-direction:column;gap:.3rem;font-weight:600;min-width:0}
.problem-filters input[type=search],.problem-filters select{font:400 .92rem var(--sans);color:var(--ink);background:var(--raised);border:1px solid var(--rule-strong);border-radius:6px;padding:.55rem .65rem;width:100%;min-width:0}
.problem-filters .problem-check{grid-column:1/-1;flex-direction:row;align-items:center;gap:.5rem;font-weight:400;color:var(--body)}
.prose .problem-status{font:.82rem var(--sans);color:var(--muted);margin:.6rem 0 0}
.problem-table td:first-child{font:.8rem var(--mono);color:var(--faint);white-space:nowrap}
.problem-table .problem-topics{font-size:.8rem;color:var(--muted);min-width:11rem}
.guide-chip{display:inline-block;font:500 .75rem/1.4 var(--sans);white-space:nowrap;text-decoration:none;color:var(--mark-ink);background:var(--mark);border-radius:4px;padding:.1rem .45rem;margin:0 .3rem .3rem 0}
.guide-chip:hover{color:var(--mark-ink);box-shadow:0 0 0 1.5px var(--mark-ink)}
#problem-more{margin:0 0 1.5rem}

.not-found{max-width:38rem;margin:14vh auto;padding:1.5rem;font-family:var(--serif)}
.not-found h1{margin:1.5rem 0 1rem}

/* Show code exactly as typed: no == or >= ligatures. Placed after rules that use the font shorthand, which resets these. */
.prose code,.prose pre,.prose blockquote,.search kbd,.trace-cells span,.cache-node strong,.cache-node span,.fs-tree li,.problem-table td:first-child,.trace-tally strong{font-variant-ligatures:none;font-feature-settings:"liga" 0,"calt" 0}

/* Responsive */
@media (max-width:1180px){
  .page{grid-template-columns:minmax(0,var(--measure));padding:3rem 2.5rem 0}
  .page-outline{display:none}
  .sections a{padding:.45rem .45rem}
  .masthead{gap:1.2rem}
}
@media (max-width:980px){
  .sections{display:none}
  .menu-button{display:grid;flex-shrink:0}
  .shell{margin-left:0}
  .masthead{padding:0 1rem;gap:.75rem}
  .masthead-brand{display:flex}
  .side-brand{display:none}
  .rail{z-index:25;top:var(--masthead);width:min(21rem,88vw);border-right:1px solid var(--rule-strong);transform:translateX(-100%);visibility:hidden}
  .menu-open .rail{transform:none;visibility:visible;transition:transform .18s ease}
  .scrim{display:block;position:fixed;inset:var(--masthead) 0 0;z-index:20;border:0;border-radius:0;background:rgba(0,0,0,.38);padding:0}
  .search{width:auto;flex:1;max-width:22rem;margin-left:auto}
  .page{padding:2.5rem 1.25rem 0}
}
@media (max-width:560px){
  body{font-size:1.06rem}
  .masthead{padding:0 1rem;gap:.7rem}
  .brand span{display:none}
  .search kbd{display:none}
  .search-panel{position:fixed;top:calc(var(--masthead) + .4rem);left:1rem;right:1rem;width:auto}
  .chapter-pagination{grid-template-columns:1fr}
  .chapter-pagination .next{grid-column:1}
  .trace{padding:1.1rem 1rem}
  .trace-top{flex-direction:column}
  .trace-readout{flex-direction:column;gap:.4rem}
  .trace-cells li.left::after{content:"▲ L"}
  .trace-cells li.right::before{content:"R ▲"}
  .trace-cells li.left.right::after{content:"▲ L, R"}
  .lab{padding:1.1rem 1rem}
  .lab-heading{flex-direction:column;align-items:flex-start}
  .lab form{grid-template-columns:1fr 1fr}
  .lab form label:last-of-type{grid-column:1/-1}
  .filesystem-view{grid-template-columns:1fr}
  .problem-filters{grid-template-columns:1fr}
}
/* Without JavaScript the drawer cannot open, so show contents inline on small screens. */
@media (max-width:980px){
  html:not(.js-ready) .rail{position:relative;top:auto;bottom:auto;transform:none;visibility:visible;width:auto;height:auto;border-right:0;border-bottom:1px solid var(--rule)}
  html:not(.js-ready) .chapter-navigation{max-height:22rem}
  html:not(.js-ready) .menu-button,html:not(.js-ready) .search{display:none}
}
@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
@media print{
  .masthead,.rail,.page-outline,.chapter-pagination,.reader-footer,.copy-status,.code-toolbar,.trace-buttons{display:none!important}
  .frame,.page{display:block;padding:0;max-width:none}
  body{font-size:11pt;background:#fff;color:#000}
  .prose pre{white-space:pre-wrap;break-inside:avoid}
  .prose a{color:inherit}
}

/* Worked lessons: the derivation stays in the lesson; only extras collapse. */
.lesson-deep{margin:2.5rem 0;padding:1rem 1.25rem;border:1px solid var(--rule);border-radius:8px}
.lesson-deep summary{cursor:pointer;font:600 1rem var(--sans);color:var(--ink)}
.lesson-deep[open] summary{margin-bottom:.5rem}
@media print{.lesson-deep{border:0;padding:0}}

/* Python tokens, highlighted at build time (GitHub's palette): one distinct hue per token class. */
.language-python .k,.language-python .kn,.language-python .kc,.language-python .kd,.language-python .kr,.language-python .ow{color:#cf222e}
.language-python .nf,.language-python .fm,.language-python .nd{color:#8250df}
.language-python .nc,.language-python .nb,.language-python .bp{color:#953800}
.language-python .s,.language-python .s1,.language-python .s2,.language-python .sa,.language-python .se,.language-python .si{color:#0a3069}
.language-python .sd,.language-python .c,.language-python .c1,.language-python .ch,.language-python .cm{color:#6e7781;font-style:italic}
.language-python .mi,.language-python .mf,.language-python .mh{color:#0550ae}
@media(prefers-color-scheme:dark){
  .language-python .k,.language-python .kn,.language-python .kc,.language-python .kd,.language-python .kr,.language-python .ow{color:#ff7b72}
  .language-python .nf,.language-python .fm,.language-python .nd{color:#d2a8ff}
  .language-python .nc,.language-python .nb,.language-python .bp{color:#ffa657}
  .language-python .s,.language-python .s1,.language-python .s2,.language-python .sa,.language-python .se,.language-python .si{color:#a5d6ff}
  .language-python .sd,.language-python .c,.language-python .c1,.language-python .ch,.language-python .cm{color:#8b949e}
  .language-python .mi,.language-python .mf,.language-python .mh{color:#79c0ff}
}

/* Navigation: one sidebar per section, with collapsible groups and reading progress. */
.side-group{margin:0 0 .25rem}
.side-group summary{display:flex;align-items:center;gap:.5rem;cursor:pointer;list-style:none;padding:.45rem .6rem;border-radius:6px;font:600 .9rem/1.3 var(--sans);color:var(--ink)}
.side-group summary::-webkit-details-marker{display:none}
.side-group summary:hover{background:var(--wash)}
.side-group summary::after{content:"";flex-shrink:0;width:.4rem;height:.4rem;margin:0 .15rem 0 .2rem;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);transform:rotate(-45deg);transition:transform .15s}
.side-group[open]>summary::after{transform:rotate(45deg) translate(-1px,-1px)}
.side-count{margin-left:auto;font:.7rem var(--mono);color:var(--faint)}
.side-icon{flex-shrink:0;width:17px;height:17px;fill:none;stroke:var(--muted);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.side-group summary:has(+ .side-list [aria-current]) .side-icon{stroke:var(--accent)}
.side-list{list-style:none;margin:.1rem 0 .55rem .95rem;padding:0 0 0 .5rem;border-left:1px solid var(--rule)}
.side-link{display:flex;align-items:center;gap:.55rem;padding:.34rem .55rem;border-radius:6px;color:var(--muted);text-decoration:none;font:400 .86rem/1.35 var(--sans)}
.side-link:hover{background:var(--wash);color:var(--ink)}
.side-link[aria-current="page"]{background:var(--accent-soft);color:var(--accent-strong);font-weight:600}
.side-label{flex:1;min-width:0}
.side-spacer{flex-shrink:0;width:0}
.side-number{flex-shrink:0;min-width:1.15rem;text-align:right;font:.72rem var(--mono);color:var(--faint);font-variant-ligatures:none}
.side-status{position:relative;flex-shrink:0;width:14px;height:14px;border-radius:50%;border:1.5px solid var(--rule-strong)}
.is-read .side-status{border-color:var(--muted);color:var(--muted)}
.is-solved .side-status{border-color:#1a7f37;background:#1a7f37;color:#fff}
.is-read .side-status::after,.is-solved .side-status::after{content:"";position:absolute;left:3.5px;top:1px;width:3px;height:6px;border:solid currentColor;border-width:0 1.5px 1.5px 0;transform:rotate(45deg)}
.side-diff{flex-shrink:0;width:7px;height:7px;border-radius:50%;background:var(--diff)}
.side-easy{--diff:#1a7f37}.side-medium{--diff:#9a6700}.side-hard{--diff:#cf222e}
@media (prefers-color-scheme:dark){.side-easy{--diff:#56d364}.side-medium{--diff:#e3b341}.side-hard{--diff:#ff7b72}.is-solved .side-status{border-color:#2ea043;background:#2ea043}}
.outline-progress{height:3px;margin:0 0 1rem;border-radius:2px;background:var(--rule)}
.outline-progress span{display:block;width:0;height:100%;border-radius:2px;background:var(--accent)}

/* Page header: where you are, the title, and a short meta line. */
.page-eyebrow{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;margin:0 0 .6rem;font:500 .88rem/1.4 var(--sans);color:var(--muted)}
.page-eyebrow a{color:var(--muted);text-decoration:none}
.page-eyebrow a:hover{color:var(--ink);text-decoration:underline}
.page-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.3rem 1.1rem;margin:1rem 0 0;font:500 .85rem/1.4 var(--sans);color:var(--muted)}
.page-meta a{color:var(--muted)}
.page-diff{color:var(--diff);font-weight:650}

/* "Try this problem yourself" on every worked problem. */
.try-it{display:flex;align-items:center;gap:1rem;margin:-.75rem 0 2.5rem;padding:1rem 1.1rem;border:1px solid var(--rule);border-radius:12px;background:var(--wash);font-family:var(--sans)}
.try-icon{display:grid;place-items:center;flex-shrink:0;width:42px;height:42px;border-radius:50%;border:1px solid var(--rule);background:var(--raised)}
.try-icon svg{width:15px;height:15px;fill:var(--ink)}
.try-it div{display:flex;flex:1;flex-direction:column;gap:.15rem;min-width:0}
.try-it strong{font:650 1rem/1.3 var(--sans);color:var(--ink)}
.try-it div span{font-size:.88rem;line-height:1.45;color:var(--muted)}
.try-button{flex-shrink:0;padding:.6rem 1.05rem;border-radius:8px;background:var(--accent);color:#fff;text-decoration:none;font:600 .88rem/1.2 var(--sans)}
.try-button:hover{color:#fff;background:var(--accent-strong)}

/* Home: three doors instead of a sitemap. */
.prose .doors{list-style:none;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.8rem;margin:1.25rem 0 1rem;padding:0}
.prose .doors li{margin:0;padding:0}
.prose .doors li::before,.prose .doors li::marker{content:none}
.prose .door{position:relative;display:flex;flex-direction:column;gap:.45rem;height:100%;padding:1.15rem 1.15rem 2.6rem;border:1px solid var(--rule-strong);border-radius:12px;background:var(--raised);color:var(--body);text-decoration:none;font-family:var(--sans);transition:border-color .15s,transform .15s}
.prose .door:hover{border-color:var(--accent);color:var(--body);transform:translateY(-1px)}
.prose .door strong{font:650 1.05rem/1.3 var(--sans);color:var(--ink)}
.prose .door span{font-size:.9rem;line-height:1.5;color:var(--muted)}
.prose .door .door-go{position:absolute;left:1.15rem;bottom:.85rem;font-size:1.15rem;color:var(--accent)}
.doors-more{font:.92rem/1.6 var(--sans);color:var(--muted)}
.home-continue{margin:1rem 0 0}
.prose .home-continue a{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem;padding:.85rem 1.1rem;border-radius:12px;background:var(--accent-soft);color:var(--ink);text-decoration:none;font:500 .92rem/1.4 var(--sans)}
.prose .home-continue a span{color:var(--muted)}
.prose .home-continue a strong{font-weight:650}
@media (max-width:760px){.prose .doors{grid-template-columns:1fr}.try-it{flex-wrap:wrap}.try-button{width:100%;text-align:center}}

/* Sidebar top level: Home, Problems, Patterns, System design. The current section expands below its item. */
.side-primary{list-style:none;margin:0;padding:0}
.side-primary>li{margin:0 0 .15rem}
.side-primary-link{display:flex;align-items:center;gap:.6rem;padding:.5rem .6rem;border-radius:7px;color:var(--ink);text-decoration:none;font:600 .95rem/1.3 var(--sans)}
.side-primary-link:hover{background:var(--wash);color:var(--ink)}
.side-primary-link .side-icon{width:18px;height:18px}
.side-primary-link.is-here,.side-primary-link[aria-current="page"]{background:var(--accent-soft);color:var(--accent-strong)}
.side-primary-link.is-here .side-icon,.side-primary-link[aria-current="page"] .side-icon{stroke:var(--accent)}
.side-contents{margin:.35rem 0 .75rem .55rem;padding-left:.35rem}
.side-contents .side-group summary{font-size:.86rem;font-weight:600;color:var(--body)}
.side-contents>.side-list{margin-left:.4rem}
