:root{
  --bg: #F5F1E8;
  --bg-alt: #EFEADD;
  --nav-bg: rgba(245,241,232,.85);
  --ink: #191919;
  --ink-soft: #4a4742;
  --ink-mute: #7a756d;
  --rule: #e5dfce;
  --accent: #CC785C;
  --accent-ink: #8a3f26;
  --accent-link-underline: rgba(204,120,92,.35);
  --serif: "Source Serif 4", "Iowan Old Style", "Palatino Linotype", Georgia, serif;
  --sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  --maxw: 1240px;
  --readw: 680px;
}
html[data-theme="dark"]{
  --bg: #17150f;
  --bg-alt: #1f1c14;
  --nav-bg: rgba(23,21,15,.85);
  --ink: #ece7dc;
  --ink-soft: #c9c3b3;
  --ink-mute: #8d877a;
  --rule: #332f25;
  --accent: #E09470;
  --accent-ink: #E8A988;
  --accent-link-underline: rgba(224,148,112,.35);
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background: var(--bg);
  color: var(--ink);
  font-family: var(--sans);
  font-size: 17px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

a{color:var(--accent-ink);text-decoration:none;border-bottom:1px solid var(--accent-link-underline);transition:all .15s}
a:hover{color:var(--accent);border-bottom-color:var(--accent)}

/* ---------- Nav ---------- */
.nav{
  position:sticky; top:0; z-index:50;
  background: var(--nav-bg);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--rule);
}
.nav-inner{
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 16px 32px;
  display:flex; align-items:center; justify-content:space-between;
  gap: 24px;
}
.brand{
  font-family: var(--serif);
  font-weight: 600;
  font-size: 20px;
  color: var(--ink);
  border-bottom: none;
  letter-spacing: .3px;
}
.brand span{color:var(--accent); margin:0 4px}
.nav nav{display:flex; gap:28px; flex-wrap:wrap; align-items:center}
.nav nav a{
  color: var(--ink-soft);
  border-bottom:none;
  font-size:14.5px;
  font-weight:500;
}
.nav nav a:hover{color:var(--accent)}
.theme-toggle{
  background: transparent;
  border: 1px solid var(--rule);
  border-radius: 999px;
  width: 34px; height: 34px;
  display: inline-flex; align-items: center; justify-content: center;
  cursor: pointer;
  color: var(--ink-soft);
  padding: 0;
  transition: color .15s, border-color .15s, background .15s;
}
.theme-toggle:hover{color: var(--accent); border-color: var(--accent)}
.theme-toggle svg{width: 16px; height: 16px}
.theme-toggle .icon-sun{display:none}
.theme-toggle .icon-moon{display:block}
html[data-theme="dark"] .theme-toggle .icon-sun{display:block}
html[data-theme="dark"] .theme-toggle .icon-moon{display:none}

/* ---------- Hero ---------- */
.hero{
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 88px 32px 64px;
}
.hero-grid{
  display:grid;
  grid-template-columns: 1.6fr .7fr;
  gap: 64px;
  align-items:center;
}
.eyebrow{
  font-size: 13px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin: 0 0 20px;
  font-weight: 500;
}
.hero h1{
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(34px, 4.2vw, 52px);
  line-height: 1.08;
  letter-spacing: -.015em;
  margin: 0 0 24px;
  color: var(--ink);
}
.hero h1 .han{
  display:inline-block;
  font-family: "Chiron Sung HK", var(--serif);
  font-size: .5em;
  color: var(--ink-mute);
  margin-left: 12px;
  letter-spacing: .04em;
  font-weight: 400;
  vertical-align: .08em;
}
.lede{
  font-family: var(--serif);
  font-weight: 400;
  font-size: 19px;
  line-height: 1.35;
  color: var(--ink-mute);
  max-width: 560px;
  margin: 0 0 6px;
  letter-spacing: .005em;
}
.lede em{color:var(--accent-ink); font-style: italic}
.affil{
  font-family: var(--serif);
  font-weight: 400;
  font-size: 19px;
  line-height: 1.35;
  color: var(--ink-mute);
  max-width: 560px;
  margin: 0 0 30px;
  letter-spacing: .005em;
}

.chiplist{display:flex; flex-wrap:wrap; gap:10px; margin-bottom:36px}
.chip{
  background: var(--bg-alt);
  border: 1px solid var(--rule);
  padding: 7px 14px;
  border-radius: 999px;
  font-size: 13px;
  color: var(--ink-soft);
}

