/* ==========================================================================
   samuelvaiter.com — neutral site stylesheet
   One file for every page type: landing, lists (publications, micro, talks),
   long documents (Pandoc lecture notes, writings).
   Layout idea: an optional left rail for in-page navigation + one reading column.
   ========================================================================== */

/* ---------- Tokens ---------- */
:root{
  color-scheme: light dark;
  --bg:#ffffff;
  --surface:#f6f6f4;
  --fg:#1b1b1b;
  --mut:#62625e;
  --faint:#8b8b86;
  --rule:#e3e2de;
  --acc:#1f4f8f;          /* links, theorem accents */
  --acc-soft:#e9eef6;
  --ok:#2f6b4f;           /* definitions */
  --serif:"Source Serif 4", "Source Serif Pro", Georgia, "Times New Roman", serif;
  --sans:"Source Sans 3", "Source Sans Pro", system-ui, -apple-system, "Segoe UI", sans-serif;
  --mono:"Source Code Pro", ui-monospace, SFMono-Regular, Menlo, monospace;
  --measure:42rem;
  --rail:14rem;
  --gap:3.5rem;
}
@media (prefers-color-scheme: dark){
  :root{
    --bg:#141414; --surface:#1c1c1b; --fg:#e7e6e2; --mut:#a3a29c; --faint:#7c7b76;
    --rule:#2e2e2c; --acc:#8fb4ea; --acc-soft:#1c2533; --ok:#86c2a3;
  }
}

/* ---------- Base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{font-size:17.5px;-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--serif);line-height:1.6;
  font-optical-sizing:auto;text-rendering:optimizeLegibility}
a{color:var(--acc);text-decoration:none}
a:hover{text-decoration:underline;text-underline-offset:.18em;text-decoration-thickness:1px}
img,canvas,svg,video{max-width:100%;height:auto}
hr{border:0;border-top:1px solid var(--rule);margin:2.5rem 0}
code,kbd,pre{font-family:var(--mono);font-size:.86em}
pre{background:var(--surface);padding:.9rem 1rem;border-radius:4px;overflow-x:auto;line-height:1.45}
:not(pre)>code{background:var(--surface);padding:.08em .3em;border-radius:3px}
table{border-collapse:collapse;font-size:.95rem;margin:1.2rem 0;display:block;overflow-x:auto}
th,td{padding:.35rem .8rem;border-bottom:1px solid var(--rule);text-align:left}
th{font-family:var(--sans);font-weight:600;font-size:.85rem}
.skip-link{position:absolute;left:-999px}
.skip-link:focus{left:1rem;top:1rem;background:var(--bg);padding:.4rem .7rem;z-index:10}
:focus-visible{outline:2px solid var(--acc);outline-offset:2px}

/* ---------- Site header (same on every page) ---------- */
.site-header{border-bottom:1px solid var(--rule);font-family:var(--sans)}
.site-header .inner{max-width:calc(var(--rail) + var(--gap) + var(--measure) + 3rem);margin:0 auto;
  padding:.85rem 1.5rem;display:flex;align-items:baseline;justify-content:space-between;gap:.5rem 2rem;flex-wrap:wrap}
.site-name{font-weight:600;color:var(--fg);font-size:1rem;letter-spacing:.005em}
.site-name:hover{text-decoration:none;color:var(--acc)}
.site-nav{display:flex;flex-wrap:wrap;gap:.2rem 1.25rem;font-size:.92rem}
.site-nav a{color:var(--mut)}
.site-nav a:hover,.site-nav a[aria-current="page"]{color:var(--fg);text-decoration:none}
.site-nav a[aria-current="page"]{box-shadow:inset 0 -2px 0 var(--acc)}

/* ---------- Layout ---------- */
.layout{max-width:calc(var(--rail) + var(--gap) + var(--measure) + 3rem);margin:0 auto;padding:3rem 1.5rem 4rem;
  display:grid;grid-template-columns:var(--rail) minmax(0,var(--measure));column-gap:var(--gap)}
.layout > .rail{grid-column:1}
.layout > .content{grid-column:2;min-width:0}
.layout--single{grid-template-columns:minmax(0,var(--measure))}
.layout--single > .content{grid-column:1}
.rail{font-family:var(--sans);font-size:.88rem;line-height:1.4}
.rail > *{position:sticky;top:1.5rem;max-height:calc(100vh - 3rem);overflow:auto}

