@font-face {
  font-family:'Source Sans 3';
  font-style:normal;
  font-weight:400 600;
  font-display:swap;
  src:url('assets/fonts/source-sans-3.woff2') format('woff2')
}

@font-face {
  font-family:'Source Serif 4';
  font-style:normal;
  font-weight:400 600;
  font-display:swap;
  src:url('assets/fonts/source-serif-4.woff2') format('woff2')
}

:root {
  color-scheme:light;
  --paper:#fdfcf9;
  --ink:#242823;
  --secondary:#60665e;
  --muted:#70766b;
  --accent:#7e342e;
  --line:#d9dbd3;
  --wash:#f1f1eb;
  --serif:'Source Serif 4',Georgia,serif;
  --sans:'Source Sans 3',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --width:1040px
}

*,*::before,*::after {
  box-sizing:border-box
}

html {
  scroll-behavior:smooth;
  scroll-padding-top:28px
}

body {
  margin:0;
  background:var(--paper);
  color:var(--ink);
  font:17px/1.65 var(--sans);
  -webkit-font-smoothing:antialiased
}

::selection {
  background:#e8ded5;
  color:var(--ink)
}

a {
  color:var(--accent);
  text-decoration-thickness:1px;
  text-underline-offset:4px
}

a:hover {
  color:#51231f
}

button,input {
  font:inherit
}

button {
  cursor:pointer
}

a,button,summary {
  -webkit-tap-highlight-color:transparent
}

:focus-visible {
  outline:2px solid var(--accent);
  outline-offset:5px
}

img,svg {
  display:block;
  max-width:100%
}

button,a,p,h1,h2,h3,li,dd {
  overflow-wrap:break-word
}

h1,h2,h3,p,ul,ol,dl {
  margin:0
}

h1,h2,h3 {
  font-family:var(--serif);
  font-weight:400;
  text-wrap:balance
}

h1 {
  font-size:clamp(42px,5.2vw,64px);
  line-height:1.12;
  letter-spacing:-2px
}

h2 {
  font-size:clamp(28px,3.1vw,36px);
  line-height:1.25;
  letter-spacing:-.7px
}

h3 {
  font-size:25px;
  line-height:1.35;
  letter-spacing:-.35px
}

[hidden] {
  display:none!important
}

.wrap {
  width:min(var(--width),calc(100% - 80px));
  margin-inline:auto
}

/* Shared navigation remains usable without JavaScript. */
.skip-link {
  position:fixed;
  z-index:10;
  inset:12px auto auto 12px;
  transform:translateY(-180%);
  padding:10px 18px;
  background:var(--ink);
  color:white
}

.skip-link:focus {
  transform:none
}

.site-header {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:32px;
  min-height:100px;
  border-bottom:1px solid var(--line)
}

.wordmark {
  font:24px/1.2 var(--serif);
  letter-spacing:-.7px;
  color:var(--ink);
  text-decoration:none;
  white-space:nowrap
}

.site-nav {
  display:flex;
  align-items:center;
  gap:29px
}

.site-nav a {
  display:block;
  padding:14px 0 10px;
  color:var(--secondary);
  font-size:15px;
  text-decoration:none;
  border-bottom:1px solid transparent
}

.site-nav a:hover,.site-nav a[aria-current='page'] {
  color:var(--ink);
  border-bottom-color:var(--accent)
}

.menu-toggle {
  display:none;
  border:0;
  background:none;
  color:var(--ink);
  padding:10px 0 10px 15px
}

/* The homepage uses open editorial sections, rather than a grid of cards. */
.hero {
  display:grid;
  grid-template-columns:minmax(0,1fr) 228px;
  gap:60px;
  padding:76px 0 64px
}

.hero h1 {
  margin-bottom:15px
}

.hero .lead {
  font:29px/1.35 var(--serif);
  letter-spacing:-.6px;
  margin-bottom:24px;
  max-width:620px
}

.intro-copy {
  max-width:660px;
  color:var(--secondary)
}

.intro-copy p+p {
  margin-top:15px
}

