:root,:root[data-theme="light"]{
  --ink:#16181d; --paper:#fbfaf8; --muted:#6b6f76; --rule:#e3e0da; --wash:#f2efe9;
  --portrait:grayscale(1);
  --accent:var(--ink);
  --display:"Playfair Display",Georgia,serif;
  --body:"Source Serif 4",Georgia,serif;
  --mono:"IBM Plex Mono",ui-monospace,monospace;
  --wrap:1080px; --gap:clamp(3rem,7vw,6rem);
}
:root[data-theme="dark"]{
  --ink:#e9e5dd; --paper:#14161a; --muted:#969ba4; --rule:#2a2e35; --wash:#1b1e24;
  --portrait:grayscale(1) brightness(.9);
}
html{color-scheme:light dark}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:5rem}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{animation:none!important;transition:none!important}}
body{margin:0;background:var(--paper);color:var(--ink);font:400 1.0625rem/1.65 var(--body);-webkit-font-smoothing:antialiased}
a{color:inherit}
:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
img{max-width:100%;display:block}
.wrap{width:min(100% - 2.5rem,var(--wrap));margin-inline:auto}
.eyebrow{font:500 .6875rem/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}

/* nav */
.topbar{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--paper) 88%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--rule)}
.topbar__inner{display:flex;align-items:center;gap:1.5rem;min-height:3.5rem}
.topbar__name{font:600 .95rem/1 var(--display);letter-spacing:.01em;margin-right:auto;white-space:nowrap}
.navlist{display:flex;gap:1.25rem;list-style:none;margin:0;padding:0;overflow-x:auto;scrollbar-width:none}
.navlist::-webkit-scrollbar{display:none}
.navlist a{font:400 .8125rem/1 var(--mono);color:var(--muted);text-decoration:none;white-space:nowrap;padding-block:.4rem;border-bottom:1px solid transparent}
.navlist a:hover,.navlist a[aria-current="true"]{color:var(--ink);border-bottom-color:var(--ink)}
.langs{display:flex;gap:.35rem}
.langs button{font:400 .75rem/1 var(--mono);text-transform:uppercase;background:none;border:0;padding:.35rem .3rem;color:var(--muted);cursor:pointer}
.langs button[aria-pressed="true"]{color:var(--ink);text-decoration:underline;text-underline-offset:3px}
.themetog{font:400 .9rem/1 var(--mono);background:none;border:1px solid var(--rule);color:var(--muted);width:2rem;height:2rem;cursor:pointer;flex:0 0 auto}
.themetog:hover{color:var(--ink);border-color:var(--ink)}

/* hero */
.hero{padding-block:clamp(3rem,8vw,6rem) var(--gap)}
.hero__grid{display:grid;grid-template-columns:1fr;gap:2.5rem;align-items:start}
@media(min-width:820px){.hero__grid{grid-template-columns:minmax(0,1fr) 15rem;gap:4rem}}
.hero__name{font:500 clamp(2.4rem,6vw,3.9rem)/1.04 var(--display);letter-spacing:-.015em;margin:.4rem 0 0}
.hero__headline{font-size:1.2rem;color:var(--ink);margin:1rem 0 0;max-width:34ch}
.hero__tagline{color:var(--muted);margin:.85rem 0 0;max-width:52ch}
.hero__meta{font:400 .8125rem/1 var(--mono);color:var(--muted);margin-top:1.4rem}
.hero__portrait{border-radius:50%;filter:var(--portrait);width:100%;aspect-ratio:1/1;object-fit:cover;object-position:50% 20%}
.ctas{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:2rem}
.ctas a{font:500 .8125rem/1 var(--mono);text-decoration:none;padding:.75rem 1.1rem;border:1px solid var(--ink)}
.ctas a:first-child{background:var(--ink);color:var(--paper)}
.ctas a:hover{background:var(--wash);color:var(--ink)}
.ctas a:first-child:hover{background:var(--ink);color:var(--paper);opacity:.85}
.profiles{display:flex;flex-wrap:wrap;gap:1rem;margin-top:1.5rem;list-style:none;padding:0}
.profiles a{font:400 .8125rem/1 var(--mono);color:var(--muted);text-decoration:none;border-bottom:1px solid var(--rule)}
.profiles a:hover{color:var(--ink);border-bottom-color:var(--ink)}