/* ---------- Typography in the reading column ---------- */
.content h1{font-weight:600;font-size:2rem;line-height:1.15;margin:0 0 .5rem;letter-spacing:-.01em}
.content h2{font-weight:600;font-size:1.35rem;line-height:1.25;margin:2.6rem 0 .7rem}
.content h3{font-weight:600;font-size:1.1rem;margin:2rem 0 .5rem}
.content h4,.content h5{font-family:var(--sans);font-weight:600;font-size:.9rem;margin:1.5rem 0 .4rem}
.content p{margin:0 0 1rem}
.content ul,.content ol{padding-left:1.3rem;margin:0 0 1rem}
.content li{margin:.2rem 0}
.content blockquote{margin:1.2rem 0;padding-left:1rem;border-left:2px solid var(--rule);color:var(--mut)}
.lead{font-size:1.15rem;line-height:1.55}
.meta,.kicker{font-family:var(--sans);font-size:.88rem;color:var(--mut)}
.kicker{text-transform:uppercase;letter-spacing:.08em;font-size:.75rem;font-weight:600;margin:0 0 .4rem}
.section-title{font-family:var(--sans);font-size:.78rem !important;font-weight:600 !important;text-transform:uppercase;
  letter-spacing:.09em;color:var(--mut);margin:3rem 0 1rem !important;padding-bottom:.4rem;border-bottom:1px solid var(--rule)}
.more{font-family:var(--sans);font-size:.9rem}

/* ---------- Generic list of items (micro, talks, teaching, sections) ---------- */
.items{list-style:none;padding:0 !important;margin:0 0 1rem}
.items > li{display:grid;grid-template-columns:7rem minmax(0,1fr);gap:1.25rem;padding:.55rem 0;border-bottom:1px solid var(--rule);margin:0}
.items > li:last-child{border-bottom:0}
.items .when,.items .what{font-family:var(--sans);font-size:.85rem;color:var(--mut);padding-top:.12rem}
.items .desc{display:block;color:var(--mut);font-size:.92rem}

/* ---------- Publications ---------- */
.pub-tools{font-family:var(--sans);display:flex;flex-wrap:wrap;gap:.6rem 1rem;align-items:center;margin:1.6rem 0 .5rem}
.chips{display:flex;flex-wrap:wrap;gap:.35rem}
.chip{font:inherit;font-size:.82rem;border:1px solid var(--rule);background:var(--bg);color:var(--mut);
  padding:.2rem .65rem;border-radius:999px;cursor:pointer}
.chip:hover{border-color:var(--faint);color:var(--fg)}
.chip[aria-pressed="true"]{background:var(--fg);border-color:var(--fg);color:var(--bg)}
.chip .n{opacity:.6;margin-left:.25rem;font-variant-numeric:tabular-nums}
.search{font:inherit;font-size:.9rem;padding:.35rem .7rem;border:1px solid var(--rule);border-radius:6px;background:var(--bg);
  color:var(--fg);flex:1 1 12rem;max-width:18rem}
.pub-count{font-size:.85rem;color:var(--mut)}
.year{scroll-margin-top:1.5rem}
.year > h2{font-family:var(--sans);font-size:1rem;font-weight:600;margin:2.4rem 0 .4rem;padding-bottom:.35rem;border-bottom:1px solid var(--rule);
  display:flex;justify-content:space-between;align-items:baseline}
.year > h2 small{font-weight:400;color:var(--faint);font-size:.8rem}
.pubs{list-style:none;padding:0 !important;margin:0}
.pub{display:grid;grid-template-columns:3.3rem minmax(0,1fr);gap:1rem;padding:.7rem 0;margin:0 !important;border-bottom:1px solid var(--rule)}
.pub:last-child{border-bottom:0}
.pub-id{font-family:var(--sans);font-size:.78rem;font-weight:600;color:var(--mut);font-variant-numeric:tabular-nums;padding-top:.2rem}
.pub-title{font-weight:600;line-height:1.35;display:block}
.pub-authors{display:block;font-size:.93rem;color:var(--mut);margin-top:.1rem}
.pub-authors b{font-weight:600;color:var(--fg)}
.pub-venue{display:block;font-size:.93rem;font-style:italic;margin-top:.05rem}
.pub-links{display:flex;flex-wrap:wrap;gap:.1rem .9rem;margin-top:.3rem;font-family:var(--sans);font-size:.8rem}
.badge{font-family:var(--sans);font-style:normal;font-size:.72rem;font-weight:600;color:var(--acc);background:var(--acc-soft);
  padding:.08rem .45rem;border-radius:3px;margin-left:.4rem;vertical-align:.08em;white-space:nowrap}
.legend{font-family:var(--sans);font-size:.82rem;color:var(--mut);margin-top:2.5rem}
.rail .toc-years{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(3,1fr);gap:.2rem .6rem}
.rail .toc-years a{color:var(--mut);font-variant-numeric:tabular-nums}
.rail .toc-years a:hover{color:var(--fg)}
.rail .rail-title{font-weight:600;font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--faint);margin:0 0 .6rem}
.rail .rail-block + .rail-block{margin-top:1.8rem}
.rail .rail-block p{margin:.2rem 0;color:var(--mut)}

