/* ================= tokens ================= */
:root{
  --bg:#faf9f6;
  --surface:#ffffff;
  --ink:#15171b;
  --ink-2:#474d55;
  --ink-3:#8b9198;
  --line:#e4e1d9;
  --line-2:#efede7;

  --sienna:#8a3324;
  --teal:#2f6465;
  --indigo:#3d4f8a;
  --olive:#63723b;
  --wash:#f1e3de;

  --serif:"Newsreader",Georgia,"Times New Roman",serif;
  --sans:"IBM Plex Sans","Helvetica Neue",Arial,sans-serif;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:var(--serif);font-size:18px;line-height:1.64;font-weight:400;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{margin:0;font-weight:400;line-height:1.18;letter-spacing:-0.011em}
p{margin:0 0 1.05em}p:last-child{margin-bottom:0}
a{color:var(--sienna);text-decoration:none;border-bottom:1px solid rgba(138,51,36,.28)}
a:hover{border-bottom-color:var(--sienna)}
:focus-visible{outline:2px solid var(--sienna);outline-offset:3px;border-radius:2px}
::selection{background:var(--wash)}
svg{max-width:100%}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ================= shell ================= */
.shell{
  display:grid;grid-template-columns:290px minmax(0,1fr);
  gap:clamp(36px,5.5vw,84px);
  max-width:1300px;margin-inline:auto;
  padding:0 clamp(20px,4vw,56px);
}

/* ---- rail ---- */
.rail{
  position:sticky;top:0;height:100vh;overflow-y:auto;scrollbar-width:none;
  display:flex;flex-direction:column;
  padding:clamp(40px,6vh,72px) 0 34px;
  border-right:1px solid var(--line);
}
.rail::-webkit-scrollbar{display:none}
.idblock{flex:none}
.idtext{min-width:0}
.portrait{
  width:172px;height:215px;border-radius:11px;overflow:hidden;flex:none;
  background:var(--line-2);margin-bottom:26px;
  box-shadow:0 1px 2px rgba(21,23,27,.06);
}
.portrait img{display:block;width:100%;height:100%;object-fit:cover}
.rail h1{font-size:40px;line-height:1.02;letter-spacing:-0.025em;font-weight:400;margin-bottom:14px}
.role{font-family:var(--sans);font-size:13.5px;line-height:1.55;color:var(--ink-2)}
.role b{font-weight:500;color:var(--ink);display:block}

.secnav{margin:30px 0 0;padding:26px 0 0;border-top:1px solid var(--line-2);display:flex;flex-direction:column;gap:1px}
.secnav a{
  font-family:var(--sans);font-size:14px;color:var(--ink-2);
  border:0;padding:5px 0 5px 18px;position:relative;border-radius:3px;
}
.secnav a::before{
  content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:7px;height:1.5px;background:var(--ink-3);opacity:.45;transition:width .18s ease,background .18s ease,opacity .18s ease;
}
.secnav a:hover{color:var(--ink)}
.secnav a[aria-current="true"]{color:var(--sienna)}
.secnav a[aria-current="true"]::before{width:12px;background:var(--sienna);opacity:1}

.railfoot{margin-top:auto;padding-top:30px}
.clinks{display:flex;flex-direction:column;gap:7px;margin-bottom:22px}
.clinks a{font-family:var(--sans);font-size:13.5px;color:var(--ink);border-bottom-color:var(--line)}
.clinks a:hover{border-bottom-color:var(--sienna);color:var(--sienna)}
.stamp{font-family:var(--sans);font-size:11.5px;color:var(--ink-3);line-height:1.5}

/* ---- content ---- */
.content{padding:clamp(40px,6vh,72px) 0 clamp(70px,9vh,120px);min-width:0}
section{scroll-margin-top:24px}
.sec + .sec{margin-top:clamp(56px,7vh,92px);padding-top:clamp(50px,6vh,80px);border-top:1px solid var(--line)}
.sec > h2{
  font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.09em;
  text-transform:uppercase;color:var(--ink-3);margin-bottom:26px;
}
.measure{max-width:65ch}

.lede{font-size:clamp(23px,2.6vw,31px);line-height:1.34;font-weight:300;letter-spacing:-0.018em;margin-bottom:1em;max-width:22ch}
.lede em{font-style:italic;color:var(--sienna)}
.bio p{color:var(--ink-2);max-width:65ch}
.bio p.first{color:var(--ink)}

/* interest strands */
.strands{display:grid;gap:2px;margin-top:8px}
.strand{display:grid;grid-template-columns:13px minmax(0,1fr);gap:16px;padding:19px 0;border-bottom:1px solid var(--line-2)}
.strand:first-child{border-top:1px solid var(--line-2)}
.strand i{width:9px;height:9px;border-radius:50%;margin-top:9px}
.strand h3{font-size:19px;font-weight:500;margin-bottom:3px}
.strand p{font-family:var(--sans);font-size:14px;line-height:1.6;color:var(--ink-2);margin:0;max-width:60ch}

.wip{margin-top:34px;border-left:2px solid var(--sienna);padding-left:20px}
.wip ul{margin:0;padding:0;list-style:none}
.wip li{margin-bottom:16px}
.wip li:last-child{margin-bottom:0}
.wip .t{display:block;font-size:19px;line-height:1.36}
.wip .s{display:block;font-family:var(--sans);font-size:12px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;color:var(--sienna);margin-top:6px}

/* ---- figure / map ---- */
figure{margin:34px 0 0}
.fig{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:18px 18px 10px}
.fig svg{display:block;width:100%;height:auto}
figcaption{font-family:var(--sans);font-size:12.5px;line-height:1.55;color:var(--ink-3);margin-top:14px;max-width:62ch}
.gl{stroke:#e8e5dd;stroke-width:1;fill:none}
.gl0{stroke:#d9d5cb}
.ring{fill:none;stroke:#e3ded3;stroke-width:1;stroke-dasharray:2 8}
.arc{fill:none;stroke:var(--teal);stroke-linecap:round;transition:stroke .18s ease,opacity .18s ease}
.arc.hot{stroke:var(--sienna)}
.nd{cursor:pointer}
.nd-halo{fill:var(--sienna);opacity:.09;transition:opacity .18s ease}
.nd-dot{fill:var(--sienna);stroke:var(--surface);stroke-width:2}
.nd:hover .nd-halo,.nd.on .nd-halo{opacity:.22}
.nd-lab{fill:var(--ink);font-family:var(--sans);font-size:18px;font-weight:500;pointer-events:none}
.nd-num{fill:var(--ink-3);font-family:var(--sans);font-size:15px;pointer-events:none}
.dim{opacity:.2}

/* ---- filters ---- */
.filters{display:grid;grid-template-columns:1.25fr .75fr;gap:clamp(22px,3vw,44px);margin-bottom:34px}
.fgroup h3{font-family:var(--sans);font-size:11.5px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);margin-bottom:14px}

.tbar{display:flex;align-items:center;gap:12px;width:100%;background:none;border:0;padding:6px 0;cursor:pointer;text-align:left;font:inherit;color:inherit}
.tbar .lab{font-family:var(--sans);font-size:13.5px;color:var(--ink-2);flex:0 0 auto;width:132px;line-height:1.3}
.tbar .track{flex:1;height:9px;background:var(--line-2);border-radius:5px;overflow:hidden;min-width:0}
.tbar .fill{display:block;height:100%;border-radius:5px;transition:filter .18s ease}
.tbar .num{font-family:var(--sans);font-size:12.5px;color:var(--ink-3);font-variant-numeric:tabular-nums;width:20px;text-align:right}
.tbar:hover .lab{color:var(--ink)}
.tbar:hover .fill{filter:brightness(1.12)}
.tbar[aria-pressed="true"] .lab{color:var(--ink);font-weight:500}
.tbar[aria-pressed="true"] .num{color:var(--ink)}
.tbar[aria-pressed="false"].muted .fill{opacity:.32}

.ybars{display:flex;align-items:flex-end;gap:10px;height:96px}
.ybar{flex:1;display:flex;flex-direction:column;justify-content:flex-end;height:100%;background:none;border:0;padding:0;cursor:pointer}
.ybar .stem{width:100%;background:var(--ink-3);border-radius:3px 3px 0 0;opacity:.35;transition:opacity .18s ease,background .18s ease}
.ybar:hover .stem{opacity:.6}
.ybar[aria-pressed="true"] .stem{background:var(--sienna);opacity:1}
.yfoot{display:flex;gap:10px;margin-top:9px}
.yfoot div{flex:1;text-align:center;font-family:var(--sans);font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums}
.yfoot b{display:block;font-weight:500;color:var(--ink);font-size:14px}

.searchrow{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.searchbox{position:relative;flex:1 1 260px;min-width:0}
.searchbox input{width:100%;font-family:var(--sans);font-size:15px;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:12px 42px 12px 14px}
.searchbox input::placeholder{color:var(--ink-3)}
.searchbox input:focus{border-color:var(--sienna);outline:none;box-shadow:0 0 0 3px var(--wash)}
.slash{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-family:var(--sans);font-size:11px;color:var(--ink-3);border:1px solid var(--line);border-radius:4px;padding:1px 7px;pointer-events:none}
.searchbox input:focus ~ .slash{opacity:0}
.sortsel{font-family:var(--sans);font-size:14px;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:11px 12px}
.sortsel:focus{border-color:var(--sienna);outline:none;box-shadow:0 0 0 3px var(--wash)}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{font-family:var(--sans);font-size:13px;color:var(--ink-2);background:var(--surface);border:1px solid var(--line);border-radius:100px;padding:6px 13px;cursor:pointer;line-height:1.3}
.chip:hover{border-color:var(--ink-3);color:var(--ink)}
.chip[aria-pressed="true"]{background:var(--ink);border-color:var(--ink);color:var(--bg)}
.chip .n{font-variant-numeric:tabular-nums;opacity:.55;margin-left:7px}
.resultline{display:flex;align-items:center;gap:16px;flex-wrap:wrap;font-family:var(--sans);font-size:12.5px;color:var(--ink-3);padding:16px 0 4px;border-top:1px solid var(--line);margin-top:20px}
.linkbtn{font-family:var(--sans);font-size:12.5px;color:var(--sienna);background:none;border:0;padding:0;cursor:pointer;border-bottom:1px solid rgba(138,51,36,.3)}
.linkbtn:hover{border-bottom-color:var(--sienna)}

/* ---- entries ---- */
.entries{margin:0;padding:0;list-style:none}
.entry{border-top:1px solid var(--line-2)}
.entry:first-child{border-top:1px solid var(--line)}
.entry-btn{display:grid;grid-template-columns:11px 52px minmax(0,1fr) 20px;gap:15px;align-items:start;width:100%;text-align:left;background:none;border:0;cursor:pointer;padding:19px 4px 19px 0;color:inherit;font:inherit}
.entry-btn:hover{background:rgba(255,255,255,.7)}
.tmark{width:8px;height:8px;border-radius:50%;margin-top:11px}
.entry-yr{font-family:var(--sans);font-size:13px;color:var(--ink-3);font-variant-numeric:tabular-nums;padding-top:5px}
.entry-title{font-size:19px;line-height:1.38;display:block}
.entry-venue{font-family:var(--sans);font-size:12.5px;color:var(--ink-2);margin-top:7px;display:block}
.entry-venue em{font-style:normal;color:var(--ink-3)}
.badge{display:inline-block;font-family:var(--sans);font-size:10.5px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;color:var(--sienna);border:1px solid var(--sienna);border-radius:4px;padding:1px 7px;margin-left:10px;vertical-align:3px}
.caret{width:10px;height:10px;border-right:1.5px solid var(--ink-3);border-bottom:1.5px solid var(--ink-3);transform:rotate(45deg);margin-top:10px;justify-self:end;transition:transform .18s ease}
.entry-btn[aria-expanded="true"] .caret{transform:rotate(-135deg);margin-top:14px}
.detail{display:none;margin:0 0 22px 78px;padding:17px 20px;background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--sienna);border-radius:0 9px 9px 0}
.detail.open{display:block}
.detail .cite{font-size:16.5px;line-height:1.62;color:var(--ink-2)}
.detail .cite b{font-weight:500;color:var(--ink)}
.detail-actions{display:flex;gap:16px;align-items:center;margin-top:14px;flex-wrap:wrap}
.copybtn{font-family:var(--sans);font-size:12.5px;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:6px;padding:7px 13px;cursor:pointer}
.copybtn:hover{border-color:var(--ink-3)}
.meta{font-family:var(--sans);font-size:12.5px;color:var(--ink-3)}
.empty{padding:40px 0 8px;max-width:46ch}
.empty p{font-size:18px;color:var(--ink-2)}

/* ---- tables, tabs, record ---- */
.tbl{width:100%;border-collapse:collapse;font-family:var(--sans);font-size:14px}
.tbl caption{text-align:left;font-size:12.5px;color:var(--ink-3);padding-bottom:10px}
.tbl th{text-align:left;font-weight:500;font-size:11.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3);border-bottom:1px solid var(--line);padding:0 14px 9px 0}
.tbl td{border-bottom:1px solid var(--line-2);padding:13px 14px 13px 0;vertical-align:top;color:var(--ink-2)}
.tbl td:first-child{color:var(--ink-3);white-space:nowrap;font-variant-numeric:tabular-nums}
.tbl td.course{color:var(--ink)}
.tbl td:last-child{padding-right:0;text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.tbl-note{font-family:var(--sans);font-size:12.5px;color:var(--ink-3);margin-top:16px}

.tabs{display:flex;gap:2px;flex-wrap:wrap;border-bottom:1px solid var(--line)}
.tab{font-family:var(--sans);font-size:13.5px;color:var(--ink-2);background:none;border:0;border-bottom:2px solid transparent;padding:10px 13px;cursor:pointer;margin-bottom:-1px}
.tab:hover{color:var(--ink)}
.tab[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--sienna);font-weight:500}
.tabpanel{padding-top:24px}
.tabpanel[hidden]{display:none}
.rec{margin:0;padding:0;list-style:none}
.rec li{display:grid;grid-template-columns:106px minmax(0,1fr);gap:18px;padding:16px 0;border-bottom:1px solid var(--line-2)}
.rec li:last-child{border-bottom:0}
.rec .when{font-family:var(--sans);font-size:12.5px;color:var(--ink-3);font-variant-numeric:tabular-nums;padding-top:4px}
.rec .what{font-size:17.5px;line-height:1.45}
.rec .where{font-family:var(--sans);font-size:13px;color:var(--ink-2);margin-top:5px;display:block}
.pills{display:flex;flex-wrap:wrap;gap:8px}
.pill{font-family:var(--sans);font-size:12.5px;color:var(--ink-2);background:var(--surface);border:1px solid var(--line);border-radius:100px;padding:6px 13px}
.pill b{font-weight:500;color:var(--ink)}
.skillgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:26px}
.skillgrid h4{font-family:var(--sans);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);font-weight:600;margin-bottom:9px}
.skillgrid p{font-size:16.5px;color:var(--ink);margin:0}

