@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/archivo-vietnamese-wght-normal-XAtsl5Q_.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/archivo-latin-ext-wght-normal-C4zznr8T.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/archivo-latin-wght-normal-E0tuGl4L.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@layer reset{*,:before,:after{box-sizing:border-box}body,h1,h2,h3,p,figure,ul,ol,dl,dd{margin:0}ul,ol{padding:0;list-style:none}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit}img,svg{max-width:100%;display:block}}@layer base{:root{--background:#fff;--foreground:#171717;--muted:#616161;--line:#ddd;--surface:#f3f3f3;--hover:#eaeaea;--image-ground:#e7e7e7;--ease:cubic-bezier(.16, 1, .3, 1);background:var(--background);color:var(--foreground);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-synthesis:none;text-rendering:optimizelegibility;scrollbar-color:#777 var(--background);font-family:Archivo Variable,sans-serif;font-weight:400}:root[data-theme=dark]{--background:#111;--foreground:#f5f5f5;--muted:#aaa;--line:#363636;--surface:#1c1c1c;--hover:#292929;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html{scroll-padding-top:32px}body{min-width:320px}::selection{color:var(--background);background:var(--foreground)}:focus-visible{outline-offset:5px;outline:2px solid}main:focus{outline:none}a,button{-webkit-tap-highlight-color:transparent}button{cursor:pointer}h1,h2,h3{letter-spacing:-.035em;font-weight:520}h1{font-size:clamp(48px,7vw,88px);line-height:1.05}h2{font-size:28px;line-height:1.2}h3{font-size:25px;line-height:1.25}p{line-height:1.6}.wrap{width:min(100%,1248px);margin-inline:auto;padding-inline:clamp(24px,5vw,64px)}.arrow-icon{flex-shrink:0;width:20px;height:20px}.diagonal{rotate:-45deg}.skip-link{z-index:20;background:var(--foreground);color:var(--background);clip-path:inset(50%);padding:16px;position:fixed;top:12px;left:12px}.skip-link:focus{clip-path:none}}@layer layout{.site-header{align-items:center;gap:26px;min-height:88px;display:flex}.wordmark{letter-spacing:-.025em;align-items:center;min-height:44px;font-size:19px;font-weight:580;display:flex}.site-header nav{align-items:center;gap:28px;margin-left:auto;display:flex}.site-header nav a{min-height:44px;color:var(--muted);align-items:center;font-size:14px;display:flex}.theme-toggle{border:1px solid var(--line);background:0 0;border-radius:50%;flex-shrink:0;place-items:center;width:44px;height:44px;display:grid}.theme-toggle svg{width:20px;height:20px}.home-intro{padding-block:52px 70px}.intro-top{justify-content:space-between;align-items:center;gap:36px;display:flex}.intro-top h1{letter-spacing:-.04em;white-space:nowrap;font-size:clamp(52px,7.8vw,96px);font-weight:560}.intro-top h1>span{font-weight:350}.portrait{object-fit:cover;filter:grayscale();border-radius:4px;flex-shrink:0;width:120px;height:120px}.intro-bottom{justify-content:space-between;align-items:flex-end;gap:48px;margin-top:30px;display:flex}.intro-description{letter-spacing:-.025em;font-size:clamp(22px,2.6vw,30px);line-height:1.42}.intro-description a{text-underline-offset:6px;text-decoration:underline;text-decoration-thickness:1px}.intro-aside{text-align:right;flex-shrink:0;font-size:13px}.intro-aside>p{color:var(--muted)}.intro-aside>div{gap:22px;margin-top:6px;display:flex}.external-link,.inline-link{align-items:center;gap:8px;min-height:44px;font-size:14px;display:inline-flex}.external-link .arrow-icon{width:17px;height:17px}.section-heading{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:24px;margin-bottom:28px;padding-top:28px;display:flex}.section-heading h2{font-size:24px}.featured-project{background:var(--surface);border-radius:4px;grid-template-columns:.8fr 1.35fr;align-items:stretch;display:grid;overflow:hidden}.featured-copy{flex-direction:column;justify-content:center;align-items:flex-start;padding:38px;display:flex}.featured-copy h3{font-size:clamp(32px,3.4vw,44px)}.featured-copy>p{letter-spacing:-.015em;max-width:24ch;margin-top:16px;font-size:20px;line-height:1.45}.project-context{color:var(--muted);margin-top:18px;font-size:12px;line-height:1.5}.button-link{border:1px solid var(--foreground);background:var(--foreground);min-height:48px;color:var(--background);border-radius:3px;justify-content:space-between;align-items:center;gap:24px;padding:12px 16px;font-size:14px;display:inline-flex}.featured-copy .button-link{margin-top:26px}.featured-image{min-width:0;display:flex}.featured-image .project-image{aspect-ratio:1.6;align-items:start;width:100%;padding:34px 26px 0}.featured-image .project-image img{width:100%;max-width:none}.project-image{background:var(--image-ground);aspect-ratio:1.45;border-radius:4px;place-items:center;min-width:0;padding:28px;display:grid;position:relative;overflow:hidden}.project-image img{border:1px solid #ccc;border-radius:2px;width:100%;height:auto}.project-image--vowgate{background:#dce5ff}.project-image--do-it-right{background:#f3dccb;padding-bottom:0}.project-image--eyes{background:#d8e9e3}.project-image--chromaguard{background:#341923}.project-image--chromaguard img{border-color:#6c3548}.project-image--do-it-right img{border-color:#bbb;border-radius:12px;align-self:start;width:48%;max-width:250px}.image-note{color:var(--muted);margin-top:12px;font-size:12px}.project-grid{grid-template-columns:1fr 1fr;gap:58px 32px;display:grid}.home-grid{margin-top:48px}.project-card{min-width:0}.project-cover{display:block;position:relative}.cover-arrow{color:#171717;background:#fff;border-radius:50%;place-items:center;width:40px;height:40px;display:grid;position:absolute;bottom:14px;right:14px}.project-card-heading{justify-content:space-between;align-items:baseline;gap:20px;margin-top:20px;display:flex}.project-card-heading>span{color:var(--muted);text-align:right;font-size:12px}.project-card>p{max-width:44ch;color:var(--muted);margin-top:8px;font-size:16px;line-height:1.5}.home-about{border-top:1px solid var(--line);grid-template-columns:.8fr 1.35fr;gap:44px;margin-top:80px;padding-block:44px 66px;display:grid}.home-about h2{font-size:26px}.home-about p{max-width:54ch;color:var(--muted);font-size:17px}.home-about .inline-link{margin-top:14px}.page-intro{padding-block:64px}.page-intro>p{color:var(--muted);letter-spacing:-.02em;margin-top:24px;font-size:clamp(19px,2.5vw,27px);line-height:1.5}.work-grid{padding-bottom:76px}.more-repositories{border-top:1px solid var(--line);grid-template-columns:.75fr 1.3fr;column-gap:54px;padding-block:38px 64px;display:grid}.more-repositories>h2{grid-row:1/4;font-size:25px}.more-repositories>.external-link{border-bottom:1px solid var(--line);grid-column:2;justify-content:space-between;gap:28px;padding-block:18px;display:flex}.more-repositories>a:first-of-type{padding-top:0}.more-repositories strong{letter-spacing:-.02em;font-size:20px;font-weight:500;display:block}.more-repositories a span>span{color:var(--muted);margin-top:6px;line-height:1.6;display:block}.more-repositories>p{color:var(--muted);grid-column:2;margin-top:20px;font-size:12px}.about-intro{padding-bottom:40px}.about-layout{grid-template-columns:1.5fr .7fr;align-items:start;gap:100px;padding-bottom:64px;display:grid}.about-body>p{max-width:62ch;color:var(--muted);font-size:18px;line-height:1.7}.about-body>p+p{margin-top:22px}.about-links{border-top:1px solid var(--line)}.about-links>a{border-bottom:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;gap:10px;padding-block:18px;display:flex}.account-name{color:var(--muted);margin-left:auto;font-size:12px}.about-section{border-top:1px solid var(--line);grid-template-columns:.75fr 1.3fr;gap:44px 54px;padding-block:38px 50px;display:grid}.about-section>h2{font-size:25px}.about-rows>div+div{margin-top:32px}.about-rows h3,.education-list h3{font-size:20px}.about-rows p{color:var(--muted);margin-top:6px;font-size:16px}.about-rows div>span{color:var(--muted);margin-top:8px;font-size:12px;display:block}.education-list>li{grid-template-columns:100px 1fr;gap:24px;display:grid}.education-list>li+li{margin-top:32px}.education-list li>span{color:var(--muted);font-variant-numeric:tabular-nums;padding-top:4px;font-size:13px}.education-list p{color:var(--muted);margin-top:8px;font-size:15px}.tools-copy{color:var(--muted);max-width:60ch;font-size:17px}.breadcrumb{padding-top:28px}.breadcrumb .arrow-icon{rotate:180deg}.breadcrumb a{color:var(--muted);font-size:13px}.project-intro{padding-block:28px 48px}.project-intro>p{letter-spacing:-.025em;max-width:33ch;color:var(--muted);margin-top:22px;font-size:clamp(24px,3.3vw,40px);line-height:1.3}.project-actions{flex-wrap:wrap;align-items:center;gap:16px 28px;margin-top:30px;display:flex}.project-facts{border-block:1px solid var(--line);grid-template-columns:1.3fr 1.2fr .7fr;gap:28px;margin-bottom:36px;padding-block:22px;display:grid}.project-facts dt{color:var(--muted);margin-bottom:8px;font-size:12px}.project-facts dd{font-size:14px;line-height:1.6}.project-detail-figure .project-image{aspect-ratio:auto;padding:38px}.project-detail-figure img{width:100%}.project-detail-figure--do-it-right .project-image{max-height:none;padding:42px}.project-detail-figure--do-it-right img{width:min(100%,320px);max-width:none}.project-detail-figure figcaption{max-width:95ch;color:var(--muted);margin-top:14px;font-size:12px;line-height:1.6}.project-article{margin-top:58px}.project-article>section{border-top:1px solid var(--line);grid-template-columns:.8fr 1.35fr;gap:60px;padding-block:34px 44px;display:grid}.project-article h2{max-width:24ch;font-size:26px;line-height:1.25}.project-article p{max-width:64ch;color:var(--muted);font-size:17px;line-height:1.7}.project-article p+p{margin-top:20px}.project-sources .external-link{border-bottom:1px solid var(--line);justify-content:space-between;gap:20px;padding-block:18px;display:flex}.project-sources .external-link:first-child{padding-top:0}.project-sources small{color:var(--muted);overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.project-sources div>p{margin-top:18px;font-size:12px}.next-project{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:32px;padding-block:32px 56px;display:flex}.next-project span{color:var(--muted);font-size:13px}.next-project strong{color:var(--foreground);letter-spacing:-.03em;margin-top:8px;font-size:32px;font-weight:500;display:block}.next-project>.arrow-icon{width:32px;height:32px}.not-found{min-height:50vh}.not-found .button-link{margin-top:28px}.site-footer{padding-bottom:26px}.footer-top{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:30px;padding-block:34px;display:flex}.footer-top h2{font-size:30px}.footer-top p{color:var(--muted);margin-top:10px;font-size:14px}.footer-top>a{border-bottom:1px solid var(--muted)}.footer-bottom{border-top:1px solid var(--line);color:var(--muted);align-items:center;gap:24px;padding-top:16px;font-size:12px;display:flex}.footer-bottom>a{margin-left:auto;font-size:12px}}@layer detail{.site-header nav a{position:relative}.site-header nav a[aria-current],.site-header nav a:hover{color:var(--foreground)}.site-header nav a[aria-current]:after{content:"";bottom:4px;background:currentColor;height:1px;position:absolute;inset-inline:0}.theme-toggle:hover{background:var(--hover)}.inline-link:hover,.external-link:not(.button-link):hover,.wordmark:hover,.project-card h3 a:hover{text-underline-offset:5px;text-decoration:underline}.button-link:hover{background:var(--muted);border-color:var(--muted)}.project-cover .project-image img,.featured-image .project-image img{transition:transform .45s var(--ease)}.project-cover:hover img,.featured-image:hover img{transform:translateY(-4px)}.cover-arrow .arrow-icon,.next-project>.arrow-icon{transition:transform .25s var(--ease)}.project-cover:hover .cover-arrow .arrow-icon,.next-project:hover>.arrow-icon{transform:translate(4px)}}@media (width<=1000px){.featured-copy{padding:28px}.featured-copy>p{font-size:18px}.featured-image .project-image{align-items:center;padding:28px 20px 0}.project-card-heading{flex-direction:column;align-items:start;gap:6px}.about-layout{gap:56px}.project-article>section{gap:40px}}@media (width<=700px){.site-header{gap:14px;min-height:76px}.site-header nav{gap:18px}.site-header nav a{font-size:13px}.wordmark{font-size:17px}.home-intro{padding-block:34px 46px}.intro-top{gap:18px}.intro-top h1{font-size:clamp(38px,9vw,62px)}.portrait{width:72px;height:72px}.intro-bottom{margin-top:28px;display:block}.intro-description{font-size:23px;line-height:1.45}.intro-aside{text-align:left;justify-content:space-between;align-items:center;gap:16px;margin-top:18px;font-size:12px;display:flex}.intro-aside>div{gap:16px;margin-top:0}.intro-aside a{gap:4px;font-size:12px}.section-heading{margin-bottom:20px;padding-top:20px}.section-heading h2{font-size:22px}.section-heading .inline-link{font-size:12px}.featured-project{flex-direction:column;display:flex}.featured-copy{padding:26px}.featured-copy h3{font-size:32px}.featured-copy>p{max-width:29ch;margin-top:12px;font-size:19px}.project-context{margin-top:12px}.featured-copy .button-link{margin-top:22px}.featured-image .project-image{aspect-ratio:1.55;align-items:start;padding:22px 22px 0}.image-note{font-size:11px;line-height:1.6}.project-grid{grid-template-columns:1fr;gap:38px}.home-grid{margin-top:34px}.project-image{aspect-ratio:1.4;padding:22px}.project-image--do-it-right{padding-bottom:0}.project-card-heading{flex-direction:row;align-items:baseline;gap:16px;margin-top:16px}.project-card-heading h3{font-size:23px}.project-card-heading>span{font-size:11px}.project-card>p{margin-top:8px;font-size:15px}.home-about{margin-top:50px;padding-block:30px 42px;display:block}.home-about h2{margin-bottom:20px;font-size:24px}.home-about p{font-size:16px}.page-intro{padding-block:38px 42px}.page-intro>p{margin-top:20px;font-size:20px}.work-grid{padding-bottom:46px}.more-repositories{padding-block:30px 44px;display:block}.more-repositories>h2{margin-bottom:26px;font-size:24px}.more-repositories strong{font-size:19px}.more-repositories>p{font-size:11px}.about-layout{padding-bottom:36px;display:block}.about-body>p{font-size:17px}.about-links{margin-top:30px}.desktop-break{display:none}.about-section{padding-block:28px 36px;display:block}.about-section>h2{margin-bottom:24px;font-size:24px}.education-list>li{grid-template-columns:76px 1fr;gap:20px}.education-list h3{font-size:18px}.education-list p{font-size:14px}.education-list li>span{font-size:12px}.tools-copy{font-size:16px}.breadcrumb{padding-top:12px}.project-intro{padding-block:22px 32px}.project-intro h1{overflow-wrap:anywhere;font-size:clamp(36px,8.8vw,58px)}.project-intro>p{margin-top:20px;font-size:25px}.project-actions{gap:12px;margin-top:24px}.project-actions .button-link{width:100%}.project-facts{grid-template-columns:1fr;gap:20px;margin-bottom:26px}.project-facts dt{margin-bottom:5px}.project-detail-figure .project-image{aspect-ratio:auto;padding:14px}.project-detail-figure--do-it-right .project-image{padding:26px}.project-detail-figure--do-it-right img{max-width:260px}.project-detail-figure figcaption{margin-top:12px;font-size:11px}.project-article{margin-top:34px}.project-article>section{padding-block:26px 32px;display:block}.project-article h2{max-width:30ch;margin-bottom:20px;font-size:24px}.project-article p{font-size:16px}.project-sources div>p{font-size:12px}.project-sources small{font-size:11px}.next-project{padding-block:28px 38px}.next-project strong{font-size:28px}.footer-top{flex-direction:column;align-items:start;gap:18px;padding-block:28px}.footer-top h2{font-size:28px}.footer-top p{font-size:13px}.footer-bottom{flex-wrap:wrap;gap:16px;font-size:11px}.footer-bottom>a{font-size:11px}}@media (width<=380px){.site-header{gap:10px}.site-header nav{gap:12px}.site-header nav a:first-child{display:none}.portrait{width:56px;height:56px}.intro-top h1{font-size:38px}.intro-aside{gap:8px}.intro-aside>div{gap:10px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media (forced-colors:active){.button-link,.theme-toggle,.cover-arrow{border:1px solid canvastext}}
