@font-face{font-family:Lato;font-style:italic;font-weight:400;src:local(Lato Italic),local(Lato-Italic),url(https://fonts.gstatic.com/s/lato/v15/S6u8w4BMUTPHjxsAUi-qNiXg7eU0.woff2)format("woff2");unicode-range:U+100-24F,U+259,U+1E??,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:italic;font-weight:400;src:local(Lato Italic),local(Lato-Italic),url(https://fonts.gstatic.com/s/lato/v15/S6u8w4BMUTPHjxsAXC-qNiXg7Q.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-style:italic;font-weight:700;src:local(Lato Bold Italic),local(Lato-BoldItalic),url(https://fonts.gstatic.com/s/lato/v15/S6u_w4BMUTPHjxsI5wq_FQftx9897sxZ.woff2)format("woff2");unicode-range:U+100-24F,U+259,U+1E??,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:italic;font-weight:700;src:local(Lato Bold Italic),local(Lato-BoldItalic),url(https://fonts.gstatic.com/s/lato/v15/S6u_w4BMUTPHjxsI5wq_Gwftx9897g.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-style:normal;font-weight:400;src:local(Lato Regular),local(Lato-Regular),url(https://fonts.gstatic.com/s/lato/v15/S6uyw4BMUTPHjxAwXiWtFCfQ7A.woff2)format("woff2");unicode-range:U+100-24F,U+259,U+1E??,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-weight:400;src:local(Lato Regular),local(Lato-Regular),url(https://fonts.gstatic.com/s/lato/v15/S6uyw4BMUTPHjx4wXiWtFCc.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Lato;font-style:normal;font-weight:700;src:local(Lato Bold),local(Lato-Bold),url(https://fonts.gstatic.com/s/lato/v15/S6u9w4BMUTPHh6UVSwaPGQ3q5d0N7w.woff2)format("woff2");unicode-range:U+100-24F,U+259,U+1E??,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Lato;font-style:normal;font-weight:700;src:local(Lato Bold),local(Lato-Bold),url(https://fonts.gstatic.com/s/lato/v15/S6u9w4BMUTPHh6UVSwiPGQ3q5d0.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg:#fff;--text:#000;--link:#1772d0;--link-hover:#f09228;--highlight:#ffffd0;--meta:#444;--footer:#555;--box-filter:none;--line:#d0d0d0;color-scheme:light}:root[data-theme=dark]{--bg:#121212;--text:#e6e6e6;--link:#6cb4ff;--link-hover:#f5a64a;--highlight:#2a2a1c;--meta:#a8a8a8;--footer:#8f8f8f;--box-filter:brightness(.8);--line:#444;color-scheme:dark}a{color:var(--link);text-decoration:none}a:focus,a:hover{color:var(--link-hover);text-decoration:none}a:focus-visible{outline:2px solid var(--link-hover);outline-offset:2px}body,td,th,tr,p,a,li{font-family:Lato,Verdana,Helvetica,sans-serif;font-size:14px;line-height:1.45}body{background:var(--bg);color:var(--text);margin:0}strong{font-family:Lato,Verdana,Helvetica,sans-serif;font-size:14px}h2{margin:0;font-family:Lato,Verdana,Helvetica,sans-serif;font-size:22px;font-weight:400}.papertitle{font-family:Lato,Verdana,Helvetica,sans-serif;font-size:14px;font-weight:700}.name{margin:0;padding-top:20px;font-family:Lato,Verdana,Helvetica,sans-serif;font-size:32px}span.highlight{background-color:var(--highlight)}.page{width:100%;max-width:800px;margin:0 auto}table.block{border-spacing:0;border-collapse:separate;border:0;width:100%}table.list{border-spacing:0 10px}.intro-text{vertical-align:middle;width:63%;padding:2.5%}.intro-photo{vertical-align:middle;width:37%;max-width:37%;padding:2.5%}.intro-photo img{aspect-ratio:1;object-fit:cover;border-radius:50%;width:100%;max-width:100%;height:auto}.section-head{vertical-align:middle;width:100%;padding:16px}.section-title-row{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.section-more{white-space:nowrap}.thumb-cell{vertical-align:middle;width:20%;padding:16px}.text-cell{vertical-align:middle;width:80%;padding:8px}.text-cell p{margin:6px 0 0}tr.highlight-row{background-color:var(--highlight)}.news{margin:8px 0 0;padding-left:18px}.news li{margin-bottom:4px}.links{text-align:center}.meta{color:var(--meta)}.one{width:160px;height:160px;position:relative}.one img{object-fit:cover;border-radius:4px;width:160px;height:160px;display:block}.two{opacity:0;width:160px;height:160px;transition:opacity .2s ease-in-out;position:absolute;top:0;left:0;overflow:hidden}.two img{object-fit:cover;border-radius:4px;width:100%;height:100%;display:block}tr:hover .two.ready{opacity:1}@media (hover:none){.two.ready{opacity:1}}.thumb-cell.thumb-wide{width:260px}.one.one-wide,.one.one-wide img,.one.one-wide .two{width:260px;height:auto}.one.one-wide img{aspect-ratio:auto;object-fit:contain}.one.one-wide .two{height:100%}@media (prefers-reduced-motion:reduce){.two{transition:none}}.footer{text-align:right;color:var(--footer);padding:16px 0;font-size:small}.site-nav{z-index:10;background:var(--bg);border-bottom:1px solid var(--line);position:sticky;top:0}.nav-inner{box-sizing:border-box;justify-content:space-between;align-items:center;gap:16px;max-width:800px;margin:0 auto;padding:8px 16px;display:flex}.nav-name{color:var(--text);font-size:16px;font-weight:700}.nav-links{align-items:center;gap:18px;display:flex}.nav-links a{color:var(--text)}.nav-links a:hover,.nav-links a:focus{color:var(--link-hover)}[id]{scroll-margin-top:64px}.theme-toggle{border:1px solid var(--meta);background:var(--bg);width:32px;height:32px;color:var(--text);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;padding:0;display:flex}.theme-toggle:hover,.theme-toggle:focus-visible{color:var(--link-hover);border-color:var(--link-hover)}.theme-toggle:focus-visible{outline:2px solid var(--link-hover);outline-offset:2px}.theme-toggle svg{width:18px;height:18px}.theme-toggle .icon-sun{display:none}:root[data-theme=dark] .theme-toggle .icon-sun{display:block}:root[data-theme=dark] .theme-toggle .icon-moon{display:none}@media (width<=600px){.intro-text,.intro-photo,.thumb-cell,.text-cell{width:auto;max-width:none;display:block}.intro-text{padding:8px 16px}.intro-photo{text-align:center;padding:8px 16px}.intro-photo img{width:55%}.thumb-cell{padding:16px 16px 4px}.text-cell{padding:4px 16px 12px}.one,.one img,.two{width:100%;height:auto}.one img,.two{aspect-ratio:1;height:auto}.one{max-width:360px;margin:0 auto}.footer{text-align:center;padding:16px}.nav-links{gap:12px}}.timeline{padding:0 16px;position:relative}.timeline:before{content:"";background:var(--line);width:2px;position:absolute;top:8px;bottom:8px;left:103px}.tl-item{grid-template-columns:80px 128px 1fr;align-items:start;column-gap:16px;padding:10px 0;display:grid}.tl-date{text-align:right;color:var(--meta);padding-top:2px;font-size:13px;position:relative}.tl-date:after{content:"";background:var(--line);border-radius:50%;width:10px;height:10px;position:absolute;top:6px;right:-13px}.tl-logo{box-sizing:border-box;object-fit:contain;background:#fff;border-radius:8px;width:128px;height:64px;padding:2px 4px}.tl-text p{margin:6px 0 0}.tl-text ul{margin:6px 0 0;padding-left:18px}.tl-text li{margin-bottom:4px}@media (width<=600px){.timeline:before{display:none}.tl-item{grid-template-columns:1fr;row-gap:6px}.tl-date{text-align:left}.tl-date:after{display:none}.tl-logo{width:auto;max-width:160px;height:48px}}.timeline-compact .tl-item{grid-template-columns:80px 1fr;padding:8px 0}.timeline-compact .tl-text{padding-left:14px}.group-label{letter-spacing:.08em;text-transform:uppercase;color:var(--meta);margin:0 0 8px;font-family:Lato,Verdana,Helvetica,sans-serif;font-size:12px;font-weight:700}.skills{margin:0;padding:0 16px 8px}.skill-row{grid-template-columns:140px 1fr;gap:16px;padding:6px 0;display:grid}.skill-row+.skill-row{border-top:1px solid var(--line)}.skill-row dd{margin:0}.other-projects{margin:0;padding:0 16px 8px;list-style:none}.other-projects li{padding:6px 0}.other-projects li+li{border-top:1px solid var(--line)}.lead{padding:0 16px 8px}.lead-group+.lead-group{margin-top:18px}.lead-list{margin:0;padding:0;list-style:none}.lead-list li{padding:6px 0}.lead-list li+li{border-top:1px solid var(--line)}.lead-media{flex-wrap:wrap;gap:12px;margin:8px 0 4px;display:flex}.lead-photo{margin:0;display:table}.lead-photo figcaption{caption-side:bottom;display:table-caption}.lead-photo img,.lead-photo video{object-fit:cover;border-radius:4px;width:auto;max-width:100%;height:300px;display:block}.lead-photo figcaption{color:var(--meta);margin-top:4px;font-size:13px}.lead-row{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.lead-date{color:var(--meta);flex-shrink:0;font-size:13px}@media (width<=600px){.timeline-compact .tl-item{grid-template-columns:1fr;row-gap:2px}.timeline-compact .tl-text{padding-left:0}.skill-row{grid-template-columns:1fr;gap:2px}.thumb-cell.thumb-wide{width:auto}.one.one-wide,.one.one-wide img,.one.one-wide .two{aspect-ratio:auto;width:100%;max-width:none}}.project-page{padding:16px}.project-page .back{margin-bottom:16px;display:inline-block}.project-page h1{margin:0 0 6px;font-family:Lato,Verdana,Helvetica,sans-serif;font-size:26px;font-weight:700;line-height:1.25}.project-page .summary{margin:14px 0;font-size:15px}.project-body img{border-radius:4px;max-width:100%;height:auto;margin:16px 0 6px;display:block}.project-body p,.project-body li{font-size:15px}.project-body h2{margin:24px 0 8px}.project-steps{margin:20px 0 8px;padding:0}.project-steps .tl-item{padding:12px 0}.project-steps .tl-text p{font-size:15px}.project-steps figure{margin:10px 0 0}.project-steps img,.project-steps video{border-radius:4px;width:auto;max-width:100%;height:auto;max-height:460px;display:block}.project-steps figcaption,.project-body em{color:var(--meta);font-size:13px}.project-video{border-top:1px solid var(--line);margin:24px 0 0;padding-top:16px;font-size:15px}.video-frame{aspect-ratio:16/9;width:100%;margin-bottom:8px;position:relative}.video-frame.vertical{aspect-ratio:9/16;max-width:340px}.video-frame iframe{border:0;border-radius:8px;width:100%;height:100%;position:absolute;inset:0}code{background:var(--highlight);border-radius:3px;padding:1px 4px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em}.project-steps video{aspect-ratio:16/9;background:#000;width:100%}.cv{padding:16px}.cv-head{text-align:center;margin-bottom:8px}.cv-head h1{margin:0 0 4px;font-size:30px;font-weight:400}.cv-contact{margin:0 0 12px}.cv-download{border:1px solid var(--link);border-radius:4px;padding:6px 16px;display:inline-block}.cv-download:hover,.cv-download:focus{border-color:var(--link-hover)}.cv section{margin-top:18px}.cv h2{border-bottom:1px solid var(--line);margin-bottom:8px;padding-bottom:3px;font-size:18px}.cv-entry{margin-bottom:10px}.cv-row{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.cv-date{flex-shrink:0;font-size:13px;font-weight:700}.cv-sub{color:var(--meta);font-size:13px}.cv-links{margin-left:8px;font-size:13px}.cv-entry ul{margin:4px 0 0;padding-left:18px}.cv-entry li{margin-bottom:2px}.cv-pub{margin:0}.cv-pub .meta{display:block}.cv-plain{margin:0;padding:0;list-style:none}.cv-plain li{padding:3px 0}.cv .skills{padding:0}@media (width<=600px){.cv-row{flex-direction:column;gap:0}.cv-date{font-size:12px}}@media print{.site-nav,.footer,.cv-download{display:none}.cv{padding:0}}