.toast{position:fixed;left:50%;bottom:26px;transform:translate(-50%,14px);background:var(--ink);color:var(--bg);font-family:var(--sans);font-size:13px;padding:11px 19px;border-radius:8px;opacity:0;pointer-events:none;transition:opacity .18s ease,transform .18s ease;z-index:60}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ================= responsive ================= */
@media (max-width:1080px){
  .shell{grid-template-columns:1fr;gap:0}
  .rail{position:static;height:auto;overflow:visible;border-right:0;border-bottom:1px solid var(--line);padding:38px 0 28px}
  .rail h1{font-size:clamp(34px,8vw,46px)}
  .idblock{display:flex;gap:26px;align-items:flex-start}
  .portrait{width:138px;height:172px;margin-bottom:0}
  .secnav{flex-direction:row;flex-wrap:wrap;gap:4px 6px;margin-top:26px;padding-top:22px}
  .secnav a{padding:6px 12px;border:1px solid var(--line);border-radius:100px}
  .secnav a::before{display:none}
  .secnav a[aria-current="true"]{border-color:var(--sienna)}
  .railfoot{margin-top:26px;padding-top:24px;border-top:1px solid var(--line-2)}
  .clinks{flex-direction:row;flex-wrap:wrap;gap:8px 20px}
  .content{padding-top:44px}
  .filters{grid-template-columns:1fr;gap:30px}
}
@media (max-width:680px){
  body{font-size:17px}
  .nd-lab,.nd-num{display:none}
  .entry-btn{grid-template-columns:9px 42px minmax(0,1fr) 16px;gap:11px}
  .detail{margin-left:0}
  .rec li{grid-template-columns:1fr;gap:4px}
  .tbl td:last-child{text-align:left}
  .tbar .lab{width:106px;font-size:12.5px}
  .idblock{gap:17px}
  .portrait{width:98px;height:122px;border-radius:8px}
  .fig{padding:12px 12px 8px}
}
@media (prefers-reduced-motion:reduce){*{animation-duration:.001ms !important;transition-duration:.001ms !important}}