/* ==========================================================================
   Pandoc documents (lecture notes, writings)
   Works on unmodified Pandoc HTML: <nav> TOC + <main> with numbered headings,
   theorem divs (.theorem, .definition, …), .proof, figures, footnotes, refs.
   ========================================================================== */
.doc > nav{grid-column:1;font-family:var(--sans);font-size:.85rem;line-height:1.35}
.doc > nav > *{position:relative}
.doc > nav{position:sticky;top:1.5rem;align-self:start;max-height:calc(100vh - 3rem);overflow:auto;padding-right:.5rem}
.doc > main{grid-column:2;min-width:0;overflow-x:clip}
mjx-container{position:relative}
.nav-course{font-weight:600;color:var(--fg);margin:0 0 .15rem}
.nav-lecture{color:var(--mut);margin:0 0 1rem}
.doc > nav ol{list-style:none;padding:0;margin:0;border-left:1px solid var(--rule)}
.doc > nav li a{display:block;padding:.22rem 0 .22rem .8rem;color:var(--mut);margin-left:-1px;border-left:1px solid transparent}
.doc > nav li a:hover{color:var(--fg);text-decoration:none;border-left-color:var(--faint)}
.doc > nav li a.active{color:var(--acc);border-left-color:var(--acc)}
.doc > nav .nav-level-2 a{padding-left:1.6rem;font-size:.95em}
.doc > nav .header-section-number{color:var(--faint);margin-right:.35rem;font-variant-numeric:tabular-nums}

.doc main{font-size:1rem}
.doc main p{margin:0 0 1rem}
.doc main ul,.doc main ol{padding-left:1.3rem;margin:0 0 1rem}
.doc main li{margin:.2rem 0}
.doc main li > p{margin:0 0 .3rem}
.doc main div[id]:empty,.doc main div[id]:not(:has(*)):not(:has(+ *:is(h1,h2,h3))){display:none}
.lecture-title{margin-bottom:2.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--rule)}
.lecture-title p{margin:0;font-family:var(--sans);color:var(--mut);font-size:.9rem}
.lecture-title p:first-child{text-transform:uppercase;letter-spacing:.08em;font-size:.75rem;font-weight:600}
.lecture-title h1{font-size:2.2rem;margin:.3rem 0 .1rem !important}
.lecture-title .subtitle{font-family:var(--serif);font-size:1.3rem;color:var(--fg);margin-bottom:.8rem}
.lecture-title .author{margin-top:.6rem}
.doc main h1{font-size:1.6rem;margin:3rem 0 1rem;scroll-margin-top:1.5rem}
.doc main h2{font-size:1.25rem;margin:2.5rem 0 .8rem;scroll-margin-top:1.5rem}
.doc main h3{font-size:1.05rem;scroll-margin-top:1.5rem}
.doc main .header-section-number{color:var(--faint);font-weight:400;margin-right:.5rem;font-variant-numeric:tabular-nums}

/* Theorem-like environments */
.theorem,.proposition,.lemma,.corollary,.definition,.assumption,.remark,.example,.Exercise,.exercise{
  margin:1.6rem 0;padding:.9rem 1.15rem .3rem;border-left:3px solid var(--acc);background:var(--acc-soft);border-radius:0 4px 4px 0}
.definition,.assumption{border-left-color:var(--ok);background:var(--surface)}
.remark,.example{border-left-color:var(--rule);background:transparent;padding-left:1rem}
.Exercise,.exercise{border:1px dashed var(--rule);border-left:3px solid var(--faint);background:transparent;border-radius:4px}
:is(.theorem,.proposition,.lemma,.corollary,.definition,.assumption,.remark,.example,.Exercise,.exercise) > p:first-of-type > strong:first-child{
  font-family:var(--sans);font-weight:600;font-size:.92rem}
.theorem,.proposition,.lemma,.corollary{font-style:normal}
.proof{margin:1rem 0 1.6rem;padding-left:1rem;border-left:1px solid var(--rule)}
.proof > p:first-child > em:first-child{font-style:italic;font-weight:600}

/* Math */
mjx-container[display="true"]{overflow-x:auto;overflow-y:hidden;max-width:100%;padding:.15rem 0}
.math.display{display:block}