.hero-note {
  align-self:stretch;
  border-left:1px solid var(--line);
  padding-left:30px;
  display:flex;
  flex-direction:column;
  justify-content:center;
  gap:12px
}

.hero-note h2 {
  font-size:20px;
  letter-spacing:-.2px
}

.hero-note ul {
  padding:0;
  list-style:none;
  color:var(--secondary);
  font-size:16px;
  line-height:1.95
}

.hero-note .education-note {
  border-top:1px solid var(--line);
  padding-top:17px;
  margin-top:8px;
  font-size:14px;
  line-height:1.6;
  color:var(--muted)
}

.link-row {
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:10px 24px;
  font-size:15px
}

.hero .link-row {
  margin-top:27px;
  font-size:16px
}

.section {
  padding:42px 0;
  border-top:1px solid var(--line)
}

.section-heading {
  display:flex;
  justify-content:space-between;
  align-items:baseline;
  gap:20px;
  margin-bottom:30px
}

.section-heading>a {
  font-size:15px;
  white-space:nowrap
}

.research-item {
  display:grid;
  grid-template-columns:40% minmax(0,1fr);
  gap:34px;
  align-items:center;
  padding:31px 0
}

.research-item+.research-item {
  border-top:1px solid var(--line)
}

.research-item:first-of-type {
  padding-top:0
}

.research-figure {
  margin:0;
  padding-right:10px
}

.research-figure img {
  width:100%;
  height:auto
}

.research-item h3 {
  margin:7px 0 10px;
  font-size:25px
}

.research-item h3 a {
  color:var(--ink);
  text-decoration:none
}

.research-item h3 a:hover {
  color:var(--accent)
}

.venue {
  font-size:14px;
  color:var(--muted)
}

.research-description {
  color:var(--secondary);
  line-height:1.6
}

.authors {
  font-size:14px;
  color:var(--muted);
  margin-top:11px
}

.me {
  color:var(--secondary);
  text-decoration:underline;
  text-underline-offset:3px;
  text-decoration-color:#acafa4
}

.research-item .link-row {
  margin-top:12px
}

.software-grid {
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:45px
}

.software-grid article+article {
  border-left:1px solid var(--line);
  padding-left:45px
}

.software-grid h3 {
  margin-bottom:11px
}

.software-grid p {
  color:var(--secondary);
  font-size:16px
}

.software-grid .link-row {
  margin-top:17px
}

.news-list {
  list-style:none;
  padding:0
}

.news-list li {
  display:grid;
  grid-template-columns:95px minmax(0,1fr);
  gap:25px;
  padding:11px 0;
  color:var(--secondary);
  font-size:16px
}

.news-list time {
  color:var(--muted);
  font-size:14px;
  padding-top:2px
}

.news-list strong {
  font-weight:600;
  color:var(--ink)
}

.news-archive {
  margin-top:18px
}

summary {
  width:fit-content;
  color:var(--accent);
  cursor:pointer;
  font-size:15px
}

details[open]>summary {
  margin-bottom:14px
}

.site-footer {
  border-top:1px solid var(--line);
  padding:35px 0 30px;
  margin-top:32px
}

.footer-top,.footer-bottom {
  display:flex;
  align-items:baseline;
  justify-content:space-between;
  gap:24px
}

.footer-top p {
  font:26px/1.3 var(--serif);
  letter-spacing:-.4px
}

.footer-bottom {
  margin-top:26px;
  color:var(--muted);
  font-size:13px
}

/* Bibliography and research record. */
.page-heading {
  padding:68px 0 40px
}

.page-heading p {
  color:var(--secondary);
  max-width:690px;
  margin-top:20px;
  font-size:19px
}

.publication-filters {
  display:flex;
  gap:26px;
  flex-wrap:wrap;
  margin-bottom:38px
}

.filter-button {
  background:none;
  border:0;
  border-bottom:1px solid transparent;
  padding:8px 0;
  color:var(--secondary);
  font-size:15px
}

