@font-face{font-family:"source serif 4";src:url(../fonts/source-serif-4-roman.woff2)format("woff2");font-weight:200 900;font-style:normal;font-display:swap;unicode-range:U+0-24F,U+259,U+1E??,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+FEFF,U+FFFD}@font-face{font-family:"source serif 4";src:url(../fonts/source-serif-4-italic.woff2)format("woff2");font-weight:200 900;font-style:italic;font-display:swap;unicode-range:U+0-24F,U+259,U+1E??,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+FEFF,U+FFFD}:root{--bg:#fdfdfc;--surface:#f4f3ef;--text:#1f2328;--muted:#5c636b;--border:#e3e1da;--accent:#1240c0;--accent-hover:#0f36a3;--accent-2:#0b6b63;--on-accent:#ffffff;--code-bg:#f4f3ef;--selection:#d5ddf8;--shadow:0 6px 20px rgba(23, 25, 28, .07);--accent-wash:color-mix(in oklab, var(--accent)  7%, var(--bg));--accent-soft:color-mix(in oklab, var(--accent) 14%, var(--bg));--accent-line:color-mix(in oklab, var(--accent) 32%, var(--bg));--accent-glow:color-mix(in oklab, var(--accent) 40%, transparent);--chip-bg:color-mix(in oklab, var(--accent-2) 26%, var(--bg));--chip-edge:color-mix(in oklab, var(--accent-2) 60%, var(--bg));--hero-from:color-mix(in oklab, var(--accent)   20%, var(--bg));--hero-mid:color-mix(in oklab, var(--accent)    7%, var(--bg));--hero-to:color-mix(in oklab, var(--accent-2) 18%, var(--bg));--page:52rem;--measure:var(--page);--font-body:"Source Serif 4", Charter, Georgia, "Iowan Old Style", "Times New Roman", serif;--font-ui:system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-mono:ui-monospace, "SFMono-Regular", "Menlo", "Consolas", monospace;--step--2:clamp(0.75rem, 0.73rem + 0.10vw, 0.80rem);--step--1:clamp(0.84rem, 0.81rem + 0.14vw, 0.92rem);--step-0:clamp(1.00rem, 0.97rem + 0.18vw, 1.09rem);--step-1:clamp(1.13rem, 1.08rem + 0.26vw, 1.27rem);--step-2:clamp(1.33rem, 1.24rem + 0.42vw, 1.55rem);--step-3:clamp(1.65rem, 1.48rem + 0.80vw, 2.15rem);--line:1.65;--space:1.5rem;--tap:2.75rem}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#18191a;--surface:#202224;--text:#e7e6e3;--muted:#9ba1a7;--border:#2e3134;--accent:#7c9fff;--accent-hover:#a3bcff;--accent-2:#4dc4b8;--on-accent:#0e1620;--code-bg:#202224;--selection:#1c2a55;--shadow:0 6px 20px rgba(0, 0, 0, .45);--hero-from:color-mix(in oklab, var(--accent)   30%, var(--bg));--hero-mid:color-mix(in oklab, var(--accent)   12%, var(--bg));--hero-to:color-mix(in oklab, var(--accent-2) 26%, var(--bg))}}:root[data-theme=dark]{--bg:#18191a;--surface:#202224;--text:#e7e6e3;--muted:#9ba1a7;--border:#2e3134;--accent:#7c9fff;--accent-hover:#a3bcff;--accent-2:#4dc4b8;--on-accent:#0e1620;--code-bg:#202224;--selection:#1c2a55;--shadow:0 6px 20px rgba(0, 0, 0, .45);--hero-from:color-mix(in oklab, var(--accent)   30%, var(--bg));--hero-mid:color-mix(in oklab, var(--accent)   12%, var(--bg));--hero-to:color-mix(in oklab, var(--accent-2) 26%, var(--bg))}*,*::before,*::after{box-sizing:border-box}body::before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(42% 52% at 16% 6%,var(--accent-soft),transparent 70%),linear-gradient(135deg,var(--hero-from) 0%,var(--hero-mid) 48%,var(--hero-to) 100%)}html{-webkit-text-size-adjust:100%;background:var(--bg)}body{margin:0;background:0 0;color:var(--text);font-family:var(--font-body);font-size:var(--step-0);line-height:var(--line);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}[hidden]{display:none!important}::selection{background:var(--selection)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}.wrap{max-width:var(--page);margin-inline:auto;padding-inline:1.25rem}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover);text-decoration:underline;text-underline-offset:2px}.skip-link{position:absolute;left:-999px;top:0;z-index:100;background:var(--accent);color:var(--on-accent);padding:.5rem .75rem}.skip-link:focus{left:.5rem;top:.5rem}.site-header{border-bottom:1px solid var(--border);background:color-mix(in oklab,var(--bg) 78%,transparent);position:sticky;top:0;z-index:20;backdrop-filter:saturate(140%)blur(10px)}.site-header .wrap{display:flex;align-items:center;gap:.75rem;padding-block:.5rem;position:relative}.site-title{font-family:var(--font-ui);font-weight:650;font-size:var(--step-0);color:var(--text);letter-spacing:-.01em}.site-title:hover{text-decoration:none;color:var(--accent)}.site-nav{font-family:var(--font-ui);order:4}.site-nav ul{list-style:none;margin:0;padding:0}.site-nav a{color:var(--muted);font-size:var(--step--1)}.site-nav a:hover{color:var(--accent);text-decoration:none}.site-nav a[aria-current=page]{color:var(--text);font-weight:600}.nav-cv{color:var(--accent)!important}.nav-toggle{display:inline-grid;place-items:center;min-width:var(--tap);min-height:var(--tap);background:0 0;border:0;color:var(--text);font-size:1.4rem;line-height:1;cursor:pointer}.site-nav>ul{display:none;position:absolute;top:calc(100% + .5rem);right:1.25rem;flex-direction:column;gap:.15rem;z-index:30;background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:.5rem;min-width:12rem;box-shadow:var(--shadow)}body.nav-open .site-nav>ul{display:flex}.site-nav>ul>li>a{display:block;padding:.6rem .75rem;border-radius:8px;min-height:var(--tap);line-height:1.6}.site-nav>ul>li>a:hover{background:var(--surface)}.site-nav .caret{display:none}.site-nav .subnav{display:flex;flex-direction:column;padding:0 0 .25rem .75rem;margin:0}.site-nav .subnav a{display:block;padding:.5rem .75rem;border-radius:8px;min-height:var(--tap);line-height:1.7}.site-nav .subnav a:hover{background:var(--surface);color:var(--accent)}.theme-toggle{order:3;margin-left:auto;width:var(--tap);height:var(--tap);border-radius:50%;border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;display:inline-grid;place-items:center}.theme-toggle__icon{width:1rem;height:1rem;border-radius:50%;background:radial-gradient(circle at 65% 35%,var(--bg) 0 42%,transparent 43%),var(--text)}@media(hover:hover) and (min-width:56rem){.site-header .wrap{gap:1rem;padding-block:.75rem}.nav-toggle{display:none}.site-nav{order:4;margin-left:0}.theme-toggle{order:3;margin-left:auto}.site-nav>ul{display:flex;flex-direction:row;align-items:center;gap:1.1rem;position:static;background:0 0;border:0;border-radius:0;padding:0;min-width:0;box-shadow:none}.site-nav>ul>li>a{display:inline;padding:0;min-height:0;line-height:inherit}.site-nav>ul>li>a:hover{background:0 0}.site-nav .caret{display:inline;font-size:.7em}.site-nav .has-sub{position:relative}.site-nav .has-sub::after{content:"";position:absolute;inset-inline:0;top:100%;height:.7rem}.site-nav .subnav{display:none;position:absolute;right:0;top:calc(100% + .55rem);margin:0;gap:.1rem;min-width:max-content;z-index:30;background:var(--bg);border:1px solid var(--border);border-radius:10px;padding:.35rem;box-shadow:var(--shadow)}.site-nav .subnav a{padding:.4rem .7rem;min-height:0;line-height:inherit;white-space:nowrap}.site-nav .has-sub:hover .subnav,.site-nav .has-sub:focus-within .subnav{display:flex}}.content{padding-block:2.5rem 3.5rem}.content:has(>.hero){padding-top:0}.content>.wrap,.prose{max-width:var(--measure)}.prose{margin-inline:auto;padding-inline:1.25rem}h1,h2,h3,h4{font-family:var(--font-ui);line-height:1.2;letter-spacing:-.02em;text-wrap:balance}h1{font-size:var(--step-3);margin:0 0 .5rem}h2{font-size:var(--step-2);margin:2.4rem 0 .75rem}h3{font-size:var(--step-1);margin:1.8rem 0 .5rem}p{text-wrap:pretty}p,ul,ol{margin:0 0 var(--space)}ul,ol{padding-left:1.3rem}li{margin-bottom:.3rem}blockquote{margin:var(--space)0;padding:.2rem 1.1rem;border-left:3px solid var(--accent);color:var(--muted)}hr{border:0;border-top:1px solid var(--border);margin:2.5rem 0}img{max-width:100%;height:auto}figure{margin:var(--space)0;text-align:center}figure img{border-radius:6px}figure figcaption{font-size:var(--step--1);color:var(--muted);margin-top:.5rem;font-family:var(--font-ui)}.gallery{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr));gap:1rem;margin:var(--space)0}.gallery a{display:block;border-radius:8px;overflow:hidden}.gallery img{border-radius:8px;border:1px solid var(--border);display:block;width:100%}.gallery a:hover img,.gallery a:focus-visible img{border-color:var(--accent-line)}.gallery a:hover{box-shadow:0 14px 30px var(--accent-glow)}code,pre,kbd{font-family:var(--font-mono);font-size:.875em}:not(pre)>code{background:var(--code-bg);padding:.12em .35em;border-radius:4px}pre{background:var(--code-bg);border:1px solid var(--border);border-radius:8px;padding:1rem;overflow-x:auto;line-height:1.5}pre code{background:0 0;padding:0}.table-scroll{overflow-x:auto;margin:var(--space)0}table{width:100%;border-collapse:collapse;font-family:var(--font-ui);font-size:var(--step--1)}.table-scroll table{margin:0}th,td{text-align:left;padding:.5rem .6rem;border-bottom:1px solid var(--border)}th{color:var(--muted);font-weight:600;white-space:nowrap}.page-subtitle{color:var(--muted);font-family:var(--font-ui);font-size:var(--step-0);margin-top:-.25rem;text-wrap:pretty}.card-list{list-style:none;margin:0;padding:0;display:grid;gap:.35rem}.card{position:relative;display:grid;grid-template-columns:minmax(0,7.5rem)1fr;gap:1.1rem;align-items:start;padding:.9rem;margin-inline:-.9rem;border-radius:12px;background:0 0}.card:not(:has(.card__cover)){grid-template-columns:1fr}.card:hover{background:var(--surface);box-shadow:var(--shadow)}.card:focus-within{background:var(--surface)}.card__frame{overflow:hidden;border-radius:8px;box-shadow:0 0 0 1px var(--border);background:var(--surface)}.card__cover{display:block;aspect-ratio:4/3;object-fit:cover;width:100%}.card__title{font-family:var(--font-ui);font-size:var(--step-1);margin:0 0 .25rem}.card__title a{color:var(--text)}.card:hover .card__title a{color:var(--accent);text-decoration:none}.card__title a::after{content:"";position:absolute;inset:0;border-radius:inherit}.card__meta{color:var(--muted);font-family:var(--font-ui);font-size:var(--step--1);margin:0 0 .4rem;font-variant-numeric:tabular-nums lining-nums}.card__period{color:var(--muted);font-family:var(--font-ui);font-size:var(--step--2);letter-spacing:.02em;margin:0 0 .35rem;font-variant-numeric:tabular-nums lining-nums}.card__summary{margin:0;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}.archive-heading{font-family:var(--font-ui);font-size:var(--step--2);font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:2.75rem 0 1.5rem;padding-top:1.25rem;border-top:1px solid var(--border)}@media(max-width:34rem){.card{grid-template-columns:1fr}.card:not(.card--vertical) .card__frame{max-width:12rem}}@media(prefers-reduced-motion:no-preference){.card{transition:background .3s ease,box-shadow .3s ease,transform .3s ease}.card__cover{transition:transform .45s ease}.card:hover{transform:translateY(-2px)}.card:hover .card__cover{transform:scale(1.04)}.card__title a{transition:color .2s ease}.card--vertical:hover{transform:translateY(-6px)}.btn,.iconlink{transition:box-shadow .3s ease,transform .3s ease,background-color .3s ease,color .3s ease}.btn--accent:hover{transform:translateY(-2px)scale(1.02)}.iconlink:hover{transform:translateY(-2px)}.out-card,.gallery a{transition:box-shadow .3s ease,transform .3s ease}.out-card:hover,.gallery a:hover{transform:translateY(-4px)}.gallery img{transition:border-color .3s ease}}.sec-head{display:flex;align-items:center;gap:.6rem}.sec-head .icon{width:1.15em;height:1.15em;color:var(--accent)}.sec-head__text{display:block}.wide{max-width:var(--page);margin-inline:auto;padding-inline:1.25rem}.band{padding-block:2.5rem}.band>:first-child{margin-top:0}.band+.band{padding-top:0}.hero{position:relative;isolation:isolate;min-height:min(66svh,34rem);display:grid;align-items:center;padding-block:3rem}.hero__inner{width:100%;max-width:var(--page);margin-inline:auto;padding-inline:1.25rem;display:grid;grid-template-columns:minmax(0,14rem)minmax(0,1fr);gap:2.5rem;align-items:center}.hero__side{text-align:center}.hero__portrait img{width:11.5rem;height:11.5rem;border-radius:50%;object-fit:cover;border:4px solid var(--bg);display:block;margin:0 auto 1.1rem;box-shadow:0 18px 44px rgba(0,0,0,.2),0 0 0 5px var(--accent-soft)}.hero__name{font-family:var(--font-body);font-weight:800;font-size:clamp(1.7rem,1.4rem + 1.1vw,2.3rem);line-height:1.06;letter-spacing:-.025em;margin:0 0 .35rem;text-wrap:balance}.hero__role{color:var(--accent);font-family:var(--font-ui);font-weight:600;font-size:var(--step--1);margin:0 0 .2rem;text-wrap:balance}.hero__location{color:var(--muted);font-family:var(--font-ui);font-size:var(--step--2);margin:0}.hero__cv{margin-top:1.1rem}.hero__summary{margin:0 0 1.35rem}.hero__summary>:last-child{margin-bottom:0}.hero__actions{display:flex;flex-wrap:wrap;align-items:center;gap:1rem}@media(max-width:46rem){.hero{min-height:0}.hero__inner{grid-template-columns:1fr;gap:1.75rem}.hero__body{text-align:center}.pills,.hero__actions{justify-content:center}.iconlinks{justify-content:center;margin-inline:auto;max-width:calc(4 * 3rem + 3 * .5rem)}.hero__portrait img{width:10rem;height:10rem}}.scroll-cue{position:fixed;right:1.25rem;bottom:1rem;z-index:15;color:var(--accent);opacity:.8;line-height:0;pointer-events:none}.scroll-cue .icon{width:1.7rem;height:1.7rem}@media(prefers-reduced-motion:no-preference){.scroll-cue .icon{animation:scroll-cue-nudge 2.4s ease-in-out infinite}}@keyframes scroll-cue-nudge{0%,100%{transform:translateY(0)}50%{transform:translateY(4px)}}.pills{list-style:none;display:flex;flex-wrap:wrap;gap:.5rem;padding:0;margin:0 0 1.5rem}.pill{font-family:var(--font-ui);font-size:var(--step--1);font-weight:500;background:var(--chip-bg);color:var(--text);box-shadow:inset 0 0 0 1px var(--chip-edge);border-radius:999px;padding:.5rem 1rem;margin:0;line-height:1.4}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.6rem;font-family:var(--font-ui);font-weight:650;font-size:var(--step-0);padding:.7rem 1.35rem;border-radius:.7rem;min-height:var(--tap);font-size:var(--step--1)}.btn--accent{color:var(--on-accent);background:linear-gradient(135deg,var(--accent),var(--accent-2));box-shadow:0 6px 18px var(--accent-glow)}.btn--accent:hover{color:var(--on-accent);text-decoration:none;box-shadow:0 12px 28px var(--accent-glow)}.iconlinks{display:flex;flex-wrap:wrap;gap:.5rem}.iconlink{width:3rem;height:3rem;border-radius:50%;display:inline-grid;place-items:center;color:var(--muted);background:var(--bg);box-shadow:0 0 0 1px var(--border),0 1px 3px rgba(0,0,0,6%)}.iconlink:hover{color:var(--on-accent);background:var(--accent);text-decoration:none;box-shadow:0 0 0 1px var(--accent),0 6px 16px var(--accent-glow)}.icon{flex:none}a,.btn,.iconlink,.gallery a,.card__title a{cursor:pointer}.card-grid{list-style:none;margin:0 0 1rem;padding:0;display:grid;gap:1.5rem;grid-template-columns:repeat(auto-fit,minmax(min(17rem,100%),1fr))}.card-grid--two{grid-template-columns:repeat(auto-fit,minmax(min(18rem,100%),1fr))}.card--vertical{display:flex;flex-direction:column;align-items:stretch;gap:0;padding:0;margin-inline:0;overflow:hidden;border-radius:.75rem;background:linear-gradient(160deg,var(--bg),var(--accent-wash));box-shadow:0 0 0 1px var(--border),0 2px 8px rgba(0,0,0,5%)}.card--vertical .card__frame{border-radius:0;box-shadow:none}.card--vertical .card__cover{aspect-ratio:3/2}.card--vertical .card__body{padding:1.15rem 1.25rem 1.35rem}.card--vertical .card__title{font-size:var(--step-1)}.card--vertical:hover,.card--vertical:focus-within{background:linear-gradient(160deg,var(--bg),var(--accent-soft));box-shadow:0 0 0 1px var(--accent-line),0 16px 34px var(--accent-glow)}.out-cards{list-style:none;margin:0 0 1rem;padding:0;display:grid;gap:1.25rem;grid-template-columns:repeat(auto-fit,minmax(min(18rem,100%),1fr))}.out-card{margin:0;padding:1.15rem 1.35rem 1.25rem;border-radius:.75rem;border-top:3px solid var(--accent);background:linear-gradient(160deg,var(--bg),var(--accent-wash));box-shadow:0 0 0 1px var(--border),0 2px 8px rgba(0,0,0,5%)}.out-card:hover{box-shadow:0 0 0 1px var(--accent-line),0 14px 30px var(--accent-glow)}.out-card__type{font-family:var(--font-ui);font-size:var(--step--2);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 .45rem}.out-card__title{font-family:var(--font-body);font-size:var(--step-0);font-weight:600;line-height:1.35;margin:0 0 .5rem}.out-card__title a{color:var(--text)}.out-card__title a:hover{color:var(--accent)}.out-card__meta{font-size:var(--step--1);color:var(--muted);margin:0 0 .65rem}.out-card__meta .venue{font-style:italic}.out-card__year{font-variant-numeric:tabular-nums lining-nums}.out-card__links{font-family:var(--font-ui);font-size:var(--step--1);margin:0;display:flex;flex-wrap:wrap;gap:.85rem}.project-cover{width:100%;border-radius:10px;border:1px solid var(--border);margin-bottom:1.5rem}.project-cover+p:has(>small){margin:-1.15rem 0 1.5rem;font-family:var(--font-ui);font-size:var(--step--1);color:var(--muted)}.partners-block{margin:1.5rem 0 .5rem}.partners-label{font-family:var(--font-ui);font-size:var(--step--2);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 .5rem}.partners{display:flex;flex-wrap:wrap;gap:.5rem;margin:0}.partner{display:inline-flex;align-items:center;gap:.5rem;border:1px solid var(--border);border-radius:9px;padding:.4rem .7rem;background:var(--surface);font-family:var(--font-ui);font-size:var(--step--1);color:var(--text)}.partner-emoji{font-size:1.05rem;line-height:1;flex:none}.partner-country{color:var(--muted);font-size:var(--step--2);border-left:1px solid var(--border);margin-left:.1rem;padding-left:.5rem}.out-section{display:grid;grid-template-columns:4.5rem 1fr;gap:0 1.5rem;align-items:start;margin-top:2.25rem}.out-year{grid-column:1;margin:0;font-family:var(--font-ui);font-size:var(--step-1);color:var(--accent);font-variant-numeric:tabular-nums lining-nums;position:sticky;top:4.5rem}.out-section>.out-list{grid-column:2}.out-list{list-style:none;margin:0;padding:0}.out-list li{margin-bottom:1rem;padding-left:1.4rem;text-indent:-1.4rem}.out-ref .authors{color:var(--muted)}.out-ref .ptitle{font-weight:600}.out-ref .venue{font-style:italic}.out-ref .me{color:inherit;font-weight:inherit;text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1px}.out-type{font-family:var(--font-ui);font-size:var(--step--2);letter-spacing:.03em;background:var(--chip-bg);color:var(--text);box-shadow:inset 0 0 0 1px var(--chip-edge);border:0;border-radius:999px;padding:.1rem .55rem;white-space:nowrap;text-indent:0}.out-archived{font-style:italic;color:var(--muted);font-size:.85em}.out-rel{font-style:italic;color:var(--muted);font-size:.9em;font-family:var(--font-ui)}.out-rel .out-type{font-style:normal}.out-filters{display:flex;flex-wrap:wrap;gap:1rem 1.5rem;align-items:center;font-family:var(--font-ui);font-size:var(--step--1);margin:1.5rem 0 .5rem;padding-bottom:1rem;border-bottom:1px solid var(--border)}.out-filters label{display:inline-flex;align-items:center;gap:.45rem;color:var(--muted)}.out-filters select{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:.4rem .5rem;min-height:2.25rem}.out-count{color:var(--muted);margin-left:auto;font-variant-numeric:tabular-nums}@media(max-width:46rem){.out-section{grid-template-columns:1fr;gap:0}.out-year{position:static;margin-bottom:.75rem}.out-section>.out-list{grid-column:1}}.thesis-byline{color:var(--muted);font-family:var(--font-ui);margin:-.25rem 0 1.25rem}.thesis-meta{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1.1rem 1.25rem;margin:0 0 2rem;font-family:var(--font-ui);font-size:var(--step--1)}.tmeta-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(8rem,100%),auto));gap:.5rem 1rem;padding:.5rem 0;align-items:start}.tmeta-row+.tmeta-row{border-top:1px solid var(--border)}.tmeta-label{font-size:var(--step--2);letter-spacing:.07em;text-transform:uppercase;color:var(--muted);padding-top:.15rem}.tmeta-row .out-list{margin:0}.tmeta-row .out-list li{margin-bottom:.4rem;padding-left:0;text-indent:0}.tmeta-row .partners{margin:0}.site-footer{border-top:1px solid var(--border);margin-top:4rem;padding-block:2rem;font-family:var(--font-ui)}.site-footer .social{display:flex;flex-wrap:wrap;gap:.25rem 1rem;margin-bottom:.75rem}.site-footer .social a{color:var(--muted);font-size:var(--step--1);display:inline-flex;align-items:center;min-height:var(--tap)}.site-footer .social a:hover{color:var(--accent);text-decoration:none}.colophon{color:var(--muted);font-size:var(--step--2);margin:0}