/* Figures */
figure{margin:2rem 0}
figure img{display:block;margin:0 auto;border-radius:3px}
figcaption{font-family:var(--sans);font-size:.85rem;color:var(--mut);line-height:1.45;margin-top:.6rem}
figcaption strong{color:var(--fg);font-weight:600}
.historical-figure img{filter:grayscale(.2)}
.plot-panel{background:#fff;color:#1b1b1b;border:1px solid var(--rule);border-radius:6px;padding:.8rem;margin:0}
.plot-panel h5{margin:0 0 .5rem !important;font-family:var(--sans);font-size:.85rem}
.plot-panel canvas{display:block;width:100%;max-width:540px;height:auto;margin:0 auto}
.plot-readout{font-family:var(--mono);font-size:.78rem;color:#555;margin:.4rem 0 0 !important;min-height:1.2em}
.plot-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:.8rem}
.figure-controls{display:flex;flex-wrap:wrap;gap:.6rem 1.4rem;align-items:center;font-family:var(--sans);font-size:.85rem;margin-top:.7rem}
.figure-controls label{display:flex;align-items:center;gap:.5rem;color:var(--mut)}
.figure-controls output{font-family:var(--mono);font-size:.8rem;color:var(--fg);min-width:2.6rem}
.figure-controls input[type=range]{accent-color:var(--acc);width:9rem}
.figure-controls button{font:inherit;font-size:.8rem;border:1px solid var(--rule);background:var(--bg);color:var(--fg);border-radius:4px;padding:.2rem .7rem;cursor:pointer}
.figure-hint{font-family:var(--sans);font-size:.8rem;color:var(--faint);margin:.4rem 0 0 !important}

/* Footnotes & references */
.footnote-ref{font-family:var(--sans);font-size:.75em;vertical-align:super;line-height:0}
.footnotes{font-size:.9rem;color:var(--mut);margin-top:3rem}
.footnotes hr{margin:1.5rem 0 1rem}
.footnote-back{margin-left:.3rem}
.references{font-size:.93rem}
.hanging-indent .csl-entry{padding-left:1.5rem;text-indent:-1.5rem;margin-bottom:.5rem}
.smallcaps{font-variant:small-caps}

/* ---------- Footer ---------- */
.site-footer{border-top:1px solid var(--rule);font-family:var(--sans);font-size:.82rem;color:var(--mut)}
.site-footer .inner{max-width:calc(var(--rail) + var(--gap) + var(--measure) + 3rem);margin:0 auto;padding:1.2rem 1.5rem 2.5rem;
  display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem 2rem}
.site-footer a{color:var(--mut)}

/* ---------- Responsive ---------- */
@media (max-width: 960px){
  :root{--rail:11rem;--gap:2.2rem}
}
@media (max-width: 780px){
  html{font-size:16.5px}
  .layout,.layout--single{grid-template-columns:minmax(0,1fr);padding:1.8rem 1.1rem 3rem}
  .layout > .rail,.layout > .content,.doc > nav,.doc > main{grid-column:1}
  .rail{display:none}
  .site-header .inner{padding:.75rem 1.1rem}
  .site-nav{gap:.15rem 1rem;font-size:.88rem}
  /* lecture TOC: collapsible box above the text */
  .doc > nav{position:static;max-height:none;overflow:visible;margin-bottom:1.8rem;padding:.8rem 1rem;
    border:1px solid var(--rule);border-radius:6px;background:var(--surface)}
  .doc > nav ol{display:none;margin-top:.6rem}
  .doc > nav.open ol{display:block}
  .doc > nav .nav-lecture{margin:0}
  .doc > nav .nav-course{display:flex;justify-content:space-between;align-items:center;cursor:pointer}
  .doc > nav .nav-course::after{content:"Contents ▾";font-weight:400;font-size:.8rem;color:var(--mut)}
  .doc > nav.open .nav-course::after{content:"Close ▴"}
  .items > li{grid-template-columns:1fr;gap:0}
  .pub{grid-template-columns:2.6rem minmax(0,1fr);gap:.6rem}
  .theorem,.proposition,.lemma,.corollary,.definition,.assumption,.Exercise,.exercise{padding:.8rem .85rem .2rem;margin-left:-.25rem;margin-right:-.25rem}
  .figure-controls input[type=range]{width:7rem}
}
@media print{
  .site-header,.site-footer,.rail,.doc > nav,.pub-tools{display:none}
  .layout{display:block;max-width:none;padding:0}
  a{color:inherit}
}

/* ==========================================================================
   Home page: its own structure (profile panel + bio + grid of blocks),
   same tokens and type as the content pages.
   ========================================================================== */
.home{max-width:calc(var(--rail) + var(--gap) + var(--measure) + 3rem);margin:0 auto;padding:3.2rem 1.5rem 4rem;
  display:grid;grid-template-columns:15rem minmax(0,1fr);column-gap:var(--gap);align-items:start}
.profile{font-family:var(--sans);font-size:.9rem;line-height:1.45;position:sticky;top:1.5rem}
.portrait{display:block;width:11rem;height:11rem;object-fit:cover;border-radius:50%;margin:0 0 1.2rem;background:var(--surface)}
.profile h1{font-family:var(--sans);font-size:1.35rem;font-weight:600;margin:0;letter-spacing:-.005em}
.profile .role{color:var(--mut);margin:.15rem 0 0}
.profile dl{margin:1.2rem 0 0}
.profile dl > div{border-top:1px solid var(--rule);padding:.85rem 0}
.profile dt{font-size:.7rem;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--faint);margin-bottom:.3rem}
.profile dd{margin:0}
.profile dd + dd{margin-top:.35rem}
.profile .addr{color:var(--mut)}
.profile .links{display:flex;flex-direction:column;gap:.25rem}
.bio{font-size:1.12rem;line-height:1.6;max-width:var(--measure)}
.bio p{margin:0 0 1rem}
.bio p:first-child{font-size:1.32rem;line-height:1.45}
.bio strong{font-weight:600}
.blocks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:2.6rem 2.6rem;margin-top:2.6rem;padding-top:2.2rem;border-top:1px solid var(--rule)}
.block header{display:flex;justify-content:space-between;align-items:baseline;border-bottom:1px solid var(--rule);padding-bottom:.45rem;margin-bottom:.4rem}
.block h2{font-family:var(--sans);font-size:1.02rem;font-weight:600;margin:0}
.block .all{font-family:var(--sans);font-size:.75rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase}
.feed{list-style:none;padding:0;margin:0}
.feed li{padding:.6rem 0;border-bottom:1px solid color-mix(in srgb,var(--rule) 60%,transparent)}
.feed li:last-child{border-bottom:0}
.feed .k,.feed time{display:block;font-family:var(--sans);font-size:.76rem;color:var(--faint);font-variant-numeric:tabular-nums;letter-spacing:.02em;margin-bottom:.1rem}
.feed a{line-height:1.38;display:inline}
.feed .by{display:block;font-family:var(--sans);font-size:.82rem;color:var(--mut);margin-top:.15rem}
.feed .by b{font-weight:600;color:var(--fg)}
@media (max-width: 960px){.home{grid-template-columns:13rem minmax(0,1fr)}.portrait{width:9rem;height:9rem}}
@media (max-width: 780px){
  .home{grid-template-columns:minmax(0,1fr);padding:1.8rem 1.1rem 3rem}
  .profile{position:static;display:grid;grid-template-columns:5.5rem 1fr;column-gap:1rem;align-items:center;margin-bottom:1.6rem}
  .portrait{width:5.5rem;height:5.5rem;margin:0;grid-row:1/3}
  .profile h1{align-self:end}
  .profile .role{align-self:start}
  .profile dl{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;column-gap:1rem}
  .profile dl > div:last-child{grid-column:1/-1}
  .profile .links{flex-direction:row;flex-wrap:wrap;gap:.2rem 1rem}
  .bio{font-size:1.05rem}.bio p:first-child{font-size:1.18rem}
  .blocks{grid-template-columns:minmax(0,1fr);gap:2rem;margin-top:1.8rem;padding-top:1.6rem}
}

