:root{--body: "Inter", system-ui, -apple-system, sans-serif;--hand: "Caveat", cursive;--mono: "JetBrains Mono", ui-monospace, monospace;--serif: "Charter", "Iowan Old Style", Georgia, serif;--bg: #fafaf7;--bg-alt: #f3f1e8;--bg-frame: #e8e6dc;--ink: #1a1a1a;--ink-soft: rgba(26, 26, 26, .7);--ink-faint: rgba(26, 26, 26, .55);--hatch: rgba(0, 0, 0, .07);--line: 1.5px solid var(--ink);--line-thin: 1px solid var(--ink);--dash: 1px dashed var(--ink);--dash-thick: 1.5px dashed var(--ink);--gap-1: 4px;--gap-2: 8px;--gap-3: 12px;--gap-4: 16px;--gap-5: 22px;--gap-6: 28px;--gap-7: 36px;--gap-8: 48px;--gap-9: 56px;--t-mono-xs: 9px;--t-mono-s: 10px;--t-mono-m: 11px;--t-body-s: 11.5px;--t-body: 12.5px;--t-body-l: 14px;--t-hand-s: 22px;--t-hand: 32px;--t-hand-l: 44px;--t-hand-xl: 56px;--page-w: 1180px;--page-pad-x: 56px}@media (max-width: 900px){:root{--page-pad-x: 32px}}@media (max-width: 560px){:root{--page-pad-x: 18px}}:root{--accent: var(--ink);--link: #2962ff;--ap-sidebar-w: 280px;--ap-rule: rgba(26, 26, 26, .14);--ap-muted: rgba(26, 26, 26, .58);--ap-chip-bg: rgba(41, 98, 255, .08);--ap-fig-stroke: rgba(26, 26, 26, .75);--ap-fig-fill: rgba(41, 98, 255, .1);--ap-fig-accent: #2962ff}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}html,body,#root{margin:0;padding:0;background:var(--bg-frame);font-family:var(--body);color:var(--ink);-webkit-font-smoothing:antialiased}body{-webkit-tap-highlight-color:rgba(0,0,0,.05);overflow-x:hidden}a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;cursor:pointer}a:visited{color:var(--accent)}u{text-decoration-thickness:1px;text-underline-offset:3px}img{max-width:100%;display:block}hr{border:none;border-top:var(--line);margin:0}ul{padding-left:22px}p{margin:0 0 12px;line-height:1.65}.page{width:var(--page-w);max-width:100%;margin:0 auto;background:var(--bg);color:var(--ink);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}.box{border:var(--line);background:transparent}.box.dashed{border:var(--dash-thick)}.box.hatch{background:repeating-linear-gradient(45deg,transparent 0 4px,var(--hatch) 4px 5px)}.squiggle{display:block}.tag{display:inline-block;border:1.2px solid var(--ink);padding:2px 8px;font-family:var(--mono);font-size:10px;border-radius:999px;white-space:nowrap;line-height:1.3}.tag.body{font-family:var(--body)}.note{display:inline-block;font-family:var(--mono);font-size:9px;padding:2px 6px;background:var(--ink);color:var(--bg);letter-spacing:.5px}.status{display:inline-block;font-family:var(--mono);font-size:9px;padding:2px 8px;border:1px solid var(--ink);letter-spacing:1px;white-space:nowrap}.status.active{background:var(--ink);color:var(--bg)}.status.paused,.status.shipped,.status.archived{background:transparent;color:var(--ink)}.thumb{border:var(--line);background:repeating-linear-gradient(45deg,transparent 0 4px,var(--hatch) 4px 5px);display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:10px;position:relative;flex-shrink:0}.thumb>span{background:var(--bg);padding:1px 6px;border:1px solid var(--ink)}.sec{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}.sec .num{font-family:var(--mono);font-size:11px;opacity:.55}.sec h3{font-family:var(--hand);font-size:24px;margin:0;font-weight:600;letter-spacing:.2px}.sec .rule{flex:1;margin-left:8px;border-bottom:var(--line-thin);height:1px}.kicker{font-family:var(--mono);font-size:10px;opacity:.6;letter-spacing:1px;text-transform:uppercase}.divide-dash{border-top:var(--dash);height:1px}.divide-line{border-top:var(--line);height:1px}.chip{display:inline-block;border:var(--line);padding:6px 12px;font-family:var(--mono);font-size:11px;background:transparent;color:var(--ink);cursor:pointer;text-decoration:none}.chip.solid{background:var(--ink);color:var(--bg)}.chip.sm{padding:4px 10px;font-size:10px}.nav{display:flex;justify-content:space-between;align-items:center;padding:20px var(--page-pad-x);border-bottom:var(--line);background:var(--bg-alt)}.nav .brand{font-family:var(--hand);font-size:24px;font-weight:600}.nav .links{display:flex;gap:22px;font-family:var(--mono);font-size:11.5px}.nav .links a{color:var(--ink);text-decoration:none}.nav .links a.active{text-decoration:underline;text-underline-offset:4px}.foot{padding:20px var(--page-pad-x);background:var(--ink);color:var(--bg);font-family:var(--mono);font-size:11px;display:flex;justify-content:space-between}.foot a{color:var(--bg)}.page-head{padding:44px var(--page-pad-x) 28px;border-bottom:var(--dash);display:flex;gap:36px;align-items:flex-end;justify-content:space-between}.page-head .ph-main{max-width:720px}.page-head h1{font-family:var(--hand);font-size:var(--t-hand-xl);margin:8px 0 0;font-weight:600;line-height:1.05}.page-head .blurb{font-size:13.5px;line-height:1.7;margin-top:14px}.content{padding:32px var(--page-pad-x) 56px}.row{display:flex}.col{display:flex;flex-direction:column}.grow{flex:1}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-6{gap:22px}.wrap{flex-wrap:wrap}.center-y{align-items:center}.between{justify-content:space-between}.mono{font-family:var(--mono);font-size:11px}.faint{opacity:.6}@media (max-width: 720px){.nav{padding:14px var(--page-pad-x);flex-wrap:wrap;gap:12px;row-gap:8px}.nav .brand{font-size:20px}.nav .links{gap:14px;font-size:11px;flex-wrap:wrap}}.home-hero{display:grid;grid-template-columns:1fr 220px;gap:36px;align-items:start;padding:44px var(--page-pad-x);border-bottom:var(--dash)}.home-hero h1{font-family:var(--hand);font-size:52px;margin:8px 0 0;font-weight:600;line-height:1.05}.home-hero .lede{font-size:13.5px;line-height:1.7;margin-top:16px;max-width:620px}.home-hero .ctas{display:flex;gap:10px;margin-top:18px;flex-wrap:wrap;align-items:center}.headshot{width:220px;height:260px;border:var(--line);background:repeating-linear-gradient(45deg,transparent 0 4px,var(--hatch) 4px 5px);display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:10px}.home-body{padding:36px var(--page-pad-x) 48px;display:grid;grid-template-columns:1.4fr 1fr;gap:44px}.news-list{display:flex;flex-direction:column;gap:8px}.news-item{display:flex;gap:12px;font-size:12px;line-height:1.5}.news-item .date{font-family:var(--mono);font-size:10px;opacity:.7;white-space:nowrap;flex-shrink:0;width:64px}.pub-row{display:flex;gap:14px;font-size:12px;line-height:1.5;padding:4px 0}.pub-row .pub-title{font-weight:600;line-height:1.35}.pub-row .pub-authors{opacity:.85;font-style:italic;margin-top:2px}.pub-row .pub-meta{display:flex;gap:8px;margin-top:5px;align-items:center;flex-wrap:wrap}.pub-row .venue{font-family:var(--mono);font-size:10px;font-weight:700}.pub-filter{padding:14px var(--page-pad-x);border-bottom:var(--dash);display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-family:var(--mono);font-size:11px}.year-head{display:flex;align-items:baseline;gap:14px;margin-top:36px;margin-bottom:4px}.year-head .yr{font-family:var(--hand);font-size:38px;font-weight:600;line-height:1}.year-head .rule{flex:1;border-bottom:var(--line);height:1px}.pub-item{display:grid;grid-template-columns:44px 110px 1fr;gap:16px;padding:16px 0;border-bottom:var(--dash);align-items:flex-start}.pub-item .pub-id{font-family:var(--mono);font-size:10px;opacity:.5;padding-top:4px}.pub-item .pub-title-l{font-weight:600;line-height:1.3;font-size:13.5px}.about-section{display:flex;gap:52px;padding:52px var(--page-pad-x) 44px;align-items:flex-start;border-bottom:var(--dash)}.profile-card{width:210px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;text-align:center}.profile-avatar{width:190px;height:190px;border-radius:50%;object-fit:cover;object-position:top center;display:block;box-shadow:0 2px 10px #00000024}.profile-name{font-family:var(--body);font-size:21px;font-weight:400;margin:14px 0 3px;line-height:1.2}.profile-sub{font-size:13px;color:var(--ink-soft);margin:0 0 2px;line-height:1.45}.profile-links{display:flex;flex-wrap:wrap;gap:5px;margin-top:14px;justify-content:center}.soc-link,.soc-link:visited{font-family:var(--mono);font-size:10px;color:var(--link);text-decoration:none;border:1px solid var(--link);padding:3px 8px;border-radius:2px}.soc-link:hover{background:var(--link);color:#fff}.cv-download,.cv-download:visited{margin-top:10px;font-family:var(--mono);font-size:10.5px;color:var(--ink);text-decoration:none;border:1px solid var(--ink);padding:5px 14px;border-radius:2px;display:inline-block}.cv-download:hover{background:var(--ink);color:var(--bg)}.cv-downloads{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap;justify-content:center}.cv-downloads .cv-download{margin-top:0}.bio-column{flex:1;min-width:0;padding-top:2px}.bio-section-h{font-family:var(--body);font-size:20px;font-weight:600;margin:0 0 12px;line-height:1.2;color:var(--ink)}.bio-text{font-size:15px;line-height:1.72;margin:0 0 12px;color:var(--ink)}.bio-interests{font-size:14.5px;line-height:1.88;padding-left:18px;margin:0 0 24px;color:var(--ink)}.bio-news{display:flex;flex-direction:column;gap:5px}.news-row{display:flex;gap:14px;font-size:13.5px;line-height:1.55}.news-date{font-family:var(--mono);font-size:10.5px;opacity:.65;white-space:nowrap;flex-shrink:0;width:40px;padding-top:2px}.home-pubs-section{padding:36px var(--page-pad-x) 52px}.home-pubs-intro{font-size:14px;opacity:.7;margin:-6px 0 22px}.home-pub-entry{padding:16px 0;border-bottom:1px solid rgba(0,0,0,.07)}.home-pub-entry:last-child{border-bottom:none}.home-pub-title{font-size:15.5px;font-weight:600;line-height:1.4;margin:0 0 5px}.home-pub-title a,.home-pub-title a:visited{color:var(--link);text-decoration:none}.home-pub-title a:hover{text-decoration:underline}.home-pub-featured{display:inline-block;font-family:var(--mono);font-size:9px;letter-spacing:.5px;background:#2962ff17;color:var(--link);padding:2px 6px;border-radius:2px;margin-left:8px;vertical-align:middle}.home-pub-authors{font-size:13.5px;font-style:italic;margin:0 0 3px;opacity:.85}.home-pub-venue{font-family:var(--mono);font-size:11px;font-weight:600;margin:0 0 8px}.home-pub-links{display:flex;gap:5px;flex-wrap:wrap}.pub-lnk,.pub-lnk:visited{font-family:var(--mono);font-size:10px;color:var(--link);text-decoration:none;border:1px solid var(--link);padding:2px 7px;border-radius:2px}.pub-lnk:hover{background:var(--link);color:#fff}.pubs-page{display:flex;align-items:flex-start}.pubs-sidebar{width:240px;flex-shrink:0;padding:44px 20px 44px var(--page-pad-x);position:sticky;top:0;border-right:1px solid rgba(0,0,0,.07)}.sidebar-avatar{width:150px;height:150px;border-radius:50%;object-fit:cover;object-position:top center;display:block;margin-bottom:12px;box-shadow:0 2px 8px #0000001f}.sidebar-name{font-size:15px;font-weight:600;margin:0 0 5px;font-family:var(--body)}.sidebar-bio{font-size:12.5px;color:var(--ink-soft);line-height:1.55;margin:0 0 14px}.sidebar-links{display:flex;flex-direction:column;gap:4px}.sidebar-links a,.sidebar-links a:visited{font-size:13px;color:var(--ink-soft);text-decoration:none;line-height:1.65}.sidebar-links a:hover{color:var(--link)}.pubs-main{flex:1;min-width:0;padding:44px var(--page-pad-x) 56px 40px}.pubs-page-title{font-size:26px;font-weight:700;margin:0 0 10px;font-family:var(--body);line-height:1.15}.pubs-intro{font-size:14px;opacity:.7;margin:0 0 32px;line-height:1.6}.pubs-year-h{font-size:17px;font-weight:700;margin:28px 0 12px;padding-bottom:6px;border-bottom:1.5px solid var(--ink);font-family:var(--body);letter-spacing:.2px}.pubs-year-h:first-of-type{margin-top:0}.pub-entry{padding:14px 0;border-bottom:1px solid rgba(0,0,0,.07)}.pub-entry:last-child{border-bottom:none}.pub-entry-title{font-size:15.5px;font-weight:600;line-height:1.4;margin:0 0 5px;font-family:var(--body)}.pub-entry-title a,.pub-entry-title a:visited{color:var(--link);text-decoration:none}.pub-entry-title a:hover{text-decoration:underline}.pub-entry-authors{font-size:13.5px;font-style:italic;margin:0 0 3px;line-height:1.5;opacity:.85}.pub-entry-venue{font-family:var(--mono);font-size:11px;font-weight:600;margin:0 0 8px}.pub-entry-feat{font-family:var(--mono);font-size:9px;letter-spacing:.5px;background:#2962ff17;color:var(--link);padding:1px 5px;border-radius:2px;margin-left:8px;vertical-align:middle}.pub-entry-links{display:flex;gap:5px;flex-wrap:wrap}.pub-entry-lnk,.pub-entry-lnk:visited{font-family:var(--mono);font-size:10px;color:var(--link);text-decoration:none;border:1px solid var(--link);padding:2px 7px;border-radius:2px}.pub-entry-lnk:hover{background:var(--link);color:#fff}@media (max-width: 820px){.about-section{flex-direction:column;gap:28px;padding-bottom:32px}.profile-card{width:100%;flex-direction:row;text-align:left;gap:22px;align-items:flex-start}.profile-avatar{width:110px;height:110px;flex-shrink:0}.profile-links{justify-content:flex-start}.pubs-page{flex-direction:column}.pubs-sidebar{width:100%;position:static;border-right:none;border-bottom:1px solid rgba(0,0,0,.07);padding:28px var(--page-pad-x);display:flex;gap:20px;align-items:flex-start}.sidebar-avatar{width:80px;height:80px;flex-shrink:0}.pubs-main{padding:28px var(--page-pad-x)}}.wp-hero{padding:44px var(--page-pad-x) 32px;border-bottom:var(--dash)}.wp-hero h1{font-family:var(--hand);font-size:56px;margin:8px 0 0;font-weight:600;line-height:1}.wp-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:36px;margin-top:22px}.wp-stats{display:flex;flex-direction:column;gap:14px;border-left:var(--line);padding-left:24px}.wp-stats .row{display:flex;gap:18px}.wp-stat .v{font-family:var(--hand);font-size:56px;line-height:1;font-weight:600}.wp-stat .l{font-family:var(--mono);font-size:10px;opacity:.7;letter-spacing:1px;margin-top:6px}.wp-stat .s{font-size:11px;margin-top:4px;font-style:italic;opacity:.75}.wp-arc{margin-top:26px;padding:14px;display:flex;gap:16px;align-items:center;flex-wrap:wrap;font-family:var(--mono);font-size:11px}.wp-arc .step{font-family:var(--hand);font-size:16px}.wp-arc .arr{opacity:.45}.wp-view{padding:14px var(--page-pad-x);border-bottom:var(--dash);display:flex;gap:10px;align-items:center;font-family:var(--mono);font-size:11px;flex-wrap:wrap}.wp-row{display:grid;grid-template-columns:120px 24px 1fr;gap:0;position:relative}.wp-row .wp-when{padding-top:22px;padding-right:16px}.wp-row .wp-when .yr{font-family:var(--mono);font-size:11px;font-weight:700}.wp-row .wp-when .pivot{font-family:var(--mono);font-size:9px;opacity:.6;margin-top:8px;line-height:1.4}.wp-row .spine{position:relative}.wp-row .spine .line{position:absolute;top:0;bottom:0;left:11px;width:1px;border-left:var(--dash-thick)}.wp-row.last .spine .line{bottom:24px}.wp-row .spine .dot{position:absolute;top:28px;left:4px;width:16px;height:16px;border:1.5px solid var(--ink);background:var(--bg);border-radius:50%}.wp-row.pivot-on .spine .dot{background:var(--ink)}.wp-row .body{padding:20px 0 28px}.wp-row .body .role{font-family:var(--hand);font-size:26px;font-weight:600;line-height:1.1}.wp-row .body .where{font-size:12.5px;font-style:italic;margin-top:4px;opacity:.85}.wp-row .body .two{display:grid;grid-template-columns:1.4fr 1fr;gap:22px;margin-top:12px}.wp-row .body .two .what{font-size:12.5px;line-height:1.6}.wp-row .body .stack{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.transfer{padding:12px;background:#00000006}.transfer .label{font-family:var(--mono);font-size:9px;opacity:.6;letter-spacing:1px}.transfer .body{font-size:12px;line-height:1.6;margin-top:6px}.transfer .out{margin-top:10px;padding-top:8px;border-top:var(--dash);font-family:var(--mono);font-size:10px;opacity:.75}.matrix{display:grid;grid-template-columns:1.2fr 24px 1.4fr 1fr;border:var(--line);font-size:12px}.matrix .cell{padding:10px 14px;border-top:var(--dash);display:flex;align-items:center}.matrix .cell.first-row{border-top:none}.matrix .cell.r{border-right:var(--dash)}.matrix .cell.c1{font-weight:500}.matrix .cell.c2{font-family:var(--mono);font-size:14px}.matrix .cell.c4{background:#00000008;font-style:italic}.proj-mini{padding:14px;display:flex;flex-direction:column;gap:8px}.proj-mini .head{display:flex;gap:6px;align-items:center}.proj-mini .title{font-family:var(--hand);font-size:22px;font-weight:600;line-height:1}.proj-mini .slug{font-family:var(--mono);font-size:10px;opacity:.65;margin-top:2px}.proj-mini .blurb{font-size:12px;line-height:1.55}.proj-mini .foot{margin-top:auto;padding-top:8px;border-top:var(--dash);font-family:var(--mono);font-size:10px;display:flex;justify-content:space-between}.pair{padding:14px}.pair .title{font-weight:600;font-size:13px;line-height:1.3;flex:1;padding-right:10px}.pair .venue{font-family:var(--mono);font-size:10px;font-weight:700;white-space:nowrap}.pair .meta{margin-top:10px;padding-top:10px;border-top:var(--dash);font-size:11.5px;line-height:1.55}.pair .meta .tag-mono{font-family:var(--mono);font-size:10px;opacity:.6}.cv-block{display:grid;grid-template-columns:120px 1fr;gap:24px;padding:14px 0;border-bottom:var(--dash)}.cv-block .when{font-family:var(--mono);font-size:11px;opacity:.85}.cv-block .when .d{font-weight:700}.cv-block .when .w{opacity:.55;margin-top:2px}.cv-block .body .ttl{font-weight:600;font-size:13.5px}.cv-block .body .sub{font-style:italic;opacity:.85;margin-top:2px;font-size:12.5px}.cv-block .body .desc{margin-top:6px;font-size:12.5px;line-height:1.6}.cv-section-h{margin-top:28px;margin-bottom:6px;display:flex;align-items:baseline;gap:12px}.cv-section-h .num{font-family:var(--mono);font-size:11px;opacity:.55}.cv-section-h h2{font-family:var(--hand);font-size:32px;font-weight:600;margin:0}.cv-section-h .rule{flex:1;border-bottom:var(--line);height:1px}.blog-post{padding:16px 0;border-bottom:var(--dash);display:grid;grid-template-columns:100px 1fr;gap:22px;align-items:start}.blog-post.has-cover{grid-template-columns:100px minmax(0,1fr) 160px}.blog-post.feat{padding:20px 0 22px}.blog-post .when{font-family:var(--mono);font-size:11px;opacity:.85}.blog-post .when .meta{opacity:.55;margin-top:4px}.blog-post .ttl{font-family:var(--hand);font-size:24px;font-weight:600;line-height:1.1}.blog-post.feat .ttl{font-size:32px}.blog-post .dek{font-size:12.5px;line-height:1.6;margin-top:8px;opacity:.9}.blog-post.feat .dek{font-size:13.5px}.blog-post .tags{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}.blog-post .cover{width:100%;aspect-ratio:4 / 3;object-fit:contain;border:var(--line);display:block;background:var(--bg-alt)}@media (max-width: 720px){.blog-post,.blog-post.has-cover{grid-template-columns:80px 1fr}.blog-post .cover{grid-column:2;max-width:240px;margin-top:10px}.home-hero{grid-template-columns:1fr;gap:22px;padding:28px var(--page-pad-x)}.home-hero h1{font-size:36px}.home-hero .lede{font-size:13.5px;max-width:100%}.home-hero .ctas{gap:8px}.headshot{width:160px;height:200px;margin:0 auto;order:-1}.home-body{grid-template-columns:1fr;gap:32px;padding:28px var(--page-pad-x) 36px}.about-section{padding:28px var(--page-pad-x) 28px;gap:22px}.profile-card{flex-direction:column;text-align:center;align-items:center;gap:14px}.profile-avatar{width:140px;height:140px}.profile-links{justify-content:center}.bio-section-h{font-size:18px}.bio-text{font-size:14.5px}.bio-interests{font-size:14px}.home-pubs-section{padding:28px var(--page-pad-x) 40px}.pubs-sidebar{flex-direction:column;gap:12px;padding:22px var(--page-pad-x)}.pubs-page-title{font-size:22px}.wp-hero{padding:28px var(--page-pad-x) 22px}.wp-hero h1{font-size:40px}.wp-grid{grid-template-columns:1fr;gap:22px;margin-top:14px}.wp-stats{border-left:none;padding-left:0;border-top:var(--dash);padding-top:18px}.wp-stat .v{font-size:40px}.wp-view{padding:12px var(--page-pad-x);font-size:10.5px}.wp-row{grid-template-columns:72px 20px 1fr}.wp-row .wp-when{padding-right:8px}.wp-row .body .role{font-size:22px}.wp-row .body .two{grid-template-columns:1fr;gap:12px}.matrix{grid-template-columns:1fr 1fr;font-size:11.5px}.matrix .cell.r{border-right:none}.matrix .cell{padding:8px 10px}.cv-block{grid-template-columns:1fr;gap:6px;padding:12px 0}.cv-block .when{font-size:10.5px}.cv-section-h h2{font-size:26px}.blog-body{font-size:14.5px;line-height:1.7}.blog-body h1{font-size:30px}.blog-body h2{font-size:22px}.blog-body pre{font-size:12px;-webkit-overflow-scrolling:touch}}.blog-body{font-size:15px;line-height:1.7}.blog-body h1{font-family:var(--hand);font-size:40px;font-weight:700;line-height:1.05;margin:0 0 16px}.blog-body h2{font-family:var(--hand);font-size:26px;font-weight:600;margin:32px 0 10px}.blog-body h3{font-family:var(--hand);font-size:20px;font-weight:600;margin:24px 0 8px}.blog-body p{margin:0 0 14px}.blog-body ul,.blog-body ol{margin:0 0 14px;padding-left:22px}.blog-body li{margin:4px 0}.blog-body code{font-family:var(--mono);font-size:13px;background:#0000000d;padding:1px 5px;border-radius:3px}.blog-body pre{background:#0000000d;padding:12px 14px;border-radius:4px;overflow-x:auto;font-size:12.5px}.blog-body pre code{background:none;padding:0}.blog-body blockquote{margin:14px 0;padding:4px 14px;border-left:3px solid rgba(0,0,0,.2);opacity:.85}.blog-body a{text-decoration:underline}.ap-shell{display:grid;grid-template-columns:var(--ap-sidebar-w) minmax(0,1fr);gap:var(--gap-8);max-width:var(--page-w);margin:0 auto;padding:var(--gap-7) var(--page-pad-x) var(--gap-9);align-items:start}.ap-sidebar{position:sticky;top:var(--gap-5);display:flex;flex-direction:column;gap:2px}.ap-avatar{width:168px;height:168px;border-radius:50%;object-fit:cover;margin-bottom:var(--gap-4);border:1px solid var(--ap-rule)}.ap-name{font-family:var(--body);font-size:23px;font-weight:650;letter-spacing:-.2px;margin:0;color:var(--ink)}.ap-name-alt{margin:2px 0 0;font-size:14px;color:var(--ap-muted)}.ap-role{margin:6px 0 0;font-size:12.5px;line-height:1.5;color:var(--ink-soft)}.ap-role-muted{color:var(--ap-muted);font-size:12px}.ap-meta{list-style:none;margin:var(--gap-5) 0 0;padding:var(--gap-4) 0 0;border-top:1px solid var(--ap-rule);font-size:12px;line-height:1.9}.ap-meta li{display:flex;gap:8px}.ap-meta-k{font-family:var(--mono);font-size:var(--t-mono-s);text-transform:uppercase;letter-spacing:.6px;color:var(--ap-muted);min-width:62px;flex:none;padding-top:3px}.ap-meta a{color:var(--link);text-decoration:none}.ap-meta a:hover{text-decoration:underline}.ap-dl{display:flex;flex-direction:column;gap:6px;margin-top:var(--gap-5);padding-top:var(--gap-4);border-top:1px solid var(--ap-rule)}.ap-dl a{font-family:var(--mono);font-size:var(--t-mono-m);color:var(--link);text-decoration:none;border:1px solid var(--link);border-radius:3px;padding:5px 9px;text-align:center;transition:background .12s ease,color .12s ease}.ap-dl a:hover{background:var(--link);color:#fff}.ap-main{min-width:0}.ap-h2{font-family:var(--body);font-size:15px;font-weight:650;letter-spacing:.2px;margin:var(--gap-7) 0 var(--gap-3);padding-bottom:6px;border-bottom:1px solid var(--ap-rule)}.ap-main>.ap-h2:first-child{margin-top:0}.ap-text{font-size:13.5px;line-height:1.75;margin:0 0 var(--gap-3);color:var(--ink)}.ap-text-s{font-size:12.5px;line-height:1.65}.ap-text a,.ap-note a{color:var(--link)}.ap-list{margin:0 0 var(--gap-3);padding-left:18px;font-size:13px;line-height:1.8}.ap-note{font-size:12px;color:var(--ap-muted);margin:0 0 var(--gap-5);line-height:1.6}.ap-year{font-family:var(--mono);font-size:var(--t-mono-m);letter-spacing:1.4px;color:var(--ap-muted);margin:var(--gap-6) 0 var(--gap-3)}.ap-pub,.ap-proj{border:1px solid var(--ap-rule);border-radius:6px;padding:var(--gap-4);margin-bottom:var(--gap-4);background:var(--bg)}.ap-pub-body{min-width:0}.ap-pub-title{font-size:14px;font-weight:620;line-height:1.45;margin:0 0 4px}.ap-pub-title a{color:var(--link);text-decoration:none}.ap-pub-title a:hover{text-decoration:underline}.ap-pub-authors{font-size:12px;color:var(--ink-soft);margin:0 0 6px}.ap-pub-venue{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:0 0 8px}.ap-venue-chip{font-family:var(--mono);font-size:var(--t-mono-s);letter-spacing:.5px;text-transform:uppercase;background:var(--ap-chip-bg);color:var(--link);padding:3px 7px;border-radius:3px}.ap-pub-kind,.ap-pub-note{font-family:var(--mono);font-size:var(--t-mono-s);letter-spacing:.5px;text-transform:uppercase;color:var(--ap-muted)}.ap-pub-links{display:flex;flex-wrap:wrap;gap:6px;margin:0}.ap-lnk{font-family:var(--mono);font-size:var(--t-mono-s);color:var(--link);text-decoration:none;border:1px solid var(--link);border-radius:3px;padding:2px 7px;transition:background .12s ease,color .12s ease}.ap-lnk:hover{background:var(--link);color:#fff}.ap-slug{font-family:var(--mono);font-size:var(--t-mono-s);color:var(--ap-muted)}.ap-fig-wrap{background:var(--bg-alt);border:1px solid var(--ap-rule);border-radius:4px;padding:10px 12px;margin-bottom:var(--gap-3);overflow-x:auto}.ap-fig{display:block;width:100%;min-width:460px;height:auto}.ap-fig-title{font-family:var(--mono);font-size:10px;letter-spacing:.4px;fill:var(--ap-muted);text-transform:uppercase}.ap-fig-label{font-family:var(--body);font-size:11.5px;font-weight:600;fill:var(--ink)}.ap-fig-sub{font-family:var(--mono);font-size:9.5px;fill:var(--ap-muted)}.ap-news{display:flex;flex-direction:column;gap:8px}.ap-news-row{display:flex;gap:var(--gap-3);font-size:12.5px;line-height:1.6}.ap-news-date{font-family:var(--mono);font-size:var(--t-mono-s);color:var(--ap-muted);min-width:36px;flex:none;padding-top:3px}.ap-award{font-family:var(--mono);font-size:11px;line-height:1.6;margin-top:var(--gap-5)}.ap-role-row{display:grid;grid-template-columns:132px minmax(0,1fr);gap:var(--gap-4);padding:var(--gap-4) 0;border-bottom:1px solid var(--ap-rule)}.ap-role-when{font-family:var(--mono);font-size:var(--t-mono-s);color:var(--ap-muted);letter-spacing:.4px;padding-top:3px}.ap-stack{display:flex;flex-wrap:wrap;gap:5px;margin:8px 0 0}.ap-stack span{font-family:var(--mono);font-size:var(--t-mono-xs);border:1px solid var(--ap-rule);border-radius:3px;padding:2px 6px;color:var(--ap-muted)}@media (max-width: 900px){.ap-shell{grid-template-columns:minmax(0,1fr);gap:var(--gap-6)}.ap-sidebar{position:static;display:grid;grid-template-columns:120px minmax(0,1fr);grid-template-areas:"avatar id";gap:0 var(--gap-4);align-items:center}.ap-avatar{grid-area:avatar;width:120px;height:120px;margin-bottom:0}.ap-name,.ap-name-alt,.ap-role{grid-column:2}.ap-meta,.ap-dl{grid-column:1 / -1}.ap-dl{flex-direction:row;flex-wrap:wrap}.ap-dl a{flex:1 1 auto}.ap-role-row{grid-template-columns:minmax(0,1fr);gap:4px}}@media (max-width: 560px){.ap-sidebar{grid-template-columns:84px minmax(0,1fr)}.ap-avatar{width:84px;height:84px}.ap-name{font-size:20px}}.ap-fig-photo{margin:0 0 var(--gap-3);overflow:hidden}.ap-fig-img{display:block;width:100%;height:auto;border-radius:3px;background:#fff}.ap-fig-credit{font-family:var(--mono);font-size:var(--t-mono-xs);color:var(--ap-muted);margin-top:7px;letter-spacing:.3px}.ap-pub-2col{display:grid;grid-template-columns:280px minmax(0,1fr);gap:var(--gap-5);align-items:start}.ap-pub-figcol{min-width:0}.ap-pub-figcol .ap-fig-wrap{margin-bottom:0}.ap-pub-figcol .ap-fig{min-width:0}.ap-fig-none{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;min-height:96px;background:var(--bg-alt);border:1px solid var(--ap-rule);border-radius:4px;font-family:var(--mono);font-size:var(--t-mono-m);letter-spacing:1px;color:var(--ap-muted);text-transform:uppercase}.ap-fig-none span{font-size:var(--t-mono-s);opacity:.75}.ap-pub-brief{font-size:12.5px;line-height:1.6;font-style:italic;color:var(--ink-soft);margin:8px 0 0}.ap-author{color:var(--link);text-decoration:none}.ap-author:hover{text-decoration:underline}.ap-author-me{color:var(--ink)}.ap-lnk-more{background:var(--ap-chip-bg)}.pub-detail{max-width:760px;margin:0 auto;padding:var(--gap-7) var(--page-pad-x) var(--gap-9)}.pub-back{font-family:var(--mono);font-size:var(--t-mono-m);color:var(--link);text-decoration:none}.pub-back:hover{text-decoration:underline}.pub-detail-title{font-size:24px;line-height:1.3;font-weight:650;margin:var(--gap-5) 0 var(--gap-3);letter-spacing:-.2px}.pub-detail-authors{font-size:13.5px;line-height:1.7;margin:0 0 6px}.pub-detail-venue{font-size:13px;color:var(--ink-soft);margin:0 0 var(--gap-4)}.pub-detail-links,.pub-detail-fig{margin-bottom:var(--gap-5)}.pub-detail-brief{font-size:14.5px;line-height:1.7;font-style:italic;color:var(--ink);margin:0 0 var(--gap-5);padding-left:var(--gap-4);border-left:2px solid var(--link)}.pub-detail-noabs{font-size:12.5px;color:var(--ap-muted);line-height:1.6}.pub-bibtex{font-family:var(--mono);font-size:var(--t-mono-m);line-height:1.65;background:var(--bg-alt);border:1px solid var(--ap-rule);border-radius:4px;padding:var(--gap-4);overflow-x:auto;white-space:pre;margin:0}.pub-cite-copy{float:right;font-family:var(--mono);font-size:var(--t-mono-s);background:none;color:var(--link);border:1px solid var(--link);border-radius:3px;padding:2px 9px;cursor:pointer}.pub-cite-copy:hover{background:var(--link);color:#fff}@media (max-width: 760px){.ap-pub-2col{grid-template-columns:minmax(0,1fr);gap:var(--gap-3)}.pub-detail-title{font-size:20px}}[data-style=apages]{--ap-ink: #222222;--ap-ink-muted: #555a5e;--ap-blue: #52adc8;--ap-ground: #ffffff;--ap-foot-bg: #f2f3f3;--ap-foot-ink: #898c8f;--ap-hair: #f2f3f3;--ap-hair-strong: #dcdee0;--ap-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--hand: var(--ap-sans);--body: var(--ap-sans);--dash: 1px solid #f2f3f3;--dash-thick: 1px solid #dcdee0;--line: 1px solid #dcdee0;--line-thin: 1px solid #f2f3f3;--bg: #ffffff;--bg-alt: #fbfbfb;--bg-frame: #ffffff;--ink: #222222;--ink-soft: #3a3f43;--ink-faint: #5a5f64;--accent: #52adc8;--link: #52adc8;--hatch: rgba(0, 0, 0, .03);--t-hand-s: 17px;--t-hand: 22px;--t-hand-l: 26px;--t-hand-xl: 30px}[data-style=apages],[data-style=apages] body,[data-style=apages] #root{background:var(--ap-ground)}[data-style=apages] body{font-family:var(--ap-sans);color:var(--ap-ink);font-size:16px;line-height:1.6}[data-style=apages] .page{width:100%;max-width:1180px;background:var(--ap-ground);color:var(--ap-ink)}[data-style=apages] p{font-size:16px;line-height:1.62;margin:0 0 16px}[data-style=apages] a{color:var(--ap-blue);text-decoration:none}[data-style=apages] a:visited{color:var(--ap-blue)}[data-style=apages] a:hover{text-decoration:underline}[data-style=apages] h1,[data-style=apages] h2,[data-style=apages] h3,[data-style=apages] h4{font-family:var(--ap-sans);color:var(--ap-ink);font-weight:700}[data-style=apages] h1{font-size:28px;line-height:1.25}[data-style=apages] h2{font-size:22px;line-height:1.3}[data-style=apages] h3{font-size:18px;line-height:1.35}[data-style=apages] hr{border-top:1px solid var(--ap-hair-strong)}[data-style=apages] .nav{background:var(--ap-ground);border-bottom:1px solid var(--ap-hair);padding:0 var(--page-pad-x);min-height:65px;max-width:1180px;margin:0 auto}[data-style=apages] .nav .brand{font-family:var(--ap-sans);font-size:17px;font-weight:700;color:var(--ap-ink);border-bottom:3px solid var(--ap-blue);padding:4px 0 6px}[data-style=apages] .nav .links{font-family:var(--ap-sans);font-size:15px;gap:26px;align-items:center}[data-style=apages] .nav .links a{color:var(--ap-ink);text-decoration:none}[data-style=apages] .nav .links a:hover{color:var(--ap-blue)}[data-style=apages] .nav .links a.active{color:var(--ap-ink);text-decoration:none;box-shadow:inset 0 -2px 0 var(--ap-blue)}[data-style=apages] .foot{background:var(--ap-foot-bg);border-top:1px solid var(--ap-hair-strong);color:var(--ap-foot-ink);font-family:var(--ap-sans);font-size:13px;padding:22px var(--page-pad-x)}[data-style=apages] .foot a{color:var(--ap-foot-ink)}[data-style=apages] .foot a:hover{color:var(--ap-blue)}[data-style=apages] .ap-shell{grid-template-columns:230px minmax(0,1fr);gap:46px;max-width:1180px;padding-top:34px}[data-style=apages] .ap-avatar{width:163px;height:163px;border:none}[data-style=apages] .ap-name{font-size:19px;font-weight:700}[data-style=apages] .ap-name-alt,[data-style=apages] .ap-role{font-size:14px;color:var(--ap-ink-muted)}[data-style=apages] .ap-meta{border-top:1px solid var(--ap-hair-strong);font-size:14px;line-height:2}[data-style=apages] .ap-meta-k{font-family:var(--ap-sans);font-size:11px;letter-spacing:.7px;color:var(--ap-ink-muted);min-width:66px}[data-style=apages] .ap-meta a{color:var(--ap-blue)}[data-style=apages] .ap-dl{border-top:1px solid var(--ap-hair-strong)}[data-style=apages] .ap-dl a{font-family:var(--ap-sans);font-size:13px;border-color:var(--ap-hair-strong);color:var(--ap-blue)}[data-style=apages] .ap-dl a:hover{background:var(--ap-blue);border-color:var(--ap-blue);color:#fff}[data-style=apages] .ap-h2{font-size:22px;font-weight:700;border-bottom:1px solid var(--ap-hair-strong);padding-bottom:8px;margin:34px 0 16px}[data-style=apages] .ap-text{font-size:16px;line-height:1.62}[data-style=apages] .ap-list{font-size:16px;line-height:1.75}[data-style=apages] .ap-note{font-size:14px;color:var(--ap-ink-muted)}[data-style=apages] .ap-year{font-family:var(--ap-sans);font-size:13px;font-weight:700;letter-spacing:.6px;color:var(--ap-ink-muted)}[data-style=apages] .ap-pub,[data-style=apages] .ap-proj{border:1px solid var(--ap-hair);border-radius:4px;background:var(--ap-ground);padding:18px}[data-style=apages] .ap-pub-title{font-size:17px;font-weight:700}[data-style=apages] .ap-pub-title a{color:var(--ap-blue)}[data-style=apages] .ap-pub-authors{font-size:14.5px;color:var(--ap-ink)}[data-style=apages] .ap-author{color:var(--ap-blue)}[data-style=apages] .ap-author-me{color:var(--ap-ink)}[data-style=apages] .ap-pub-venue{font-size:14px;color:var(--ap-ink-muted)}[data-style=apages] .ap-venue-chip{background:#52adc81f;color:#35818f;font-family:var(--ap-sans);font-size:11px;font-weight:600}[data-style=apages] .ap-pub-kind,[data-style=apages] .ap-pub-note{font-family:var(--ap-sans);font-size:11px}[data-style=apages] .ap-lnk{font-family:var(--ap-sans);font-size:12px;color:var(--ap-blue);border-color:var(--ap-hair-strong)}[data-style=apages] .ap-lnk:hover{background:var(--ap-blue);border-color:var(--ap-blue)}[data-style=apages] .ap-pub-brief{font-size:14.5px;color:var(--ap-ink-muted)}[data-style=apages] .ap-fig-wrap{background:#fbfbfb;border-color:var(--ap-hair)}[data-style=apages] .ap-fig-none{background:#fbfbfb;border-color:var(--ap-hair);color:var(--ap-ink-muted)}[data-style=apages] .ap-news-row{font-size:15px}[data-style=apages] .ap-news-date{font-family:var(--ap-sans);font-size:12px;color:var(--ap-ink-muted)}[data-style=apages] .ap-award{font-family:var(--ap-sans);font-size:14px}[data-style=apages] .ap-role-when{font-family:var(--ap-sans);font-size:12.5px;color:var(--ap-ink-muted)}[data-style=apages] .ap-stack span{font-family:var(--ap-sans);font-size:11px;border-color:var(--ap-hair-strong)}[data-style=apages] .pub-detail{max-width:800px}[data-style=apages] .pub-detail-title{font-size:27px;font-weight:700}[data-style=apages] .pub-detail-authors{font-size:16px}[data-style=apages] .pub-detail-venue{font-size:15px;color:var(--ap-ink-muted)}[data-style=apages] .pub-detail-brief{font-size:16px;border-left-color:var(--ap-blue);color:var(--ap-ink)}[data-style=apages] .pub-back{font-family:var(--ap-sans);font-size:13px;color:var(--ap-blue)}[data-style=apages] .pub-bibtex{background:#fbfbfb;border-color:var(--ap-hair-strong);font-size:12.5px}[data-style=apages] .pub-cite-copy{font-family:var(--ap-sans);font-size:11px;color:var(--ap-blue);border-color:var(--ap-hair-strong)}[data-style=apages] .pub-cite-copy:hover{background:var(--ap-blue);border-color:var(--ap-blue)}[data-style=apages] .kicker,[data-style=apages] .sec-head,[data-style=apages] .page-head{font-family:var(--ap-sans)}[data-style=apages] .blog-post{border-color:var(--ap-hair-strong);border-radius:4px;background:var(--ap-ground)}[data-style=apages] .blog-post h3 a{color:var(--ap-blue)}[data-style=apages] .blog-body{font-size:16px;line-height:1.7}[data-style=apages] .blog-body h2{font-size:22px}[data-style=apages] .blog-body a{color:var(--ap-blue)}@media (max-width: 900px){[data-style=apages] .ap-shell{grid-template-columns:minmax(0,1fr);gap:26px}[data-style=apages] .ap-avatar{width:120px;height:120px}}@media (max-width: 560px){[data-style=apages] .ap-avatar{width:88px;height:88px}[data-style=apages] .nav .links{font-size:13px;gap:14px}}[data-style=apages] .home-hero h1,[data-style=apages] .wp-hero h1,[data-style=apages] .cv-hero h1{font-size:30px;line-height:1.2;font-weight:700}[data-style=apages] .blog-post h3,[data-style=apages] .blog-hero h1{font-size:20px;line-height:1.3;font-weight:700}[data-style=apages] .sec-head,[data-style=apages] .page-head h1{font-size:24px;font-weight:700}[data-style=apages] .blog-body h1{font-size:26px}[data-style=apages] .kicker{letter-spacing:1px;font-size:11px;color:var(--ap-ink-muted)}[data-style=apages] .ap-page{max-width:900px;margin:0 auto;padding:40px var(--page-pad-x) 64px}[data-style=apages] .ap-page-head{text-align:center;margin-bottom:26px}[data-style=apages] .ap-page-avatar{width:200px;height:200px;border-radius:50%;object-fit:cover;margin:0 auto 16px;display:block}[data-style=apages] .ap-page-name{font-size:32px;font-weight:700;letter-spacing:-.2px;margin:0 0 10px;color:var(--ap-ink)}[data-style=apages] .ap-page-meta{font-size:15px;line-height:1.75;color:var(--ap-ink);margin:0}[data-style=apages] .ap-page-meta a{color:var(--ap-ink);text-decoration:none}[data-style=apages] .ap-page-meta a:hover{text-decoration:underline}[data-style=apages] .ap-page-links{display:flex;justify-content:space-around;flex-wrap:wrap;gap:10px;border-top:1px solid #ddd;border-bottom:1px solid #ddd;padding:11px 0;margin:22px 0 30px}[data-style=apages] .ap-page-links a{font-size:15px;font-weight:600;color:var(--ap-ink);text-decoration:none}[data-style=apages] .ap-page-links a:hover{color:var(--ap-blue)}[data-style=apages] .ap-page-body{font-size:16px;line-height:1.62;color:var(--ap-ink)}[data-style=apages] .ap-page-body p{margin:0 0 15px;color:var(--ap-ink)}[data-style=apages] .ap-page-body b,[data-style=apages] .ap-page-body strong{font-weight:700;color:var(--ap-ink)}[data-style=apages] .ap-page-h2{font-size:24px;font-weight:700;color:var(--ap-ink);margin:34px 0 12px;padding:0;border:none}[data-style=apages] .ap-page-list{list-style:none;margin:0 0 6px;padding:0 0 0 26px;font-size:16px;line-height:1.7}[data-style=apages] .ap-page-list li{margin-bottom:5px}[data-style=apages] .ap-page-list b{font-weight:700}[data-style=apages] .ap-page-news{padding-left:26px;font-size:15.5px;line-height:1.7}[data-style=apages] .ap-page-news .d{font-weight:700;margin-right:9px}[data-style=apages] .ap-page .ap-pub{border:none;padding:0 0 22px;background:none}[data-style=apages] .ap-page .ap-pub-title{font-size:16.5px;font-weight:700}@media (max-width: 700px){[data-style=apages] .ap-page-avatar{width:150px;height:150px}[data-style=apages] .ap-page-name{font-size:26px}[data-style=apages] .ap-page-links{justify-content:flex-start;gap:16px}}[data-style=apages] .ap-page-sub{font-size:14.5px;color:var(--ap-ink-muted);text-align:center;margin:14px 0 0}[data-style=apages] .ap-page .ap-proj{border:none;padding:0 0 26px;background:none}[data-style=apages] .ap-page .ap-pub{border:none;padding:0 0 24px;background:none}[data-style=apages] .ap-page .ap-role-row{border-bottom:1px solid #eee}[data-style=apages] .ap-pub-text{padding:0 0 16px}[data-style=apages] .ap-pub-text .ap-pub-title{font-size:16px;font-weight:700;margin-bottom:3px}[data-style=apages] .ap-pub-text .ap-pub-authors{margin-bottom:4px}[data-style=apages] .ap-pub-text .ap-pub-venue{margin-bottom:6px}[data-style=apages]{--ap-blue: #246880}a:focus-visible,button:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #337c99;outline-offset:4px}.skip-link{position:absolute;top:-80px;left:16px;z-index:20;padding:10px 16px;background:#fff}.skip-link:focus{top:10px}.portfolio-shell{display:grid;grid-template-columns:218px minmax(0,1fr);gap:64px;padding:48px var(--page-pad-x) 72px}.portfolio-content,.portfolio-wide{min-width:0}.portfolio-wide{max-width:1030px;margin:auto;padding:44px var(--page-pad-x) 72px}[data-style=apages] .portfolio-content h1,[data-style=apages] .portfolio-wide h1{font-size:32px;font-weight:650;letter-spacing:-.8px;margin:0 0 22px}[data-style=apages] .portfolio-content h2,[data-style=apages] .portfolio-wide h2{font-size:23px;font-weight:650;margin:0 0 16px}[data-style=apages] .portfolio-eyebrow{font-size:10.5px;letter-spacing:1.4px;text-transform:uppercase;color:#66747b;line-height:1.7;margin-bottom:12px}[data-style=apages] .profile-rail{text-align:left;position:sticky;top:28px;align-self:start;margin:0}[data-style=apages] .profile-rail .ap-page-avatar{width:152px;height:152px;margin:0 0 24px;border:1px solid #edf0f1;padding:5px}[data-style=apages] .profile-rail .ap-page-name{font-size:24px;margin:0 0 8px;letter-spacing:-.4px}.profile-rail .ap-page-name span{display:block;font-size:17px;font-weight:450;color:#6d777c;margin-top:8px}[data-style=apages] .profile-rail .profile-degree{font-size:13px;color:#53646b;margin-bottom:16px}[data-style=apages] .profile-rail .ap-page-meta{font-size:13px;line-height:1.8;color:#59656b}[data-style=apages] .profile-rail .ap-page-links{display:flex;flex-direction:column;align-items:start;gap:10px;margin:23px 0 0;padding:20px 0 0;border-bottom:0;border-top-color:#e3e9ec}[data-style=apages] .profile-rail .ap-page-links a{font-size:13px;font-weight:500;color:var(--ap-blue)}.home-bio p{line-height:1.8!important}.home-bio strong{font-weight:600}.home-section{margin-top:36px}.section-heading{display:flex;gap:18px;justify-content:space-between;align-items:baseline;margin-bottom:17px;padding-bottom:12px;border-bottom:1px solid #e2e7e9}[data-style=apages] .section-heading h2{margin:0}[data-style=apages] .section-heading h2 a{color:inherit}.text-link{font-size:13px;white-space:nowrap}.collaboration-note{background:#f4f8f9;border-left:3px solid #91b7c5;padding:18px 20px;margin:30px 0 10px}[data-style=apages] .collaboration-note p{font-size:14px;margin-bottom:10px}[data-style=apages] .home-skills-links{display:flex;gap:8px 15px;flex-wrap:wrap;font-size:12px;margin-bottom:0}.home-publication{display:grid;grid-template-columns:42px minmax(0,1fr);gap:17px;margin:0 0 25px}.publication-year{font-size:12px;color:#6c7a81;padding-top:3px;font-variant-numeric:tabular-nums}[data-style=apages] .home-publication h3{margin:0 0 7px;font-size:16px;line-height:1.5;font-weight:600}[data-style=apages] .home-publication h3 a{color:#263d46}[data-style=apages] .home-publication .publication-authors{font-size:12.5px;color:#667179;margin:0 0 7px}.publication-meta{display:flex;flex-wrap:wrap;gap:5px 12px;font-size:11px;align-items:center}.publication-meta>span:first-child{font-weight:650;letter-spacing:.2px;color:#52656c}[data-style=apages] .publication-index-note{font-size:12px;color:#66757d}[data-style=apages] .publications-content h2.ap-year{font-size:16px;color:#5b707b;margin:36px 0 0;padding-bottom:12px;border-bottom:1px solid #dce5e9}[data-style=apages] .publications-content .ap-pub{border:0;border-bottom:1px solid #e2e8eb;border-radius:0;padding:26px 0;margin:0;background:transparent}.publications-content .ap-pub-2col{grid-template-columns:210px minmax(0,1fr);gap:24px}.small-label{font-size:10px;text-transform:uppercase;letter-spacing:.7px;color:#66757d}.home-news>div{display:grid;grid-template-columns:42px minmax(0,1fr);gap:17px}.home-news>div>span{font-size:12px;color:#6c7a81;padding-top:3px}[data-style=apages] .home-news p{font-size:14px;margin-bottom:13px}.work-heading{display:flex;justify-content:space-between;gap:20px;align-items:baseline}[data-style=apages] .work-heading h1{margin-bottom:10px}[data-style=apages] .page-deck{font-size:18px;color:#53636c;line-height:1.5}[data-style=apages] .work-intro{font-size:14px;color:#67757d;max-width:750px;margin:6px 0 28px}.work-rooms{scroll-margin-top:28px}.work-rooms-heading{padding:21px 24px;border-left:4px solid #527c91;background:#f0f5f7;margin-bottom:20px}[data-style=apages] .work-rooms-heading .portfolio-eyebrow{margin:0 0 5px}[data-style=apages] .work-rooms-heading h2{font-size:28px;margin:0 0 8px;color:#274957}[data-style=apages] .work-rooms-heading>p:last-child{font-size:14px;color:#61747d;margin:0}.project-index{margin-left:30px;padding-left:24px;border-left:2px solid #d9e4e9}[data-style=apages] .project-index>.section-heading h3{font-size:21px;font-weight:650;margin:0}.project-map{border:1px solid #dce5e9;border-radius:6px;overflow:hidden;background:#fafcfc;margin:0 0 36px}.map-caption{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 21px;background:#fff;border-bottom:1px solid #e4e9eb;font-size:11px;color:#657980}.map-caption span:first-child{letter-spacing:1.1px;font-weight:650}.work-map-svg{display:block;width:100%;height:auto}.tone-blue{--room-color: #366981;--room-tint: #f0f6fa}.tone-purple{--room-color: #79628e;--room-tint: #f6f2f8}.tone-green{--room-color: #46765e;--room-tint: #f0f7f2}.tone-orange{--room-color: #946b3b;--room-tint: #fcf6ed}.room-outline{fill:var(--room-tint);stroke:var(--room-color);stroke-width:1.25}.room-number{fill:var(--room-color)}.map-number{fill:#fff;font-size:12px;font-weight:600}.map-title{fill:#293c44;font-size:16px;font-weight:650}.map-label{fill:#354f5c;font-size:13px}.map-type{fill:var(--room-color);font-size:8.5px;letter-spacing:.8px}.map-arrow{fill:var(--room-color);font-size:15px}.map-corridor{fill:#6d7e85;font-size:8px;letter-spacing:.8px}.map-hit{fill:transparent}.map-project:hover .map-hit,.map-room-heading:hover .map-hit,.map-project:focus .map-hit,.map-room-heading:focus .map-hit{fill:#fff;stroke:var(--room-color);stroke-width:1}.work-map-list{display:none}.project-filters{display:flex;flex-wrap:wrap;align-items:end;gap:14px;padding:18px 20px;background:#f6f8f9;border:1px solid #e4eaed;border-radius:4px}.project-filters label{display:flex;flex-direction:column;gap:5px;font-size:11px;font-weight:600;color:#54656d;min-width:130px}.project-filters select{font:inherit;font-size:14px;color:#273c46;background:#fff;border:1px solid #c7d3d9;border-radius:3px;padding:9px 28px 9px 10px;min-height:40px;max-width:100%}.skill-filter{flex:1}.clear-filters,.empty-projects button{border:0;background:transparent;color:var(--ap-blue);font:inherit;font-size:13px;cursor:pointer;text-decoration:underline;padding:10px 0}[data-style=apages] .filter-result{font-size:12px;color:#64747c;margin:12px 0 28px}.project-room,.project-entry,.career-timeline,.project-index,.statement-body h2,.statement-body h3{scroll-margin-top:28px}.project-room{margin:34px 0 48px}.room-section-heading{display:flex;align-items:center;gap:14px;padding-bottom:17px;border-bottom:2px solid var(--room-color)}.room-section-heading>span{display:grid;place-items:center;border:1px solid var(--room-color);color:var(--room-color);border-radius:50%;width:36px;height:36px;flex:0 0 36px;font-size:12px}[data-style=apages] .room-section-heading h4{font-size:20px;font-weight:650;margin:0 0 4px}[data-style=apages] .room-section-heading h4 a{color:#2d424b}[data-style=apages] .room-section-heading p{color:#69777d;font-size:13px;margin:0}.back-to-map{margin-left:auto;font-size:12px;white-space:nowrap}.project-entry{margin-left:50px;padding:26px 0;border-bottom:1px solid #e2e8eb}.project-entry:target{background:#f8fafb;outline:2px solid #9bb9c6;outline-offset:10px}.project-entry-meta{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;font-size:11px;color:#6a7980;margin-bottom:11px}.project-type,.todo-badge{padding:3px 7px;border-radius:3px;font-size:10px}.project-type.research{color:#366581;background:#eaf2f7}.project-type.industry{color:#527554;background:#edf4ed}.todo-badge{color:#855c25;background:#fcf0d8}[data-style=apages] .project-entry h5{font-size:18px;font-weight:600;line-height:1.5;margin:0 0 10px}[data-style=apages] .project-entry h5 a{color:#2d424b}[data-style=apages] .project-summary{font-size:15px;margin-bottom:8px}[data-style=apages] .project-detail{color:#62717a;font-size:14px;line-height:1.7}.project-skills{display:flex;flex-wrap:wrap;gap:7px;margin:15px 0}[data-style=apages] .project-skills a{border:1px solid #d8e2e6;border-radius:3px;padding:3px 8px;font-size:11px;color:#54717e}.project-skills a:hover{background:#edf4f7}.project-resources{display:flex;flex-wrap:wrap;gap:18px;font-size:12px}.project-figure{margin-top:16px}.project-figure summary{color:#5d717b;font-size:12px;cursor:pointer;padding:4px 0}.project-figure .ap-fig-wrap{margin-top:18px}.empty-projects{padding:20px;background:#f7f9fa;border:1px solid #e2e8eb}.career-timeline{margin-top:48px;padding-top:28px;border-top:1px solid #dce5e9}.career-row{display:grid;grid-template-columns:155px minmax(0,1fr);gap:22px;padding:20px 0;border-bottom:1px solid #e5eaed}.career-period{font-size:12px;color:#6a7980;padding-top:3px}[data-style=apages] .career-row h3{margin:4px 0;font-size:16px}[data-style=apages] .career-row p{font-size:13px;color:#66737a;margin:0 0 4px}.career-row a{font-size:12px}.research-path{margin:25px 0;scroll-margin-top:28px}.research-path:focus{outline:none}.research-path a,.research-connection-link a{display:inline-block}.research-path>figcaption{color:#4d6875;font-size:13px;font-weight:600;margin-bottom:14px}.research-path-stages{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:30px;padding:0;margin:0;list-style:none}.research-path-stages>li{position:relative;padding:17px 15px;border:1px solid #cddde5;border-top:3px solid #527c91;background:#f7fafb}.research-path-stages>li:nth-child(2){background:#fff;border-top-color:#839b72}.research-path-stages>li:not(:last-child):after{content:"→";position:absolute;right:-25px;top:43%;font-size:23px;color:#698390}.path-stage-label{display:block;font-size:10px;line-height:1.6;text-transform:uppercase;letter-spacing:.5px;color:#637780}[data-style=apages] .research-path h3{font-size:17px;line-height:1.4;margin:8px 0}[data-style=apages] .research-path h3 a{color:#264c60}[data-style=apages] .research-path p{font-size:13px;line-height:1.65;margin:8px 0}.path-papers{display:flex;flex-wrap:wrap;gap:5px 12px;font-size:12px}.path-next{font-size:12px}.blog-page-title{font-size:28px;line-height:1.25;margin:0 0 18px}.research-connection{margin:25px 0;padding:20px;border-left:3px solid #789cad;background:#f5f8fa}[data-style=apages] .research-connection h2{margin:0 0 12px;font-size:18px}.research-connection p{font-size:14px;line-height:1.7}.connection-boundary{color:#61717b}.research-connection>a{display:inline-block;font-size:13px}[data-style=apages] .research-connection-link{font-size:12px;line-height:1.6;margin:12px 0 0}.research-overview{margin:25px 0;border:1px solid #dce5ea;background:#fff}.research-overview>svg{display:block;width:100%;height:auto}.research-overview-region{fill:transparent;stroke:transparent;stroke-width:3}.research-overview svg a{outline:none}.research-overview svg a:hover .research-overview-region,.research-overview svg a:focus-visible .research-overview-region{fill:#0b57a40d;stroke:#246880}.research-overview figcaption{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px 18px;padding:12px 16px;border-top:1px solid #e4ebee;color:#60717a;font-size:12px}.statement-toc{margin:25px 0;padding:17px 20px;border:1px solid #dfe6e9}.statement-toc>span{font-size:11px;color:#607780;text-transform:uppercase;letter-spacing:.8px}.statement-toc ol{padding-left:20px;margin:10px 0 0}.statement-toc li{margin:7px 0;font-size:13px}.statement-body{overflow-wrap:anywhere}[data-style=apages] .statement-body h2{padding-top:30px;margin:12px 0 18px;border-top:1px solid #e0e8ec}[data-style=apages] .statement-body h3{font-size:17px;margin:25px 0 12px}[data-style=apages] .statement-body h2 a,[data-style=apages] .statement-body h3 a{color:inherit}.statement-body table{width:100%;border-collapse:collapse;font-size:13px;margin:22px 0}.statement-body th,.statement-body td{border:1px solid #d8e2e7;text-align:left;padding:10px;vertical-align:top}.statement-body th{background:#f2f6f8}.statement-body p,.statement-body li{font-size:15px!important;line-height:1.8!important}.statement-body li{margin-bottom:10px}.statement-body ol{padding-left:23px}.statement-download{display:flex;flex-wrap:wrap;gap:15px;font-size:13px;margin:20px 0}@media (max-width: 1000px){.publications-content .ap-pub-2col{grid-template-columns:minmax(0,1fr)}.publications-content .ap-pub-figcol{max-width:340px}.research-path-stages{grid-template-columns:minmax(0,1fr);gap:30px}.research-path-stages>li:not(:last-child):after{content:"↓";top:auto;bottom:-29px;right:calc(50% - 8px)}.portfolio-shell{grid-template-columns:190px minmax(0,1fr);gap:36px}[data-style=apages] .nav .links{gap:18px;font-size:13px}}@media (max-width: 780px){.portfolio-shell{grid-template-columns:minmax(0,1fr);gap:30px;padding-top:30px}.statement-shell .profile-rail{order:2}[data-style=apages] .profile-rail{position:static;display:grid;grid-template-columns:110px minmax(0,1fr);gap:0 22px;border-bottom:1px solid #e0e7ea;padding-bottom:24px}[data-style=apages] .profile-rail .ap-page-avatar{grid-row:1 / 5;width:110px;height:110px;margin:0}.profile-rail .ap-page-name span{display:inline;margin-left:7px;font-size:15px}[data-style=apages] .profile-rail .ap-page-name{font-size:22px}[data-style=apages] .profile-rail .profile-degree{margin:0 0 6px}[data-style=apages] .profile-rail .ap-page-links{grid-column:1 / -1;flex-direction:row;flex-wrap:wrap;gap:9px 18px;margin-top:17px;padding-top:15px}[data-style=apages] .nav{flex-wrap:wrap;padding-top:14px;padding-bottom:14px;gap:12px}[data-style=apages] .nav .links{flex-wrap:wrap}}@media (max-width: 600px){.portfolio-wide{padding-top:30px}[data-style=apages] .portfolio-content h1,[data-style=apages] .portfolio-wide h1{font-size:28px}.section-heading{flex-wrap:wrap;gap:8px}[data-style=apages] .section-heading h2{font-size:21px}.work-heading{display:block}.work-heading>a{display:inline-block;margin-bottom:14px}.work-rooms-heading{padding:18px}[data-style=apages] .work-rooms-heading h2{font-size:25px}.project-index{margin-left:8px;padding-left:12px}.project-entry{margin-left:12px}.work-map-svg{display:none}.work-map-list{display:grid;gap:13px;padding:15px}.mobile-room{border:1px solid var(--room-color);background:var(--room-tint);padding:13px 15px}.mobile-room a{display:block;padding:9px 0;font-size:13px}.mobile-room .mobile-room-title{color:var(--room-color);font-weight:650;font-size:15px;padding-top:0}.map-caption{flex-direction:column;align-items:start;gap:4px;padding:14px 16px}.project-filters{padding:14px;gap:12px}.project-filters label{min-width:0;flex:1 1 calc(50% - 12px)}.project-filters .skill-filter{flex-basis:100%}.room-section-heading{gap:10px}[data-style=apages] .room-section-heading h4{font-size:18px}.room-section-heading>span{width:30px;height:30px;flex-basis:30px}.back-to-map{font-size:11px}.home-publication{grid-template-columns:32px minmax(0,1fr);gap:12px}.career-row{grid-template-columns:minmax(0,1fr);gap:8px}.statement-body table{font-size:11px}.statement-body th,.statement-body td{padding:6px}[data-style=apages] .foot{flex-wrap:wrap;gap:10px}}@media (max-width: 380px){[data-style=apages] .profile-rail{grid-template-columns:80px minmax(0,1fr);gap:0 14px}[data-style=apages] .profile-rail .ap-page-avatar{width:80px;height:80px}[data-style=apages] .profile-rail .ap-page-name{font-size:19px}}
