:root{--blue:#387ff5;--blue-hover:#2f73ed;--page-bg:#0d0d0d;--text:#ffffff;--stress:#ffffff;--secondary:rgba(255,255,255,0.6);--subtle:rgba(255,255,255,0.4);--border:rgba(255,255,255,0.14);--border-strong:rgba(255,255,255,0.22);--hover-gray:rgba(255,255,255,0.08);--white:#ffffff;--ease-gentle:cubic-bezier(0.16,1,0.3,1);--content-max:672px;--avatar-shadow:0 34px 28px rgba(56,127,245,0.16),0 14px 18px rgba(255,255,255,0.08),0 0 0 1px rgba(255,255,255,0.14)}:root[data-theme=light]{--blue:#16a2f9;--blue-hover:#0f8ed8;--page-bg:#ffffff;--text:#15171a;--stress:#15171a;--secondary:#738a94;--subtle:rgba(21,23,26,0.55);--border:rgba(21,23,26,0.12);--border-strong:rgba(21,23,26,0.2);--hover-gray:rgba(21,23,26,0.06);--avatar-shadow:0 40px 24px rgba(0,0,0,0.12),0 16px 12px rgba(0,0,0,0.1),0 0 0 1px rgba(0,0,0,0.08)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-width:320px;background:var(--page-bg);color:var(--text);font-family:var(--font-body),Arial,sans-serif;font-synthesis:none}a{color:inherit;text-decoration:none}.inline-text-link{color:var(--blue);text-decoration:underline;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-thickness:1px;text-underline-offset:4px;transition:color .16s ease-out}.inline-text-link:focus-visible,.inline-text-link:hover{color:var(--blue-hover)}h1,h2,h3,p,ul{margin:0}img{display:block}.figma-page,.figma-stage{width:100%;min-height:100vh;background:var(--page-bg)}.figma-page{max-width:375px;margin:0 auto;overflow:hidden}.section{width:100%;padding-right:16px;padding-left:16px;background:var(--page-bg);scroll-margin-top:24px}.section-inner{width:min(100%,var(--content-max));margin-right:auto;margin-left:auto}.experience-images img,.hero-photo img,.project-card>img{width:100%;height:100%;object-fit:cover}.hero-section{padding-top:40px;padding-bottom:24px}.hero-top{justify-content:space-between;gap:16px}.hero-id,.hero-top{display:flex;align-items:flex-start}.hero-id{min-width:0;gap:12px}.hero-photo{position:relative;flex:0 0 auto;width:64px;height:64px;perspective:480px;transform:rotate(-3.14deg)}.hero-photo-card{position:relative;display:block;width:100%;height:100%;transform-origin:center;transform-style:preserve-3d;-webkit-transform-style:preserve-3d;transition:transform .72s var(--ease-gentle)}.hero-photo:hover .hero-photo-card{transform:rotateY(180deg)}.hero-photo-face{position:absolute;inset:0;overflow:hidden;border:4px solid var(--page-bg);border-radius:18px;box-shadow:var(--avatar-shadow);backface-visibility:hidden;-webkit-backface-visibility:hidden}.hero-photo-face img{width:100%;height:100%;object-fit:cover}.hero-photo-back{transform:rotateY(180deg)}.hero-id-copy{min-width:0;padding-top:1px}.hero-id-copy h1{color:var(--text);font-family:var(--font-body),-apple-system,system-ui,sans-serif;font-size:25px;font-weight:500;line-height:1.2}.hero-id-copy p{margin-top:8px;color:var(--secondary);font-size:16px;line-height:1.6}.social-icons{display:flex;height:32px;align-items:center;gap:8px;margin-top:8px}.social-icons .divider{width:1px;height:18px;background:var(--border-strong)}.social-button{display:grid;width:32px;height:32px;place-items:center;padding:6px;border-radius:999px;color:var(--secondary);transition:background-color .1s ease-out}.social-button svg{display:block;width:20px;height:20px;fill:currentColor}.social-button-scholar svg{width:21px;height:21px}.theme-toggle{flex:0 0 auto;border:0;background:transparent;cursor:pointer;font:inherit}.theme-toggle-icon,.theme-toggle-icon svg{display:block;width:20px;height:20px}.social-button:focus-visible,.social-button:hover{background:var(--hover-gray);color:var(--stress)}.hero-title{width:100%;margin-top:24px;color:var(--text);font-family:var(--font-body),-apple-system,system-ui,sans-serif;font-size:31px;font-weight:500;line-height:1.32}.hero-copy-group{display:grid;grid-gap:24px;gap:24px;margin-top:20px}.hero-copy-block{display:grid;grid-gap:6px;gap:6px}.hero-copy-label{font-weight:600}.hero-copy,.hero-copy-label{color:var(--text);font-size:17px;line-height:1.6}.hero-copy{width:100%;font-weight:400}.button-row{display:flex;gap:12px;margin-top:32px}.figma-button{position:relative;display:inline-flex;height:44px;align-items:center;justify-content:center;padding:6px 6px 6px 16px;border-radius:14px;background:var(--blue);color:var(--white);font-family:var(--font-body),-apple-system,system-ui,sans-serif;font-size:14px;font-weight:700;line-height:1.26;transition:background-color 1022ms var(--ease-gentle),border-color 1022ms var(--ease-gentle),color 1022ms var(--ease-gentle)}.figma-button span:first-child{padding-right:14px;white-space:nowrap}.figma-button:focus-visible,.figma-button:hover{background:var(--blue-hover)}.arrow-mark{position:relative;display:grid;width:32px;height:32px;place-items:center;border-radius:10px;background:var(--white);color:var(--blue);overflow:hidden}.arrow-mark img{position:absolute;width:10.5px;height:10.5px;object-fit:contain;transition:opacity 1022ms var(--ease-gentle),transform 1022ms var(--ease-gentle)}.arrow-mark .arrow-current{transform:translate(0)}.arrow-mark .arrow-next{transform:translate(-18px,18px)}.figma-button:focus-visible .arrow-current,.figma-button:hover .arrow-current{opacity:0;transform:translate(18px,-18px)}.figma-button:focus-visible .arrow-next,.figma-button:hover .arrow-next{transform:translate(0)}.section-header{display:flex;flex-direction:column;align-items:flex-start;gap:12px}.section-header h2{color:var(--stress);font-size:22px;line-height:1.16}.project-card h3,.section-header h2{font-family:var(--font-body),-apple-system,system-ui,sans-serif;font-weight:500}.project-card h3{color:var(--blue);font-size:16px;line-height:1.55;transition:color .16s ease-out}.projects-section{padding-top:24px;padding-bottom:32px}.project-list{--project-date-width:92px;--project-thumb-height:42px;--project-thumb-width:56px;display:flex;flex-direction:column;margin-top:24px}.project-card{display:grid;width:100%;grid-template-columns:minmax(0,var(--project-date-width)) var(--project-thumb-width) minmax(0,1fr) 22px;grid-gap:10px;gap:10px;align-items:center;padding:14px 0;color:inherit;text-decoration:none}.project-card>img{display:block;width:var(--project-thumb-width);height:var(--project-thumb-height);aspect-ratio:4/3;border-radius:6px;object-fit:cover}.project-meta{color:var(--secondary);font-size:15px;line-height:1.45}.project-content{min-width:0;padding:0}.project-card:focus-visible h3,.project-card:hover h3{color:var(--blue-hover);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}.project-list-arrow{position:relative;display:grid;width:22px;height:22px;overflow:hidden;place-items:center}.project-list-arrow img,.project-list-arrow:after{position:absolute;width:7.63px;height:7.63px;transition:opacity 511ms var(--ease-gentle),transform 511ms var(--ease-gentle)}.project-list-arrow:after{background:url(/assets/icons/arrow-link-blue.svg) 50%/contain no-repeat;content:"";transform:translate(-16px,16px)}.project-card:focus-visible .project-list-arrow img,.project-card:hover .project-list-arrow img{opacity:0;transform:translate(16px,-16px)}.project-card:focus-visible .project-list-arrow:after,.project-card:hover .project-list-arrow:after{transform:translate(0)}.blog-section{padding-top:24px;padding-bottom:24px}.blog-list{--blog-date-width:92px;--blog-date-width-no-cover:112px;--blog-thumb-height:42px;--blog-thumb-width:56px;margin-top:24px}.blog-list-item{display:grid;grid-template-columns:minmax(0,var(--blog-date-width)) var(--blog-thumb-width) minmax(0,1fr);grid-gap:10px;gap:10px;align-items:center;padding:14px 0;color:inherit}.blog-list-item-no-cover{grid-template-columns:minmax(0,var(--blog-date-width-no-cover)) minmax(0,1fr);align-items:baseline}.blog-list-thumb{display:block;width:var(--blog-thumb-width);height:var(--blog-thumb-height);overflow:hidden;border-radius:6px;background:var(--hover-gray)}.blog-list-thumb img{width:100%;height:100%;object-fit:cover}.blog-list-item time{color:var(--secondary);font-size:15px;line-height:1.45}.blog-list-title{color:var(--blue);font-size:16px;font-weight:500;line-height:1.55;transition:color .16s ease-out}.blog-list-item:focus-visible .blog-list-title,.blog-list-item:hover .blog-list-title{color:var(--blue-hover);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:4px}.newsletter-subscribe-card{padding:17px 18px 18px;border:1px solid var(--border);border-radius:8px;background:color-mix(in srgb,var(--text) 3%,transparent);text-align:center}.newsletter-subscribe-home{margin-top:24px}.newsletter-card-copy{color:var(--text);font-size:15px;font-weight:400;line-height:1.45}.newsletter-control{min-width:0}.newsletter-form{width:100%;max-width:440px}.newsletter-subscribe-card .newsletter-form{max-width:400px;margin:16px auto 0}.newsletter-input-label{-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.newsletter-honeypot,.newsletter-input-label{position:absolute;width:1px;height:1px;overflow:hidden}.newsletter-honeypot{left:-10000px}.subscribe-confirm-section{display:flex;min-height:100vh;align-items:center;padding-top:48px;padding-bottom:48px}.subscribe-confirm-content{width:100%;text-align:center}.subscribe-confirm-content h1{color:var(--stress);font-size:28px;font-weight:500;line-height:1.25}.subscribe-confirm-content p{max-width:440px;margin:14px auto 0;color:var(--secondary);font-size:16px;line-height:1.6}.subscribe-confirm-content a{display:inline-block;margin-top:24px;color:var(--blue);font-size:15px;line-height:1.5}.subscribe-confirm-content a:focus-visible,.subscribe-confirm-content a:hover{color:var(--blue-hover);text-decoration:underline;text-underline-offset:4px}.newsletter-fields{display:grid;grid-template-columns:minmax(0,1fr) auto}.newsletter-fields button,.newsletter-fields input{min-width:0;height:40px;border-radius:7px;font:inherit;font-size:14px}.newsletter-fields input{width:100%;padding:0 13px;border:1px solid var(--border-strong);outline:none;background:transparent;color:var(--text);transition:border-color .16s ease-out,box-shadow .16s ease-out}.newsletter-fields input::placeholder{color:var(--secondary);opacity:.8}.newsletter-fields input:focus-visible{border-color:var(--blue);box-shadow:0 0 0 3px color-mix(in srgb,var(--blue) 20%,transparent)}.newsletter-fields input[aria-invalid=true]{border-color:#d94c4c}.newsletter-fields button{min-width:96px;padding:0 14px;border:1px solid var(--blue);background:var(--blue);color:var(--white);cursor:pointer;font-weight:500;white-space:nowrap;transition:background-color .16s ease-out,border-color .16s ease-out,transform .1s ease-out}.newsletter-subscribe-card .newsletter-fields button,.newsletter-subscribe-card .newsletter-fields input{height:44px}.newsletter-subscribe-card .newsletter-fields{border-radius:7px;transition:box-shadow .16s ease-out}.newsletter-subscribe-card .newsletter-fields:focus-within{box-shadow:0 0 0 3px color-mix(in srgb,var(--blue) 20%,transparent)}.newsletter-subscribe-card .newsletter-fields input{border-radius:7px 0 0 7px;background:var(--page-bg)}.newsletter-subscribe-card .newsletter-fields input:focus-visible{box-shadow:none}.newsletter-subscribe-card .newsletter-fields button{border-radius:0 7px 7px 0}.newsletter-fields button:focus-visible,.newsletter-fields button:hover{border-color:var(--blue-hover);background:var(--blue-hover)}.newsletter-fields button:focus-visible{outline:3px solid color-mix(in srgb,var(--blue) 24%,transparent);outline-offset:2px}.newsletter-subscribe-card .newsletter-fields button:focus-visible{outline:none}.newsletter-fields button:active{transform:translateY(1px)}.newsletter-fields button:disabled{cursor:wait;opacity:.7}.newsletter-error,.newsletter-success{font-size:14px;line-height:1.5}.newsletter-subscribe-card .newsletter-success{justify-content:center;min-height:44px;margin-top:16px}.newsletter-card-note{margin-top:9px;color:var(--secondary);font-size:12px;line-height:1.4}.newsletter-error{margin-top:8px;color:#d94c4c}.newsletter-success{display:flex;min-height:40px;align-items:center;color:var(--text)}.newsletter-subscribe-article{margin-top:48px}@media (max-width:519px){.newsletter-subscribe-card{padding-right:16px;padding-left:16px}}.blog-post-section{padding-top:40px;padding-bottom:64px}.blog-back-link{display:inline-flex;color:var(--blue);font-size:15px;line-height:1.45;transition:color .16s ease-out}.blog-back-link:focus-visible,.blog-back-link:hover{color:var(--blue-hover)}.blog-post-header{margin-top:40px}.blog-post-date{color:var(--secondary);font-size:15px;line-height:1.45}.blog-post-header h1{margin-top:12px;color:var(--stress);font-size:31px;font-weight:500;line-height:1.22}.blog-post-content{margin-top:28px;color:var(--text);font-size:17px;line-height:1.6}.blog-post-content>*+*{margin-top:1em}.blog-post-content h2,.blog-post-content h3{color:var(--stress);font-weight:500;line-height:1.28}.blog-post-content h2{margin-top:2em;font-size:24px}.blog-post-content h3{margin-top:1.6em;font-size:20px}.blog-post-content a{color:var(--blue);text-decoration:underline;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-thickness:1px;text-underline-offset:4px;transition:color .16s ease-out}.blog-post-content a:focus-visible,.blog-post-content a:hover{color:var(--blue-hover)}.blog-post-content img{width:100%;height:auto;border-radius:8px}.blog-post-content table{display:block;width:100%;overflow-x:auto;border-collapse:collapse;font-size:15px;line-height:1.45}.blog-post-content td,.blog-post-content th{min-width:150px;padding:10px 12px;border:1px solid var(--hairline);text-align:left;vertical-align:top}.blog-post-content th{color:var(--stress);font-weight:500;background:var(--hover-gray)}.blog-post-content ol,.blog-post-content ul{padding-left:1.35em}.blog-post-content li+li{margin-top:.35em}.blog-post-content code{font-size:.92em}.blog-post-content pre{overflow-x:auto;padding:14px 16px;border-radius:6px;background:var(--hover-gray);color:var(--stress);font-size:15px;line-height:1.55}.blog-post-content pre code{font-size:inherit}.blog-post-content .katex-display{overflow-x:auto;overflow-y:hidden;padding:2px 0 6px}.blog-post-content .katex{color:var(--stress);font-size:1.02em}.experience-arrow{position:relative;display:grid;width:22px;height:26px;flex:0 0 auto;padding:5px 3px;overflow:hidden;place-items:center}.experience-arrow img,.experience-arrow:after{position:absolute;top:9px;left:7.185px;width:7.63px;height:7.63px;transition:opacity 511ms var(--ease-gentle),transform 511ms var(--ease-gentle)}.experience-arrow:after{background:url(/assets/icons/arrow-link-blue.svg) 50%/contain no-repeat;content:"";transform:translate(-16px,16px)}.experience-link:focus-visible .experience-arrow img,.experience-link:hover .experience-arrow img{opacity:0;transform:translate(16px,-16px)}.experience-link:focus-visible .experience-arrow:after,.experience-link:hover .experience-arrow:after{transform:translate(0)}.experience-section{padding-top:24px;padding-bottom:32px}.experience-list{margin-top:24px}.experience-item{padding:14px 0}.experience-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px}.period,.place{color:var(--secondary);font-size:15px;line-height:1.45}.period{flex:0 0 112px}.place:before{color:var(--subtle);content:"/";padding-right:10px}.experience-row h3{display:flex;align-items:flex-start;gap:2px;color:var(--text);font-size:16px;font-weight:500;line-height:1.6}.experience-link{position:relative;display:inline-flex;align-items:flex-start;gap:4px;color:var(--blue);transition:color .16s ease-out}.experience-link:after{position:absolute;right:0;bottom:1px;left:0;height:1px;background:currentColor;content:"";transform:scaleX(0);transform-origin:left;transition:transform 511ms var(--ease-gentle)}.experience-link:focus-visible:after,.experience-link:hover:after{transform:scaleX(1)}.experience-link:focus-visible,.experience-link:hover{color:var(--blue-hover)}.experience-row h3 span{color:inherit}.experience-content{width:100%;min-width:0}.experience-description{margin-top:6px;color:var(--text);font-size:16px;line-height:1.55}.experience-images{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}.experience-images img{width:150px;height:90px;border:1px solid var(--border);border-radius:8px}.experience-images img:last-child{width:90px}.publication-summary{width:100%;margin-top:24px;color:var(--text);font-size:17px;line-height:1.6}.publication-summary-link{color:var(--blue);text-decoration:underline;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-thickness:1px;text-underline-offset:4px;transition:color .16s ease-out,-webkit-text-decoration-color .16s ease-out;transition:color .16s ease-out,text-decoration-color .16s ease-out;transition:color .16s ease-out,text-decoration-color .16s ease-out,-webkit-text-decoration-color .16s ease-out}.publication-summary-link:focus-visible,.publication-summary-link:hover{color:var(--blue-hover);-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}.publication-summary-muted{color:var(--secondary)}.publication-summary-muted .publication-summary-link{color:var(--blue);-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}.publication-summary-muted .publication-summary-link:focus-visible,.publication-summary-muted .publication-summary-link:hover{color:var(--blue-hover);-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}@media (min-width:810px){.figma-page{max-width:none}.section{padding-right:24px;padding-left:24px}.hero-section{padding-top:80px;padding-bottom:32px}.hero-title{margin-top:24px;font-size:39px}.button-row{margin-top:28px}.section-header h2{font-size:22px}.hero-title,.section-header h2{letter-spacing:0}.projects-section{padding-top:36px;padding-bottom:40px}.blog-section{padding-top:32px;padding-bottom:28px}.project-list{--project-date-width:122px;--project-thumb-height:48px;--project-thumb-width:64px;width:100%;margin:24px 0 0}.experience-section{padding-top:32px;padding-bottom:40px}.experience-list{margin-top:24px}.experience-content{padding-left:122px}.blog-list{--blog-date-width:122px;--blog-date-width-no-cover:122px;--blog-thumb-height:48px;--blog-thumb-width:64px}.blog-post-section{padding-top:80px;padding-bottom:88px}.blog-post-header h1{font-size:39px}}@media (min-width:1200px){.section{padding-right:32px;padding-left:32px}.hero-section{padding-top:104px;padding-bottom:32px}.hero-title{margin-top:28px}.hero-copy-group{margin-top:24px}.projects-section{padding-top:36px;padding-bottom:40px}.blog-section{padding-top:32px;padding-bottom:28px}.project-list{--project-date-width:130px;width:100%;margin-top:24px}.experience-section{padding-top:36px;padding-bottom:40px}.experience-list{margin-top:24px}.period{flex-basis:120px}.blog-list{--blog-date-width:130px;--blog-date-width-no-cover:130px}.experience-content{padding-left:130px}}@media (prefers-reduced-motion:reduce){*,:after,:before{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}}