.portfolio-home{--home-canvas:var(--white);--home-content:var(--color-canvas);--home-muted:var(--color-home-muted);--home-social-hover:#52525b;--home-surface:var(--color-project-card);--home-surface-hover:var(--color-project-card-hover);--home-indicator-muted:var(--color-project-card-hover);--home-indicator-opacity:.25;box-sizing:border-box;gap:var(--space-footer);width:100vw;height:100dvh;padding:var(--space-page);color:var(--home-content);background:var(--home-canvas);grid-template-columns:repeat(12,minmax(0,1fr));display:grid;overflow:hidden}.portfolio-home[data-theme=dark]{--home-canvas:var(--color-home-dark-canvas);--home-content:var(--white);--home-social-hover:#d4d4d8;--home-surface:var(--color-home-dark-surface);--home-surface-hover:var(--color-home-dark-surface-hover);--home-indicator-muted:var(--color-home-dark-surface-hover);--home-indicator-opacity:.3}.portfolio-home__load-error{font-family:var(--font-body);font-size:var(--font-size-link);justify-items:center;gap:12px;display:grid}.portfolio-home__load-error button{color:var(--home-content);background:var(--home-surface);border-radius:4px;padding:12px 16px}.portfolio-home__load-error button:hover{background:var(--home-surface-hover)}.portfolio-home__load-error button:focus-visible{outline:2px solid var(--color-orange);outline-offset:3px}.portfolio-home button{font:inherit}.portfolio-home p{margin:0}.portfolio-home__identity,.home-carousel{min-width:0;min-height:0}.portfolio-home__identity{flex-direction:column;grid-column:span 4;justify-content:space-between;display:flex}.portfolio-home__identity-details{gap:var(--space-page);width:75%;display:grid}.portfolio-home__brand-container{background:0 0;justify-content:center;align-items:center;width:32px;height:53px;display:flex}.portfolio-home__brand{filter:brightness(0);width:24px;height:24px;display:block}.portfolio-home[data-theme=dark] .portfolio-home__brand{filter:brightness(0)invert()}.portfolio-home__name,.portfolio-home__summary,.portfolio-home__social-link,.home-carousel__button,.home-carousel__status{font-family:var(--font-body);font-size:var(--font-size-link);letter-spacing:.28px;font-weight:400;line-height:1.3}.portfolio-home__name{display:grid}.portfolio-home__name>p:first-child{font-weight:500}.portfolio-home__name,.portfolio-home__summary{font-size:var(--font-size-body)}.portfolio-home__role,.portfolio-home__summary{color:var(--home-muted)}.portfolio-home__social-links{gap:0;margin-top:auto;padding-top:0;display:grid}.portfolio-home__social-link{width:max-content;min-height:16px;color:var(--home-content);font-size:var(--font-size-back-link);letter-spacing:.3px;text-transform:uppercase;align-items:center;gap:0;line-height:1.3;text-decoration:none;transition:gap .16s,color .16s;display:inline-flex}.portfolio-home__social-link--pending{cursor:default}.portfolio-home__social-marker{background:#a1a1aa;flex:0 0 0;width:0;height:4px;transition:width .16s,flex-basis .16s;display:block}.portfolio-home[data-theme=dark] .home-carousel__toolbar-arrow{filter:invert()}.portfolio-home__social-link:is(:hover,:focus-visible){color:var(--home-social-hover);gap:4px}.portfolio-home__social-link:is(:hover,:focus-visible) .portfolio-home__social-marker{flex-basis:4px;width:4px}.portfolio-home__social-link:focus-visible,.home-carousel__button:focus-visible,.home-carousel__visual:focus-visible{outline:2px solid var(--color-orange);outline-offset:3px}.home-carousel{gap:var(--space-footer);grid-column:span 8;grid-template-rows:53px minmax(0,1fr);display:grid}.home-carousel__toolbar{gap:var(--space-footer);grid-template-columns:53px minmax(0,1fr);display:grid}.portfolio-home .home-carousel__button{min-width:0;min-height:0;padding:var(--space-page);color:var(--home-content);background:var(--home-surface);cursor:pointer;font-size:var(--font-size-link);text-align:left;border-radius:4px;justify-content:space-between;align-items:center;transition:background-color .16s;display:flex}.portfolio-home .home-carousel__about-button{display:none}.home-carousel__button:hover{background:var(--home-surface-hover)}.home-carousel__theme-button{padding:var(--space-page);place-items:center;display:grid}.home-carousel__theme-button img{width:21px;height:21px;display:block}.home-carousel__toolbar-arrow{flex:none;width:21px;height:21px;display:block}.home-carousel__projects-button span{align-items:center;gap:8px;min-width:0;display:inline-flex}.home-carousel__projects-button i{background:var(--color-orange);width:4px;height:4px;display:block}.home-carousel__projects-button i,.home-carousel__indicators i{font-style:normal}.home-carousel__panel{gap:var(--space-project-caption);min-height:0;padding:var(--space-page);background:var(--home-surface);border-radius:4px;grid-template-rows:minmax(0,1fr) 16px;display:grid;position:relative;overflow:hidden}.home-carousel__panel--full{grid-template-rows:minmax(0,1fr);padding:0}.home-carousel__panel--full .home-carousel__visual{position:absolute;inset:0}.home-carousel__pause-icon{z-index:2;pointer-events:none;width:16px;height:16px;display:block;position:absolute;top:16px;right:16px}.home-carousel__visual{cursor:pointer;background:0 0;border:0;place-items:center;min-width:0;min-height:0;padding:0;display:grid;position:relative;overflow:hidden;container-type:size}.home-carousel__asset{aspect-ratio:1;border-radius:4px;place-items:center;width:min(78cqi,78cqb);height:auto;margin:auto;display:grid;position:absolute;inset:0;overflow:hidden}.home-carousel__asset img,.home-carousel__asset video{object-fit:contain;object-position:center;border-radius:4px;width:auto;max-width:100%;height:auto;max-height:100%;display:block}.home-carousel__asset--full{width:100%;height:100%}.home-carousel__asset--full img,.home-carousel__asset--full video{object-fit:cover;width:100%;max-width:none;height:100%;max-height:none}.home-carousel__panel--full .home-carousel__asset--full,.home-carousel__panel--full .home-carousel__asset--full img,.home-carousel__panel--full .home-carousel__asset--full video{border-radius:0}.home-carousel__asset[data-position=top-left]>*{object-position:top left}.home-carousel__asset[data-position=top]>*{object-position:top}.home-carousel__asset[data-position=top-right]>*{object-position:top right}.home-carousel__asset[data-position=left]>*{object-position:left}.home-carousel__asset[data-position=right]>*{object-position:right}.home-carousel__asset[data-position=bottom-left]>*{object-position:bottom left}.home-carousel__asset[data-position=bottom]>*{object-position:bottom}.home-carousel__asset[data-position=bottom-right]>*{object-position:bottom right}.home-carousel__asset--incoming{animation:.18s ease-out both home-carousel-in}.home-carousel__asset--outgoing{animation:.18s ease-out both home-carousel-out}.home-carousel__status{letter-spacing:.2px;justify-content:space-between;align-items:center;min-width:0;min-height:16px;font-size:12px;line-height:1.3;display:flex}.home-carousel__panel--full .home-carousel__status{right:var(--space-page);bottom:var(--space-page);left:var(--space-page);pointer-events:none;position:absolute}.home-carousel__panel--full .home-carousel__status>p{color:var(--white);mix-blend-mode:difference}.home-carousel__panel--full .home-carousel__indicators i:not(.is-current){background:var(--white);mix-blend-mode:difference;opacity:.25}.home-carousel__panel--full .home-carousel__indicators i.is-current{mix-blend-mode:normal;background:0 0}.home-carousel__panel--full .home-carousel__indicators i.is-current:not(.is-paused):before{background:var(--white);mix-blend-mode:difference;opacity:.25;content:"";position:absolute;inset:0}.home-carousel__panel--full .home-carousel__indicators i.is-current.is-paused{background:var(--color-orange);mix-blend-mode:normal}.home-carousel__status>p{font-synthesis:none;font-weight:400}.home-carousel__indicators{gap:var(--space-footer);align-items:center;padding-right:6px;display:flex}.home-carousel__indicators i{background:var(--home-indicator-muted);flex:none;width:4px;height:4px;display:block;position:relative}.home-carousel__indicators i:not(.is-current){background:var(--home-content);opacity:var(--home-indicator-opacity)}.home-carousel__indicators i.is-current{background:0 0;width:20px}.home-carousel__indicators i.is-current:not(.is-paused):before{background:var(--home-content);opacity:var(--home-indicator-opacity);content:"";position:absolute;inset:0}.home-carousel__indicators i.is-current.is-paused{background:var(--color-orange);mix-blend-mode:normal}.home-carousel__progress{background:var(--home-content);transform-origin:0;width:100%;height:100%;display:block;position:absolute;inset:0 auto 0 0;transform:scaleX(0)}.home-carousel__panel--full .home-carousel__progress{background:var(--white);mix-blend-mode:difference}.home-carousel__indicators.is-running .home-carousel__progress{animation:3s linear both home-carousel-progress}@media (width<=768px){.portfolio-home{flex-direction:column;gap:48px;display:flex}.portfolio-home__identity{flex:none;display:block}.portfolio-home__identity-details{gap:14px;width:66.5%}.portfolio-home__brand-container{display:contents}.portfolio-home__social-links{margin-top:14px}.home-carousel{flex:auto;grid-template-rows:53px minmax(0,1fr);width:100%;min-height:0}}@media (width<=480px){.portfolio-home__identity-details{width:100%}.home-carousel{grid-template-rows:45px minmax(0,1fr)}.home-carousel__toolbar{grid-template-columns:45px minmax(0,1fr)}.portfolio-home .home-carousel__button{padding:12px}.portfolio-home .home-carousel__theme-button{justify-content:center;padding:0}.home-carousel__panel{touch-action:pan-y pinch-zoom}.home-carousel__asset--centered{width:min(86cqi,86cqb)}}@media (width<=640px){.portfolio-home__name,.portfolio-home__summary{font-size:var(--font-size-link)}}@keyframes home-carousel-in{0%{opacity:0}to{opacity:1}}@keyframes home-carousel-out{0%{opacity:1}to{opacity:0}}@keyframes home-carousel-progress{to{transform:scaleX(1)}}@font-face{font-family:Xanh Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/xanh-mono-latin-400.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-latin-400.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:100;font-display:swap;src:url(/fonts/ibm-plex-mono-100.ttf)format("truetype")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:200;font-display:swap;src:url(/fonts/ibm-plex-mono-200.ttf)format("truetype")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:300;font-display:swap;src:url(/fonts/ibm-plex-mono-300.ttf)format("truetype")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-500.ttf)format("truetype")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-latin-500.woff2)format("woff2");unicode-range:U+0,U+D,U+20-7E,U+A0-FF,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+300-301,U+303-304,U+308-309,U+323,U+2013-2014,U+2018-201A,U+201C-201E,U+2022,U+2026,U+2032-2033,U+2039-203A,U+2044,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-mono-600.ttf)format("truetype")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-mono-latin-600.woff2)format("woff2");unicode-range:U+0,U+D,U+20-7E,U+A0-FF,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+300-301,U+303-304,U+308-309,U+323,U+2013-2014,U+2018-201A,U+201C-201E,U+2022,U+2026,U+2032-2033,U+2039-203A,U+2044,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/ibm-plex-mono-700.ttf)format("truetype")}:root{--white:#fff;--breakpoint-sm:640px;--breakpoint-md:768px;--breakpoint-lg:1024px;--breakpoint-xl:1280px;--breakpoint-2xl:1536px;--breakpoint-3xl:1920px;--layout-gutter-desktop:4;--color-canvas:#000;--color-content:var(--white);--color-about:#ffe9db;--color-orange:#f4912a;--color-success:#16c65c;--color-error:#ef4444;--color-projects:#fff;--color-project-card:#f4f4f5;--color-project-card-hover:#e4e4e7;--color-project-dashboard-card:#f4f4f5;--color-project-dashboard-card-hover:#e4e4e7;--color-home-muted:#71717a;--color-home-dark-canvas:#18181b;--color-home-dark-surface:#27272a;--color-home-dark-surface-hover:#3f3f46;--space-unit:4px;--space-page:calc(var(--space-unit) * var(--layout-gutter-desktop));--space-footer:var(--space-unit);--space-project-caption:calc(var(--space-unit) * 2);--space-project-caption-after:calc(var(--space-unit) * 6);--space-project-media-pair:calc(var(--space-unit) * 2);--space-project-following-media:calc(var(--space-unit) * 6);--space-project-section:140px;--space-project-footer:140px;--space-projects-dashboard-footer:160px;--font-display:"Xanh Mono", monospace;--font-body:"IBM Plex Mono", monospace;--font-size-display:72px;--font-size-display-wide:80px;--font-size-body:16px;--font-size-link:14px;--font-size-back-link:12px;--font-size-project-intro:14px;--font-size-project-meta:12px;--font-size-project-footer:20px;--font-size-project-heading:40px;--font-size-project-heading-compact:32px;--font-size-project-copy:18px;--font-size-project-copy-compact:14px;--letter-spacing-project-copy:-.16px;--letter-spacing-project-copy-compact:-.14px;--line-height-project-text:1.2;--font-size-about-hero-mobile:clamp(28px, calc(12px + 5vw), 40px);--minimum-viewport:320px}*,:before,:after{box-sizing:border-box}html{min-width:var(--minimum-viewport);background:#fff;min-height:100%}body{min-width:var(--minimum-viewport);min-height:100%;color:var(--color-content);font-family:var(--font-body);-webkit-font-smoothing:antialiased;text-rendering:geometricprecision;margin:0}button,input{font:inherit}button,a{color:inherit}button{cursor:pointer;border:0}.text-action{transition:opacity .16s}.text-action:hover,.text-action:focus-visible{opacity:.6}.text-action:focus-visible{outline-offset:3px;outline:2px solid}.password-overlay{z-index:2;padding:var(--space-page);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#00000080;place-items:center;animation:.18s ease-out both overlay-enter;display:grid;position:fixed;inset:0}.password-dialog{--password-panel:var(--white);--password-input:var(--color-project-dashboard-card);--password-ink:#000;--password-border:var(--color-project-card-hover);--password-hover:var(--color-project-card);--password-error-bg:#fef2f2;--password-error-ink:var(--color-error);--password-indicator:var(--color-project-card-hover);--loading-active:var(--password-ink);--loading-muted:var(--password-indicator);width:min(100% - 32px,564px);color:var(--password-ink);background:var(--password-panel);border-radius:4px;animation:.18s cubic-bezier(.2,.8,.2,1) both dialog-enter;position:fixed;top:50%;left:50%;overflow:hidden;transform:translate(-50%,-50%)}.portfolio-home[data-theme=dark] .password-dialog{--password-panel:var(--color-home-dark-surface);--password-input:var(--color-home-dark-surface-hover);--password-ink:var(--white);--password-border:var(--color-home-dark-surface-hover);--password-hover:var(--color-home-dark-canvas);--password-error-bg:#7f1d1d;--password-error-ink:#fef2f2;--password-indicator:var(--color-home-dark-surface-hover)}.password-dialog__title{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.password-dialog__body{padding:16px}.password-fields{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;display:grid;position:relative;container-type:inline-size}.password-fields input{aspect-ratio:5/6;appearance:none;width:100%;min-width:0;height:auto;caret-color:var(--password-ink);color:var(--password-ink);background:var(--password-input);letter-spacing:1.28px;text-align:center;border:2px solid #0000;border-radius:4px;outline:none;padding:0;font-size:clamp(28px,12cqw,64px);font-weight:400;line-height:1.2;transition:border-color .1s ease-out;display:block}.password-fields input.is-active{border-color:var(--color-orange)}.password-fields.is-error input{border-color:var(--color-error)}.password-fields.is-verifying input{visibility:hidden}.password-verifying{letter-spacing:.24px;flex-direction:column;justify-content:center;align-items:center;gap:12px;font-size:12px;line-height:1.2;display:flex;position:absolute;inset:0}.loading-indicators{gap:var(--space-footer);display:flex}.loading-indicators i{background:var(--loading-muted);width:4px;height:4px;font-style:normal;animation:.88s linear infinite loading-indicator;display:block}.loading-indicators i:nth-child(2){animation-delay:.22s}.loading-indicators i:nth-child(3){animation-delay:.44s}.loading-indicators i:nth-child(4){animation-delay:.66s}.password-dialog__error{min-height:32px;color:var(--password-error-ink);background:var(--password-error-bg);letter-spacing:.3px;border-radius:4px;margin:8px 0 0;padding:8px;font-size:12px;font-weight:500;line-height:1.3}.password-dialog__contact{border-top:1px solid var(--password-border);min-height:42px;color:var(--password-ink);background:var(--password-panel);letter-spacing:.24px;justify-content:space-between;align-items:center;padding:11px 16px 12px;font-size:12px;line-height:1.3;text-decoration:none;transition:background-color .16s;display:flex}.password-dialog__contact:is(:hover,:focus-visible){background:var(--password-hover)}.password-dialog__contact:focus-visible{outline:2px solid var(--color-orange);outline-offset:-2px}.password-dialog__contact img{width:18px;height:18px;display:block}.portfolio-home[data-theme=dark] .password-dialog__contact img{filter:invert()}.projects-loading{background:var(--color-projects);min-height:100dvh}.projects-page{min-height:100dvh;padding:var(--space-page);color:#000;background:var(--color-projects);display:flex}.projects-page__content{min-height:calc(100dvh - (var(--space-page) * 2));opacity:0;flex-direction:column;flex:1;transition:opacity .16s linear;display:flex}.projects-page__content.is-visible{opacity:1}.projects-page__header{padding-bottom:8px}.projects-grid{gap:var(--space-footer);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}.projects-page__nav-start{gap:var(--space-footer);align-items:center;display:flex}.projects-page__home-link{flex:none}.projects-page__label{height:32px;font-size:var(--font-size-project-meta);letter-spacing:.4px;background:var(--color-project-card);border-radius:4px;align-items:center;padding:8px 10px;font-weight:600;line-height:1.2;display:flex}.return-link{width:max-content;color:inherit;font-size:var(--font-size-back-link);letter-spacing:.24px;text-transform:uppercase;background:0 0;align-items:center;gap:4px;padding:0;line-height:1;text-decoration:none;display:inline-flex}.return-link__icon{flex:0 0 14px;place-items:center;width:14px;height:14px;display:grid;transform:translateY(-1px)}.return-link__icon img{width:15px;height:15px;display:block;transform:translateY(1px)}.projects-grid{grid-template-columns:repeat(3,minmax(0,1fr));row-gap:40px}.project-card{min-width:0}.project-card__link{color:inherit;text-decoration:none;display:block}.project-card__media{aspect-ratio:1;background:var(--color-project-dashboard-card);border-radius:4px;place-items:center;width:100%;display:grid;position:relative;overflow:hidden}.project-card__media--centered{background:var(--color-project-card)}.project-card__media:after{z-index:1;content:"";opacity:0;pointer-events:none;background:#0000002e;transition:opacity .16s;position:absolute;inset:0}.project-card__media-content{aspect-ratio:5/3;width:80%}.project-card__media :is(img,video){object-fit:contain;width:100%;height:100%;display:block}.project-card__media--full .project-card__media-content{aspect-ratio:auto;width:100%;height:100%}.project-card__media--full :is(img,video){object-fit:cover}.project-card__media[data-position^=top]{align-items:start}.project-card__media[data-position$=left]{justify-items:start}.project-card__media[data-position$=right]{justify-items:end}.project-card__media[data-position^=bottom]{align-items:end}.project-card__media:hover:after,.project-card__link:focus-visible .project-card__media:after{opacity:1}.project-card__details{font-size:var(--font-size-project-meta);gap:1px;margin-top:8px;line-height:1.2;display:grid}.project-card__details h2,.project-card__details p{font:inherit;letter-spacing:var(--project-detail-text-12-letter-spacing);margin:0}.project-card__details h2{color:#000;font-weight:400}.project-card__details p{color:#a1a1aa}.projects-footer-shell{margin-top:auto}.projects-page--message{gap:var(--space-footer);grid-template-columns:repeat(12,minmax(0,1fr));align-content:start;display:grid}.projects-page--message .return-link{grid-column:1/span 3}.projects-page--message h1{grid-column:1/span 7;margin-top:56px}.projects-page--message p{font-size:var(--font-size-project-intro);line-height:var(--line-height-project-text);grid-column:9/span 4;margin:64px 0 0}.about-page{color:#000;background:var(--color-about);min-height:100vh;padding:16px}.about-header{gap:var(--space-footer);grid-template-columns:repeat(12,minmax(0,1fr));align-items:start;display:grid;position:relative}.about-header>*{letter-spacing:.28px;font-size:14px;line-height:1.3}.about-header .return-link{font-size:var(--font-size-link);letter-spacing:.28px;text-transform:none;grid-column:1/span 3;text-decoration:none}.about-header__links{gap:var(--space-footer);grid-column:4/span 9;grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.about-header a{width:max-content}.about-header__brand{filter:brightness(0);width:23px;height:22px;position:absolute;top:5px;right:5px}.about-intro{gap:var(--space-footer);grid-template-columns:repeat(12,minmax(0,1fr));margin-top:40px;display:grid}.about-intro__copy{grid-column:span 10}.about-intro h1{max-width:1124px;font-family:var(--font-display);letter-spacing:.8px;margin:0 0 24px;font-size:40px;font-weight:400;line-height:1.2}.about-intro p,.about-section>p{letter-spacing:.24px;margin:0;font-size:16px;line-height:1.3}.about-intro__copy>p{max-width:984px}.about-portrait{border-radius:4px;grid-column:11/span 2;height:242px;position:relative;overflow:hidden}.about-portrait:after{background:var(--color-about);mix-blend-mode:color;content:"";position:absolute;inset:0}.about-portrait img{object-fit:cover;width:100%;height:100%}.about-experience{margin-top:100px}.about-section h2{letter-spacing:.7px;text-transform:uppercase;border-bottom:.5px solid #00000026;align-items:center;gap:6px;margin:0 0 12px;padding-bottom:12px;font-size:14px;font-weight:600;line-height:1.3;display:flex}.about-section h2 span{background:currentColor;width:4px;height:4px}.experience-list{gap:2px;display:grid}.experience-list__row{gap:var(--space-footer);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}.experience-list__row p{letter-spacing:.24px;margin:0;font-size:16px;line-height:1.3}.experience-list__row p:first-child{grid-column:span 2}.experience-list__row p:nth-child(2){grid-column:span 4}.experience-list__row p:nth-child(3){grid-column:span 6}.about-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:100px;display:grid}.about-section>p+p{margin-top:16px}@media (width<=768px){.about-header{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:16px}.about-header .return-link{grid-column:1/span 3}.about-header__links{flex-wrap:wrap;grid-column:1/span 4;justify-content:space-between;gap:4px;display:flex}.about-header__links a{white-space:nowrap;flex:none}.about-header__brand{grid-area:1/4;justify-self:end;margin:5px 5px 0 0;position:static}.about-intro{grid-template-columns:repeat(4,minmax(0,1fr));margin-top:64px}.about-intro__copy,.about-portrait{grid-column:span 4}.about-intro h1{font-size:var(--font-size-about-hero-mobile);letter-spacing:.64px}.about-intro p{letter-spacing:.24px;font-size:16px}.about-portrait{aspect-ratio:1.02;height:auto;margin-top:20px}.about-experience,.about-detail-grid{margin-top:56px}.experience-list{gap:16px}.experience-list__row{grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}.experience-list__row p:first-child{grid-column:span 1!important}.experience-list__row p:nth-child(2){grid-column:span 3!important}.experience-list__row p:nth-child(3){grid-column:2/span 3!important}.about-detail-grid{grid-template-columns:1fr;gap:56px}.projects-page__header{padding-bottom:8px}.projects-grid{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:24px}}@media (width<=320px){.projects-grid{grid-template-columns:1fr}.project-card__media--centered .project-card__media-content{width:83.556%}}@media (width<=480px){:root{--space-project-section:80px;--space-project-footer:80px;--space-projects-dashboard-footer:140px;--space-project-media-pair:var(--space-footer)}.projects-grid{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}@keyframes overlay-enter{0%{opacity:0}to{opacity:1}}@keyframes dialog-enter{0%{opacity:0;transform:translate(-50%,calc(8px - 50%))scale(.985)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}@keyframes loading-indicator{0%,24.999%{background:var(--loading-active)}25%,to{background:var(--loading-muted)}}@media (width>=1536px){:root{--space-project-section:200px;--space-project-footer:200px}.about-intro h1{max-width:clamp(1124px,73.17vw,1574px);font-size:clamp(40px,2.60417vw,56px)}.about-intro__copy>p{max-width:clamp(984px,64.06vw,1378px)}.about-portrait{aspect-ratio:1;height:auto}}@media (width>=1920px){.about-intro h1{max-width:clamp(1563px,81.11vw,1752px)}.about-intro__copy>p{max-width:clamp(1388px,72.04vw,1556px)}}:root{--project-detail-text-12-letter-spacing:.1px}.spdr-container{background:#fff;width:100%;min-width:0;min-height:100dvh;container-type:inline-size}.spdr{--spdr-page:16px;--spdr-gap:4px;--spdr-caption:8px;--spdr-caption-after:40px;--spdr-media-pair:4px;--spdr-following-media:24px;--spdr-section:140px;--spdr-heading:40px;--spdr-heading-compact:32px;--spdr-copy:18px;--spdr-copy-compact:14px;--spdr-copy-spacing:-.16px;--spdr-copy-compact-spacing:-.14px;--spdr-line:1.2;box-sizing:border-box;min-width:0;min-height:100%;padding:var(--spdr-page);color:#000;background:#fff;flex-direction:column;display:flex}.spdr *,.spdr :before,.spdr :after{box-sizing:border-box}.spdr__nav,.spdr__intro,.spdr__meta,.spdr__text-break,.spdr__footer{gap:var(--spdr-gap);grid-template-columns:repeat(12,minmax(0,1fr));display:grid}.spdr__nav{align-items:center}.spdr__back{grid-column:1/span 3;min-width:0}.spdr__back>.return-link--icon-only{width:32px;height:32px;color:inherit;background:#f4f4f5;border-radius:4px;place-items:center;padding:0;display:grid}.spdr__back>.return-link--icon-only:hover,.spdr__back>.return-link--icon-only:focus-visible{background:#e4e4e7}.spdr__back>*>:first-child{flex:0 0 14px;place-items:center;width:14px;height:14px;display:grid;transform:translateY(-1px)}.spdr__back>*>:first-child img{width:15px;height:15px;display:block;transform:translateY(1px)}.spdr__brand-frame{grid-column:12;justify-self:end;place-items:center;width:24px;height:32px;display:grid}.spdr__brand{object-fit:contain;filter:brightness(0);width:24px;height:24px;display:block}.sp-brandmark{vertical-align:middle;filter:brightness(0);flex-shrink:0;display:inline-block;position:relative}.sp-brandmark__content{width:100%;height:100%;display:block;position:relative}.sp-brandmark__fallback{object-fit:contain;width:100%;height:100%;display:block}.sp-brandmark__viewport{position:absolute;inset:0;overflow:hidden}.sp-brandmark__runtime{width:32px;height:32px;transform:translate(calc(-50% + var(--sp-brandmark-x)), -50%) scale(var(--sp-brandmark-scale));display:block;position:absolute;top:50%;left:50%}.spdr__intro{margin-top:40px}.spdr__intro h1{font:400 var(--spdr-heading)/var(--spdr-line) var(--font-display,"Xanh Mono", monospace);letter-spacing:0;grid-column:1/span 8;margin:0}.spdr__intro p{color:#000;font:400 var(--spdr-copy)/var(--spdr-line) var(--font-body,"IBM Plex Mono", monospace);letter-spacing:var(--spdr-copy-spacing);grid-column:1/span 6;margin:8px 0 0}.spdr__meta{margin:56px 0 0}.spdr__meta div{grid-column:span 2;align-content:start;row-gap:1px;min-width:0;display:grid}.spdr__meta dt,.spdr__meta dd{color:#000;font:400 12px/1.2 var(--font-body,"IBM Plex Mono", monospace);letter-spacing:var(--project-detail-text-12-letter-spacing);margin:0}.spdr__meta dt{color:#a1a1aa}.spdr__blocks{gap:4px;margin-top:16px;display:grid}.spdr__media{min-width:0;margin:0}.spdr__media-frame{aspect-ratio:16/9;background:#f4f4f5;border-radius:4px;width:100%;overflow:hidden}.spdr__media-frame>:is(img,video){object-fit:cover;object-position:var(--spdr-image-object-position,center);width:100%;height:100%;display:block}.spdr__media-frame--centered{align-items:var(--spdr-image-align-items,center);justify-content:var(--spdr-image-justify-content,center);display:flex}.spdr__media-frame--centered>:is(img,video){object-fit:contain;object-position:var(--spdr-image-object-position,center);flex:none;width:80%;height:80%}.spdr__media-placeholder{color:#a1a1aa;height:100%;font:400 12px/1 var(--font-body,"IBM Plex Mono", monospace);letter-spacing:.24px;place-items:center;display:grid}.spdr__media figcaption{margin-top:var(--spdr-caption);color:#a1a1aa;font:400 12px/var(--spdr-line) var(--font-body,"IBM Plex Mono", monospace);letter-spacing:var(--project-detail-text-12-letter-spacing)}.spdr__media:has(figcaption){padding-bottom:var(--spdr-caption-after)}.spdr__media-pair{gap:var(--spdr-media-pair);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.spdr__media-pair .spdr__media-frame{aspect-ratio:1.5}.spdr__text-break{--spdr-text-break-size:28px;--spdr-text-break-before:180px;--spdr-text-break-after:40px;margin-top:var(--spdr-text-break-before);padding:16px 0 var(--spdr-text-break-after);border-top:1px solid #e4e4e7}.spdr__text-break-copy{color:#000;min-width:0;font:400 var(--spdr-text-break-size)/1.3 var(--font-body,"IBM Plex Mono", monospace);letter-spacing:-.4px;white-space:pre-wrap;grid-column:1/-1}.spdr__text-break h2,.spdr__text-break p{font:inherit;margin:0;display:inline}.spdr__text-break h2{color:#a1a1aa}.spdr__text-break p{color:#000}.spdr__footer{margin-top:var(--spdr-section);font:400 20px/1.4 var(--font-body,"IBM Plex Mono", monospace)}.spdr__footer>*{min-width:0;color:inherit;font:inherit;text-align:left;background:0 0;grid-column:span 4;margin:0;padding:0}.spdr__footer a{text-underline-offset:2px}.spdr__footer:has(>.spdr-footer){margin-top:0;display:block}.spdr__footer>.spdr-footer{color:#000;width:100%;font:400 14px/1 var(--font-body,"IBM Plex Mono", monospace);margin:0;padding-top:180px}.spdr-footer{color:#000;width:100%;font:400 14px/1 var(--font-body,"IBM Plex Mono", monospace);gap:4px;padding-top:180px;display:grid}.spdr-footer__message{border-top:1px solid #e4e4e7;min-width:0;margin:0;padding:16px 0 60px;font-size:18px;line-height:1}.spdr-footer__contacts{grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;display:grid}.spdr-footer__contact{color:#000;background:#f4f4f5;border-radius:4px;justify-content:space-between;align-items:center;gap:8px;min-width:0;height:32px;padding:8px;text-decoration:none;display:flex}.spdr-footer__contact>span{text-overflow:ellipsis;white-space:nowrap;line-height:1.4;overflow:hidden}.spdr-footer__external-icon{flex:0 0 18px;width:18px;height:18px;display:block}.spdr-footer__bottom{grid-template-columns:minmax(0,1fr) 32px;gap:4px;display:grid}.spdr-footer__copyright,.spdr-footer__to-top{background:#f4f4f5;border-radius:4px;align-items:center;height:32px;padding:8px;display:flex}.spdr-footer__copyright{color:#71717a;font-size:12px}.spdr-footer__to-top{color:#000;cursor:pointer;border:0;justify-content:center}.spdr-footer__to-top svg{width:18px;height:18px;display:block}.spdr-footer__contact:hover,.spdr-footer__contact:focus-visible,.spdr-footer__to-top:hover,.spdr-footer__to-top:focus-visible{background:#e4e4e7}.spdr-footer__contact:focus-visible,.spdr-footer__to-top:focus-visible{outline-offset:2px;outline:2px solid #f4912a}@media (width<=768px){.spdr__footer>.spdr-footer,.spdr-footer{padding-top:120px}.spdr-footer__message{padding-bottom:40px;line-height:1.4}}@media (width<=480px){.spdr__footer>.spdr-footer,.spdr-footer{padding-top:100px}.spdr-footer__message{padding-bottom:33px;font-size:14px}.spdr-footer__contacts{grid-template-columns:repeat(2,minmax(0,1fr))}.spdr-footer__contact:last-child{grid-column:1/-1}}@media (width<=320px){.spdr-footer__message{padding-bottom:40px}.spdr-footer__contacts{grid-template-columns:1fr}.spdr-footer__contact:last-child{grid-column:auto}}@container (width<=1280px){.spdr__text-break{--spdr-text-break-size:24px}}@container (640px<=width<=1280px){.spdr__meta div{column-gap:var(--spdr-gap);grid-column:span 4;grid-template-columns:repeat(4,minmax(0,1fr))}.spdr__meta dt,.spdr__meta dd{overflow-wrap:anywhere;grid-column:1/span 3;min-width:0}}@container (width<=768px){.spdr__text-break{--spdr-text-break-size:20px;--spdr-text-break-before:140px}}@container (width<=767px){.spdr__intro h1,.spdr__intro p{grid-column:1/-1}}@container (width<640px){.spdr__meta{gap:12px 4px;margin-top:32px}.spdr__meta div{grid-column:1/-1}}@container (width<=480px){.spdr{--spdr-section:80px}.spdr__intro{row-gap:8px;margin-top:24px}.spdr__footer{row-gap:2px}.spdr__footer>*{grid-column:1/-1}.spdr__text-break{--spdr-text-break-size:16px;--spdr-text-break-before:120px;--spdr-text-break-after:33px}}@container (width<=320px){.spdr__intro h1{font-size:var(--spdr-heading-compact)}.spdr__intro p{font-size:var(--spdr-copy-compact);letter-spacing:var(--spdr-copy-compact-spacing)}.spdr__media-pair{grid-template-columns:1fr}.spdr__text-break{--spdr-text-break-size:14px;--spdr-text-break-before:100px}}@container (width>1536px){.spdr__text-break-copy{grid-column:1/span 10}}@container (width>=1536px){.spdr{--spdr-section:200px}}
