:root{--color-bg:#fff;--color-highlight:#18181b;--color-text:#18181b;--color-muted:hsla(0,0%,9%,.56);--color-dimmed:hsla(0,0%,9%,.12);--color-accent:#05f;--color-border:rgba(0,0,0,.1);--space-unit:1rem;--space-s:calc(0.5 * var(--space-unit));--space-m:calc(var(--space-unit));--space-l:calc(1.25 * var(--space-unit));--space-xl:calc(2 * var(--space-unit));--space-xxl:calc(5 * var(--space-unit));--max-width:34rem;--max-width-xl:90rem;--grid-template-columns:.5fr 1fr;--font-small:1.0625rem;--font-menu:1.0625rem;--font-default:1.2rem;--font-big:1.3125rem;--font-bigger:1.5rem;--font-hero:1.5rem;--fw-normal:400;--fw-medium:500;--fw-semi:500;--fw-bold:600;--ls-tight:-0.4px;--ls-normal:-0.2px;--ls-lose:0px;--ls-open:0.2px;--lh-default:1.4em;--lh-tight:1.3em;--lh-lose:1.6em;--f-body:"neue-haas-unica",-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;--f-serif:"utopia-std",serif;--ease-out-quart:cubic-bezier(0.25,1,0.5,1);--ease-out-quint:cubic-bezier(0.22,1,0.36,1);--ease-out-expo:cubic-bezier(0.16,1,0.3,1);--duration-fast:120ms;--duration-normal:200ms;--duration-slow:400ms;--duration-slower:800ms;--duration-fast-exit:90ms;--duration-normal-exit:150ms;--duration-slow-exit:300ms;--aspect-ratio:3/2;--border-radius:4px}*{box-sizing:border-box}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-kerning:normal;font-feature-settings:"kern","liga","calt","kern";scroll-behavior:smooth;scrollbar-color:var(--color-dimmed);scrollbar-width:thin}body{font-size:var(--font-default);color:var(--color-text);background:var(--color-bg);padding:0 var(--space-xl);line-height:var(--lh-default);letter-spacing:var(--ls-normal)}:focus{outline:2px solid var(--color-accent)}:focus:not(:focus-visible){outline:none}:focus-visible{outline:2px solid var(--color-accent);outline-offset:3px}.layout-wrapper{max-width:var(--max-width-xl);margin:0 auto}.layout-container,.layout-wrapper{display:flex;flex-direction:column}.layout-container{align-items:center;width:100%}blockquote,h1,h2,h3,ol,p,pre,pre.code,time,ul{max-width:var(--max-width);margin-left:auto;margin-right:auto}header{margin-bottom:var(--space-xxl);margin-top:var(--space-xxl);display:flex;flex-direction:row;justify-content:space-between;align-items:center}@property --active-opacity{syntax:"<number>";initial-value:0;inherits:false}header .logo,nav a{opacity:max(var(--proximity-opacity,.35),var(--active-opacity));transition:--active-opacity .28s var(--ease-out-quart)}nav .active{--active-opacity:1}hr{border:0;border-top:1px solid var(--color-dimmed);width:50%;display:block;margin:var(--space-xl) auto}sup{vertical-align:top;font-size:1rem}sup a{color:var(--color-accent);text-decoration:none}footer .active,footer a,nav .active,nav a{font-size:var(--font-menu);color:var(--color-text);text-decoration:none;padding:var(--space-s) 0;display:inline-block;font-family:var(--f-body);font-weight:var(--fw-normal);font-style:normal;font-feature-settings:normal;font-variant:normal;letter-spacing:var(--ls-normal);line-height:var(--lh-default);vertical-align:baseline}footer a:hover,nav a:hover{text-decoration:none}footer ul,nav ul{margin:0;padding:0;list-style:none;display:flex;gap:var(--space-m);max-width:none}footer li,nav li{display:list-item;text-align:-webkit-match-parent;unicode-bidi:-webkit-isolate;unicode-bidi:isolate}main{width:100%;min-height:64vh;overflow:clip;overflow-clip-margin:20px;padding-bottom:var(--space-xxl)}table{display:table;border-collapse:separate;border-spacing:0;min-width:100%;table-layout:fixed;white-space:nowrap;margin:var(--space-xxl) auto;width:-moz-fit-content;width:fit-content;overflow-x:auto;background-color:transparent;border-radius:var(--border-radius);border:1px solid var(--color-border);font-size:var(--font-small)}thead th{border:none}thead th:first-child{border-top-left-radius:var(--border-radius)}thead th:last-child{border-top-right-radius:var(--border-radius)}td,th{text-align:left;vertical-align:top;text-overflow:ellipsis;width:100%;padding:var(--space-m);padding-top:var(--space-s);padding-bottom:var(--space-s);border-top:1px solid #f1f1f1;overflow:auto}th{font-weight:var(--fw-semi);color:var(--color-highlight);padding-top:var(--space-m)}tr,tt{margin:0;padding:0;border:0;vertical-align:baseline}h1{font-size:var(--font-hero);font-weight:var(--fw-medium);margin:var(--space-xxl) 0;margin-top:var(--space-xxl);margin-bottom:var(--space-xl);font-family:var(--f-body);line-height:var(--lh-tight);color:var(--color-highlight);letter-spacing:var(--ls-tight)}h2{font-size:var(--font-big)}h2,h3{font-weight:var(--fw-medium);margin-top:var(--space-xl);letter-spacing:var(--ls-tight);color:var(--color-highlight)}h3,p{font-size:var(--font-default)}p{margin:var(--space-m) auto;line-height:var(--lh-default);font-family:var(--f-serif)}.about--experience-company time,.blog-list--date,figcaption,main li,p,time.dimmed{font-variant-numeric:oldstyle-nums proportional-nums;font-variant-ligatures:common-ligatures;font-kerning:normal;font-feature-settings:"kern","liga","onum","pnum",oldstyle-nums proportional-nums,"liga","clig","kern"}section,small{margin-top:var(--space-xxl)}small{font-size:.85em;color:var(--color-muted)}a{color:var(--color-text);text-decoration:underline;text-underline-offset:2px;-webkit-text-decoration-color:var(--color-dimmed);text-decoration-color:var(--color-dimmed)}a:hover{color:var(--color-highlight);text-decoration:underline;-webkit-text-decoration-color:var(--color-highlight);text-decoration-color:var(--color-highlight)}ol,ul{margin-top:0;margin-bottom:0}main li{font-size:var(--font-default);line-height:var(--lh-default);font-family:var(--f-serif)}main li:last-child{padding-bottom:var(--space-l)}.footnotes{max-width:var(--max-width);margin-left:auto;margin-right:auto;margin-top:var(--space-xxl)}.footnotes,.footnotes a{font-size:var(--font-small);color:var(--color-muted);text-decoration:none!important}.footnotes li,.footnotes ol,.footnotes p{font-size:var(--font-small);margin:0;padding:0}.footnotes li{margin-bottom:0}.index--intro{margin-bottom:var(--space-xxl);margin-top:var(--space-xxl)}.index--intro h1{margin:auto}.index--intro p{margin-top:var(--space-l)}.index--projects{margin:0 auto}.index--projects h2,.index--projects h3,.index--projects p{max-width:none;margin-left:0;margin-right:0}.index--projects-heading{color:var(--color-highlight);margin-top:0;margin-bottom:var(--space-xl)}.index--project{margin-bottom:var(--space-xxl);opacity:0;transform:translateY(20px);transition:opacity .5s ease-out,transform .5s ease-out}.index--project.visible{opacity:1;transform:translateY(0)}.index--projects-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--space-xl);gap:var(--space-xl)}.index--project-secondary{margin-bottom:0}.index--project-secondary:first-child{transition-delay:0ms}.index--project-secondary:nth-child(2){transition-delay:.1s}.index--project-secondary:nth-child(3){transition-delay:.2s}.index--project-secondary:nth-child(4){transition-delay:.3s}.index--project-secondary .index--project-info{grid-template-columns:1fr 1fr;gap:var(--space-xl);margin-top:var(--space-l)}.index--project-media{width:100%;aspect-ratio:3/2;transition:transform var(--duration-slow) var(--ease-out-quart)}.index--project-media-inner{position:relative;width:100%;height:100%;overflow:hidden;border-radius:var(--border-radius);background-color:var(--color-dimmed)}.index--project a:hover .index--project-media{transform:scale(1.01)}.index--project-media-inner img,.index--project-media-inner video{width:100%;height:100%;display:block;object-fit:cover}.index--project-info{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--space-xl);gap:var(--space-xl);margin-top:var(--space-l);align-items:baseline}.index--project-title h3{font-size:var(--font-default);color:var(--color-highlight);margin:0;line-height:var(--lh-default)}.index--project-description p{margin:0;font-size:var(--font-small);color:var(--color-text);line-height:var(--lh-tight)}footer{display:flex;flex-direction:row;justify-content:space-between;align-items:center;margin-top:calc(2 * var(--space-xxl));margin-bottom:var(--space-xxl);color:var(--color-text)}footer>*{opacity:var(--proximity-opacity,.35)}footer .has-active{opacity:1}footer .has-active a{opacity:var(--proximity-opacity,.35)}footer .has-active .active{opacity:1}footer p,footer ul{max-width:none;margin-left:0;margin-right:0}footer .small{font-size:1em;margin:0}footer div{text-align:right}footer ul{justify-content:flex-end}footer ul li{margin:0}.gallery-wrapper{left:30%;transform:translateX(-30%)}.gallery-wrapper,.image-gallery{max-width:var(--max-width-xl);margin:var(--space-m) auto}.image-gallery{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:var(--space-m);width:var(--max-width-xl);scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;justify-content:flex-start}.image-gallery figure{flex:0 0 auto;scroll-snap-align:center;max-width:var(--max-width-xl)}.image-gallery img{max-width:100%;height:auto;border-radius:var(--border-radius)}.work-details{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--space-xl);gap:var(--space-xl);margin-bottom:var(--space-xxl)}.work-details .big-p{max-width:none;margin:0}.work-details--info{display:flex;flex-direction:column;gap:var(--space-l)}.work-details--field strong{display:block;font-weight:var(--fw-medium);font-size:var(--font-menu)}.work-details--field div,.work-details--field p{margin:4px 0 0;line-height:var(--lh-default)}audio,figure,iframe,video{max-width:var(--max-width-xl);border-radius:var(--border-radius)}figure{margin:var(--space-xxl) auto}.content-blog>figure:first-of-type,.content-visual-bites>figure:first-of-type,.content-work>figure:first-of-type{margin-top:0}.content-blog .post-body figure img,.content-blog .post-body figure video{aspect-ratio:auto;object-fit:contain}figure iframe,figure img,figure video{display:block;width:100%;object-fit:cover}.parallax-hero,.parallax-placeholder,figure iframe,figure img,figure video{aspect-ratio:var(--aspect-ratio);overflow:hidden;border-radius:var(--border-radius)}.parallax-wrapper{position:relative;width:100%;height:100%;overflow:hidden}.parallax-layer{position:absolute;inset:0;will-change:transform;transform:scale(var(--scale,1)) translate3d(calc(var(--mx) * var(--depth) * 1px),calc(var(--my) * var(--depth) * 1px),0)}.parallax-layer--bg{filter:blur(.5px);transition:filter .8s cubic-bezier(.22,1,.36,1)}.parallax-wrapper.is-hovering .parallax-layer--bg{filter:blur(1px)}.about-profile{max-width:var(--max-width);margin-left:auto;margin-right:auto;margin-bottom:var(--space-xl)}.about-profile img{width:192px;border-radius:var(--border-radius);display:block}.about--experience{margin-top:var(--space-xxl);margin-bottom:var(--space-xxl);margin-left:calc((100% - var(--max-width)) / 2)}.about--experience div,.about--experience h2,.about--experience p,.about--experience time{max-width:none;margin-left:0;margin-right:0}.about--experience>h2{margin-bottom:var(--space-l)}.about--experience-row{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--space-xl);gap:var(--space-xl);margin-bottom:var(--space-xl)}.about--experience-company strong{display:block;font-weight:var(--fw-semi);font-size:var(--font-small)}.about--experience-company time{display:block}.about--experience-desc p{margin:0;font-size:var(--font-small)}img{max-width:var(--max-width-xl);border-radius:var(--border-radius);display:block}img.high-quality{image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}.placeholder{background-color:rgba(0,0,0,.05);width:100%}span[style*="box-sizing:"]>img{object-fit:contain!important;max-width:100%!important}span[style*="display:block"]>img{height:auto!important;width:auto!important;max-width:100%!important;max-height:100%!important}iframe{width:var(--max-width-xl);aspect-ratio:16/9}figcaption{margin-top:var(--space-l);max-width:calc(var(--max-width-xl) / 2);font-family:var(--f-serif);font-size:var(--font-small);color:var(--color-text);line-height:var(--lh-tight)}.post-wrapper{margin:var(--space-xxl) auto}.content-blog li{margin-bottom:var(--space-s)}.content-blog li strong{font-weight:var(--fw-bold)}.blog-list{margin-top:0}.blog-list--cluster{display:grid;grid-template-columns:25% 1fr;grid-column-gap:var(--space-xl);column-gap:var(--space-xl)}.blog-list--year{grid-column:1;grid-row:1;font-family:var(--f-body);font-size:var(--font-small);font-weight:var(--fw-medium);color:var(--color-muted)}.blog-list--item{grid-column:2;display:block;margin-bottom:var(--space-l)}.about--experience-company time,.blog-list--date,time.dimmed{font-family:var(--f-serif);font-size:var(--font-default);color:var(--color-muted)}.blog-list--date{display:block;margin:0;margin-top:var(--space-s);max-width:none}.blog-list--title h3{margin:0;max-width:none}.blog-list--title a{text-decoration:none}.blog-list--title a:hover{text-decoration:underline}.company-group{display:grid;grid-template-columns:var(--grid-template-columns);margin-top:var(--space-xl);align-items:baseline}.company-name{margin:0}.company-name time{margin:0;padding:0;margin-top:var(--space-s)}.company-name p{margin:0}.company-works{display:flex;flex-direction:column;gap:var(--space-m);margin:0}.company-name h2{margin:0}.work-list{margin:0;padding:0}.work-list:first-child{margin-top:0}.work-list a{text-decoration:none}.work-list a:hover{text-decoration:underline}.work-list h2{margin-top:var(--space-unit);margin-bottom:0}.work-list p{margin-top:var(--space-s)}.work-list h3{margin:0}.labs-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:var(--space-xl);gap:var(--space-xl)}.labs-grid--item{max-width:none;margin:0}.labs-grid--item h3{margin:0}.labs-grid--item a{text-decoration:none}.labs-grid--item a:hover{text-decoration:underline}.labs-grid--item p{margin:var(--space-s) 0 0 0;font-size:var(--font-small)}.vb-grid{display:grid;grid-template-columns:repeat(2,1fr);grid-column-gap:var(--space-xl);column-gap:var(--space-xl);grid-row-gap:calc(var(--space-xl) + var(--space-m));row-gap:calc(var(--space-xl) + var(--space-m));margin-top:var(--space-l)}.vb-grid--item{max-width:none;margin:0}.vb-grid--media{width:100%;aspect-ratio:3/2;transition:transform var(--duration-slow) var(--ease-out-quart)}.vb-grid--media-inner{width:100%;height:100%;overflow:hidden;border-radius:var(--border-radius);background-color:var(--color-dimmed)}.vb-grid--media-inner img,.vb-grid--media-inner video{width:100%;height:100%;display:block;object-fit:cover}.vb-grid--info{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--space-m);gap:var(--space-m);margin-top:var(--space-l);max-width:none;align-items:baseline}.vb-grid--info h3{margin:0}.vb-grid--meta{margin:0;font-size:var(--font-small);color:var(--color-text);line-height:var(--lh-tight)}.vb-grid--meta time{color:inherit}.vb-grid--item a{text-decoration:none}.vb-grid--item a:hover{text-decoration:underline}.vb-grid--item a:hover .vb-grid--media{transform:scale(1.01)}.medium-zoom-overlay{min-width:100%;z-index:1000}.medium-zoom-image{z-index:1001;object-fit:contain}.content-visual-bites figure img{aspect-ratio:auto;object-fit:contain}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.skip-link{display:block;padding:1rem;background-color:#fff;color:var(--color-text);font-weight:var(--fw-semi);text-align:center;position:absolute;top:0;left:0;right:0;z-index:100;text-decoration:none;border:none}.skip-link:focus{transform:translateY(0)}.dimmed{color:var(--color-muted)}.zero-margin{margin-bottom:0}time{margin:0;padding:0;display:inline-block;color:var(--color-muted);font-size:var(--font-small)}.xxl{margin-bottom:var(--space-xl)}.big-p{font-size:var(--font-bigger);line-height:var(--lh-default)}.spaced{padding-top:var(--space-s)}@media (max-width:1100px){.index--project-secondary .index--project-info{grid-template-columns:1fr;gap:var(--space-s)}}@media (max-width:960px){.index--projects{max-width:var(--max-width)}.index--project-info{grid-template-columns:1fr;gap:var(--space-s)}.index--projects-grid{gap:var(--space-xxl)}.index--projects-grid,.work-details{grid-template-columns:1fr}.about--experience{margin-left:auto;margin-right:auto;max-width:var(--max-width)}.about--experience-row{grid-template-columns:1fr}.blog-list--cluster{display:block;margin-bottom:var(--space-xl)}.blog-list--item,.blog-list--year{margin-bottom:var(--space-m)}.vb-grid{grid-template-columns:1fr}audio,figure,iframe,img,video{max-width:100%!important;margin-left:0;margin-right:0;border-radius:var(--border-radius)}iframe{width:100vw;aspect-ratio:16/9}.gallery-wrapper{margin:var(--space-m) auto;transform:translateX(0)}.image-gallery{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:var(--space-m);width:100%;margin:var(--space-m) auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;justify-content:flex-start}figure{margin:var(--space-xl) 0;overflow:hidden}}@media (max-width:480px){body{padding:0 var(--space-l)}.work-details{flex-direction:column}.work-list{margin-top:var(--space-m)}.company-group:first-child{margin-top:0}.company-group{margin-top:var(--space-xxl);grid-template-columns:1fr}.labs-grid{grid-template-columns:1fr 1fr}}@media (max-width:600px){.labs-grid{grid-template-columns:1fr}nav ul{margin:0;list-style:none;display:flex;gap:var(--space-m);padding:0;letter-spacing:.1px;min-height:45px}header,nav ul{align-items:center}header{margin-top:var(--space-xl);margin-bottom:var(--space-xl)}footer svg,header svg{transform:scale(.9)}header .logo{opacity:1}nav a{opacity:.35}nav .active{opacity:1}h1{margin-bottom:var(--space-l)}h1,section{margin-top:var(--space-xl)}footer{margin-top:var(--space-xxl);margin-bottom:var(--space-xl)}main{padding-bottom:var(--space-xl)}.index--project{margin-bottom:var(--space-xl)}.index--projects-grid{gap:var(--space-xl)}.index--project-info{margin-top:var(--space-s)}.blog-list{margin-top:0}.about--experience,.blog-list--cluster{margin-bottom:var(--space-xl)}.about--experience{margin-top:var(--space-xl)}.post-wrapper{margin:var(--space-xl) auto}.about--experience-row{gap:var(--space-s);margin-bottom:var(--space-l)}.work-details{margin-bottom:var(--space-xxl)}figcaption{margin-top:var(--space-m)}}@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}