.filter-button[aria-pressed='true'] {
  color:var(--accent);
  border-bottom-color:var(--accent)
}

.publication-group+.publication-group {
  margin-top:48px
}

.publication-group>h2 {
  font-size:27px;
  margin-bottom:24px
}

.publication {
  display:grid;
  grid-template-columns:65px minmax(0,1fr);
  gap:30px;
  padding:27px 0;
  border-top:1px solid var(--line)
}

.publication>time {
  color:var(--muted);
  font-size:15px;
  padding-top:3px
}

.publication h3 {
  font-size:23px;
  max-width:890px
}

.publication h3 a {
  color:var(--ink);
  text-decoration:none
}

.publication h3 a:hover {
  color:var(--accent)
}

.publication .authors {
  margin-top:9px;
  font-size:15px
}

.publication .venue {
  margin-top:5px
}

.publication .link-row {
  margin-top:12px
}

.paper-details {
  margin-top:12px
}

.paper-details p {
  margin-top:10px;
  color:var(--secondary);
  max-width:820px;
  font-size:16px
}

.citation {
  margin-top:13px
}

.citation pre {
  margin:10px 0;
  background:var(--wash);
  padding:19px;
  border-left:2px solid var(--line);
  font:13px/1.65 ui-monospace,monospace;
  white-space:pre-wrap;
  overflow-wrap:anywhere
}

.text-button {
  padding:0;
  border:0;
  border-bottom:1px solid var(--accent);
  color:var(--accent);
  background:none;
  font-size:14px
}

.copy-status {
  font-size:14px;
  color:var(--secondary);
  margin-left:14px
}

.filter-status {
  font-size:14px;
  color:var(--muted);
  margin:-23px 0 25px
}

.experience-section {
  padding-bottom:40px
}

.experience-section+.experience-section {
  padding-top:32px;
  border-top:1px solid var(--line)
}

.experience-section>h2 {
  margin-bottom:26px
}

.exp {
  padding:29px 0;
  border-top:1px solid var(--line)
}

.exp .head {
  display:flex;
  justify-content:space-between;
  gap:30px;
  align-items:baseline
}

.exp .where {
  font-size:23px
}

.exp .when {
  color:var(--muted);
  font-size:14px;
  flex:0 0 auto
}

.exp .what {
  margin:9px 0 14px;
  color:var(--secondary);
  font-size:15px
}

.exp ul {
  padding-left:19px;
  color:var(--secondary);
  max-width:875px;
  font-size:16px
}

.exp li+li {
  margin-top:7px
}

.project {
  display:grid;
  grid-template-columns:220px minmax(0,1fr);
  gap:50px;
  padding:36px 0;
  border-top:1px solid var(--line)
}

.project h2 {
  font-size:27px
}

.project .tech {
  display:block;
  font-size:14px;
  color:var(--muted);
  margin-top:13px;
  line-height:1.6
}

.project .link-row {
  margin-top:22px
}

.project-description {
  font-size:19px;
  color:var(--ink);
  margin-bottom:20px
}

.project dl {
  display:grid;
  grid-template-columns:105px minmax(0,1fr);
  gap:10px 22px;
  font-size:16px
}

.project dt {
  font-weight:600
}

.project dd {
  margin:0;
  color:var(--secondary)
}

.awards {
  list-style:none;
  padding:0
}

.awards li {
  padding:24px 0;
  border-top:1px solid var(--line);
  color:var(--secondary)
}

.awards b {
  font-weight:600;
  color:var(--ink)
}

.honors-section+.honors-section {
  margin-top:48px
}

.honors-section h2 {
  margin-bottom:22px
}

.sr-only {
  position:absolute;
  width:1px;
  height:1px;
  padding:0;
  margin:-1px;
  overflow:hidden;
  clip-path:inset(50%);
  white-space:nowrap;
  border:0
}

