:root{--bg:#f5f7f7;--surface:#fff;--ink:#152c35;--muted:#566a72;--accent:#247c77;--accent-ink:#176d68;--border:#dce5e6;--shadow:none;--radius:4px}
body{background:var(--bg);line-height:1.75}h1,h2,h3,h4,h5,h6{font-family:"Work Sans",system-ui,sans-serif;letter-spacing:-.035em}a:hover{color:#145a56}a:focus-visible,button:focus-visible{outline:3px solid #299b90;outline-offset:4px}.skip-link{position:absolute;left:16px;top:-100px;z-index:5;padding:12px;background:#fff}.skip-link:focus{top:12px}
header{background:#fff}.author{max-width:1120px;padding:24px 32px;gap:14px}.author img.photo{height:44px;width:44px;box-shadow:none;object-fit:cover}.identity{margin-right:auto;line-height:1.3}.identity>a{font-size:21px;letter-spacing:-.04em;color:var(--ink);border:0;font-weight:700}.identity-dot{color:var(--accent)}.identity-role{display:block;font-size:11px;color:var(--muted);margin-top:3px}.author .links{gap:5px}.author .links li a{border:0;background:none;border-radius:4px;padding:10px 12px;font-size:13px}.author .links li a:hover,.author .links li a[aria-current="page"]{background:#eaf3f1;color:#176d68}.author .clear{display:none}
.research-intro{position:relative;display:block;isolation:isolate;overflow:hidden;background:#102c36;color:#eaf3f4;border-bottom:1px solid #27444e}.research-intro canvas{position:absolute;inset:0;width:100%;height:100%;z-index:-1;pointer-events:none}.intro-inner{max-width:1120px;margin:auto;padding:76px 32px 52px}.eyebrow{font-family:"Reddit Mono",monospace;color:#92c6c3;font-size:10px;letter-spacing:.16em;margin-bottom:24px}.research-intro h1{color:#f6faf9;font-size:clamp(34px,4.6vw,58px);line-height:1.12;font-weight:600;margin:0 0 24px;letter-spacing:-.055em}.research-intro h1 span{color:#7cd6c7}.intro-description{font-size:16px;color:#bed0d5;max-width:570px;line-height:1.8}.intro-links{display:flex;gap:24px;margin:24px 0 38px}.intro-links a{font-size:13px;font-weight:600;color:#eff9f6;border-color:#567a80;padding-bottom:6px}.intro-links a span{margin-left:12px;color:#7cd6c7}.research-topics{display:flex;flex-wrap:wrap;gap:18px;font-family:"Reddit Mono",monospace;font-size:10px;color:#9eb7bd}.research-topics span::before{content:"+";color:#70bcb4;margin-right:8px}.motion-toggle{position:absolute;right:24px;bottom:16px;background:#163742;color:#bed0d5;border:1px solid #42616a;border-radius:4px;font:11px "Work Sans",sans-serif;padding:7px 10px;cursor:pointer}.research-intro-compact .intro-inner{padding-top:36px;padding-bottom:32px}.research-intro-compact h1{font-size:32px;margin-bottom:14px}.research-intro-compact .intro-description{font-size:14px}.research-intro-compact .intro-links{margin:16px 0 20px}
.wrap{max-width:1120px;padding:0 32px 40px}.wrap>section{gap:0}article{padding:40px 48px;margin:32px 0;border-radius:4px;font-size:1rem;max-width:100%;min-width:0}.entry-title{font-size:clamp(28px,3vw,38px);margin-bottom:24px}.text{max-width:74ch;line-height:1.85}.text h2{font-size:23px;margin-top:38px;padding-top:24px;border-top:1px solid var(--border)}.text h2+p>strong:only-child{font:12px "Reddit Mono",monospace;color:#537079}.metadata{font-size:12px;border-left:0;border-top:1px solid var(--border);padding:20px 0 0;margin-top:32px}.top_tags{gap:8px;margin-top:28px}.top_tags .tag{font:11px "Reddit Mono",monospace;border-radius:4px;background:#fff}.text pre{max-width:100%;background:#f1f5f5}code{background:#edf3f2}blockquote{background:#edf4f3;color:#284b50;border-radius:4px}footer{font-size:13px;padding:32px}footer .footer-columns{max-width:1056px}table{display:block;max-width:100%;overflow:auto}iframe,video{max-width:100%}
@media(max-width:820px){.author{flex-direction:row;flex-wrap:wrap;align-items:center}.author nav{width:100%}.author .links{width:auto}.intro-inner{padding-top:54px}.research-intro canvas{opacity:.65}}
@media(max-width:600px){.author{padding:18px 20px;gap:12px}.identity>a{font-size:20px}.identity-role{font-size:10px}.author .links{justify-content:space-between;gap:0}.author .links li a{padding:10px 8px;font-size:12px;min-height:44px}.intro-inner{padding:40px 22px 56px}.research-intro-compact .intro-inner{padding:30px 22px 56px}.research-intro-compact h1{font-size:30px}.eyebrow{font-size:9px}.intro-description{font-size:15px}.desktop-break{display:none}.intro-links{gap:24px}.research-topics{gap:12px;font-size:9px}.wrap{padding:0 16px 24px}article{padding:26px 22px;margin:20px 0;font-size:16px}.text{overflow-wrap:anywhere}.text h2{font-size:22px}footer{padding:24px}.motion-toggle{right:20px;bottom:12px}.text .projects{grid-template-columns:minmax(0,1fr)!important}.pagination{flex-wrap:wrap}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}

/* Theme palettes: white/orange and black/yellow. */
:root{color-scheme:light;--bg:#fff;--surface:#fff;--ink:#24201c;--muted:#71655b;--accent:#c44b05;--accent-ink:#b84300;--border:#eadfd6;--soft:#fff3e8;--hero:#fff8f1;--hero-ink:#241c16;--hero-muted:#736051;--hero-accent:#bb4700;--particle-rgb:211,92,16}
:root[data-theme="dark"]{color-scheme:dark;--bg:#080808;--surface:#121212;--ink:#f2f0e9;--muted:#b5b2a5;--accent:#f3ce42;--accent-ink:#f3ce42;--border:#333126;--soft:#252216;--hero:#050505;--hero-ink:#faf8ee;--hero-muted:#c0bba9;--hero-accent:#f3ce42;--particle-rgb:243,206,66}
body,header,footer,article{background:var(--surface);color:var(--ink)}body{background:var(--bg)}.research-intro{background:var(--hero);border-color:var(--border);color:var(--hero-ink)}.research-intro h1{color:var(--hero-ink)}.research-intro h1 span,.eyebrow,.intro-links a span{color:var(--hero-accent)}.intro-description,.research-topics{color:var(--hero-muted)}.research-topics span::before{color:var(--hero-accent)}.intro-links a{color:var(--hero-ink);border-color:var(--hero-accent)}.intro-links a:hover{color:var(--hero-accent)}.identity-dot{color:var(--accent)}.author .links li a:hover,.author .links li a[aria-current="page"]{background:var(--soft);color:var(--accent-ink)}.top_tags .tag,.pagination a{background:var(--surface);color:var(--ink)}.top_tags .tag:hover{background:var(--soft);color:var(--accent-ink)}.text h2+p>strong:only-child{color:var(--muted)}.text pre,code,blockquote{background:var(--soft);color:var(--ink)}.text pre code{background:transparent}.entry-title a:hover,a:hover{color:var(--accent-ink)}.motion-toggle,.theme-toggle{background:var(--soft);color:var(--ink);border:1px solid var(--border);border-radius:4px;cursor:pointer;font:12px "Work Sans",sans-serif;padding:10px 12px;min-height:40px}.motion-toggle{color:var(--hero-muted);padding:7px 10px;min-height:32px;font-size:11px}.theme-toggle{white-space:nowrap}.theme-toggle:hover{border-color:var(--accent)}a:focus-visible,button:focus-visible{outline-color:var(--accent)}.skip-link{background:var(--surface);color:var(--ink)}footer .blogroll-content a{color:var(--ink)}
:root[data-theme="dark"] .text [style*="background"],:root[data-theme="dark"] .text section.highlights{background:var(--soft)!important;color:var(--ink)}:root[data-theme="dark"] tbody tr:nth-child(odd){background:var(--soft)!important}
@media(max-width:820px){.author nav{order:3}.theme-toggle{margin-left:auto}}
@media(max-width:600px){.theme-toggle{font-size:11px;padding:8px;min-height:40px}.author{column-gap:8px}.identity{min-width:0}.identity-role{max-width:175px;font-size:9px}.identity>a{font-size:18px}.author img.photo{width:36px;height:36px}}
@media(max-width:360px){.identity-role{max-width:130px}.identity>a{font-size:16px}.theme-toggle{padding:7px;font-size:10px}}

@media(max-width:820px){.research-intro canvas{opacity:1}}

/* Legacy publication icons can occur without an icon class. */
.text p:has(>img[src$="/paper.png"],>img[src$="/talk.png"],>img[src$="/service.png"]){line-height:1.9;padding-left:24px;text-indent:-24px}
.text p:has(>img[src$="/paper.png"],>img[src$="/talk.png"],>img[src$="/service.png"])>br{display:block;content:"";margin-top:14px}
.text ul,.text ol{margin:1rem 0 1.5rem;padding-left:1.5rem;list-style-position:outside}.text ul{list-style-type:disc}.text ol{list-style-type:decimal}.text li{padding-left:.3rem;margin:.6rem 0}.text li::marker{color:var(--accent-ink)}.text li>ul,.text li>ol{margin:.4rem 0}.text ul ul{list-style-type:circle}.text ul.elements{list-style:none;padding-left:0;margin-left:0}.text ul.elements li{padding-left:0}
.text ul.publication-list{list-style:none;margin:1rem 0 1.5rem;padding:0}.text ul.publication-list>li{display:grid;grid-template-columns:16px minmax(0,1fr);gap:12px;padding:0;margin:0 0 18px}.text ul.publication-list>li>img{margin-top:7px}.text ul.publication-list>li>span{min-width:0}

/* The evolving portrait blends into the banner behind the text. */
.intro-inner{position:relative;z-index:1}