/* ================= multi-page additions ================= */
.secnav a[aria-current="page"]{color:var(--sienna)}
.secnav a[aria-current="page"]::before{width:12px;background:var(--sienna);opacity:1}
@media (max-width:1080px){.secnav a[aria-current="page"]{border-color:var(--sienna)}}

.pagehead{margin-bottom:clamp(34px,4.5vh,52px)}
.pagetitle{font-size:clamp(34px,4.6vw,50px);font-weight:400;letter-spacing:-0.026em;line-height:1.06;margin-bottom:16px}
.pagesub{font-family:var(--sans);font-size:14.5px;line-height:1.6;color:var(--ink-2);max-width:58ch;margin:0}

.btn{
  display:inline-flex;align-items:center;gap:9px;font-family:var(--sans);font-size:13.5px;font-weight:500;
  color:#fff;background:var(--sienna);border:1px solid var(--sienna);border-radius:8px;
  padding:10px 18px;border-bottom:1px solid var(--sienna);
}
.btn:hover{background:#73291d;border-color:#73291d}
.btn.ghost{color:var(--ink);background:var(--surface);border-color:var(--line);border-bottom-color:var(--line)}
.btn.ghost:hover{background:var(--surface);border-color:var(--ink-3);border-bottom-color:var(--ink-3)}
.btnrow{display:flex;gap:10px;flex-wrap:wrap;margin-top:26px}

/* home: interests + news + recent */
.ilist{margin:0;padding:0;list-style:none}
.ilist li{display:grid;grid-template-columns:13px minmax(0,1fr);gap:15px;padding:13px 0;border-bottom:1px solid var(--line-2)}
.ilist li:first-child{border-top:1px solid var(--line-2)}
.ilist i{width:9px;height:9px;border-radius:50%;margin-top:9px}
.ilist span{font-size:17.5px;line-height:1.4}
.ilist small{display:block;font-family:var(--sans);font-size:12.5px;color:var(--ink-3);margin-top:3px}

.news{margin:0;padding:0;list-style:none}
.news li{display:grid;grid-template-columns:96px minmax(0,1fr);gap:18px;padding:14px 0;border-bottom:1px solid var(--line-2)}
.news li:first-child{border-top:1px solid var(--line-2)}
.news .w{font-family:var(--sans);font-size:12.5px;color:var(--ink-3);padding-top:4px;font-variant-numeric:tabular-nums}
.news .x{font-size:17px;line-height:1.46;color:var(--ink-2)}
.news .x b{font-weight:500;color:var(--ink)}

.qlist{margin:0;padding:0;list-style:none}
.qlist li{display:grid;grid-template-columns:11px 48px minmax(0,1fr);gap:14px;padding:15px 0;border-bottom:1px solid var(--line-2)}
.qlist li:first-child{border-top:1px solid var(--line-2)}
.qlist .d{width:8px;height:8px;border-radius:50%;margin-top:10px}
.qlist .y{font-family:var(--sans);font-size:12.5px;color:var(--ink-3);padding-top:4px;font-variant-numeric:tabular-nums}
.qlist .t{font-size:17.5px;line-height:1.4;display:block}
.qlist .v{font-family:var(--sans);font-size:12.5px;color:var(--ink-2);margin-top:5px;display:block}
.more{font-family:var(--sans);font-size:13.5px;margin-top:22px;display:inline-block}

/* entry links */
.readlink{font-family:var(--sans);font-size:12.5px;color:var(--sienna)}

/* cv page */
.cvblock{margin-top:clamp(40px,5vh,64px)}
.cvblock:first-of-type{margin-top:0}
.cvblock > h2{font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);margin-bottom:22px;padding-bottom:12px;border-bottom:1px solid var(--line)}

/* contact block */
.cgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:26px}
.cgrid h4{font-family:var(--sans);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);font-weight:600;margin-bottom:9px}
.cgrid p{font-size:16.5px;margin:0;line-height:1.55}

/* 404 */
.big404{font-size:clamp(60px,12vw,120px);line-height:1;font-weight:300;letter-spacing:-0.04em;color:var(--line);margin-bottom:18px}

.railname{font-family:var(--serif);font-size:40px;line-height:1.02;letter-spacing:-0.025em;font-weight:400;margin:0 0 14px}
@media (max-width:1080px){.railname{font-size:clamp(34px,8vw,46px)}}