@media(max-width:900px) {
  .site-nav {
    gap:21px
  }
  .hero {
    grid-template-columns:minmax(0,1fr) 190px;
    gap:32px
  }
  .hero-note {
    padding-left:24px
  }
  .hero .lead {
    font-size:26px
  }
  .research-item {
    grid-template-columns:36% minmax(0,1fr);
    gap:25px
  }
  .research-item h3 {
    font-size:23px
  }
  .exp .head {
    display:block
  }
  .exp .when {
    display:block;
    margin-top:7px
  }
}

@media(max-width:640px) {
  .wrap {
    width:calc(100% - 40px)
  }
  body {
    font-size:16px
  }
  h1 {
    letter-spacing:-1.5px
  }
  .site-header {
    min-height:78px;
    flex-wrap:wrap;
    gap:0 20px;
    padding:18px 0
  }
  .wordmark {
    font-size:23px
  }
  .site-nav {
    width:100%;
    gap:4px 23px;
    flex-wrap:wrap;
    padding-top:10px
  }
  .site-nav a {
    font-size:15px;
    padding-block:9px
  }
  .js .menu-toggle {
    display:flex;
    align-items:center;
    gap:10px
  }
  .js .site-nav:not(.is-open) {
    display:none
  }
  .hero {
    grid-template-columns:1fr;
    gap:31px;
    padding:45px 0 39px
  }
  .hero .lead {
    font-size:25px;
    margin-bottom:21px
  }
  .hero-note {
    border-left:0;
    border-top:1px solid var(--line);
    padding:23px 0 0;
    gap:8px
  }
  .hero-note h2 {
    font-size:20px
  }
  .hero-note ul {
    display:flex;
    flex-wrap:wrap;
    gap:0 16px;
    font-size:15px
  }
  .hero-note .education-note {
    border:0;
    padding:0;
    margin:2px 0 0
  }
  .section {
    padding:32px 0
  }
  .section-heading {
    align-items:flex-start;
    gap:13px;
    flex-wrap:wrap;
    margin-bottom:25px
  }
  .research-item {
    grid-template-columns:1fr;
    gap:20px;
    padding:30px 0
  }
  .research-figure {
    max-width:430px;
    padding-right:0
  }
  .research-item h3 {
    font-size:25px
  }
  .software-grid {
    grid-template-columns:1fr;
    gap:28px
  }
  .software-grid article+article {
    border-left:0;
    border-top:1px solid var(--line);
    padding:27px 0 0
  }
  .news-list li {
    grid-template-columns:75px minmax(0,1fr);
    gap:16px
  }
  .page-heading {
    padding:43px 0 30px
  }
  .page-heading p {
    font-size:17px;
    margin-top:17px
  }
  .publication {
    grid-template-columns:1fr;
    gap:7px;
    padding:24px 0
  }
  .publication h3 {
    font-size:23px
  }
  .publication-filters {
    gap:22px
  }
  .project {
    grid-template-columns:1fr;
    gap:20px;
    padding:29px 0
  }
  .project .tech {
    margin-top:8px
  }
  .project .link-row {
    margin-top:10px
  }
  .project dl {
    grid-template-columns:1fr;
    gap:5px
  }
  .project dd+dt {
    margin-top:11px
  }
  .footer-top,.footer-bottom {
    align-items:flex-start;
    flex-direction:column;
    gap:15px
  }
  .footer-top .link-row {
    gap:10px 23px
  }
  .site-footer {
    margin-top:22px
  }
}

@media(prefers-reduced-motion:reduce) {
  html {
    scroll-behavior:auto
  }
}

@media print {
  :root {
    --paper:#fff;
    --ink:#000;
    --secondary:#333
  }
  body {
    font-size:11pt
  }
  .wrap {
    width:100%
  }
  .site-header,.site-footer,.skip-link,.publication-filters,.filter-status,.copy-button {
    display:none!important
  }
  .page-heading,.hero {
    padding-top:0
  }
  h1 {
    font-size:30pt
  }
  .publication,.exp,.project,.research-item {
    break-inside:avoid
  }
  .publication-group[hidden],.publication[hidden] {
    display:block!important
  }
  a {
    color:inherit
  }
}