/* List pages (publications, talks, micro, one-piece): one centred column, a bit wider than prose. */
.layout--list{max-width:calc(48rem + 3rem);grid-template-columns:minmax(0,1fr)}
.layout--list .pub-tools{margin-top:1.4rem}

/* ==========================================================================
   FLAVOUR LAYER — "monochrome scholarly"
   Delete this block to get back the neutral version.
   ========================================================================== */
:root{
  --bg:#fffffd; --surface:#f5f5f3; --fg:#111; --mut:#555; --faint:#888; --rule:#cfcfcb;
  --acc:#111; --acc-soft:#f1f1ef; --ok:#111;
}
@media (prefers-color-scheme: dark){
  :root{ --bg:#161616; --surface:#1f1f1f; --fg:#e8e8e6; --mut:#a9a9a6; --faint:#7d7d7a; --rule:#3a3a38; --acc:#e8e8e6; --acc-soft:#232323; --ok:#e8e8e6; }
}

/* Links: black, thin underline with gaps around descenders; visited greyer */
a{color:var(--fg);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.16em;
  text-decoration-color:color-mix(in srgb,var(--fg) 45%,transparent);text-decoration-skip-ink:auto}
a:hover{text-decoration-color:var(--fg);text-decoration-thickness:1.5px;background:var(--acc-soft)}
.site-nav a,.site-name,.rail a,.doc > nav a,.block .all,.chip,.pub-links a,.profile .links a,.feed a{text-decoration:none}

/* Reading text: justified, hyphenated, old-style figures */
.content p,.doc main p,.bio p,.content li,.doc main li{text-align:justify;hyphens:auto;-webkit-hyphens:auto}
body{font-variant-numeric:oldstyle-nums}
.pub-id,.feed time,.feed .k,.year > h2 small,.chip .n,.header-section-number,.plot-readout{font-variant-numeric:lining-nums tabular-nums}

/* Header: small caps wordmark, nav as a dotted line of small caps */
.site-header{border-bottom:3px double var(--rule)}
.site-name{font-family:var(--serif);font-variant:small-caps;letter-spacing:.06em;font-size:1.15rem;font-weight:600}
.site-nav{font-family:var(--serif);font-variant:small-caps;letter-spacing:.04em;font-size:1rem;gap:0}
.site-nav a{padding:0 .55rem;color:var(--mut)}
.site-nav a[aria-current="page"]{box-shadow:none;color:var(--fg);font-weight:600}

/* Headings: small caps, ruled; h1 centred like a title page */
.content h1{text-align:center;font-weight:400;font-size:2.4rem;letter-spacing:.01em}
.content h1 + .meta{text-align:center}
.content h2,.doc main h1,.doc main h2{font-variant:small-caps;letter-spacing:.03em;border-bottom:1px solid var(--rule);padding-bottom:.2rem}
.doc main h2{border-bottom-style:dotted}
.section-title,.block h2,.year > h2,.profile dt,.rail .rail-title,.kicker,.lecture-title p:first-child{
  font-family:var(--serif) !important;font-variant:small-caps;text-transform:none !important;letter-spacing:.06em !important;font-weight:600}
.section-title,.profile dt,.rail .rail-title{font-size:.95rem !important;color:var(--fg)}
.block h2{font-size:1.15rem}
.block .all{font-family:var(--serif);font-variant:small-caps;text-transform:none;letter-spacing:.04em;font-size:.9rem;font-weight:400}
.block header{border-bottom:1px solid var(--fg)}
.year > h2{font-size:1.25rem;border-bottom:1px solid var(--fg)}

/* An ornament between the bio and the blocks, and before the footer */
.blocks{border-top:0;position:relative}
.blocks::before,.site-footer::before{content:"⁂";position:absolute;left:50%;transform:translateX(-50%);top:-1.1rem;
  font-size:1.2rem;color:var(--faint);background:var(--bg);padding:0 .8rem}
.site-footer{position:relative;border-top:1px solid var(--rule)}
.site-footer .inner{font-family:var(--serif);font-variant:small-caps;letter-spacing:.04em}

/* (no drop cap) */
.bio p:first-child{font-size:1.2rem}

/* Boxes: monochrome, thin frame, no coloured fills */
.theorem,.proposition,.lemma,.corollary,.definition,.assumption{
  background:var(--surface);border:1px solid var(--rule);border-left:3px solid var(--fg);border-radius:0}
.definition,.assumption{border-left-style:double;border-left-width:4px}
.Exercise,.exercise{border:1px dashed var(--faint);border-left:1px dashed var(--faint);border-radius:0;background:transparent}
:is(.theorem,.proposition,.lemma,.corollary,.definition,.assumption,.remark,.Exercise,.exercise) > p:first-of-type > strong:first-child{
  font-family:var(--serif);font-variant:small-caps;letter-spacing:.04em;font-size:1.02rem}
.proof{border-left:0;padding-left:0}
.badge{color:var(--fg);background:transparent;border:1px solid var(--fg);border-radius:0;font-family:var(--serif);font-variant:small-caps;font-weight:400;font-size:.8rem}

/* Contents box for lecture notes: framed, small-caps title */
.doc > nav{border:1px solid var(--rule);background:var(--surface);padding:.9rem 1rem;align-self:start}
.doc > nav ol{border-left:0}
.doc > nav li a{border-left:0;padding-left:.2rem}
.doc > nav .nav-level-2 a{padding-left:1.2rem}
.doc > nav li a.active{color:var(--fg);font-weight:600;border-left:0;background:var(--acc-soft)}
.nav-course{font-family:var(--serif);font-variant:small-caps;letter-spacing:.04em;font-size:1rem}

/* Lists, chips, inputs: square and monochrome */
.chip{border-radius:0;font-family:var(--serif);font-variant:small-caps;letter-spacing:.03em;font-size:.92rem}
.chip[aria-pressed="true"]{background:var(--fg);color:var(--bg)}
.search{border-radius:0;font-family:var(--serif)}
.pub-links{font-family:var(--serif);font-variant:small-caps;letter-spacing:.04em;font-size:.9rem}
.pub-title{font-weight:600}
.portrait{border-radius:0;filter:grayscale(1) contrast(1.05);border:1px solid var(--rule);padding:3px;background:var(--bg)}

/* Link annotations: a small mark after external links in running text,
   so readers can tell where a link goes before clicking. */
:is(.bio,.doc main,.content > p) a[href^="http"]::after{
  font-family:var(--sans);font-size:.62em;vertical-align:.45em;margin-left:.12em;color:var(--faint);
  font-variant:normal;letter-spacing:.02em;content:"↗"}
:is(.bio,.doc main,.content > p) a[href*="arxiv.org"]::after{content:"arXiv"}
:is(.bio,.doc main,.content > p) a[href*="doi.org"]::after{content:"doi"}
:is(.bio,.doc main,.content > p) a[href^="http"][href$=".pdf"]::after{content:"pdf"}
:is(.bio,.doc main,.content > p) a[href*="wikipedia.org"]::after{content:"W"}
:is(.bio,.doc main,.content > p) a[href*="github.com"]::after{content:"gh"}
:is(.bio,.doc main,.content > p) a[href*="samuelvaiter.com"]::after{content:none}

/* Selection & focus in ink */
::selection{background:var(--fg);color:var(--bg)}
:focus-visible{outline:1px dotted var(--fg);outline-offset:3px}

/* Lists: titles not underlined (scan-friendly), underline on hover */
.pub-title,.feed a{text-decoration:none}
.pub-title:hover,.feed a:hover{text-decoration:underline}
/* Serif everywhere except code: one bookish voice */
:root{--sans:"Source Serif 4","Source Serif Pro",Georgia,serif}
.profile h1{font-variant:small-caps;letter-spacing:.04em;font-weight:600}
.feed time,.feed .k,.pub-id,.meta{font-style:italic}
.pub-id{font-style:normal;font-variant:small-caps}

/* Footer: just the name, centred */
.site-footer .inner{justify-content:center;text-align:center}

/* ==========================================================================
   Centred documents (posts, lecture notes)
   one centred column; title on top; the contents box floats left at the
   start of the text, with the (optional) abstract or the text to its right.
   ========================================================================== */
.layout.doc--centered{display:block;max-width:calc(46rem + 3rem)}
.doc--centered > main{max-width:none}
.doc--centered .lecture-title{text-align:center;border-bottom:0;margin-bottom:1.6rem;padding-bottom:0}
.doc--centered .lecture-title h1{font-variant:small-caps;letter-spacing:.03em;border:0;font-weight:400;font-size:2.5rem}
.doc--centered .lecture-title .subtitle{font-style:italic}
.doc--centered .lecture-title::after{content:"⁂";display:block;color:var(--faint);margin-top:1.2rem;font-size:1.1rem}

/* contents box */
.doc .toc{float:left;width:15rem;margin:.35rem 2rem 1.2rem 0;padding:.75rem 1rem .8rem;
  border:1px solid var(--rule);background:var(--surface);font-size:.86rem;line-height:1.35;text-align:left}
.doc .toc .nav-course{font-variant:small-caps;letter-spacing:.06em;font-weight:600;font-size:1rem;margin:0 0 .45rem;
  padding-bottom:.3rem;border-bottom:1px solid var(--rule)}
.doc .toc ol{list-style:none;margin:0;padding:0;border:0}
.doc .toc li{margin:0;text-align:left;hyphens:manual}
.doc .toc li a{display:block;padding:.16rem 0;color:var(--fg);text-decoration:none}
.doc .toc li a:hover{text-decoration:underline}
.doc .toc .nav-level-2 a{padding-left:1.1rem;color:var(--mut)}
.doc .toc .header-section-number{color:var(--faint);margin-right:.35rem}
.doc .toc li a.active{font-weight:600;color:var(--fg);background:transparent}

/* abstract: framed, to the right of the contents box */
.doc .abstract{display:flow-root;border-top:1px solid var(--fg);border-bottom:1px solid var(--fg);
  padding:.7rem .2rem .1rem;margin:0 0 1.6rem;font-size:.97rem}

/* blocks next to the floated box keep their frames/rules beside it, not behind it */
.doc--centered main > :is(h1,h2,h3,figure,.theorem,.proposition,.lemma,.corollary,.definition,.assumption,.remark,.example,.Exercise,.exercise,.proof,.references,section){display:flow-root}

@media (max-width: 780px){
  .layout.doc--centered{padding:1.6rem 1.1rem 3rem}
  .doc .toc{float:none;width:auto;margin:0 0 1.4rem}
  .doc .toc ol{display:none;margin-top:.5rem}
  .doc .toc.open ol{display:block}
  .doc .toc .nav-course{display:flex;justify-content:space-between;cursor:pointer;margin:0;border:0;padding:0}
  .doc .toc .nav-course::after{content:"▾";font-weight:400}
  .doc .toc.open .nav-course::after{content:"▴"}
  .doc--centered .lecture-title h1{font-size:2rem}
}
.doc--centered .lecture-title p{text-align:center}
.doc main h1,.doc main h2{line-height:1.25}

/* Document header: title / subtitle / tl;dr / author / dates */
.doc-header{text-align:center}
.doc-header > *{margin:0 !important;text-align:center !important}
.doc--centered .doc-header h1{font-variant:normal;font-weight:400;font-size:2.6rem;line-height:1.12;letter-spacing:-.005em;margin-bottom:.55rem !important}
.doc-header .subtitle{font-style:normal;font-variant:small-caps;letter-spacing:.06em;font-size:1rem !important;color:var(--mut);margin-bottom:1rem !important}
.doc-header .tldr{font-style:italic;font-size:1.15rem;max-width:32rem;margin:0 auto 1rem !important;line-height:1.45}
.doc-header .author{font-variant:small-caps;letter-spacing:.05em;font-size:1rem;color:var(--fg)}
.doc-header .dates{font-size:.85rem;color:var(--mut);margin-top:.15rem !important}
.doc-header .dates span{font-variant:small-caps;letter-spacing:.04em}
.doc .abstract{padding-top:.8rem}
@media (max-width: 780px){.doc--centered .doc-header h1{font-size:2rem}}
.doc--centered .doc-header .subtitle{font-style:normal}

/* Slightly smaller reading size */
html{font-size:16.5px}
@media (max-width: 780px){html{font-size:15.5px}}

/* Collapsible proofs (<details class="proof">), collapsed by default */
details.proof{margin:.6rem 0 1.4rem;padding:0;border:0}
details.proof > summary{cursor:pointer;list-style:none;display:inline-flex;align-items:baseline;gap:.4rem;
  font-style:italic;font-weight:600;color:var(--fg);padding:.1rem .5rem .1rem 0;user-select:none}
details.proof > summary::-webkit-details-marker{display:none}
details.proof > summary::before{content:"▸";font-style:normal;font-size:.8em;color:var(--faint);transition:transform .15s}
details.proof[open] > summary::before{transform:rotate(90deg)}
details.proof > summary::after{content:"show";font-style:normal;font-weight:400;font-variant:small-caps;letter-spacing:.05em;
  font-size:.85rem;color:var(--faint)}
details.proof[open] > summary::after{content:"hide"}
details.proof > summary:hover::after{color:var(--fg)}
details.proof .proof-of{font-weight:400}
details.proof[open]{padding:.1rem 0 .1rem 1rem;border-left:1px solid var(--rule)}
details.proof[open] > summary{margin-left:-1rem;padding-left:0}
@media print{details.proof > summary::after{content:none}}

/* ==========================================================================
   Theme switch: system preference by default, explicit choice wins.
   ========================================================================== */
:root,:root[data-theme="light"]{--bg:#fffffd; --surface:#f5f5f3; --fg:#111; --mut:#555; --faint:#888; --rule:#cfcfcb; --acc:#111; --acc-soft:#f1f1ef; --ok:#111; color-scheme:light}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]){--bg:#161616; --surface:#1f1f1f; --fg:#e8e8e6; --mut:#a9a9a6; --faint:#7d7d7a; --rule:#3a3a38; --acc:#e8e8e6; --acc-soft:#232323; --ok:#e8e8e6; color-scheme:dark} }
:root[data-theme="dark"]{--bg:#161616; --surface:#1f1f1f; --fg:#e8e8e6; --mut:#a9a9a6; --faint:#7d7d7a; --rule:#3a3a38; --acc:#e8e8e6; --acc-soft:#232323; --ok:#e8e8e6; color-scheme:dark}

.site-nav{margin-left:auto}
.theme-toggle{display:inline-grid;place-items:center;margin-left:1rem;width:2rem;height:2rem;padding:0;border:1px solid transparent;
  border-radius:50%;background:none;color:var(--mut);cursor:pointer;align-self:center}
.theme-toggle:hover{color:var(--fg);border-color:var(--rule)}
.theme-toggle svg{width:1.1rem;height:1.1rem;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;grid-area:1/1}
.theme-toggle .icon-moon{fill:currentColor;stroke:none}
/* show the moon in light mode (click = go dark), the sun in dark mode (click = go light) */
.theme-toggle .icon-sun{display:none}
:root[data-theme="dark"] .theme-toggle .icon-sun{display:block}
:root[data-theme="dark"] .theme-toggle .icon-moon{display:none}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .theme-toggle .icon-sun{display:block}
  :root:not([data-theme="light"]) .theme-toggle .icon-moon{display:none}
}
@media (max-width: 780px){
  .site-header .inner{display:grid;grid-template-columns:1fr auto;row-gap:.35rem}
  .site-name{grid-column:1;grid-row:1}
  .theme-toggle{grid-column:2;grid-row:1;margin-left:0}
  .site-nav{grid-column:1/-1;grid-row:2;margin-left:-.55rem}
}

/* Publications: plain list (no ids, no counts, no toolbar) */
.pub{grid-template-columns:minmax(0,1fr)}
.pubs li,.content .pubs li{text-align:left;hyphens:manual}
