:root{--af-bg:#fcfbf8;--af-surface:#ffffff;--af-text:#1a1815;--af-muted:#5d574e;--af-subtle:#8b8478;--af-line:#e6e0d6;--af-line-strong:#c9c1b4;--af-accent:#d8252c;--af-accent-hover:#a31318;--af-accent-soft:#f9e9e8;--af-conference:#1972a0;--af-badge-surface:#ffffff;--af-badge-accent:#d8252c;--af-badge-conference:#1972a0;--af-badge-line:#e6e0d6;--af-shadow:0 1px 3px rgba(26, 24, 21, 0.06);--af-serif:"Iowan Old Style", "Palatino Linotype", "Book Antiqua", Palatino, Georgia, serif;--color-background:var(--af-bg);--color-foreground:var(--af-text);--color-header-bg:var(--af-bg);--color-header-fg:var(--af-text);--color-footer-bg:var(--af-bg);--color-footer-fg:var(--af-muted)}html.dark{--af-bg:#1b1816;--af-surface:#26221d;--af-text:#ece7df;--af-muted:#b5ac9e;--af-subtle:#8c8477;--af-line:#3a342c;--af-line-strong:#52493d;--af-accent:#e8636a;--af-accent-hover:#f08a8f;--af-accent-soft:rgba(232, 99, 106, 0.12);--af-conference:#5fb0d8;--af-badge-surface:#faf8f4;--af-shadow:0 1px 3px rgba(0, 0, 0, 0.45);--color-background:var(--af-bg);--color-foreground:var(--af-text);--color-header-bg:var(--af-bg);--color-header-fg:var(--af-text);--color-footer-bg:var(--af-bg);--color-footer-fg:var(--af-muted)}html{scroll-behavior:smooth;color-scheme:light}html.dark{color-scheme:dark}body{background:var(--af-bg);color:var(--af-text);font-family:-apple-system,BlinkMacSystemFont,segoe ui,Helvetica,Arial,sans-serif;line-height:1.6}h1,h2,h3,h4,.navbar-brand{font-family:var(--af-serif);letter-spacing:-.01em}a{color:var(--af-accent);text-underline-offset:.18em;transition:color 160ms ease,background-color 160ms ease,border-color 160ms ease}a:hover{color:var(--af-accent-hover)}a:focus-visible,button:focus-visible,input:focus-visible,summary:focus-visible{outline:2px solid var(--af-accent);outline-offset:2px}.page-header{background:var(--af-bg);border-bottom:1px solid var(--af-line);backdrop-filter:none}.header,.page-footer footer,.page-body>.mx-auto.flex.max-w-screen-xl{max-width:930px!important}.page-header .header{max-width:none!important;margin:0!important;background:0 0!important;border:0!important;box-shadow:none!important}.navbar{min-height:4rem;padding-inline:0}.page-header .navbar{max-width:930px;margin:0 auto;padding-inline:1rem}.navbar-brand{color:var(--af-text);font-size:1.25rem;font-weight:600}.nav-link{color:var(--af-muted);font-size:.97rem;text-transform:lowercase;text-underline-offset:.3em}.nav-link.active{color:var(--af-text)}.nav-link:hover,.navbar-brand:hover{color:var(--af-accent)}.page-body article>main{max-width:930px!important;padding-inline:0!important}.page-footer footer{margin-top:3rem;padding-top:1.1rem;border-top:1px solid var(--af-line);color:var(--af-muted);font-size:.88rem}.page-footer .powered-by{display:none}.page-footer .powered-by a{color:inherit}.af-page{padding:3rem 1rem 5rem;overflow-x:hidden}.af-container{width:100%;max-width:930px;margin:0 auto;min-width:0}.af-post,.af-bibliography,.af-bibliography li,.af-bib-item,.af-bib-body{max-width:100%;min-width:0}.af-post-header{margin-bottom:2.5rem}.af-post-header-project{display:grid;grid-template-columns:minmax(0,1fr)auto;gap:.9rem 1rem;align-items:end}.af-post-title{margin:0 0 .55rem;color:var(--af-text);font-size:clamp(2.3rem,4.5vw,3.3rem);font-weight:500;line-height:1.1;letter-spacing:-.015em}.af-post-description{margin:0;color:var(--af-muted);font-size:.95rem;letter-spacing:.01em;line-height:1.55;overflow-wrap:anywhere;word-break:break-word}.af-post h2{margin:3rem 0 1.4rem;padding-bottom:.55rem;border-bottom:1px solid var(--af-line);color:var(--af-text);font-size:1.3rem;font-weight:600}.af-post h2 a{color:inherit;text-decoration:none}.af-post h2 a:hover{color:var(--af-accent)}.af-prose h2{font-size:1.15rem}.af-profile{width:100%}.af-profile-right{float:none;width:46%;max-width:180px;margin:0 auto 1rem}.af-profile-image{display:block;width:100%;border-radius:.4rem;border:1px solid var(--af-line)}html.dark .af-profile-image{filter:brightness(.95)}.af-more-info{margin-top:.55rem;color:var(--af-muted);font-family:ui-monospace,SFMono-Regular,SFMono,Menlo,Consolas,liberation mono,monospace;font-size:.73rem;line-height:1.55}.af-more-info p{margin:0 0 .55rem}.af-clearfix::after{content:"";display:block;clear:both}.af-prose{max-width:42rem;color:var(--af-text);font-size:1rem;line-height:1.7;overflow-wrap:anywhere;word-break:break-word}.af-prose p{margin:0 0 1rem}.af-prose h2+ul{margin:0;padding:0;list-style:none}.af-prose h2+ul li{margin:0;padding:.5rem 0;border-top:1px solid var(--af-line);color:var(--af-muted);font-size:.95rem}.af-prose h2+ul li:first-child{border-top:0;padding-top:0}.af-prose h2+ul li strong{color:var(--af-text);font-variant-numeric:tabular-nums}.af-contact{display:flex;flex-wrap:wrap;gap:.5rem;margin:1.4rem 0 .5rem}.af-contact-link{display:inline-flex;align-items:center;min-height:2.15rem;padding:.34rem .72rem;border:1px solid var(--af-line);border-radius:.3rem;background:var(--af-surface);color:var(--af-muted);font-size:.86rem;line-height:1;text-decoration:none;transition:border-color 160ms ease,color 160ms ease,background-color 160ms ease}.af-contact-link:hover,.af-contact-link:focus-visible{border-color:var(--af-accent);background:var(--af-accent-soft);color:var(--af-accent)}.af-contact-icon{display:inline-flex;width:1rem;height:1rem;margin-right:.4rem;color:currentColor}.af-contact-icon svg{width:1rem;height:1rem;fill:currentColor}.af-bibliography{margin:0;padding:0;list-style:none}.af-bibliography li{margin:0 0 1.6rem}.af-bib-item{display:grid;grid-template-columns:8.4rem minmax(0,1fr);gap:.95rem;align-items:start}.af-bib-body{min-width:0}.af-badge{display:flex;align-items:center;justify-content:center;width:100%;min-height:2rem;padding:.24rem .44rem;border:1px solid color-mix(in srgb,var(--af-badge-accent) 45%,var(--af-badge-line));border-radius:.35rem;background:var(--af-badge-surface);color:var(--af-badge-accent);font-size:.78rem;font-weight:700;letter-spacing:.05em;text-align:center;text-transform:uppercase;text-decoration:none}.af-badge-journal{border-color:color-mix(in srgb,var(--af-badge-accent) 45%,var(--af-badge-line));color:var(--af-badge-accent)}.af-badge-conference{border-color:color-mix(in srgb,var(--af-badge-conference) 48%,var(--af-badge-line));color:var(--af-badge-conference)}.af-badge-logo{flex-direction:row;gap:.28rem;padding:.18rem .42rem;text-transform:none}.af-badge-logo-mark{display:block;width:auto;height:auto}.af-badge-journal .af-badge-logo-mark{width:100%;max-height:.92rem;object-fit:contain}.af-badge-conference .af-badge-logo-mark{width:1.6rem;max-width:100%}.af-badge-wide-logo{padding-block:.2rem}.af-badge-wide-logo .af-badge-logo-mark{width:min(100%,5.6rem);max-height:1.55rem;object-fit:contain}.af-badge-logo-text{display:block;color:inherit;font-size:.86rem;font-weight:800;letter-spacing:.05em;line-height:1;text-transform:uppercase}.af-bib-title{color:var(--af-text);font-size:1.03rem;font-weight:600;line-height:1.45;overflow-wrap:anywhere;word-break:break-word}.af-bib-author{margin-top:.22rem;color:var(--af-muted);font-size:.95rem;line-height:1.55;overflow-wrap:anywhere;word-break:break-word}.af-bib-author em{color:var(--af-text);font-style:normal;font-weight:600;text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:color-mix(in srgb,var(--af-accent) 45%,transparent);text-underline-offset:.2em}.af-bib-author sup,.af-bib-note sup{font-size:.72em;vertical-align:super}.af-bib-note{margin-top:.16rem;color:var(--af-subtle);font-size:.82rem;line-height:1.4}.af-bib-periodical{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem .65rem;margin-top:.22rem;color:var(--af-muted);font-size:.95rem;line-height:1.5}.af-bib-logo{display:block;height:1rem;width:auto;max-width:5.5rem;object-fit:contain}html.dark .af-bib-logo{padding:.12rem .3rem;height:1.3rem;border-radius:.25rem;background:var(--af-badge-surface)}.af-bib-venue-text{display:inline-flex;align-items:baseline;gap:.1rem}.af-bib-periodical em{color:var(--af-text);font-style:italic}.af-bib-venue-text,.af-bib-metric{font-variant-numeric:tabular-nums}.af-bib-metric{display:inline-flex;align-items:center;padding:.12rem .45rem;border:1px solid var(--af-line);border-radius:999px;color:var(--af-muted);font-size:.78rem;line-height:1.2;white-space:nowrap}.af-bib-links{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.6rem}.af-btn{display:inline-block;padding:.26rem .7rem;border:1px solid var(--af-line);border-radius:.3rem;background:0 0;color:var(--af-muted);font-size:.8rem;font-weight:500;line-height:1.3;text-decoration:none;transition:border-color 160ms ease,color 160ms ease,background-color 160ms ease}.af-btn:hover,.af-btn:focus-visible{border-color:var(--af-accent);background:var(--af-accent-soft);color:var(--af-accent);text-decoration:none}.af-project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,250px));gap:1rem;justify-content:start}.af-project-card{overflow:hidden;border:1px solid var(--af-line);border-radius:.4rem;background:var(--af-surface);width:100%;transition:border-color 160ms ease,box-shadow 160ms ease,transform 160ms ease}.af-project-card-link{display:block;color:var(--af-text);text-decoration:none;cursor:pointer}.af-project-card-link:hover{color:var(--af-accent);text-decoration:none}.af-project-card-link:focus-visible{outline:2px solid var(--af-accent);outline-offset:-2px}.af-project-card:hover{border-color:var(--af-line-strong);box-shadow:var(--af-shadow);transform:translateY(-1px)}.af-project-thumb{display:block;width:100%;aspect-ratio:25/16;object-fit:cover;border-bottom:1px solid var(--af-line)}html.dark .af-project-thumb{filter:brightness(.92)}.af-project-body{display:flex;flex-direction:column;gap:.7rem;padding:1rem}.af-project-title-link{display:block;color:var(--af-text);text-decoration:none}.af-project-title-link:hover,.af-project-title-link:focus-visible{color:var(--af-accent);text-decoration:none}.af-project-title{margin:0;font-size:1.02rem;font-weight:600;line-height:1.35}.af-project-summary{margin:0;flex:1;color:var(--af-muted);font-size:.94rem;line-height:1.6}.af-project-card-cta{display:inline-flex;align-items:center;gap:.35rem;width:fit-content;color:var(--af-accent);font-size:.88rem;font-weight:600;line-height:1.35;text-decoration:none;transition:transform 160ms ease}.af-project-card:hover .af-project-card-cta{transform:translateX(2px)}.af-project-card-cta:hover,.af-project-card-cta:focus-visible{color:var(--af-accent);text-decoration:none}.af-project-links{display:flex;flex-wrap:wrap;gap:.5rem;padding:0 1rem 1rem;font-size:.9rem}.af-project-links a{text-decoration:none}.af-project-link-btn{padding:.26rem .7rem;border-color:var(--af-line);font-size:.8rem}.af-project-link-btn:hover,.af-project-link-btn:focus-visible{border-color:var(--af-accent)}.af-post-header-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}.af-project-hero{display:block;width:min(100%,46rem);margin:0 auto 1.5rem;border-radius:.4rem;border:1px solid var(--af-line)}.af-cv-list{display:grid;gap:1.4rem}.af-cv-item{padding-bottom:1.4rem;border-bottom:1px solid var(--af-line)}.af-cv-head{display:flex;justify-content:space-between;gap:1rem;align-items:baseline}.af-cv-title{margin:0;color:var(--af-text);font-size:1.05rem;font-weight:600}.af-cv-subtitle,.af-cv-date{margin:.15rem 0 0;color:var(--af-muted);font-size:.92rem}.af-cv-date{white-space:nowrap;font-variant-numeric:tabular-nums}.af-cv-copy{margin-top:.55rem;color:var(--af-muted)}.af-cv-copy p{margin:0}@media(min-width:576px){.af-profile-right{float:right;width:26%;max-width:200px;margin:0 0 .5rem 1.5rem}}@media(max-width:767px){.af-page{padding:1.75rem 1rem 3rem}.af-post-title{font-size:clamp(2rem,9vw,2.7rem);line-height:1.08}.af-bib-item{grid-template-columns:1fr;gap:.5rem}.af-bib-abbr{max-width:7rem}.af-project-grid{grid-template-columns:1fr}.af-project-card{max-width:320px}.af-cv-head{flex-direction:column;align-items:start}.navbar{padding-inline:.8rem}}.af-home{position:relative}.af-home #main-content,.page-body article>.af-home #main-content{max-width:none!important;width:100%;padding-inline:0!important}.af-manifold-stage{position:fixed;inset:0;z-index:0;pointer-events:none}.af-manifold-stage[hidden]{display:none}.af-manifold-canvas{display:block;width:100vw;height:100vh}.af-manifold-veil{position:absolute;inset:0;background:radial-gradient(120% 80% at 70% 18%,transparent 0%,var(--af-bg) 78%),linear-gradient(to bottom,color-mix(in srgb,var(--af-bg) 10%,transparent) 0%,color-mix(in srgb,var(--af-bg) 55%,transparent) 60%,var(--af-bg) 100%)}.af-home #main-content{position:relative;z-index:1}.af-hero{position:relative;min-height:100vh;min-height:100svh;display:flex;align-items:center;padding:6rem clamp(1.25rem,6vw,6rem)7rem}.af-hero-inner{max-width:60rem}.af-hero-eyebrow{margin:0 0 1.4rem;color:var(--af-accent);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:clamp(.72rem,1.4vw,.9rem);font-weight:600;letter-spacing:.22em;text-transform:uppercase}.af-hero-title{margin:0;color:var(--af-text);font-size:clamp(3.4rem,13vw,11rem);font-weight:600;line-height:.92;letter-spacing:-.04em}.af-hero-sub{margin:1.6rem 0 0;color:var(--af-muted);font-size:clamp(1rem,2.4vw,1.5rem);font-weight:400;letter-spacing:-.01em}.af-hero-sub a{color:var(--af-text);text-decoration:none;border-bottom:1px solid var(--af-line-strong)}.af-hero-sub a:hover{color:var(--af-accent);border-color:var(--af-accent)}.af-hero-tags{display:flex;flex-wrap:wrap;gap:.5rem .7rem;margin:2rem 0 0;padding:0;list-style:none}.af-hero-tags li{padding:.3rem .8rem;border:1px solid var(--af-line);border-radius:999px;background:color-mix(in srgb,var(--af-surface) 55%,transparent);color:var(--af-muted);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.74rem;letter-spacing:.04em;backdrop-filter:blur(6px)}.af-hero-contact{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:2.4rem}.af-ghost-link{display:inline-flex;align-items:center;gap:.45rem;min-height:2.5rem;padding:.45rem 1.05rem;border:1px solid var(--af-line-strong);border-radius:.4rem;background:color-mix(in srgb,var(--af-surface) 50%,transparent);color:var(--af-text);font-size:.9rem;font-weight:500;text-decoration:none;backdrop-filter:blur(6px);transition:border-color 160ms ease,color 160ms ease,background-color 160ms ease,transform 160ms ease}.af-ghost-link:hover,.af-ghost-link:focus-visible{border-color:var(--af-accent);background:var(--af-accent-soft);color:var(--af-accent);transform:translateY(-2px)}.af-ghost-icon{display:inline-flex;width:1rem;height:1rem}.af-ghost-icon svg{width:1rem;height:1rem;fill:currentColor}.af-scroll-cue{position:absolute;left:clamp(1.25rem,6vw,6rem);bottom:2.2rem;display:flex;align-items:center;gap:.7rem;color:var(--af-subtle);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.7rem;letter-spacing:.2em;text-transform:uppercase}.af-scroll-line{display:block;width:3.5rem;height:1px;background:linear-gradient(to right,var(--af-line-strong),transparent);transform-origin:left center;animation:af-scroll-pulse 2.4s ease-in-out infinite}@keyframes af-scroll-pulse{0%,100%{transform:scaleX(.5);opacity:.5}50%{transform:scaleX(1);opacity:1}}.af-flow{position:relative;background:var(--af-bg);border-top:1px solid var(--af-line);padding:clamp(3rem,8vw,7rem)clamp(1.25rem,6vw,6rem)6rem}.af-panel+.af-panel{margin-top:clamp(3.5rem,8vw,6.5rem)}.af-panel-grid{display:grid;grid-template-columns:9rem minmax(0,1fr);gap:clamp(1.5rem,4vw,3.5rem);max-width:64rem;margin:0 auto}.af-panel-kicker{margin:.35rem 0 0;color:var(--af-subtle);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.74rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase}.af-panel-title{margin:0 0 1.8rem;padding-bottom:.6rem;border-bottom:1px solid var(--af-line);color:var(--af-text);font-size:clamp(1.5rem,3.5vw,2.2rem);font-weight:600;letter-spacing:-.02em}.af-panel-title a{color:inherit;text-decoration:none}.af-panel-title a:hover{color:var(--af-accent)}[data-reveal]{opacity:0;transform:translateY(28px);transition:opacity 620ms cubic-bezier(.16,1,.3,1),transform 620ms cubic-bezier(.16,1,.3,1)}[data-reveal].is-revealed{opacity:1;transform:none}@media(max-width:767px){.af-panel-grid{grid-template-columns:1fr;gap:.9rem}.af-hero{padding-top:4.5rem;padding-bottom:6rem}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}[data-reveal]{opacity:1;transform:none}}