/* sections */
.section{padding-block:var(--gap);border-top:1px solid var(--rule)}
.section__head{margin-bottom:2.5rem}
.section__title{font:500 clamp(1.6rem,3.4vw,2.2rem)/1.15 var(--display);margin:.5rem 0 0}
.section__intro{color:var(--muted);max-width:60ch;margin:.9rem 0 0}

/* about */
.about{display:grid;gap:3rem}
@media(min-width:900px){.about{grid-template-columns:1.15fr 1fr;gap:4rem}}
.prose p{margin:0 0 1.1rem;max-width:62ch}
.timeline{list-style:none;margin:0;padding:0 0 0 1.4rem;border-left:1px solid var(--rule)}
.timeline li{position:relative;padding-bottom:1.9rem}
.timeline li::before{content:"";position:absolute;left:-1.85rem;top:.55rem;width:7px;height:7px;background:var(--paper);border:1px solid var(--ink);border-radius:50%}
.timeline__when{font:400 .75rem/1 var(--mono);color:var(--muted)}
.timeline__role{font-weight:600;margin:.3rem 0 0}
.timeline__org{color:var(--muted);font-size:.95rem}
.timeline__note{font-size:.95rem;margin:.35rem 0 0;max-width:44ch}
.counters{display:flex;flex-wrap:wrap;gap:2.5rem;margin-top:2rem}
.counter__value{font:500 2rem/1 var(--display)}
.counter__label{font:400 .75rem/1.3 var(--mono);color:var(--muted);max-width:12ch;margin-top:.4rem}

/* research accordions */
.lines{border-top:1px solid var(--rule)}
.line{border-bottom:1px solid var(--rule)}
.line>summary{display:flex;align-items:baseline;gap:1rem;padding:1.4rem 0;cursor:pointer;list-style:none}
.line>summary::-webkit-details-marker{display:none}
.line__dot{width:.6rem;height:.6rem;border-radius:50%;background:var(--accent);flex:0 0 auto;transform:translateY(-.1rem)}
.line__title{font:500 1.15rem/1.3 var(--display);margin-right:auto}
.line__status{font:400 .6875rem/1 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.line__sign{font:400 1.1rem/1 var(--mono);color:var(--muted)}
.line[open] .line__sign{color:var(--ink)}
.line__body{padding:0 0 1.6rem 1.6rem;max-width:66ch}
.tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.9rem;list-style:none;padding:0}
.tag{font:400 .6875rem/1 var(--mono);padding:.4rem .55rem;border:1px solid var(--rule);color:var(--muted)}

/* projects */
.cards{display:grid;gap:1.6rem}
@media(min-width:760px){.cards{grid-template-columns:repeat(2,1fr)}}
.card{border:1px solid var(--rule);padding:1.6rem;display:flex;flex-direction:column;gap:.7rem;background:var(--paper)}
.card__bar{height:2px;background:var(--accent);width:2.5rem}
.card__name{font:500 1.3rem/1.2 var(--display);margin:0}
.card__summary{margin:0;color:var(--ink)}
.card__body{margin:0;color:var(--muted);font-size:.95rem}
.card__more{display:inline}
.card__more>summary{display:inline-block;cursor:pointer;list-style:none;font:400 .8125rem/1 var(--mono);border-bottom:1px solid var(--rule)}
.card__more>summary::-webkit-details-marker{display:none}
.card__more>summary:hover{border-bottom-color:var(--ink)}
.card__more[open]>summary{margin-bottom:.5rem}
.card__facts{font:400 .8125rem/1.8 var(--mono);color:var(--muted);margin:.4rem 0 0}
.card__links{display:flex;gap:1rem;margin-top:auto;padding-top:.6rem}
.card__links a{font:400 .8125rem/1 var(--mono);text-decoration:none;border-bottom:1px solid var(--rule)}
.card__links a:hover{border-bottom-color:var(--ink)}

