/* ---------- tokens ---------- */
  :root{
    --paper:#f7f7f5;
    --paper-raised:#ffffff;
    --ink:#14171c;
    --slate:#5b6472;
    --slate-light:#8a92a0;
    --indigo:#1f2d5c;
    --indigo-soft:#2c3d78;
    --line:#dfe2e7;
    --line-strong:#c7cbd3;
    --v1:#6e4ff6; /* violet  */
    --v2:#3d7bf0; /* blue    */
    --v3:#2fb4a8; /* teal    */
    --v4:#e8a33d; /* amber   */
    --v5:#e0603f; /* coral   */
    --spectrum: linear-gradient(90deg,var(--v1),var(--v2) 28%,var(--v3) 52%,var(--v4) 76%,var(--v5));
    --measure: 62ch;
  }

  *{box-sizing:border-box;}
  html{scroll-behavior:smooth;}
  body{
    margin:0;
    background:var(--paper);
    color:var(--ink);
    font-family:'Inter',system-ui,sans-serif;
    font-size:16px;
    line-height:1.6;
    -webkit-font-smoothing:antialiased;
  }
  h1,h2,h3{
    font-family:'Newsreader',Georgia,serif;
    font-weight:500;
    line-height:1.12;
    margin:0;
    letter-spacing:-0.01em;
  }
  a{color:inherit;}
  .mono{font-family:'IBM Plex Mono',ui-monospace,monospace;}
  .wrap{max-width:1120px;margin:0 auto;padding:0 32px;}
  section{padding:96px 0;}
  section + section{border-top:1px solid var(--line);}

  ::selection{background:var(--v1);color:#fff;}

  /* focus visibility */
  a:focus-visible, button:focus-visible{
    outline:2px solid var(--indigo);
    outline-offset:3px;
  }

  @media (prefers-reduced-motion: reduce){
    *{animation:none !important; transition:none !important; scroll-behavior:auto !important;}
  }

  /* ---------- signature: dispersion rule ---------- */
  .rule-spectrum{
    height:2px;
    width:100%;
    background:var(--spectrum);
    border:0;
    opacity:0.85;
  }

  /* ---------- nav ---------- */
  header.site-nav{
    position:sticky; top:0; z-index:50;
    background:rgba(247,247,245,0.92);
    backdrop-filter:blur(8px);
    border-bottom:1px solid var(--line);
  }
  .nav-inner{
    max-width:1120px;margin:0 auto;padding:0 32px;
    height:64px;display:flex;align-items:center;justify-content:space-between;
  }
  .wordmark{
    font-family:'Newsreader',serif;
    font-size:19px;
    font-style:italic;
    font-weight:500;
    text-decoration:none;
    color:var(--ink);
  }
  .wordmark b{font-style:normal;}
  nav.links{display:flex;gap:28px;list-style:none;margin:0;padding:0;}
  nav.links a{
    text-decoration:none;
    font-size:12.5px;
    letter-spacing:0.08em;
    text-transform:uppercase;
    color:var(--slate);
    font-family:'IBM Plex Mono',monospace;
    transition:color .15s ease;
  }
  nav.links a:hover{color:var(--indigo);}
  .nav-cta{
    font-family:'IBM Plex Mono',monospace;
    font-size:12.5px;
    letter-spacing:0.03em;
    text-decoration:none;
    color:var(--paper);
    background:var(--indigo);
    padding:8px 14px;
    border-radius:2px;
    white-space:nowrap;
  }
  .mobile-toggle{display:none;}

  /* ---------- hero ---------- */
  .hero{padding:88px 0 64px;border-top:none;}
  .hero .wrap{
    display:grid;
    grid-template-columns:1.1fr 0.9fr;
    gap:56px;
    align-items:center;
  }
  .eyebrow{
    font-family:'IBM Plex Mono',monospace;
    font-size:12.5px;
    letter-spacing:0.14em;
    text-transform:uppercase;
    color:var(--slate);
    margin-bottom:18px;
    display:block;
  }
  .hero h1{
    font-size:clamp(40px,5.4vw,60px);
    color:var(--ink);
  }
  .hero h1 em{
    font-style:italic;
    color:var(--indigo);
  }
  .hero .role{
    margin-top:18px;
    font-size:18px;
    color:var(--slate);
    max-width:46ch;
  }
  .hero .role strong{color:var(--ink);font-weight:600;}
  .hero-cta{display:flex;gap:14px;margin-top:34px;flex-wrap:wrap;}
  .btn{
    font-family:'IBM Plex Mono',monospace;
    font-size:13px;
    letter-spacing:0.03em;
    text-decoration:none;
    padding:11px 18px;
    border-radius:2px;
    display:inline-flex;
    align-items:center;
    gap:8px;
  }
  .btn-primary{background:var(--indigo);color:#fff;}
  .btn-ghost{border:1px solid var(--line-strong);color:var(--ink);}
  .btn-ghost:hover{border-color:var(--indigo);color:var(--indigo);}

  /* hero photo, framed with the spectrum accent */
  .hero-photo-wrap{max-width:360px;margin-left:auto;}
  .hero-photo{
    width:100%;
    aspect-ratio:1/1;
    object-fit:cover;
    display:block;
    border-radius:2px;
    filter:saturate(0.94) contrast(1.03);
    box-shadow:0 18px 40px -22px rgba(20,23,28,0.35);
  }
  .photo-caption{
    margin-top:10px;
    font-size:11.5px;
    letter-spacing:0.04em;
    color:var(--slate-light);
    text-align:right;
  }
  @media (max-width:860px){
    .hero-photo-wrap{margin-left:0;max-width:220px;}
  }

  /* ---------- section headers ---------- */
  .sec-head{
    display:flex;
    justify-content:space-between;
    align-items:flex-end;
    gap:24px;
    margin-bottom:44px;
  }
  .sec-num{
    font-family:'IBM Plex Mono',monospace;
    font-size:12.5px;
    color:var(--slate-light);
    display:block;
    margin-bottom:10px;
  }
  .sec-head h2{font-size:32px;}
  .sec-sub{color:var(--slate);font-size:15px;max-width:34ch;text-align:right;}

  /* ---------- about ---------- */
  .about-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:64px;}
  .about-grid p{max-width:var(--measure);color:var(--ink);}
  .about-grid p + p{margin-top:18px;}
  .stat-list{border-top:1px solid var(--line);}
  .stat{
    display:flex;justify-content:space-between;align-items:baseline;
    padding:16px 0;border-bottom:1px solid var(--line);
  }
  .stat .label{color:var(--slate);font-size:13.5px;}
  .stat .value{font-family:'IBM Plex Mono',monospace;font-size:15px;color:var(--ink);}

  /* ---------- research ---------- */
  .research-grid{
    display:grid;grid-template-columns:1fr 1fr;gap:1px;
    background:var(--line);border:1px solid var(--line);
  }
  .research-card{
    background:var(--paper-raised);
    padding:36px;
  }
  .research-card .icon{margin-bottom:20px;}
  .research-card h3{font-size:20px;margin-bottom:12px;}
  .research-card p{color:var(--slate);font-size:14.5px;max-width:42ch;}
  .research-tag{
    display:inline-block;margin-top:16px;
    font-family:'IBM Plex Mono',monospace;
    font-size:11px;letter-spacing:0.06em;text-transform:uppercase;
    color:var(--indigo-soft);
  }

  /* ---------- publications ---------- */
  .pub-list{border-top:1px solid var(--line);}
  .pub{
    display:grid;
    grid-template-columns:44px 1fr;
    gap:20px;
    padding:22px 0;
    border-bottom:1px solid var(--line);
  }
  .pub .idx{
    font-family:'IBM Plex Mono',monospace;
    color:var(--slate-light);
    font-size:13px;
    padding-top:2px;
  }
  .pub h3{font-size:17.5px;font-weight:500;color:var(--ink);}
  .pub .venue{
    margin-top:6px;
    font-family:'IBM Plex Mono',monospace;
    font-size:12.5px;
    color:var(--slate);
  }
  .pub .venue a{color:var(--indigo-soft);text-decoration:none;border-bottom:1px solid transparent;}
  .pub .venue a:hover{border-bottom-color:var(--indigo-soft);}
  .pub-more{
    margin-top:28px;color:var(--slate);font-size:14.5px;
  }
  .pub-more a{color:var(--indigo);text-decoration:underline;text-underline-offset:3px;}

  /* ---------- teaching ---------- */
  .teach-table{width:100%;border-collapse:collapse;}
  .teach-table th{
    text-align:left;
    font-family:'IBM Plex Mono',monospace;
    font-size:11.5px;letter-spacing:0.08em;text-transform:uppercase;
    color:var(--slate-light);
    font-weight:400;
    padding-bottom:12px;border-bottom:1px solid var(--line-strong);
  }
  .teach-table td{
    padding:16px 0;border-bottom:1px solid var(--line);
    font-size:14.5px;vertical-align:top;
  }
  .teach-table td.course{font-family:'IBM Plex Mono',monospace;color:var(--indigo-soft);font-size:13.5px;}
  .teach-table td.title{color:var(--ink);}
  .teach-table td.term{color:var(--slate);font-family:'IBM Plex Mono',monospace;font-size:13px;white-space:nowrap;}
  .current-pill{
    display:inline-block;margin-left:8px;
    font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:0.05em;
    background:var(--v3);color:#fff;padding:2px 6px;border-radius:2px;
    vertical-align:middle;
  }

  /* ---------- group ---------- */
  .group-grid{display:grid;grid-template-columns:1fr 1fr;gap:64px;}
  .group-col h3{
    font-family:'IBM Plex Mono',monospace;
    font-size:12.5px;letter-spacing:0.08em;text-transform:uppercase;
    color:var(--slate-light);font-weight:400;margin-bottom:20px;
  }
  .person{padding:14px 0;border-bottom:1px solid var(--line);}
  .person .name{font-size:16px;color:var(--ink);}
  .person .role{font-size:13px;color:var(--slate);margin-top:2px;}

  /* ---------- contact ---------- */
  .contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:64px;}
  .addr-block{font-size:14.5px;color:var(--slate);line-height:1.9;}
  .addr-block strong{color:var(--ink);display:block;font-family:'Newsreader',serif;font-size:19px;font-weight:500;margin-bottom:6px;}
  .link-list{list-style:none;margin:0;padding:0;}
  .link-list li{border-bottom:1px solid var(--line);}
  .link-list a{
    display:flex;justify-content:space-between;align-items:center;
    padding:16px 0;text-decoration:none;color:var(--ink);font-size:15px;
  }
  .link-list a .go{font-family:'IBM Plex Mono',monospace;color:var(--slate-light);font-size:13px;transition:transform .15s ease;}
  .link-list a:hover .go{transform:translateX(3px);color:var(--indigo);}

  footer{padding:40px 0;}
  footer .wrap{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;}
  footer p{margin:0;font-size:12.5px;color:var(--slate-light);font-family:'IBM Plex Mono',monospace;}

  /* ---------- responsive ---------- */
  @media (max-width:860px){
    nav.links{display:none;}
    .hero .wrap{grid-template-columns:1fr;}
    .hero-graphic{order:-1;}
    .about-grid,.research-grid,.group-grid,.contact-grid{grid-template-columns:1fr;}
    .sec-head{flex-direction:column;align-items:flex-start;}
    .sec-sub{text-align:left;}
    section{padding:64px 0;}
  }

