
:root{
  --accent:#2f5ca8; --accent-dark:#234781; --accent-soft:rgba(47,92,168,.09);
  --ink:#1b1b1f; --muted:#6b7280; --line:#e7e9ee; --line2:#eef0f4;
  --bg:#ffffff; --sidebar:#ffffff; --code-bg:#f6f8fa; --box-bg:#f4f5f7;
  --sidebar-w:316px; --content-w:790px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:80px}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:"Charter","Bitstream Charter","Source Serif 4","Iowan Old Style",Georgia,Cambria,"Times New Roman",serif;
  font-size:18px;line-height:1.72;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
.ui,nav,.topbar,.sidebar-head,.secnum,.chapnum,.figlabel,.bibnum,.pager,.crumbs{
  font-family:"Inter","SF Pro Text",system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
}
a{color:var(--accent);text-decoration:none;overflow-wrap:break-word}
a:hover{text-decoration:underline}
a.url{overflow-wrap:anywhere}

/* ---------- sidebar ---------- */
.sidebar{
  position:fixed;top:0;left:0;bottom:0;width:var(--sidebar-w);background:var(--sidebar);
  border-right:1px solid var(--line);overflow-y:auto;overflow-x:hidden;z-index:40;
}
.sidebar-head{padding:22px 22px 14px;border-bottom:1px solid var(--line2)}
.sidebar-head .bk{display:block;font-weight:700;font-size:15.5px;color:var(--ink);line-height:1.3}
.sidebar-head .sub{display:block;margin-top:4px;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
nav.toc{padding:10px 0 60px}
nav.toc ul{list-style:none;margin:0;padding:0}
nav.toc .chap-link{
  display:flex;gap:9px;align-items:baseline;padding:7px 20px;font-size:14px;color:var(--ink);
  border-left:3px solid transparent;line-height:1.35;
}
nav.toc .chap-link .n{color:var(--muted);font-variant-numeric:tabular-nums;min-width:1.5em;font-size:12.5px;font-weight:600;white-space:nowrap;flex-shrink:0}
nav.toc .chap-link:hover{background:var(--line2);text-decoration:none}
nav.toc li.active>.chap-link{color:var(--accent);font-weight:600;border-left-color:var(--accent);background:var(--accent-soft)}
nav.toc .front .chap-link{font-weight:600}
nav.toc .subs{padding:2px 0 8px}
nav.toc .subs>a{
  display:block;padding:5px 20px 5px 33px;font-size:13px;color:#54585f;border-left:3px solid transparent;line-height:1.35;
}
nav.toc .subs>a:hover{background:var(--line2);text-decoration:none}
nav.toc .subs>a.active{color:var(--accent);border-left-color:var(--accent);background:var(--accent-soft);font-weight:600}
nav.toc .subsubs{padding:1px 0 4px}
nav.toc .subsubs a.sss{
  display:block;padding:3px 20px 3px 48px;font-size:12.3px;color:#71757c;border-left:3px solid transparent;line-height:1.3;
}
nav.toc .subsubs a.sss:hover{background:var(--line2);text-decoration:none}
nav.toc .subsubs a.sss.active{color:var(--accent);border-left-color:var(--accent);background:var(--accent-soft);font-weight:600}
nav.toc .subs a .n{color:var(--muted);font-variant-numeric:tabular-nums;margin-right:5px;font-size:11.5px}

/* ---------- main ---------- */
.main{margin-left:var(--sidebar-w);min-height:100vh}
.topbar{
  position:sticky;top:0;z-index:30;background:rgba(255,255,255,.86);backdrop-filter:saturate(1.2) blur(8px);
  border-bottom:1px solid var(--line2);display:flex;align-items:center;justify-content:space-between;
  padding:10px 30px;font-size:13px;
}
.topbar .crumbs{color:var(--muted)}
.topbar .crumbs b{color:var(--ink);font-weight:600}
.topbar .nav-toggle{display:none;background:none;border:1px solid var(--line);border-radius:7px;padding:6px 10px;cursor:pointer;font-size:16px}

/* ---------- book search ---------- */
.bksearch{display:flex;align-items:center;gap:8px;margin-left:auto;flex-shrink:0}
.bksearch input{
  font-family:"Inter","SF Pro Text",system-ui,sans-serif;font-size:13px;color:var(--ink);
  width:170px;padding:5px 10px;border:1px solid var(--line);border-radius:7px;background:var(--bg);
  outline:none;transition:width .15s,border-color .15s,box-shadow .15s;
}
.bksearch input:focus{width:230px;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.bksearch input::placeholder{color:var(--muted)}
.bksearch-count{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:0}
::highlight(bk-search){background:#ffe9a0;color:inherit}
::highlight(bk-search-cur){background:#ff9632;color:#1b1b1f}

/* ---------- search results dropdown ---------- */
.bksearch{position:relative}
.bksearch-results{
  position:absolute;top:calc(100% + 8px);right:0;width:400px;max-width:86vw;max-height:440px;overflow-y:auto;
  background:var(--bg);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 34px rgba(0,0,0,.14);
  z-index:70;font-family:"Inter",system-ui,sans-serif;
}
.bksr-summary{padding:9px 14px;font-size:11.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line2)}
.bksr-none{padding:14px;font-size:13.5px;color:var(--muted)}
.bksr-item{padding:9px 14px;border-bottom:1px solid var(--line2);cursor:pointer}
.bksr-item:last-child{border-bottom:none}
.bksr-item:hover{background:var(--accent-soft)}
.bksr-head{display:flex;justify-content:space-between;gap:10px;align-items:baseline}
.bksr-title{font-size:13px;font-weight:600;color:var(--ink)}
.bksr-count{font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}
.bksr-snip{font-size:12.5px;color:#565a61;margin-top:3px;line-height:1.5}
.bksr-snip mark{background:#ffe9a0;color:inherit;padding:0 1px;border-radius:2px}

/* ---------- hover previews ---------- */
.bk-tip{
  display:none;position:absolute;z-index:80;background:var(--bg);border:1px solid var(--line);
  border-radius:10px;box-shadow:0 10px 34px rgba(0,0,0,.16);padding:11px 14px;
  font-size:14px;line-height:1.55;color:#33363c;
}
.bk-tip .bk-tip-num{font-weight:700;color:var(--accent);font-family:"Inter",sans-serif;font-size:12.5px;margin-right:2px}
.bk-tip em{font-style:italic}

/* ---------- permalinks ---------- */
.hanchor{
  margin-left:10px;font-size:.75em;font-weight:400;color:var(--accent);opacity:0;
  transition:opacity .12s;text-decoration:none;font-family:"Inter",sans-serif;
}
h2:hover .hanchor,h3:hover .hanchor,.hanchor:focus{opacity:.75}
.hanchor:hover{opacity:1;text-decoration:none}
.hanchor.copied::after{content:" link copied";font-size:10.5px;color:var(--muted)}
.figanchor{color:inherit}
.figanchor:hover{text-decoration:none}
.figanchor:hover .figlabel{color:var(--accent)}
.figanchor.copied .figlabel::after{content:" · link copied";font-weight:400;font-size:11px;color:var(--muted)}
.math-display{position:relative}
.eqanchor{
  position:absolute;top:2px;right:4px;font-size:13px;color:var(--accent);opacity:0;transition:opacity .12s;
  font-family:"Inter",sans-serif;text-decoration:none;padding:2px 5px;
}
.math-display:hover .eqanchor{opacity:.7}
.eqanchor:hover{opacity:1;text-decoration:none}
.eqanchor.copied::after{content:" link copied";font-size:10.5px;color:var(--muted);white-space:nowrap}
.eq-anchor{display:block;scroll-margin-top:78px}

/* ---------- code copy button ---------- */
pre.code{position:relative}
pre.code .code-copy{
  position:absolute;top:8px;right:8px;font-family:"Inter",sans-serif;font-size:11px;font-weight:600;
  color:var(--muted);background:var(--bg);border:1px solid var(--line);border-radius:6px;
  padding:3px 9px;cursor:pointer;opacity:0;transition:opacity .12s;
}
pre.code:hover .code-copy{opacity:1}
pre.code .code-copy:hover{color:var(--accent);border-color:var(--accent)}

/* ---------- reading progress ---------- */
nav.toc a.visited::after{content:" ✓";color:#4a9d6b;font-size:.85em}
.content{max-width:var(--content-w);margin:0 auto;padding:40px 30px 90px;overflow-wrap:break-word}
.content.wide{max-width:1100px}

h1.chap-title{font-size:34px;line-height:1.18;font-weight:700;margin:6px 0 26px;letter-spacing:-.01em}
h1.chap-title .chapnum{
  display:inline-block;color:var(--accent);font-size:15px;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;margin-bottom:6px;
}
h1.chap-title .chapnum::after{content:"";display:block}
h2.h-sub{font-size:25px;font-weight:700;margin:42px 0 12px;line-height:1.25;letter-spacing:-.005em;padding-top:6px}
h3.h-subsub{font-size:19.5px;font-weight:700;margin:30px 0 8px;line-height:1.3;color:#26282d}
.secnum{color:var(--accent);font-weight:700;margin-right:.5em;font-size:.86em;font-variant-numeric:tabular-nums}
h3.h-subsub .secnum{font-size:.82em}

p{margin:0 0 16px}
.content>p:first-of-type,.box-summary p:last-child{margin-bottom:16px}
strong{font-weight:700}
em{font-style:italic}
code{font-family:"SF Mono","JetBrains Mono",ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
  font-size:.86em;background:var(--code-bg);padding:.1em .36em;border-radius:4px;border:1px solid var(--line2);white-space:nowrap}
.smallcaps{font-variant:small-caps}
sup.fnref{font-size:.72em;line-height:0}
sup.fnref a{font-weight:600;padding:0 1px}
.cite,.xref{white-space:nowrap}

/* lists */
ul,ol{margin:0 0 16px;padding-left:1.5em}
li{margin:5px 0}
ul.dense li,ol.dense li{margin:2px 0}
li>p{margin:6px 0}

/* figures & diagrams */
figure.figure{margin:28px 0;text-align:center}
figure.figure img.figimg{max-width:100%;height:auto;border-radius:3px}
img.diagram{max-width:100%;height:auto}
.diagram-wrap{margin:22px 0;text-align:center}
figcaption{font-size:14.5px;line-height:1.55;color:#46494f;max-width:680px;margin:12px auto 0;text-align:center;
  font-family:"Inter",system-ui,sans-serif;}
.figlabel{font-weight:700;color:var(--ink)}
.algocap{margin-top:10px;text-align:left}
.missing{color:#b00;font-family:monospace;font-size:.85em}

/* math */
.math-display{margin:18px 0;overflow-x:auto;overflow-y:hidden}
/* equations pre-rendered as images (over/underbrace constructs) center like MathJax output */
.math-display.math-image{text-align:center}
mjx-container[display="true"]{margin:14px 0!important;max-width:100%}
mjx-container{overflow-x:auto;overflow-y:hidden;max-width:100%}
/* wide display equations shrink to fit the column instead of clipping/scrolling */
.math-display mjx-container[display="true"] svg{max-width:100%;height:auto}

/* code */
pre.code{
  background:var(--code-bg);border:1px solid var(--line);border-radius:8px;padding:14px 16px;margin:18px 0;
  overflow-x:auto;font-size:13.5px;line-height:1.55;counter-reset:ln;
}
pre.code code{background:none;border:none;padding:0;white-space:pre-wrap;overflow-wrap:break-word;font-family:"SF Mono","JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;font-size:13.5px;display:block}

/* boxes */
.box-summary{
  background:var(--box-bg);border-radius:10px;padding:18px 22px;margin:8px 0 30px;
  border-left:4px solid var(--accent);font-size:16.5px;color:#33363c;
}
.box-summary p{margin:0 0 10px}.box-summary p:last-child{margin:0}
.box-proof{background:#f6f6f6;border-radius:8px;padding:12px 18px;margin:18px 0}
.algo-box{background:var(--box-bg);border:1px solid var(--line);border-radius:10px;padding:16px 18px;margin:24px 0}
.algo-box .diagram-wrap{margin:0;text-align:left}
/* native pseudocode: numbered lines, bold keywords, comments flush right (as in the PDF) */
.algo-lines{font-size:16.5px;line-height:1.85}
.algo-line{display:flex;align-items:baseline;column-gap:2px}
.algo-no{color:var(--muted);font-size:10.5px;min-width:24px;text-align:right;padding-right:12px;flex-shrink:0;font-family:"Inter",system-ui,sans-serif;font-variant-numeric:tabular-nums}
.algo-kw{font-weight:700}
.algo-fn{font-variant:small-caps;letter-spacing:.02em}
.algo-comment{margin-left:auto;padding-left:28px;color:#5a5e66;font-size:15px;text-align:right;flex-shrink:1}
@media (max-width:860px){
  .algo-comment{padding-left:14px;font-size:13.5px}
}
.center{text-align:center;margin:18px 0}
blockquote{margin:18px 0;padding:6px 18px;border-left:3px solid var(--line);color:#3f434a}
.todo{color:#b34700;font-weight:600}

/* footnotes */
.footnotes{margin-top:54px;font-size:14.5px;color:#42464c;line-height:1.6}
.footnotes hr{border:none;border-top:1px solid var(--line);margin-bottom:14px;width:38%}
.footnotes ol{list-style:none;padding-left:0;margin-left:0}
.footnotes li{margin:6px 0}
.fn-back{font-weight:600;margin-right:4px}

/* pager */
.pager{display:flex;justify-content:space-between;gap:14px;margin-top:60px;padding-top:24px;border-top:1px solid var(--line)}
.pager a{display:block;flex:1;padding:14px 18px;border:1px solid var(--line);border-radius:10px;font-size:14px;color:var(--ink)}
.pager a:hover{border-color:var(--accent);background:var(--accent-soft);text-decoration:none}
.pager .dir{display:block;font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-bottom:3px;font-family:"Inter",sans-serif}
.pager .nxt{text-align:right}
.pager .ttl{font-weight:600}

/* title / front matter */
.titlepage{text-align:center;padding:30px 0 10px;border-bottom:1px solid var(--line);margin-bottom:34px}
.titlepage .course{font-family:"Inter",sans-serif;font-size:13px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);font-weight:700}
.titlepage h1{font-size:40px;line-height:1.12;margin:14px 0 16px;letter-spacing:-.015em}
.titlepage .author{font-size:18px;color:#3a3d43}
.titlepage .author a{color:var(--accent)}
.dl-pdf{margin-top:18px}
.dl-pdf a{display:inline-block;font-family:"Inter",system-ui,sans-serif;font-size:14px;font-weight:600;
  color:var(--accent);border:1px solid var(--accent);border-radius:8px;padding:9px 18px;transition:all .15s}
.dl-pdf a:hover{background:var(--accent);color:#fff;text-decoration:none}
.abstract{max-width:680px;margin:0 auto 10px;font-size:16.5px}
.abstract h2{font-size:15px;text-transform:uppercase;letter-spacing:.08em;text-align:center;color:var(--muted);font-family:"Inter",sans-serif;margin-bottom:10px}
.front-toc{margin:40px 0}
.front-toc h2{font-family:"Inter",sans-serif;font-size:14px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.front-toc ol{list-style:none;padding:0;counter-reset:ch}
.front-toc>ol>li{counter-increment:ch;border-bottom:1px solid var(--line2);padding:11px 0}
.front-toc>ol>li>a{font-size:18px;font-weight:600}
.front-toc>ol>li>a::before{content:counter(ch) ".";color:var(--accent);font-weight:700;margin-right:10px;font-family:"Inter",sans-serif}

/* bibliography */
.bibitem{display:flex;gap:12px;margin:0 0 14px;font-size:15px;line-height:1.5;scroll-margin-top:80px}
.bibnum{font-family:"Inter",sans-serif;color:var(--muted);font-size:13px;min-width:34px;text-align:right;font-variant-numeric:tabular-nums;padding-top:1px}
.bibbody em{font-style:italic}

/* scroll margins so anchors clear the sticky bar */
figure,h2,h3,.math-display,[id]{scroll-margin-top:78px}

@media (max-width:1080px){
  :root{--content-w:100%}
}
@media (max-width:860px){
  .sidebar{transform:translateX(-100%);transition:transform .25s ease;box-shadow:0 0 40px rgba(0,0,0,.12)}
  body.nav-open .sidebar{transform:translateX(0)}
  .main{margin-left:0}
  .topbar .nav-toggle{display:block}
  .content{padding:26px 18px 70px}
  body{font-size:17px}
  h1.chap-title{font-size:28px}
  .topbar .crumbs{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .bksearch input{width:110px}
  .bksearch input:focus{width:150px}
  .bksearch-count{display:none}
}