/* publications */
.pubtools{display:flex;flex-wrap:wrap;gap:.8rem;margin-bottom:1.8rem}
.pubtools select{font:400 .8125rem/1 var(--mono);padding:.6rem .7rem;border:1px solid var(--rule);background:var(--paper);color:var(--ink)}
.pubcount{font:400 .8125rem/1 var(--mono);color:var(--muted);align-self:center;margin-left:auto}
.pubsearch{font:400 .8125rem/1 var(--mono);padding:.6rem .7rem;border:1px solid var(--rule);background:var(--paper);color:var(--ink);min-width:12rem}
.stamp{font:400 .75rem/1 var(--mono);color:var(--muted);margin-top:1.5rem}
.star{color:var(--muted);font-size:.7em;vertical-align:super;margin-left:.35rem}
.pubs{list-style:none;margin:0;padding:0}
.pub{display:grid;grid-template-columns:4.5rem 1fr;gap:1.2rem;padding:1.2rem 0;border-bottom:1px solid var(--rule)}
.pub__year{font:400 .8125rem/1.6 var(--mono);color:var(--muted)}
.pub__title{font-weight:600;margin:0}
.pub__authors{color:var(--muted);font-size:.95rem;margin:.25rem 0 0}
.pub__meta{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-top:.5rem}
.pub__doi{font:400 .75rem/1 var(--mono);text-decoration:none;border-bottom:1px solid var(--rule)}
.pub__doi:hover{border-bottom-color:var(--ink)}
.chip{font:400 .6875rem/1 var(--mono);padding:.35rem .5rem;border:1px solid;border-radius:999px;background:color-mix(in srgb,currentColor 10%,transparent)}
.pager{display:flex;gap:.6rem;justify-content:center;margin-top:2rem}
.pager button{font:400 .8125rem/1 var(--mono);padding:.6rem .9rem;border:1px solid var(--rule);background:var(--paper);cursor:pointer}
.pager button[disabled]{opacity:.35;cursor:default}
.charts{display:grid;gap:2.5rem;margin-top:3.5rem}
@media(min-width:760px){.charts{grid-template-columns:1.4fr 1fr;align-items:center}}
.chartbox{min-height:220px}

.sub{font:500 .6875rem/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 1.2rem}
.timeline+.sub{margin-top:2.5rem}

/* education */
.edu{list-style:none;margin:0;padding:0}
.edu li{display:grid;grid-template-columns:1fr auto;gap:1rem;align-items:baseline;padding:.75rem 0;border-bottom:1px solid var(--rule)}
.edu__degree{font-weight:600;max-width:36ch}
.edu__org{color:var(--muted);font-size:.95rem}
.edu__year{font:400 .75rem/1 var(--mono);color:var(--muted)}

/* books */
.books{display:grid;gap:2.5rem}
.books>.book:not(:first-child){border-top:1px solid var(--rule);padding-top:2.5rem}
.book__nocover{aspect-ratio:2/3;background:var(--wash);border:1px dashed var(--rule);display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:.6rem;padding:1.5rem}
.book__nocover-label{font:400 .6875rem/1 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.book__nocover-title{font:500 1.1rem/1.3 var(--display);color:var(--muted)}
.book__cover{border:1px solid var(--rule);width:100%}
.book{display:grid;gap:2rem}
@media(min-width:760px){.book{grid-template-columns:13rem 1fr;gap:3rem;align-items:start}}
.book__title{font:500 1.7rem/1.2 var(--display);margin:0}
.book__langs{display:inline-flex;gap:.3rem;margin-left:.6rem;vertical-align:middle;font-size:.7em}
.book__sub{color:var(--muted);margin:.4rem 0 0}
.book__facts{font:400 .8125rem/1.8 var(--mono);color:var(--muted);margin:1.2rem 0 0}

/* contact */
.contact{font-size:1.1rem}
.contact a{text-decoration:none;border-bottom:1px solid var(--rule)}
.contact a:hover{border-bottom-color:var(--ink)}
.contact__note{color:var(--muted);max-width:52ch;margin-top:1rem;font-size:1rem}

.foot{border-top:1px solid var(--rule);padding-block:2.5rem;font:400 .75rem/1.6 var(--mono);color:var(--muted)}
.state{padding-block:4rem;font:400 .875rem/1.6 var(--mono);color:var(--muted)}
[hidden]{display:none!important}
