@font-face {
  font-family: "Inter";
  src: url("assets/fonts/inter/InterVariable.woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Poppins";
  src: url("assets/fonts/poppins/Poppins-Regular.ttf") format("truetype");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Poppins";
  src: url("assets/fonts/poppins/Poppins-Medium.ttf") format("truetype");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Poppins";
  src: url("assets/fonts/poppins/Poppins-SemiBold.ttf") format("truetype");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Poppins";
  src: url("assets/fonts/poppins/Poppins-Bold.ttf") format("truetype");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Helvetica Neue";
  src: local("Helvetica Neue Bold"), local("HelveticaNeue-Bold");
  font-weight: 700;
  font-style: normal;
}
@font-face {
  font-family: "Helvetica Neue";
  src: local("Helvetica Neue Roman"), local("HelveticaNeue-Roman");
  font-weight: 400;
  font-style: normal;
}
@font-face {
  font-family: "Helvetica Neue";
  src: local("Helvetica Neue Medium"), local("HelveticaNeue-Medium");
  font-weight: 500;
  font-style: normal;
}
@font-face {
  font-family: "Helvetica Neue";
  src: local("Helvetica Neue Light"), local("HelveticaNeue-Light");
  font-weight: 300;
  font-style: normal;
}
@font-face {
  font-family: "Helvetica Neue";
  src: local("Helvetica Neue Thin"), local("HelveticaNeue-Thin");
  font-weight: 200;
  font-style: normal;
}
/* Use installed SF Pro Display faces without redistributing Apple's font files. */
@font-face {
  font-family: "SF Pro Display Local";
  src: local("SF Pro Display Regular"), local("SFProDisplay-Regular");
  font-weight: 400;
  font-style: normal;
}
@font-face {
  font-family: "SF Pro Display Local";
  src: local("SF Pro Display Medium"), local("SFProDisplay-Medium");
  font-weight: 500;
  font-style: normal;
}
@font-face {
  font-family: "SF Pro Display Local";
  src: local("SF Pro Display Semibold"), local("SFProDisplay-Semibold");
  font-weight: 600;
  font-style: normal;
}
@font-face {
  font-family: "SF Pro Display Local";
  src: local("SF Pro Display Bold"), local("SFProDisplay-Bold");
  font-weight: 700;
  font-style: normal;
}
@font-face {
  font-family: "SF Mono Local";
  src: local("SF Mono Regular"), local("SFMono-Regular");
  font-weight: 400;
  font-style: normal;
}
@font-face {
  font-family: "SF Mono Local";
  src: local("SF Mono Medium"), local("SFMono-Medium");
  font-weight: 500;
  font-style: normal;
}
@font-face {
  font-family: "SF Mono Local";
  src: local("SF Mono Semibold"), local("SFMono-Semibold");
  font-weight: 600;
  font-style: normal;
}
@font-face {
  font-family: "SF Mono Local";
  src: local("SF Mono Bold"), local("SFMono-Bold");
  font-weight: 700;
  font-style: normal;
}
/* Keep the original green, pink, off-white, and white palette. */
:root {
  --green: #527853;
  --pink: #eb9696;
  --ink: #252b29;
  --muted: #606961;
  --paper: #f8f8f6;
  --white: #fff;
  --rule: #dfe3dc;
  --media-border-color: #858d83;
  --media-border: 1px solid var(--media-border-color);
  --heading-font-pro: "SF Pro", "SF Pro Display Local", "SF Pro Display", -apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, sans-serif;
  --heading-font-mono: "SF Mono Local", "SF Mono", ui-monospace, Menlo, Consolas, monospace;
  --heading-font-helvetica: "Helvetica Neue", Helvetica, Arial, sans-serif;
  --heading-font: var(--heading-font-helvetica);
  --content-width: 69.5rem;
  --page-gutter: 2.6rem;
  --frame-gutter: 7rem;
}
* { box-sizing: border-box; }
/* Keep the responsive curve from 1280 to 3840 CSS px at 95% of its original size.
   rem bounds continue to follow the reader's default font size. */
html {
  font-size: clamp(0.95rem, calc(0.7125rem + 0.296875vw), 1.425rem);
  scroll-behavior: smooth;
  scroll-padding-top: var(--site-header-height, calc(3.5rem + 1px));
}
body { margin: 0; color: var(--ink); background: var(--white); font: 300 1rem/1.7 "Helvetica Neue", "Helvetica Neue Light", Helvetica, Arial, sans-serif; font-synthesis: none; -webkit-font-smoothing: antialiased; }
/* Allow wider borders while keeping the content width and minimum padding. */
.site-frame { width: min(100%, calc(var(--content-width) + 2 * var(--frame-gutter) + 2px)); min-height: 100vh; margin-inline: auto; border-inline: 1px solid var(--rule); background: var(--paper); }
a { color: var(--green); text-decoration-thickness: 1px; text-underline-offset: 0.1875rem; }
a:hover { color: #314e33; }
a:focus-visible { outline: 0.125rem solid var(--green); outline-offset: 0.3125rem; }
img { display: block; max-width: 100%; }
main, .footer-inner { overflow-wrap: anywhere; }
h1, h2, h3, h4, p { margin-top: 0; }
h1, h2, h3, h4 { font-family: var(--heading-font); font-weight: 500; font-optical-sizing: auto; letter-spacing: -0.01em; }
h1, .section-heading > h2,
.content-section:not(.news-month) > .section-inner > h2.section-heading { font-weight: 700; }
h1, h2 { line-height: 1.25; }
h1 { font-size: 2.25rem; }
h2 { font-size: 1.8125rem; }
h3 { font-size: 1.1875rem; line-height: 1.5; }
/* Keep semantic emphasis without bolding the Helvetica Neue body text. */
strong, b { font-weight: inherit; }
sup { line-height: 0; }
.visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0; }
.skip-link { position: fixed; z-index: 30; top: 0.5rem; left: 1rem; padding: 0.5rem 0.875rem; background: white; transform: translateY(-150%); }
.skip-link:focus { transform: translateY(0); }
.site-header { position: sticky; top: 0; z-index: 10; background: var(--paper); border-bottom: 1px solid var(--rule); }
.header-inner, .section-inner, .footer-inner, .page-intro { width: min(var(--content-width), calc(100% - 2 * var(--page-gutter))); margin-inline: auto; }
.header-inner { min-height: 3.5rem; padding-block: 0.625rem; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 1rem; }
.identity, .main-nav a { display: inline-flex; align-items: center; justify-content: center; padding: 0.1875rem 0.5rem; border: 1px solid transparent; border-radius: 0; font-family: inherit; font-size: 0.875rem; font-weight: 300; line-height: 1.4; letter-spacing: 0; text-decoration: none; white-space: nowrap; }
.identity { color: var(--white); background: var(--green); border-color: var(--green); }
.identity:hover { color: var(--white); background: #456647; border-color: #456647; }
.main-nav { display: flex; flex-wrap: wrap; gap: 0.375rem; align-items: center; }
.main-nav a { color: var(--muted); }
.main-nav a[aria-current="page"] { color: var(--green); border-color: var(--green); background: var(--white); }
.main-nav a:hover { color: var(--green); border-color: var(--green); }
.about-section { padding: 2.25rem 0 2.125rem; }
.about-grid { display: grid; grid-template-columns: 18.75rem minmax(0, 1fr); gap: 3rem; align-items: start; }
.about-copy { min-width: 0; }
.profile { margin: 0; }
.portrait { width: 18.75rem; height: 18.75rem; object-fit: cover; border: 0; border-radius: 0; }
.profile-caption { padding-top: 0.8125rem; text-align: center; line-height: 1.5; }
.profile-role { margin: 0 0 0.0625rem; font-weight: 300; font-size: 1rem; }
.profile-email { font-size: 0.9375rem; }
.profile-links { display: flex; justify-content: center; gap: 0.5rem; flex-wrap: wrap; margin-top: 0.625rem; }
.profile-links a { display: inline-flex; align-items: center; padding: 0.1875rem 0.5rem; font-size: 0.8125rem; line-height: 1.4; border: 1px solid #cfd7cb; border-radius: 0; text-decoration: none; color: var(--green); background: #fff; }
.profile-links a:hover { background: #edf1e9; }
.bio { font-size: 0.9375rem; line-height: 1.6; }
.bio p { margin-bottom: 0.625rem; }
.bio a { color: inherit; text-decoration-color: #9ba99c; }
.bio a:hover { color: var(--green); }
.recent-news { margin-top: 1.125rem; }
.recent-news-heading { display: flex; flex-wrap: wrap; align-items: baseline; gap: 0.875rem; margin-bottom: 0.5rem; }
.recent-news h2 { font-size: 1.125rem; margin: 0; }
.news-list { padding: 0; margin: 0; list-style: none; }
.news-list li { display: grid; grid-template-columns: 4.25rem minmax(0, 1fr); gap: 0.5rem; margin-bottom: 0.25rem; font-size: 0.875rem; line-height: 1.5; }
.news-list time { color: var(--muted); font-size: 0.6875rem; font-weight: 300; padding-top: 1px; white-space: nowrap; }
.news-more { display: inline-flex; align-items: center; font-size: 0.875rem; font-weight: 300; text-decoration: none; white-space: nowrap; }
.news-more:hover { text-decoration: underline; }
.content-section { padding: 2rem 0 2.125rem; background: white; }
.content-section:nth-of-type(odd) { background: var(--paper); }
.section-heading { margin-bottom: 1.125rem; padding-bottom: 0.75rem; border-bottom: 1px solid var(--rule); }
.section-heading h2 { margin: 0; color: var(--green); }
h2.section-heading { color: var(--green); }
#experience .section-heading h2, #patents .section-heading h2, #awards .section-heading h2 { color: var(--pink); }
.entry { --entry-padding-top: 1rem; padding: var(--entry-padding-top) 0 1rem; border-bottom: 1px solid var(--rule); }
.entry:first-child { --entry-padding-top: 0px; }
.entry:last-child { border-bottom: 0; padding-bottom: 0; }
.entry-title { margin-bottom: 0.3125rem; }
.entry-title a { color: inherit; }
.entry-title .entry-title-note { font-size: 0.8em; }
.entry-meta { color: var(--muted); font-size: 0.875rem; margin-bottom: 0.375rem; }
.entry-meta p { margin-bottom: 0.1875rem; }
.entry-detail { margin: 0 0 0.3125rem; font-size: 0.9375rem; }
#education .entry { display: grid; grid-template-columns: 12.5rem minmax(0, 1fr); column-gap: 1.5rem; }
.education-summary, .education-details { min-width: 0; }
.research-interests { padding: 0; margin: 0.1875rem 0 0; list-style: none; font-size: 0.9375rem; line-height: 1.35; }
.research-interests li { position: relative; padding-left: 0.875rem; margin: 0 0 0.125rem; }
.research-interests li::before { content: ""; position: absolute; left: 0; top: calc(.675em - 0.125rem); width: 0.25rem; height: 0.25rem; border-radius: 50%; background: #a6b9a0; }
.education-exchanges { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 2.5rem; padding-top: 1rem; }
#education .education-exchanges .entry { display: block; padding: 0; border: 0; min-width: 0; }
#education .entry-meta p:first-child { color: var(--ink); font-weight: 300; }
#experience .entry-meta { display: block; }
.experience-pair { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 2.5rem; padding-block: 1rem; border-bottom: 1px solid var(--rule); }
.experience-pair:last-child { padding-bottom: 0; border-bottom: 0; }
.experience-pair > .entry { min-width: 0; padding: 0; border: 0; }
.experience-role-line { color: var(--ink); }
.experience-role, .experience-dates { white-space: normal; }
.experience-location { color: var(--muted); }
.section-note { color: var(--muted); font-size: 0.8125rem; max-width: 53.75rem; margin-bottom: 1.125rem; line-height: 1.8; }
.publication { padding-left: 2.625rem; position: relative; }
.publication .entry-title { font-size: 1.125rem; }
.publication-code { position: absolute; left: 0; top: calc(var(--entry-padding-top) + 0.25rem); color: var(--green); font-size: 0.8125rem; font-weight: 500; letter-spacing: 0; }
#patents .publication-code { color: var(--pink); }
.publication .authors { font-size: 0.875rem; margin: 0.375rem 0 0; color: #4d5650; }
.publication .authors a { color: inherit; }
.publication .author-self { text-decoration: underline; text-underline-offset: 0.1875rem; text-decoration-thickness: 1px; }
.publication .entry-meta { margin-top: 0.375rem; }
.publication .entry-meta a { white-space: nowrap; }
.venue-filter-defs { position: absolute; overflow: hidden; pointer-events: none; }
.publication-venue { vertical-align: baseline; }
.venue-logo-end { margin-inline-start: 0.375em; white-space: nowrap; }
.venue-logo-link { display: inline-block; line-height: 0; vertical-align: var(--venue-logo-offset, baseline); }
/* cap height is the no-script fallback; JS measures actual glyphs and image ink. */
.venue-logo { display: block; width: auto; height: 0.75em; height: var(--venue-logo-height, 1cap); max-width: none; object-fit: contain; }
.venue-logo--dis { filter: url("#dis-logo-transparent"); }
#publications .publication { --publication-indent: 2.125rem; padding-left: var(--publication-indent); display: grid; grid-template-columns: minmax(0, 1fr); gap: 1.75rem; align-items: center; }
#publications .publication:has(> .publication-media) { grid-template-columns: minmax(0, 1fr) 15rem; }
.publication-copy { min-width: 0; position: relative; }
#publications .publication-code { top: 0.25rem; left: calc(-1 * var(--publication-indent)); }
.publication-media { margin: 0; width: 15rem; aspect-ratio: 16 / 9; }
.publication-teaser { display: block; width: 100%; height: 100%; border: 0; border-radius: 0; background: var(--white); }
.publication-teaser img { width: 100%; height: 100%; object-fit: contain; }
.publication-placeholder { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; border: 1px solid var(--rule); background: #f2f3ef; color: var(--muted); font-size: 0.875rem; font-weight: 300; }
.publication-media--under-review { height: 4.5rem; aspect-ratio: auto; }
.publication-placeholder[data-status="under-review"] { border: var(--media-border); border-radius: 0; background: var(--white); }
.service-group { padding: 0.85rem 0; border-bottom: 1px solid var(--rule); }
.service-group:first-child { padding-top: 0; }
.service-group:last-child { padding-bottom: 0; border: 0; }
.service-subheading { font-size: 0.875rem; color: var(--green); margin: 0.690625rem 0 0.31875rem; }
.compact-list { padding-left: 1.125rem; margin: 0.4375rem 0 0; font-size: 0.9375rem; }
.compact-list li { padding-left: 0.1875rem; margin-bottom: 0.4375rem; }
.compact-list li::marker { color: #a6b9a0; font-size: .75em; }
#awards .compact-list { list-style: none; padding-left: 0; }
#awards .compact-list li { padding: 0.371875rem 0; border-bottom: 1px solid var(--rule); margin: 0; }
#awards .compact-list li:last-child { border-bottom: 0; }
/* Use 85% of the previous line height and vertical item spacing in these sections. */
:is(#service, #awards, #talks) .section-body { line-height: 1.445; }
:is(#service, #talks) .entry-title { line-height: 1.275; margin-bottom: 0.265625rem; }
:is(#service, #awards) .compact-list { margin-top: 0.371875rem; }
#service .compact-list li { margin-bottom: 0.371875rem; }
#talks .entry { padding-top: calc(var(--entry-padding-top) * 0.85); padding-bottom: 0.85rem; }
#talks .entry:last-child { padding-bottom: 0; }
#talks .entry-meta { margin-bottom: 0.31875rem; }
/* Let the final section align below the header even when its content is short. */
#talks { min-height: max(0px, calc(100dvh - var(--site-header-height, calc(3.5rem + 1px)) - var(--site-footer-height, calc(5.5rem + 1px)))); }
.page-intro { padding-block: 2.125rem 1rem; }
.page-intro > .section-inner { width: 100%; }
.page-intro h1 { margin-bottom: 0; color: var(--green); }
.publications-section .publication-year { display: block; margin-top: 1.75rem; }
.publications-section .publication-year:first-child { margin-top: 0; }
.publications-section .section-note + .publication-year { margin-top: 0; }
.publication-year-heading { margin: 0 0 0.875rem; padding-bottom: 0.5rem; border-bottom: 1px solid var(--rule); color: var(--green); font-size: 1.25rem; line-height: 1.5; overflow-wrap: normal; }
.publication-year-items { min-width: 0; }
.publications-section .full-publication { padding-left: 0; }
.full-publication .entry-title { line-height: 1.45; }
.full-publication .entry-meta { margin-bottom: 0; line-height: 1.5; }
.project-entry { display: flex; gap: 2rem; align-items: center; --entry-padding-top: 1.1875rem; padding-bottom: 1.1875rem; }
.project-body { flex: 1; min-width: 0; }
.project-media { margin: 0; flex: 0 0 18.125rem; }
.project-image { flex: 0 0 18.125rem; width: 18.125rem; height: auto; max-height: 14.375rem; object-fit: contain; border-radius: 0.25rem; }
.news-month { padding-block: 1.125rem; }
.news-month .section-inner { display: grid; grid-template-columns: 10.625rem minmax(0, 1fr); gap: 1.875rem; align-items: start; }
.news-month h2.section-heading { border: 0; font-size: 1.125rem; margin-bottom: 0; padding-bottom: 0; }
.news-month .compact-list { margin: 0; padding: 0; list-style: none; }
.news-month .compact-list li { position: relative; padding-left: 0.875rem; margin-bottom: 0.3125rem; line-height: 1.6; }
.news-month .compact-list li:last-child { margin-bottom: 0; }
/* Center each bullet on the first text line, including wrapped news items. */
.news-month .compact-list li::before { content: ""; position: absolute; left: 0; top: calc(.8em - 0.125rem); width: 0.25rem; height: 0.25rem; border-radius: 50%; background: #a6b9a0; }
.site-footer { border-top: 1px solid var(--rule); background: var(--paper); }
.footer-inner { min-height: 5.5rem; display: flex; align-items: center; justify-content: space-between; gap: 1.25rem; color: var(--muted); font-size: 0.8125rem; }
.footer-inner a { text-decoration: none; }
@media (max-width: 56.25em) {
  .about-grid { grid-template-columns: 15.625rem minmax(0, 1fr); gap: 1.875rem; }
  .portrait { width: 15.625rem; height: 15.625rem; }
  #education .entry { grid-template-columns: 12rem minmax(0, 1fr); gap: 0 1rem; }
  .project-image { flex-basis: 14.375rem; width: 14.375rem; }
  .project-media { flex-basis: 14.375rem; }
  #publications .publication:has(> .publication-media) { grid-template-columns: minmax(0, 1fr) 11.875rem; gap: 1.375rem; }
  .publication-media { width: 11.875rem; }
}
@media (max-width: 42.5em) {
  :root { --page-gutter: 1.625rem; }
  html { scroll-padding-top: var(--site-header-height, calc(3.125rem + 1px)); }
  .header-inner { min-height: 3.125rem; padding-block: 0.5rem; gap: 0.5rem; }
  .identity, .main-nav a { font-size: 0.8125rem; padding: 0.1875rem 0.3125rem; }
  .main-nav { gap: 0.125rem; }
  .about-section { padding: 1.4375rem 0; }
  h1 { font-size: 1.9375rem; }
  h2 { font-size: 1.625rem; }
  .about-grid { grid-template-columns: 1fr; gap: 1.375rem; }
  .profile { width: 100%; }
  .portrait { width: 100%; height: auto; aspect-ratio: 1; max-width: 22.5rem; margin-inline: auto; }
  .profile-caption { padding-top: 0.6875rem; }
  .profile-links { margin-top: 0.5rem; }
  .recent-news { margin-top: 1.125rem; }
  .news-list li { gap: 0.375rem; margin-bottom: 0.375rem; }
  .content-section { padding: 1.5rem 0; }
  #education .entry { display: block; }
  #education .entry-meta { margin-bottom: 0.625rem; }
  .education-exchanges { gap: 1.25rem; padding-top: 0.875rem; }
  .experience-pair { grid-template-columns: minmax(0, 1fr); padding-block: 0.875rem; }
  .experience-pair > .entry + .entry { margin-top: 0.875rem; padding-top: 0.875rem; border-top: 1px solid var(--rule); }
  .entry { --entry-padding-top: 0.875rem; padding-bottom: 0.875rem; }
  #talks .entry { padding-bottom: 0.74375rem; }
  #talks .entry:last-child { padding-bottom: 0; }
  .entry-title { font-size: 1.125rem; }
  .publication { padding-left: 2rem; }
  .publication-code { font-size: 0.75rem; }
  .publication .entry-title { font-size: 1.0625rem; }
  #publications .publication:has(> .publication-media) { grid-template-columns: minmax(0, 1fr); gap: 0.75rem; }
  #publications .publication { --publication-indent: 1.625rem; }
  .publication-media { width: min(100%, 18.75rem); }
  .project-entry { flex-direction: column; align-items: stretch; gap: 0.875rem; }
  .project-image { flex-basis: auto; width: 100%; max-height: none; }
  .project-media { flex-basis: auto; }
  .news-month { padding-block: 0.875rem; }
  .news-month .section-inner { display: block; }
  .news-month h2.section-heading { padding-bottom: 0.4375rem; font-size: 1.0625rem; }
  .page-intro { padding-block: 1.4375rem 0.4375rem; }
  .publications-section .publication-year { margin-top: 1.5rem; }
  .publication-year-heading { font-size: 1.125rem; }
  .footer-inner { align-items: flex-start; justify-content: center; flex-direction: column; gap: 0.5rem; padding-block: 1.25rem; }
}
@media (max-width: 21.875em) {
  .header-inner { width: calc(100% - 1.95rem); gap: 0.375rem; }
  .identity, .main-nav a { padding-inline: 0.25rem; }
}
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }
@media print {
  html { font-size: 100%; }
  body { background: white; font-size: 10pt; }
  .site-frame { width: 100%; min-height: auto; border: 0; background: white; }
  #talks { min-height: 0; }
  .site-header { position: static; }
  .main-nav, .skip-link, .footer-inner a { display: none; }
  .header-inner, .section-inner, .footer-inner, .page-intro { width: 100%; }
  .content-section, .about-section { background: white !important; padding-block: 1.125rem; }
  .entry, .service-group, .project-entry { break-inside: avoid; }
  a { color: inherit; }
}