.cta{display:flex; gap:10px; flex-wrap:wrap; max-width: 440px}
.btn{
  display:inline-block;
  padding: 9px 18px;
  border-radius: 999px;
  border: 1px solid var(--ink);
  color: var(--ink);
  font-size: 13.5px;
  font-weight: 500;
  background: transparent;
  transition: all .18s;
}
.btn:hover{background: var(--ink); color: var(--bg); border-color: var(--ink)}
.btn-primary{background: var(--ink); color: var(--bg)}
.btn-primary:hover{background: var(--accent); border-color: var(--accent); color:#fff}

.hero-photo{
  position:relative;
  max-width: 240px;
  justify-self: end;
}
.hero-photo img{
  width:100%;
  aspect-ratio: 4/5;
  object-fit: cover;
  border-radius: 4px;
  filter: saturate(.92) contrast(1.02);
  box-shadow: 0 20px 40px -24px rgba(25,25,25,.22);
}

/* ---------- Sections ---------- */
.section{
  padding: 84px 32px;
  border-top: 1px solid var(--rule);
}
.section.alt{background: var(--bg-alt)}
.section-content{
  max-width: var(--maxw);
  margin: 0 auto;
  display: flex;
  align-items: baseline;
  gap: 80px;
}
.section-body{
  flex: 1 1 auto;
  min-width: 0;
  max-width: var(--readw);
}
.section-title{
  font-family: var(--sans);
  font-weight: 600;
  font-size: 13px;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--ink-mute);
  margin: 0;
  padding-top: 0;
  flex: 0 0 180px;
  position: sticky;
  top: 88px;
}

.prose{
  max-width: var(--readw);
  font-family: var(--serif);
  font-size: 19px;
  line-height: 1.7;
  color: var(--ink-soft);
}
.prose p{margin: 0 0 1.1em}
.prose em{color:var(--ink)}
.prose .hl{color:var(--accent-ink); font-weight: 500}
.prose .count{
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ink-mute);
  font-feature-settings: "tnum" 1;
  margin-left: 1px;
  vertical-align: .1em;
}

/* Education meta */
dl.meta{
  margin-top: 32px;
  display:grid;
  gap: 18px;
  border-top: 1px solid var(--rule);
  padding-top: 28px;
}
dl.meta > div{
  display:grid;
  grid-template-columns: 1fr 1.4fr;
  gap: 24px;
  align-items:baseline;
}
dl.meta dt{
  font-family: var(--sans);
  font-size: 13.5px;
  font-weight: 600;
  color: var(--ink);
  letter-spacing: .01em;
}
dl.meta dd{
  margin: 0;
  font-family: var(--serif);
  font-size: 17px;
  color: var(--ink-soft);
}

/* Tag list */
ul.tags{
  list-style:none;
  padding: 0;
  margin: 0;
  display:flex;
  flex-wrap: wrap;
  gap: 10px;
}
ul.tags li{
  font-family: var(--sans);
  font-size: 14px;
  padding: 9px 16px;
  background: var(--bg);
  border: 1px solid var(--rule);
  border-radius: 999px;
  color: var(--ink-soft);
}

/* Publications */
ol.pubs{
  list-style:none;
  counter-reset: pub;
  padding: 0;
  margin: 0;
  max-width: var(--readw);
}
ol.pubs.pubs-continue{
  counter-reset: pub 9;
}
ol.pubs li{
  counter-increment: pub;
  padding: 22px 0 22px 54px;
  border-bottom: 1px solid var(--rule);
  position: relative;
}
ol.pubs li:last-child{border-bottom:none}
ol.pubs li::before{
  content: counter(pub, decimal-leading-zero);
  position: absolute;
  left: 0;
  top: 24px;
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  color: var(--accent);
  letter-spacing: .06em;
}
.pub-title{
  font-family: var(--serif);
  font-size: 19px;
  line-height: 1.4;
  color: var(--ink);
  margin: 0 0 6px;
  font-weight: 500;
}
.pub-title a{
  color: var(--ink);
  border-bottom: 1px solid transparent;
  transition: color .15s, border-color .15s;
}
.pub-title a:hover{
  color: var(--accent-ink);
  border-bottom-color: var(--accent);
}
.pub-meta{
  font-family: var(--sans);
  font-size: 14px;
  color: var(--ink-mute);
  margin: 0;
}
.pub-meta em{color: var(--accent-ink); font-style: italic; font-weight:500}
.pub-cites{
  display: inline-block;
  margin-left: 8px;
  padding-left: 10px;
  border-left: 1px solid var(--rule);
  font-size: 13px;
  color: var(--ink-mute);
  font-variant-numeric: tabular-nums;
}

