:root { --bg:#faf8f4; --ink:#1d1b18; --muted:#5c574e; --label:#8a8478; --rule:#c9c2b4; --hover:#8a5a2b; }
* { box-sizing: border-box; }
body { margin:0; background:var(--bg); color:var(--ink); font:400 19px/1.6 'Newsreader', Georgia, serif; -webkit-font-smoothing:antialiased; }
a { color:inherit; text-decoration:none; }
a:hover { color:var(--hover); }
main { max-width:580px; margin:0 auto; padding:104px 0 88px; display:flex; flex-direction:column; gap:56px; }
.intro { display:flex; flex-direction:column; gap:28px; }
h1 { margin:0; font-size:52px; line-height:1.05; font-weight:400; letter-spacing:-.015em; }
.lede { margin:0; font-size:24px; line-height:1.45; text-wrap:pretty; }
.bio { margin:0; color:var(--muted); text-wrap:pretty; }
.bio b { color:var(--ink); font-weight:400; }
.mono { font:400 13px 'IBM Plex Mono', monospace; }
.links { display:flex; gap:20px; color:var(--muted); }
.links a { text-decoration:underline; text-underline-offset:4px; text-decoration-color:var(--rule); }
.links a:hover { color:var(--ink); text-decoration-color:var(--ink); }
section { display:flex; flex-direction:column; gap:14px; }
.label { font:500 12px 'IBM Plex Mono', monospace; letter-spacing:.08em; text-transform:uppercase; color:var(--label); }
.oss a { display:block; }
.oss .name { font-weight:500; }
.oss .desc { color:var(--muted); }
.pub { display:flex; flex-direction:column; }
.pub .title { text-wrap:pretty; }
.pub .venue { font:400 12px/1.8 'IBM Plex Mono', monospace; color:var(--label); }
.more { padding-top:6px; }
.more a { text-decoration:underline; text-underline-offset:4px; }

/* Full publications page: same tokens, plus authors and summary. */
.pub-full { display:flex; flex-direction:column; gap:4px; }
.pub-full .title a { text-wrap:pretty; }
.pub-full .authors { font-size:16px; color:var(--muted); }
.pub-full .authors b { color:var(--ink); font-weight:500; }
.pub-full .venue { color:var(--label); }
.pub-full .summary { font-size:17px; color:var(--muted); text-wrap:pretty; }
.pubs { gap:32px; }

@media (max-width: 640px) {
  main { padding:64px 24px 56px; gap:44px; }
  h1 { font-size:40px; }
  .lede { font-size:21px; }
  body { font-size:17px; }
}