/* ---------- publications page ---------- */
.pubpage-hero{padding:64px 0 40px;}
.pubpage-hero h1{font-size:clamp(32px,4.4vw,46px);}
.pubpage-hero p{color:var(--slate);max-width:56ch;margin-top:14px;font-size:15.5px;}
.back-link{
  font-family:'IBM Plex Mono',monospace;font-size:12.5px;color:var(--slate);
  text-decoration:none;display:inline-flex;align-items:center;gap:6px;margin-bottom:18px;
}
.back-link:hover{color:var(--indigo);}

.pub-toolbar{
  display:flex;justify-content:space-between;align-items:center;gap:20px;
  margin:36px 0 8px;flex-wrap:wrap;
}
.pub-search{
  font-family:'IBM Plex Mono',monospace;
  font-size:13.5px;
  border:1px solid var(--line-strong);
  background:var(--paper-raised);
  padding:10px 14px;
  border-radius:2px;
  width:280px;
  max-width:100%;
  color:var(--ink);
}
.pub-search:focus-visible{outline:2px solid var(--indigo);outline-offset:2px;}
.pub-count{font-family:'IBM Plex Mono',monospace;font-size:12.5px;color:var(--slate-light);}

.era-head{
  font-family:'IBM Plex Mono',monospace;
  font-size:12px;letter-spacing:0.1em;text-transform:uppercase;
  color:var(--slate-light);
  padding:28px 0 10px;
  border-bottom:1px solid var(--line-strong);
  margin-top:12px;
}

