:root{--paper: #fbfaf7;--paper-alt: #f4f2ed;--surface: #fffefb;--ink: #0f1d2b;--text: #2a3542;--muted: #5f6b7a;--line: #e4e1d9;--line-strong: #cfcac0;--accent: #0f6f74;--accent-strong: #0a5357;--accent-soft: rgba(15, 111, 116, .08);--accent-on-dark: #7cc4c0;--serif: "Fraunces", Georgia, "Times New Roman", serif;--sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--fs-xs: .8125rem;--fs-sm: .9375rem;--fs-base: 1.0625rem;--fs-lg: 1.25rem;--fs-xl: 1.5rem;--fs-h2: clamp(2rem, 1.25rem + 2.4vw, 2.75rem);--fs-name: clamp(2.5rem, 1.25rem + 3.6vw, 4rem);--container: 72rem;--gutter: clamp(1.25rem, 4vw, 3rem);--nav-h: 4rem;--radius: 6px;--ease: cubic-bezier(.2, .7, .2, 1)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{font-size:clamp(1rem,.5rem + .4167vw,1.1875rem);scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + 1rem);-webkit-text-size-adjust:100%;text-size-adjust:100%}body{font-family:var(--sans);font-size:var(--fs-base);line-height:1.7;color:var(--text);background:var(--paper);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}a{color:inherit;text-decoration:none}h1,h2,h3{text-wrap:balance}p{text-wrap:pretty}img{display:block;max-width:100%}ul,ol{list-style:none}::selection{background:#0f6f742e;color:var(--ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}.container{width:100%;max-width:calc(var(--container) + 2 * var(--gutter));margin-inline:auto;padding-inline:var(--gutter)}.skip-link{position:absolute;left:1rem;top:-3rem;z-index:100;padding:.5rem 1rem;background:var(--ink);color:var(--paper);font-size:var(--fs-sm);border-radius:var(--radius);transition:top .2s}.skip-link:focus{top:1rem}.mono-label{font-family:var(--mono);font-size:var(--fs-xs);font-weight:500;letter-spacing:.08em;text-transform:uppercase}.nav{position:sticky;top:0;z-index:50;background:#fbfaf7db;-webkit-backdrop-filter:saturate(1.4) blur(14px);backdrop-filter:saturate(1.4) blur(14px);border-bottom:1px solid var(--line)}.nav__inner{height:var(--nav-h);display:flex;align-items:center;justify-content:space-between;gap:2rem}.brand{display:inline-flex;align-items:center;gap:.65rem;color:var(--ink);font-family:var(--serif);font-size:1.25rem;font-weight:500;letter-spacing:-.01em;font-variation-settings:"opsz" 24;white-space:nowrap}.brand__mark{width:1.75rem;height:1.75rem;flex:none;color:var(--accent)}.nav__links{display:flex;gap:1.75rem}.nav__link{position:relative;padding-block:.5rem;font-size:.9375rem;font-weight:500;color:#4a5665;text-transform:capitalize;transition:color .2s}.nav__link:after{content:"";position:absolute;left:0;right:0;bottom:.2rem;height:1px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .3s var(--ease)}.nav__link:hover,.nav__link--active{color:var(--ink)}.nav__link:hover:after,.nav__link--active:after{transform:scaleX(1)}.nav__toggle{display:none;align-items:center;justify-content:center;width:2.75rem;height:2.75rem;margin-right:-.6rem;border:0;border-radius:var(--radius);background:none;color:var(--ink);cursor:pointer}.nav__toggle svg{width:1.5rem;height:1.5rem}.nav__mobile{display:none}.hero{padding-block:clamp(3rem,7vw,6.5rem) clamp(3.5rem,7vw,6rem);overflow:hidden}.hero__grid{display:grid;gap:clamp(2rem,5vw,4.5rem);align-items:center}.hero__eyebrow{display:flex;flex-wrap:wrap;gap:.35rem .9rem;color:var(--accent);margin-bottom:1.25rem}.hero__eyebrow span+span:before{content:"";display:inline-block;width:.9rem;height:1px;margin-right:.9rem;vertical-align:middle;background:var(--line-strong)}.hero__name{font-family:var(--serif);font-size:var(--fs-name);font-weight:400;line-height:1.02;letter-spacing:-.03em;color:var(--ink);font-variation-settings:"opsz" 144}.hero__name-suffix{margin-left:.3em;font-size:.4em;font-style:italic;font-weight:300;letter-spacing:0;color:var(--muted)}.hero__lede{max-width:32em;margin-top:1.5rem;font-family:var(--serif);font-size:clamp(1.1875rem,1.05rem + .3vw,1.3125rem);font-weight:350;line-height:1.5;color:var(--ink);font-variation-settings:"opsz" 36;text-wrap:pretty}.hero__bio{max-width:38em;margin-top:1rem;color:var(--muted)}.hero__links{display:flex;flex-wrap:wrap;gap:.625rem;margin-top:2rem}.pill{display:inline-flex;align-items:center;gap:.5rem;min-height:2.5rem;padding:.4rem 1rem;border:1px solid var(--line-strong);border-radius:999px;font-size:.875rem;font-weight:500;line-height:1.2;color:var(--ink);transition:border-color .2s,color .2s,background-color .2s}.pill svg{width:1rem;height:1rem;flex:none;color:var(--muted);transition:color .2s}.pill:hover{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-strong)}.pill:hover svg{color:var(--accent)}.pill--primary{border-color:var(--ink);background:var(--ink);color:var(--paper)}.pill--primary svg{color:currentColor}.pill--primary:hover{border-color:var(--accent);background:var(--accent);color:#fff}.pill--primary:hover svg{color:currentColor}.hero__stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin-top:2.75rem;border-top:1px solid var(--line)}.stat{display:flex;flex-direction:column-reverse;justify-content:flex-end;padding:1.25rem 1rem 0 0}.stat+.stat{padding-left:1.25rem;border-left:1px solid var(--line)}.stat__num{font-family:var(--serif);font-size:clamp(2rem,1.5rem + 1.5vw,2.75rem);font-weight:350;line-height:1;color:var(--ink);font-variation-settings:"opsz" 144;font-variant-numeric:lining-nums}.stat__label{margin-top:.6rem;color:var(--muted);font-weight:400;letter-spacing:.06em}.hero__figure{justify-self:center;width:min(100%,34rem)}.hero__visual{position:relative;aspect-ratio:1}.hero__mesh{-webkit-mask-image:radial-gradient(closest-side,#000 58%,transparent 100%);mask-image:radial-gradient(closest-side,#000 58%,transparent 100%)}.hero__portrait{position:absolute;left:50%;top:50%;width:calc(40% + .8rem + 2px);aspect-ratio:1;padding:.4rem;transform:translate(-50%,-50%);border:1px solid var(--accent);border-radius:50%;background:var(--paper);box-shadow:0 1.5rem 3rem -1.25rem #0f1d2b73}.hero__photo{width:100%;height:100%;border-radius:50%;background:#fff center / 108% no-repeat}.hero__caption{margin-top:.5rem;text-wrap:balance;text-align:center;font-family:var(--mono);font-size:var(--fs-xs);line-height:1.5;color:var(--muted)}.mesh{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;color:var(--accent)}.mesh__cell{fill:currentColor;fill-opacity:var(--o);stroke:currentColor;stroke-opacity:.34;stroke-width:.7;stroke-linejoin:round;vector-effect:non-scaling-stroke;transition:fill-opacity .6s ease}.mesh--interactive .mesh__cell:hover{fill-opacity:.42;transition-duration:.06s}.mesh--animate .mesh__cell{animation:cell-in 1s var(--ease) both;animation-delay:var(--d)}@keyframes cell-in{0%{opacity:0}}.section{padding-block:clamp(4rem,8vw,7rem);border-top:1px solid var(--line)}.section__grid{display:grid;gap:2.5rem}.section__body{min-width:0}.sh__index{display:flex;align-items:center;gap:.75rem;color:var(--accent)}.sh__index:after{content:"";width:2rem;height:1px;background:currentColor}.sh h2{margin-top:.75rem;font-family:var(--serif);font-size:var(--fs-h2);font-weight:400;line-height:1.1;letter-spacing:-.02em;color:var(--ink);font-variation-settings:"opsz" 96}.sh__sub{max-width:26em;margin-top:.75rem;font-size:var(--fs-sm);line-height:1.55;color:var(--muted)}.rule-list>*+*{border-top:1px solid var(--line)}.chips{display:flex;flex-wrap:wrap;gap:.4rem}.chip{padding:.2rem .6rem;border:1px solid var(--line);border-radius:4px;background:var(--surface);font-family:var(--mono);font-size:var(--fs-xs);line-height:1.5;color:var(--text)}.text-link{display:inline-flex;align-items:baseline;gap:.3rem;border-bottom:1px solid transparent;font-size:var(--fs-sm);font-weight:500;color:var(--accent);transition:border-color .2s,color .2s}.text-link:hover{border-bottom-color:currentColor;color:var(--accent-strong)}.proj{padding-block:2.25rem}.proj:first-child{padding-top:0}.proj:last-child{padding-bottom:0}.proj__head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.35rem 1.5rem}.proj__name{font-family:var(--serif);font-size:var(--fs-xl);font-weight:450;line-height:1.25;letter-spacing:-.01em;color:var(--ink);font-variation-settings:"opsz" 48}.proj__name a{transition:color .2s}.proj__name a:hover{color:var(--accent)}.proj__tag{color:var(--muted);font-weight:400}.proj__desc{max-width:46em;margin-top:.85rem}.proj__tech{margin-top:1.25rem}.proj__links{display:flex;flex-wrap:wrap;gap:.5rem 1.75rem;margin-top:1.25rem}.entry{display:grid;gap:.35rem 2rem;padding-block:1.9rem}.entry:first-child{padding-top:0}.entry:last-child{padding-bottom:0}.entry__period{padding-top:.35rem;font-family:var(--mono);font-size:var(--fs-sm);line-height:1.5;color:var(--muted);font-variant-numeric:tabular-nums}.entry__title{font-family:var(--serif);font-size:1.375rem;font-weight:450;line-height:1.3;letter-spacing:-.005em;color:var(--ink);font-variation-settings:"opsz" 36}.entry__org{display:flex;flex-wrap:wrap;align-items:center;gap:.25rem .55rem;margin-top:.3rem;font-size:var(--fs-sm);font-weight:500;line-height:1.5;color:var(--accent)}.entry__org a:hover{text-decoration:underline;text-underline-offset:3px}.entry__org--plain{color:var(--text)}.entry__org--plain:has(.flag){flex-wrap:nowrap;align-items:flex-start}.entry__note{margin-top:.5rem;color:var(--muted);font-weight:400}.entry__desc{max-width:44em;margin-top:.7rem}.flag{width:1.375rem;height:auto;flex:none;margin-top:.3em;border-radius:2px;box-shadow:0 0 0 1px #0f1d2b1a}.awards{display:grid;gap:1.25rem}.award{display:flex;flex-direction:column;height:100%;padding:1.75rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.award__icon{width:2.5rem;height:2.5rem;margin-bottom:1.25rem;color:var(--accent)}.award__date{color:var(--muted);font-weight:400}.award__title{margin-top:.4rem;font-family:var(--serif);font-size:var(--fs-lg);font-weight:450;line-height:1.35;color:var(--ink);font-variation-settings:"opsz" 36}.award__org{margin-top:.6rem;font-size:var(--fs-sm);line-height:1.55;color:var(--muted)}.tabs{display:flex;flex-wrap:wrap;gap:0 2rem;margin-bottom:2.25rem;border-bottom:1px solid var(--line)}.tab{position:relative;display:inline-flex;align-items:baseline;gap:.45rem;padding:.8rem 0;border:0;background:none;font-family:var(--sans);font-size:var(--fs-sm);font-weight:500;line-height:1.3;color:var(--muted);cursor:pointer;transition:color .2s}.tab:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .3s var(--ease)}.tab:hover,.tab--active{color:var(--ink)}.tab--active:after{transform:scaleX(1)}.tab__count{font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted)}.tab--active .tab__count{color:var(--accent)}.pub{display:grid;gap:.25rem 2rem;padding-block:1.6rem}.pub:first-child{padding-top:0}.pub__year{padding-top:.2rem;font-family:var(--mono);font-size:var(--fs-sm);font-weight:500;line-height:1.5;color:var(--accent)}.pub__title{font-family:var(--serif);font-size:1.1875rem;font-weight:450;line-height:1.4;color:var(--ink);font-variation-settings:"opsz" 24}.pub__title a{transition:color .2s}.pub__title a:hover{color:var(--accent)}.pub__authors{margin-top:.5rem;font-size:var(--fs-sm);line-height:1.55;color:var(--muted)}.author-text--highlight{font-weight:600;color:var(--ink)}.pub__venue{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem 1rem;margin-top:.4rem;font-size:var(--fs-sm);line-height:1.5}.pub__venue-name{font-family:var(--serif);font-size:1.0625rem;font-style:italic;color:var(--text)}.pub__link{font-family:var(--mono);font-size:var(--fs-xs);font-weight:500;letter-spacing:.04em;color:var(--accent);border-bottom:1px solid transparent;transition:border-color .2s}.pub__link:hover{border-bottom-color:currentColor}.skill-row{display:grid;gap:.6rem 2rem;padding-block:1.35rem}.skill-row:first-child{padding-top:0}.skill-row:last-child{padding-bottom:0}.skill-row__label{padding-top:.25rem;color:var(--muted);font-weight:400}.langs{display:grid;grid-template-columns:repeat(auto-fill,minmax(12rem,1fr));gap:.65rem 2.5rem}.lang{display:flex;align-items:center;justify-content:space-between;gap:1rem;font-size:var(--fs-sm);color:var(--ink)}.level{display:inline-flex;gap:3px}.level i{width:.9rem;height:3px;border-radius:1px;background:var(--line-strong)}.level i.on{background:var(--accent)}.footer{position:relative;overflow:hidden;padding-block:clamp(4rem,8vw,6.5rem) 2rem;background:var(--ink);color:#b9c3cd}.footer__mesh{color:var(--accent-on-dark);-webkit-mask-image:linear-gradient(to left,#000 0%,rgba(0,0,0,.6) 35%,transparent 75%);mask-image:linear-gradient(to left,#000 0%,rgba(0,0,0,.6) 35%,transparent 75%)}.footer__mesh .mesh__cell{stroke-opacity:.16}.footer__inner{position:relative}.footer__eyebrow{color:var(--accent-on-dark)}.footer__title{max-width:18em;margin-top:.9rem;font-family:var(--serif);font-size:clamp(2rem,1.25rem + 2.4vw,3rem);font-weight:350;line-height:1.15;letter-spacing:-.02em;color:#fff;font-variation-settings:"opsz" 96}.footer__email{display:inline-block;margin-top:1.5rem;border-bottom:1px solid rgba(124,196,192,.4);font-family:var(--serif);font-size:clamp(1.25rem,1rem + .8vw,1.5rem);color:var(--accent-on-dark);transition:color .2s,border-color .2s;overflow-wrap:anywhere}.footer__email:hover{border-bottom-color:#fff;color:#fff}.footer__links{display:flex;flex-wrap:wrap;gap:.75rem 2rem;margin-top:2.75rem}.footer__links a{font-size:var(--fs-sm);font-weight:500;color:#e6ebef;transition:color .2s}.footer__links a:hover{color:var(--accent-on-dark)}.footer__bottom{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem 2rem;margin-top:3.5rem;padding-top:1.5rem;border-top:1px solid rgba(255,255,255,.1);font-family:var(--mono);font-size:var(--fs-xs);line-height:1.6;color:#8f9cab}.footer__bottom a{color:#c4ccd5}.footer__bottom a:hover{color:var(--accent-on-dark)}@media(min-width:1100px){.section__grid{grid-template-columns:14rem minmax(0,1fr);gap:3rem 5rem}.sh-wrap{position:sticky;top:calc(var(--nav-h) + 2.5rem);align-self:start}}@media(min-width:960px){.hero__grid{grid-template-columns:minmax(0,1.12fr) minmax(0,.88fr)}}@media(min-width:960px)and (max-width:1279px){.hero__figure{align-self:start;margin-top:3rem}}@media(min-width:641px){.entry{grid-template-columns:10rem minmax(0,1fr)}.pub{grid-template-columns:4.5rem minmax(0,1fr)}.pub__year--repeat{visibility:hidden}.awards{grid-template-columns:repeat(2,minmax(0,1fr))}.skill-row{grid-template-columns:12rem minmax(0,1fr)}}@media(max-width:959px){.nav__links{display:none}.nav__toggle{display:inline-flex}.nav__mobile{display:block;max-height:0;overflow:hidden;visibility:hidden;border-top:1px solid transparent;transition:max-height .35s var(--ease),visibility 0s linear .35s}.nav__mobile--open{max-height:34rem;visibility:visible;border-top-color:var(--line);transition:max-height .35s var(--ease)}.nav__mobile-list{padding-block:.5rem 1.25rem}.nav__mobile-link{display:flex;align-items:baseline;gap:1rem;padding-block:.7rem;font-family:var(--serif);font-size:1.375rem;line-height:1.3;color:var(--ink);text-transform:capitalize}.nav__mobile-link+.nav__mobile-link{border-top:1px solid var(--line)}.nav__mobile-index{width:1.5rem;font-family:var(--mono);font-size:var(--fs-xs);color:var(--muted)}.nav__mobile-link--active{color:var(--accent)}.hero{padding-top:2rem}.hero__figure{order:-1;width:min(100%,22rem)}}@media(max-width:640px){:root{--nav-h: 3.5rem}.hero{padding-top:1.5rem}.hero__figure{width:min(100%,20rem)}.hero__portrait{width:calc(46% + .8rem + 2px)}.hero__eyebrow{flex-direction:column;gap:.2rem}.hero__eyebrow span+span:before{display:none}.hero__stats{grid-template-columns:repeat(2,minmax(0,1fr));border-top:0}.stat,.stat+.stat{padding:1rem 0;border-top:1px solid var(--line);border-left:0}.stat:nth-child(2n){padding-left:1.25rem;border-left:1px solid var(--line)}.pub__year{padding-top:0}.entry__period{padding-top:0;font-size:var(--fs-xs)}.award{padding:1.5rem}.tabs{gap:0 1.5rem}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-delay:0s!important;transition-duration:.01ms!important}}
