html.lenis,html.lenis body{height:auto}.lenis:not(.lenis-autoToggle).lenis-stopped{overflow:clip}.lenis [data-lenis-prevent],.lenis [data-lenis-prevent-wheel],.lenis [data-lenis-prevent-touch],.lenis [data-lenis-prevent-vertical],.lenis [data-lenis-prevent-horizontal]{overscroll-behavior:contain}.lenis.lenis-smooth iframe{pointer-events:none}.lenis.lenis-autoToggle{transition-behavior:allow-discrete;transition-property:overflow;transition-duration:1ms}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/assets/manrope-latin-wght-normal-DHIcAJRg.woff2)format("woff2")}@font-face{font-family:Libre Baskerville;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/libre-baskerville-latin-400-normal-C42RasBZ.woff2)format("woff2")}@font-face{font-family:Libre Baskerville;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/libre-baskerville-latin-700-normal-CLGq6Yj4.woff2)format("woff2")}:root{font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--background:#f3f0e7;--surface:#e8e9de;--foreground:#203126;--body:#425649;--muted:#576b5c;--accent:#416449;--line:#bcc4b6;--button-ink:#f5f3eb;--display:"Libre Baskerville", Georgia, serif;--ease:cubic-bezier(.16, 1, .3, 1);font-family:Manrope Variable,sans-serif}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--background:#111a16;--surface:#1a2720;--foreground:#ecebe2;--body:#c0c9c1;--muted:#95a397;--accent:#b1c6a4;--line:#36433a;--button-ink:#18251b}*{box-sizing:border-box}html{scrollbar-color:var(--line) var(--background)}body{background:var(--background);color:var(--foreground);margin:0;transition:background-color .24s,color .2s}body,button,a{-webkit-tap-highlight-color:transparent}button,input,textarea{font:inherit}button,a{touch-action:manipulation}button{color:inherit}a{color:inherit;text-underline-offset:5px;text-decoration:none}button{cursor:pointer}a,button,summary{-webkit-tap-highlight-color:transparent}button:disabled{cursor:not-allowed}button,summary,a{outline-offset:6px}:focus-visible{outline:2px solid var(--accent)}::selection{background:var(--accent);color:var(--button-ink)}svg{flex-shrink:0}h1,h2,h3,h4,p,ul,figure{margin:0}h1,h2,h3,h4{font-weight:500}h1,h2{text-wrap:balance}p{text-wrap:pretty}img{max-width:100%;display:block}button{border:0}[hidden]{display:none!important}.accent{color:var(--accent)}.reveal-pending{opacity:0}.reveal-pending:focus-within{opacity:1}@media print{.reveal-pending{opacity:1!important}}.skip-link{z-index:100;color:var(--button-ink);background:var(--accent);padding:12px 20px;position:fixed;top:12px;left:20px;transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}.site-header{z-index:30;background:var(--background);border-bottom:1px solid #0000;transition:border-color .25s,background-color .24s;position:sticky;top:0}.site-header.is-scrolled{border-bottom-color:var(--line)}.reading-progress{pointer-events:none;height:2px;position:absolute;inset:auto 0 -1px}.reading-progress>span{background:var(--accent);height:100%;transform:scaleX(var(--reading-progress,0));transform-origin:0;display:block}.header-inner{justify-content:space-between;align-items:center;gap:30px;width:min(1440px,100% - 96px);min-height:88px;margin-inline:auto;display:flex}.wordmark{font-family:var(--display);letter-spacing:-.035em;white-space:nowrap;font-size:30px;font-weight:700}.wordmark span{color:var(--accent)}.desktop-nav{align-items:center;gap:30px;margin-left:auto;display:flex}.desktop-nav a{color:var(--body);padding-block:14px;font-size:13px;transition:color .12s;position:relative}.desktop-nav a:after{content:"";background:var(--accent);transform-origin:0;height:1px;transition:transform .14s var(--ease);position:absolute;inset:auto 0 6px;transform:scaleX(0)}.desktop-nav a:hover,.desktop-nav a[aria-current]{color:var(--foreground)}.desktop-nav a:hover:after,.desktop-nav a[aria-current]:after{transform:scaleX(1)}.header-actions{flex-shrink:0;align-items:center;gap:18px;display:flex}.icon-button{width:42px;height:42px;color:var(--body);background:0 0;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:color .18s,background-color .18s;display:inline-flex}.icon-button:hover{color:var(--foreground);background:var(--surface)}.header-contact{border-left:1px solid var(--line);align-items:center;gap:12px;padding:12px 0 12px 16px;font-size:13px;display:inline-flex}.menu-toggle,.mobile-navigation{display:none}.portfolio-layout{grid-template-columns:132px minmax(0,1fr);align-items:start;gap:50px;width:min(1440px,100% - 96px);margin-inline:auto;display:grid}.section-rail{padding-top:2px;position:sticky;top:150px}.section-rail nav{flex-direction:column;padding-left:18px;display:flex;position:relative}.section-rail nav a{height:44px;color:var(--muted);transition:color .16s ease, transform .3s var(--ease);white-space:nowrap;align-items:center;font-size:11px;display:flex}.section-rail nav a:hover,.section-rail nav a[aria-current]{color:var(--foreground)}.section-rail nav a[aria-current]{transform:translate(4px)}.rail-track{background:var(--line);width:1px;height:264px;position:absolute;top:0;left:0}.rail-marker{background:var(--accent);width:3px;height:24px;transform:translateY(calc(var(--chapter-position,var(--active-index)) * 44px));border-radius:2px;display:block;position:absolute;top:10px;left:-1px}.rail-cv{color:var(--body);align-items:center;gap:10px;margin-top:40px;font-size:11px;display:inline-flex}main{min-width:0}main section,.project-entry{scroll-margin-top:112px}.hero{border-bottom:1px solid var(--line);padding:80px 0 26px}.hero h1{font-family:var(--display);letter-spacing:-.035em;font-size:clamp(42px,5.5vw,81px);font-weight:400;line-height:1.12}.hero-line{margin-bottom:-.12em;padding-bottom:.12em;display:block;overflow:clip}.hero-line>span{display:block}.hero-line-accent{color:var(--accent)}.hero-bottom{grid-template-columns:1.2fr 1fr;align-items:end;gap:60px;margin-top:34px;display:grid}.hero-description{max-width:60ch;color:var(--body);font-size:16px;line-height:1.9}.hero-links{flex-wrap:wrap;align-items:center;gap:22px;padding-bottom:5px;display:flex}.button{white-space:nowrap;border-radius:3px;justify-content:center;align-items:center;gap:24px;min-height:48px;padding:14px 20px;font-size:12px;font-weight:600;line-height:1.5;transition:background-color .22s,color .22s,border-color .22s;display:inline-flex}.button-primary{background:var(--accent);color:var(--button-ink)}.button-primary:hover{background:var(--foreground)}.button svg{transition:transform .4s var(--ease)}.button-primary:hover svg{transform:translateY(3px)}.button-outline{border:1px solid var(--line);color:var(--foreground);background:0 0}.button-outline:hover{border-color:var(--accent);background:var(--surface)}.text-link{width:fit-content;color:var(--body);align-items:center;gap:12px;padding-block:9px;font-size:12px;display:inline-flex}.text-link:hover{color:var(--foreground)}.text-link svg{transition:transform .35s var(--ease)}.text-link:hover svg{transform:translate(2px,-2px)}.hero-footnote{color:var(--muted);justify-content:space-between;gap:24px;margin-top:64px;font-size:11px;line-height:1.7;display:flex}.hero-footnote a{align-items:center;gap:12px;display:flex}.section{border-bottom:1px solid var(--line);padding:96px 0}.section-heading{justify-content:space-between;align-items:end;gap:40px;margin-bottom:56px;display:flex}h2{font-family:var(--display);letter-spacing:-.025em;font-size:clamp(36px,3.9vw,56px);font-weight:400;line-height:1.15}.section-heading>p{color:var(--muted);font-size:13px;line-height:1.8}.work-section{padding-bottom:0}.project-entry{border-top:1px solid var(--line);padding:64px 0 32px}.project-entry:first-of-type{border-top:0;padding-top:0}.project-content{width:100%;min-width:0}.project-layout{grid-template-columns:.9fr 1.15fr;align-items:center;gap:56px;display:grid}.project-reversed .project-layout{grid-template-columns:1.15fr .9fr}.project-reversed .project-copy{order:2}.project-copy h3{font-family:var(--display);letter-spacing:-.025em;font-size:clamp(38px,4.6vw,64px);font-weight:400;line-height:1.15}.project-description{font-family:var(--display);color:var(--foreground);margin-top:10px;font-size:21px;line-height:1.4}.project-summary{color:var(--body);max-width:60ch;margin-top:24px;font-size:14px;line-height:1.9}.project-contributions{max-width:60ch;margin-top:20px}.project-contributions h4{color:var(--foreground);font-size:12px;font-weight:600;line-height:1.7}.project-contributions p{color:var(--body);margin-top:8px;font-size:13px;line-height:1.9}.stack-list{flex-wrap:wrap;gap:8px 16px;margin-top:26px;padding:0;list-style:none;display:flex}.stack-list li{color:var(--accent);font-size:11px;line-height:1.7}.project-screenshot{aspect-ratio:16/10;border:1px solid var(--line);background:var(--surface);border-radius:4px;min-width:0;transition:border-color .35s;overflow:hidden}.project-screenshot:hover{border-color:var(--muted)}.project-screenshot img{object-fit:cover;width:100%;height:100%}.screenshot-placeholder{height:100%;color:var(--body);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:11px;padding:24px;display:flex}.screenshot-placeholder>svg{color:var(--muted);margin-bottom:9px}.screenshot-placeholder>span{font-size:12px;line-height:1.7}.screenshot-placeholder .placeholder-note{color:var(--muted);font-size:11px}.screenshot-gallery{width:100%;min-width:0}.gallery-frame{border:1px solid var(--line);background:var(--surface);text-align:start;touch-action:pan-y;border-radius:4px;width:100%;padding:2px;transition:border-color .25s,background-color .24s;display:block}.gallery-frame:hover{border-color:var(--muted)}.gallery-stage{aspect-ratio:16/9;isolation:isolate;background:var(--background);border-radius:2px;display:block;position:relative;overflow:hidden}.gallery-slide{object-fit:contain;visibility:hidden;opacity:0;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;inset:0}.gallery-slide.is-current{visibility:visible;opacity:1}.gallery-hint{z-index:3;background:var(--background);width:28px;height:28px;color:var(--body);opacity:.72;pointer-events:none;border-radius:50%;justify-content:center;align-items:center;transition:opacity .18s,color .18s;display:inline-flex;position:absolute;inset:auto 8px 8px auto}.gallery-frame:hover .gallery-hint,.gallery-frame:focus-visible .gallery-hint{color:var(--accent);opacity:1}.gallery-status{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.gallery-error{color:var(--body);margin-top:8px;font-size:12px;line-height:1.7}.no-js .gallery-hint{display:none}.no-js .gallery-frame{cursor:default}.scrolling-frame{position:relative}.scrolling-frame:focus-within{outline:2px solid var(--accent);outline-offset:6px}.scrolling-deck{aspect-ratio:var(--scroll-preview-aspect,16 / 9);isolation:isolate;border-radius:2px;position:relative;overflow:hidden}.scrolling-page{visibility:hidden;opacity:0;position:absolute;inset:0}.scrolling-page.is-current{visibility:visible;opacity:1}.scrolling-stage{border-radius:2px;height:100%;position:relative;overflow:hidden}.gallery-scroll-window{background:var(--background);scrollbar-width:thin;scrollbar-color:var(--line) var(--surface);border-radius:2px;height:100%;overflow:auto}.scroll-image-button{text-align:start;background:0 0;border:0;width:100%;padding:0;display:block}.scroll-image-error{background:var(--background);color:var(--body);padding:12px;font-size:12px;line-height:1.7;position:absolute;inset:auto 12px 12px}.has-fixed-sidebar .gallery-scroll-window{scrollbar-width:none}.gallery-fixed-sidebar{width:var(--scroll-sidebar-width);pointer-events:none;position:absolute;inset:0 auto 0 0;overflow:hidden}.gallery-fixed-sidebar img{width:var(--scroll-source-width);-webkit-user-select:none;user-select:none;max-width:none;height:auto}.gallery-fixed-header{aspect-ratio:var(--scroll-header-aspect);clip-path:inset(0 0 0 var(--scroll-header-left));pointer-events:none;position:absolute;inset:0 0 auto;overflow:hidden}.gallery-fixed-header img{-webkit-user-select:none;user-select:none;width:100%;height:auto}.gallery-scroll-window:focus-visible{outline-offset:4px}.gallery-scroll-image{-webkit-user-select:none;user-select:none;width:100%;height:auto}.scrolling-frame:focus-within .gallery-hint{color:var(--accent);opacity:1}.engineering-notes{border-top:1px solid var(--line);margin-top:32px;padding-top:24px;position:relative}.engineering-notes:after{content:"";background:var(--accent);height:1px;transform:scaleX(var(--section-progress,0));transform-origin:0;pointer-events:none;position:absolute;inset:-1px 0 auto}summary{cursor:pointer;list-style:none}summary::-webkit-details-marker{display:none}summary svg{transition:transform .35s var(--ease)}details[open]>summary svg{transform:rotate(45deg)}.engineering-notes-content{grid-template-columns:repeat(3,minmax(0,1fr));gap:28px;padding-bottom:28px;display:grid}.engineering-notes-content>div+div{border-left:1px solid var(--line);padding-left:28px}.engineering-notes-content h4{margin-bottom:10px;font-size:13px;font-weight:600;line-height:1.7}.engineering-notes-content p{color:var(--body);text-align:justify;text-justify:inter-word;-webkit-hyphens:auto;hyphens:auto;max-width:65ch;font-size:13px;line-height:1.85}@supports (interpolate-size:allow-keywords){details{interpolate-size:allow-keywords}details::details-content{block-size:0;transition:block-size .42s var(--ease), content-visibility .42s allow-discrete;overflow:clip}details[open]::details-content{block-size:auto}}.security-section{grid-template-columns:.9fr 1.15fr;gap:80px;display:grid}.section-intro{align-self:start;position:sticky;top:138px}.section-intro h2{font-size:clamp(34px,3.4vw,48px)}.section-intro>p{color:var(--body);max-width:50ch;margin-top:28px;font-size:14px;line-height:1.9}.section-note{color:var(--accent);margin-top:30px;font-size:11px;line-height:1.8;display:block}.concept{border-top:1px solid var(--line)}.concept:last-child{border-bottom:1px solid var(--line)}.concept summary{justify-content:space-between;align-items:center;gap:24px;padding:24px 0;font-size:14px;line-height:1.6;display:flex}.concept-content{padding:0 34px 28px 0}.concept-content>p{color:var(--body);font-size:12px;line-height:1.95}.concept-content .concept-summary{color:var(--foreground);margin-bottom:16px;font-size:13px}.concept-content .text-link{color:var(--accent);margin-top:16px}.research-section{padding-block:80px}.research-section .section-heading{margin-bottom:44px}.research-layout{grid-template-columns:1.1fr 1fr;align-items:start;gap:56px;display:grid}.research-copy h3{max-width:19ch;font-family:var(--display);letter-spacing:-.025em;text-wrap:pretty;font-size:clamp(30px,3vw,42px);font-weight:400;line-height:1.35}.research-copy h3 em{color:var(--accent);font-style:normal}.research-copy>p,.experience-record>p{color:var(--body);max-width:60ch;margin-top:24px;font-size:14px;line-height:1.9}.experience-record{border-left:1px solid var(--line);padding:4px 0 4px 32px}.experience-meta h3{font-size:15px;font-weight:600;line-height:1.7}.experience-meta>p{color:var(--body);margin-top:4px;font-size:14px;line-height:1.8}.experience-meta>span{color:var(--muted);margin-top:12px;font-size:12px;line-height:1.8;display:block}.research-skills{grid-template-columns:repeat(3,minmax(0,1fr));gap:32px;margin-top:48px;padding:28px 0 0;list-style:none;display:grid;position:relative}.research-skills:before,.research-skills:after{content:"";background:var(--line);height:1px;position:absolute;inset:0 0 auto}.research-skills:after{background:var(--accent);transform:scaleX(var(--section-progress,0));transform-origin:0}.research-skills li{--milestone-fill:clamp(0, calc((var(--section-progress,0) - .2) * 5), 1);position:relative}.research-skills li:nth-child(2){--milestone-fill:clamp(0, calc((var(--section-progress,0) - .5) * 5), 1)}.research-skills li:nth-child(3){--milestone-fill:clamp(0, calc((var(--section-progress,0) - .7) * 5), 1)}.research-milestone{z-index:1;border:1px solid var(--accent);background:color-mix(in srgb, var(--accent) calc(var(--milestone-fill) * 100%), var(--background));border-radius:50%;width:9px;height:9px;position:absolute;top:-32px;left:0}.research-skills h4{font-size:13px;font-weight:600;line-height:1.7}.research-skills p{color:var(--muted);margin-top:6px;font-size:12px;line-height:1.8}.about-section{padding-block:80px}.about-intro,.background-grid,.tools-section{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);align-items:start;column-gap:48px;display:grid}.about-intro h2{max-width:18ch;font-size:clamp(36px,3.6vw,48px);line-height:1.25}.about-copy{max-width:65ch;padding-top:4px}.about-copy>p{color:var(--body);font-size:14px;line-height:1.9}.about-copy>p+p{margin-top:20px}.current-work{color:var(--foreground);margin-top:24px;padding-left:16px;font-size:13px;line-height:1.8;position:relative}.work-status{background:var(--accent);border-radius:50%;width:6px;height:6px;position:absolute;top:8px;left:0}.current-work-date{color:var(--muted);margin-top:4px;font-size:11px;display:block}.background-grid{border-top:1px solid var(--line);margin-top:40px;padding-top:28px}.background-block>h3,.tools-section>h3{font-family:var(--display);margin-bottom:20px;font-size:24px;font-weight:400;line-height:1.4}.education-block h4{max-width:26ch;font-family:var(--display);letter-spacing:-.02em;font-size:22px;font-weight:400;line-height:1.45}.background-block p{color:var(--body);margin-top:8px;font-size:13px;line-height:1.8}.education-details{border-top:1px solid var(--line);color:var(--muted);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:8px 24px;margin-top:20px;padding-top:16px;font-size:12px;line-height:1.8;display:flex}.education-details strong{color:var(--foreground);font-weight:600}.award{border-bottom:1px solid var(--line);grid-template-columns:104px minmax(0,1fr);align-items:baseline;gap:16px;padding-bottom:20px;display:grid}.award+.award{padding-top:20px}.award h4{font-size:13px;font-weight:600;line-height:1.7}.award>div{min-width:0}.award p{margin-top:6px}.award-place{font-family:var(--display);color:var(--accent);white-space:nowrap;font-size:24px;font-weight:400;line-height:1.4}.tools-section{border-top:1px solid var(--line);margin-top:32px;padding-top:28px}.tools-grid{gap:0;display:grid}.tools-grid>div{border-bottom:1px solid var(--line);grid-template-columns:100px 1fr;gap:20px;padding-block:16px;display:grid}.tools-grid>div:first-child{padding-top:0}.tools-grid>div:last-child{border-bottom:0;padding-bottom:0}.tools-grid h4{color:var(--accent);font-size:12px;font-weight:600;line-height:1.9}.tools-grid ul{flex-wrap:wrap;gap:4px 0;padding:0;list-style:none;display:flex}.tools-grid li{color:var(--body);font-size:12px;line-height:1.9}.tools-grid li:not(:last-child):after{content:"·";color:var(--muted);padding-inline:8px;display:inline-block}.no-js .theme-toggle,.no-js .menu-toggle,.no-js .copy-button{display:none}.no-js .research-skills:after{transform:scaleX(1)}.contact-section{border-bottom:0;padding-block:64px 32px}.contact-panel{background:var(--surface);color:var(--foreground);padding:clamp(28px,4vw,56px)}.contact-section h2{letter-spacing:-.03em;font-size:clamp(40px,5vw,72px);line-height:1.18}.contact-bottom{border-top:1px solid var(--line);justify-content:space-between;align-items:end;gap:24px;margin-top:36px;padding-top:28px;display:flex}.contact-bottom>div{min-width:0}.contact-bottom>div>p{color:var(--body);font-size:13px;line-height:1.9}.email-row{align-items:center;gap:12px;margin-top:20px;display:flex}.email-link{font-size:clamp(17px,2vw,27px);font-family:var(--display);overflow-wrap:anywhere;align-items:center;gap:16px;min-width:0;line-height:1.5;display:inline-flex}.email-link:hover{text-decoration:underline;text-decoration-thickness:1px}.email-link>span{min-width:0}.copy-button{flex-shrink:0}.copy-button:hover{background:var(--background)}.contact-bottom>div>.copy-status{min-height:22px;color:var(--accent);margin-top:6px;font-size:11px}.contact-panel .button-outline{margin-bottom:28px}.contact-panel .button-outline:hover{background:var(--background)}.site-footer{color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;padding:28px 0 36px;font-size:11px;line-height:1.8;display:flex}.site-footer a{color:var(--body);align-items:center;gap:12px;padding-block:8px;display:flex}@media (width>=901px){.project-entry{align-content:center;min-height:calc(100svh - 88px);padding-block:24px;display:grid}.project-entry:first-of-type{padding-top:24px}.project-layout>.screenshot-gallery{justify-self:center;width:min(100%,max(280px,177.778svh - 640.001px))}.engineering-notes-content{padding-bottom:0}}@media (width>=901px) and (height<=800px){.project-copy h3{font-size:clamp(36px,4vw,52px)}.project-description{margin-top:8px;font-size:18px}.project-summary{margin-top:16px;font-size:13px;line-height:1.75}.project-contributions{margin-top:14px}.project-contributions p{margin-top:6px;font-size:12px;line-height:1.75}.stack-list{margin-top:16px}.engineering-notes{margin-top:20px;padding-top:16px}.engineering-notes-content h4{margin-bottom:8px}.engineering-notes-content p{font-size:12px;line-height:1.75}}@media (width>=1600px){.portfolio-layout{grid-template-columns:154px minmax(0,1fr);gap:72px}.hero{padding-top:104px}.hero h1{font-size:84px}.hero-description{font-size:18px}.project-summary,.section-intro>p,.research-copy>p,.about-copy>p{font-size:15px}}@media (width>=1600px) and (height<=800px){.project-summary{font-size:13px}}@media (width<=1150px){.header-inner,.portfolio-layout{width:calc(100% - 64px)}.portfolio-layout{grid-template-columns:110px minmax(0,1fr);gap:30px}.desktop-nav{gap:22px}.header-actions{gap:10px}.hero{padding-top:68px}.hero-bottom{grid-template-columns:1.2fr 1fr;gap:30px}.hero-links{gap:14px}.hero-description{font-size:14px}.hero-footnote{font-size:11px}.project-layout,.project-reversed .project-layout{grid-template-columns:1fr 1fr;gap:32px}.project-description{font-size:18px}.project-summary{font-size:13px}.security-section{gap:44px}.research-layout,.about-intro,.background-grid,.tools-section{gap:32px}.section-heading>p{font-size:12px}.engineering-notes-content{gap:24px}.engineering-notes-content>div+div{padding-left:24px}.research-copy h3{font-size:30px}.experience-record{padding-left:24px}.award{grid-template-columns:96px minmax(0,1fr);gap:16px}.award-place{font-size:22px}.tools-grid>div{grid-template-columns:1fr;gap:8px}}@media (width<=900px){.portfolio-layout{display:block}.section-rail{display:none}.header-inner{min-height:78px}.desktop-nav{gap:20px}.header-contact{display:none}.hero{padding-top:64px}.hero h1{font-size:clamp(42px,7.3vw,65px)}.hero-bottom{grid-template-columns:1.25fr 1fr;gap:32px}.hero-links{justify-content:flex-start}.section{padding-block:80px}.work-section{padding-bottom:0}.project-entry{padding-top:56px}.project-screenshot{aspect-ratio:4/3}.engineering-notes-content{grid-template-columns:1fr;gap:20px}.engineering-notes-content>div{grid-template-columns:minmax(140px,.6fr) 1.4fr;gap:24px;display:grid}.engineering-notes-content>div+div{border-left:0;border-top:1px solid var(--line);padding:20px 0 0}.engineering-notes-content h4{margin-bottom:0}.section-intro{top:110px}.section-intro h2{font-size:36px}.contact-section{padding-block:56px 24px}}@media (width>=641px) and (width<=900px){.research-section,.about-section{padding-block:64px}.research-section .section-heading{align-items:start;gap:24px}.research-section .section-heading>p{max-width:20ch}.research-layout{grid-template-columns:1fr 1fr;gap:32px}.research-copy h3{font-size:30px}.research-copy>p,.experience-record>p,.about-copy>p{font-size:13px}.about-intro h2{font-size:36px}.contact-section h2{font-size:clamp(36px,6vw,48px)}.contact-bottom{flex-wrap:wrap}.contact-panel .button-outline{margin-bottom:0}}@media (width<=760px){.about-intro,.background-grid,.tools-section{display:block}.about-intro h2{font-size:clamp(36px,6vw,40px)}.about-copy{margin-top:24px;padding-top:0}.background-block+.background-block{border-top:1px solid var(--line);margin-top:28px;padding-top:28px}.tools-section>h3{margin-bottom:24px}}@media (width<=640px){.header-inner,.portfolio-layout{width:calc(100% - 40px)}.header-inner{gap:16px;min-height:74px}.wordmark{font-size:clamp(22px,6vw,27px)}.desktop-nav{display:none}.header-actions{gap:4px}.icon-button{width:44px;height:44px}.menu-toggle{display:inline-flex}.mobile-navigation{background:var(--background);border-bottom:1px solid var(--line);width:100%;padding:12px 20px 24px;display:grid;position:absolute;top:100%;left:0}.mobile-navigation a{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;min-height:48px;font-size:14px;display:flex}.mobile-navigation a[aria-current]{color:var(--accent)}main section,.project-entry{scroll-margin-top:94px}.hero{padding-top:52px;padding-bottom:20px}.hero h1{letter-spacing:-.03em;font-size:clamp(33px,8.5vw,53px);line-height:1.17}.hero-bottom{margin-top:28px;display:block}.hero-description{max-width:48ch;font-size:14px;line-height:1.9}.hero-links{gap:24px;margin-top:28px}.button{gap:18px;min-height:48px;padding-inline:18px;font-size:11px}.hero-links .text-link{font-size:11px}.hero-footnote{margin-top:44px;font-size:11px}.hero-footnote>span{max-width:180px}.hero-footnote a{justify-content:end;gap:0;min-width:36px;font-size:0}.hero-footnote a svg{width:18px;height:18px}.section{padding-block:64px}.work-section{padding-bottom:0}.section-heading{margin-bottom:40px;display:block}h2{font-size:38px}.section-heading>p{margin-top:18px;font-size:12px}.section-heading>p br{display:none}.project-entry{padding:44px 0 24px}.project-layout,.project-reversed .project-layout{flex-direction:column;align-items:stretch;gap:28px;display:flex}.project-reversed .project-copy{order:0}.project-copy h3{font-size:44px}.project-description{margin-top:8px;font-size:20px}.project-summary{margin-top:20px;font-size:13px}.stack-list{gap:8px 16px;margin-top:20px}.stack-list li{font-size:11px}.project-screenshot{aspect-ratio:16/10;width:100%}.engineering-notes{margin-top:24px}.engineering-notes-content>div{display:block}.engineering-notes-content h4{margin-bottom:8px}.security-section{display:block}.section-intro{position:static}.section-intro h2{font-size:38px}.section-intro>p{margin-top:24px;font-size:13px}.section-note{margin-top:22px}.concept-list{margin-top:36px}.concept summary{gap:18px;min-height:74px;padding-block:20px;font-size:14px}.concept-content{padding-right:0}.concept-content>p{font-size:13px}.research-section,.about-section{padding-block:56px}.research-section .section-heading{margin-bottom:32px}.research-layout,.about-intro,.background-grid,.tools-section{display:block}.research-copy h3{max-width:24ch;font-size:30px}.research-copy>p,.experience-record>p{margin-top:20px;font-size:13px}.experience-record{background:var(--surface);border-left:0;margin-top:28px;padding:24px}.experience-meta>span{font-size:11px}.research-skills{grid-template-columns:1fr;gap:24px;margin-top:32px;padding:0 0 0 24px}.research-skills:before,.research-skills:after{width:1px;height:auto;inset:0 auto 0 4px}.research-skills:after{transform:scaleY(var(--section-progress,0));transform-origin:top}.research-milestone{top:6px;left:-24px}.research-skills p{margin-top:2px}.about-copy{margin-top:24px;padding-top:0}.about-copy>p{font-size:13px}.background-grid,.background-block+.background-block{margin-top:32px}.background-block>h3{margin-bottom:20px;font-size:24px}.education-block h4{font-size:22px}.background-block p{font-size:13px}.education-details{margin-top:24px;font-size:12px}.tools-section{margin-top:32px;padding-top:24px}.tools-section>h3{margin-bottom:24px}.tools-grid>div{grid-template-columns:1fr;gap:8px;padding-block:16px}.tools-grid li{font-size:13px}.no-js .site-header{position:static}.no-js .mobile-navigation[hidden]{position:static;display:grid!important}.contact-section{padding-block:32px 8px}.contact-panel{padding:28px 24px}.contact-section h2{font-size:clamp(31px,7.6vw,46px)}.contact-bottom{margin-top:24px;padding-top:24px;display:block}.contact-panel .button-outline{margin-top:16px;margin-bottom:0}.contact-bottom>div>p{font-size:12px}.contact-bottom>div>p br{display:none}.email-row{gap:4px;margin-top:20px}.email-link{gap:8px;font-size:clamp(15px,3.8vw,23px)}.email-link svg{display:none}.site-footer{gap:8px;padding-block:24px;font-size:11px}.site-footer>span:nth-child(2){display:none}}@media (prefers-reduced-motion:reduce){.reveal-pending{opacity:1}html{scroll-behavior:auto}*,:before,:after{animation-duration:.01ms!important;animation-iteration-count:1!important}.rail-marker{transform:translateY(calc(var(--active-index) * 44px))}.section-rail nav a[aria-current]{transform:none}.rail-marker,.button svg,.text-link svg,summary svg{transition-duration:80ms}.button-primary:hover svg,.text-link:hover svg,.research-skills:after{transform:none}.research-milestone{background:var(--accent)}details::details-content{transition:none}}