.pub-full-list{border-top:1px solid var(--line);}
.pub-row{
  display:grid;
  grid-template-columns:64px 1fr auto;
  gap:18px;
  align-items:start;
  padding:20px 0;
  border-bottom:1px solid var(--line);
}
.pub-row .idx{font-family:'IBM Plex Mono',monospace;color:var(--slate-light);font-size:13px;padding-top:3px;}
.pub-row h3{font-size:16.5px;font-weight:500;color:var(--ink);}
.pub-row .authors{color:var(--slate);font-size:13.5px;margin-top:5px;}
.pub-row .venue{
  font-family:'IBM Plex Mono',monospace;font-size:12.5px;color:var(--slate-light);margin-top:6px;
}
.pub-row .venue a{color:var(--indigo-soft);text-decoration:none;border-bottom:1px solid transparent;}
.pub-row .venue a:hover{border-bottom-color:var(--indigo-soft);}
.pub-actions{display:flex;flex-direction:column;gap:8px;align-items:flex-end;white-space:nowrap;}
.dl-btn{
  font-family:'IBM Plex Mono',monospace;font-size:12px;letter-spacing:0.02em;
  border:1px solid var(--line-strong);color:var(--ink);text-decoration:none;
  padding:7px 12px;border-radius:2px;
}
.dl-btn:hover{border-color:var(--indigo);color:var(--indigo);}
.dl-missing{
  font-family:'IBM Plex Mono',monospace;font-size:11.5px;color:var(--slate-light);font-style:italic;
}
.pub-row[hidden]{display:none;}

@media (max-width:640px){
  .pub-row{grid-template-columns:1fr;}
  .pub-row .idx{display:none;}
  .pub-actions{align-items:flex-start;margin-top:4px;}
}