/* Accordion */
.pub-details{
  display: block;
}
.pub-summary{
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 20px;
  padding-right: 28px;
  position: relative;
  outline: none;
  transition: color .15s;
}
.pub-summary::-webkit-details-marker{display:none}
.pub-summary::after{
  content: "";
  position: absolute;
  right: 4px;
  top: 10px;
  width: 10px;
  height: 10px;
  border-right: 1.5px solid var(--ink-mute);
  border-bottom: 1.5px solid var(--ink-mute);
  transform: rotate(45deg);
  transition: transform .25s ease, border-color .15s;
}
.pub-details[open] > .pub-summary::after{
  transform: rotate(-135deg);
  border-color: var(--accent);
  top: 14px;
}
.pub-summary:hover .pub-title{color: var(--accent-ink)}
.pub-summary:hover::after{border-color: var(--accent)}

.pub-title-wrap{flex: 1 1 auto; min-width: 0}

.pub-panel{
  margin-top: 22px;
  padding: 24px 0 8px;
  border-top: 1px dashed var(--rule);
  animation: panelFade .35s ease;
}
@keyframes panelFade{
  from{opacity: 0; transform: translateY(-4px)}
  to{opacity: 1; transform: translateY(0)}
}
.pub-figure{
  margin: 0 0 20px;
  background: var(--bg);
  border: 1px solid var(--rule);
  border-radius: 4px;
  overflow: hidden;
}
.pub-figure img{
  display: block;
  width: 100%;
  height: auto;
}
.figure-placeholder{
  aspect-ratio: 16/9;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ink-mute);
  letter-spacing: .04em;
  text-transform: uppercase;
  background:
    repeating-linear-gradient(
      45deg,
      transparent 0 10px,
      rgba(122, 117, 109, .06) 10px 11px
    ),
    var(--bg);
}
.pub-highlight{
  font-family: var(--serif);
  font-size: 18px;
  line-height: 1.55;
  color: var(--ink);
  font-style: italic;
  margin: 0 0 20px;
  padding-left: 14px;
  border-left: 2px solid var(--accent);
}
.btn-small{
  padding: 8px 16px;
  font-size: 13.5px;
  border-radius: 999px;
  display: inline-block;
  border: 1px solid var(--ink);
  color: var(--ink);
  transition: all .18s;
}
.btn-small:hover{
  background: var(--ink);
  color: var(--bg);
  border-color: var(--ink);
}
.pub-actions{
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

/* Awards */
.awards-group{
  max-width: var(--readw);
  margin: 0 0 48px;
}
.awards-group:last-child{margin-bottom: 0}
.awards-sub{
  font-family: var(--sans);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--accent);
  margin: 0 0 10px;
}
.awards-sub .legend{
  font-weight: 500;
  color: var(--ink-mute);
  text-transform: none;
  letter-spacing: .02em;
  margin-left: 8px;
  font-size: 11.5px;
}
ul.awards{
  list-style: none;
  padding: 0;
  margin: 0;
}
ul.awards li{
  font-family: var(--serif);
  font-size: 17px;
  padding: 12px 0;
  border-bottom: 1px solid var(--rule);
  color: var(--ink);
  line-height: 1.5;
}
ul.awards li:last-child{border-bottom:none}
ul.awards .years{
  font-family: var(--sans);
  font-size: 13px;
  color: var(--ink-mute);
  font-feature-settings: "tnum" 1;
  margin-left: 6px;
}

/* Contact */
.contact p{margin-bottom: .8em}
.contact a{font-size: 20px; font-weight: 500}

/* Footer */
.foot{
  text-align:center;
  padding: 48px 32px 64px;
  color: var(--ink-mute);
  font-size: 13px;
  border-top: 1px solid var(--rule);
}
.foot p{margin:0}

/* ---------- Responsive ---------- */
@media (max-width: 820px){
  .hero{padding: 64px 24px 48px}
  .hero-grid{
    grid-template-columns: 1fr;
    gap: 40px;
  }
  .hero-photo{max-width: 220px; justify-self:start}
  .section{padding: 64px 24px}
  .section-content{
    flex-direction: column;
    gap: 18px;
  }
  .section-title{
    flex: 0 0 auto;
    position: static;
    padding-top: 0;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--rule);
  }
  .section-body{max-width: 100%}
  .nav-inner{padding: 14px 20px}
  .nav nav{gap: 18px}
  .nav nav a{font-size: 13.5px}
  dl.meta > div{grid-template-columns: 1fr; gap: 4px}
}
@media (max-width: 560px){
  .nav .brand{font-size: 17px}
  .hero h1{font-size: 36px}
  .lede{font-size: 18px}
  .prose{font-size: 17px}
  .section-title{margin-bottom: 28px}
}
