@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/public-sans-vietnamese-400-normal.TxZB8OSn.woff2) format("woff2"),url(/_astro/public-sans-vietnamese-400-normal.BO1meqcx.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/public-sans-latin-ext-400-normal.mk90oQqJ.woff2) format("woff2"),url(/_astro/public-sans-latin-ext-400-normal.B02wwOdZ.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Public Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/public-sans-latin-400-normal.8Rpg0ruU.woff2) format("woff2"),url(/_astro/public-sans-latin-400-normal.SBbinRkI.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/public-sans-vietnamese-500-normal.DjztbcKe.woff2) format("woff2"),url(/_astro/public-sans-vietnamese-500-normal.CXYe29CY.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/public-sans-latin-ext-500-normal.DC-z7ASZ.woff2) format("woff2"),url(/_astro/public-sans-latin-ext-500-normal.BHCCp-na.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Public Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/public-sans-latin-500-normal.NlrCPXnF.woff2) format("woff2"),url(/_astro/public-sans-latin-500-normal.vCxiVFAq.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/public-sans-vietnamese-600-normal.P4BtCUdw.woff2) format("woff2"),url(/_astro/public-sans-vietnamese-600-normal.CcnAzmUX.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/public-sans-latin-ext-600-normal.DchWdWJ_.woff2) format("woff2"),url(/_astro/public-sans-latin-ext-600-normal.DfkbVac2.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Public Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/public-sans-latin-600-normal.Fru-LXNs.woff2) format("woff2"),url(/_astro/public-sans-latin-600-normal.BR59oU-I.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}html[data-theme=dark]{color-scheme:dark;--color-page-bg: #121212;--color-card-bg: #1e1e1e;--color-text: #ededed;--color-text-muted: #9a9a9a;--color-text-muted-2: #555555;--color-text-soft: #a8a8a8;--color-chip-bg: #2a2a2a;--color-chip-bg-hover: #333333;--color-chip-border: #3a3a3a;--color-chip-selected-bg: #ededed;--color-chip-selected-bg-hover: #ffffff;--color-chip-selected-border: #ededed;--color-chip-selected-text: #121212;--color-nav-hover-bg: #2a2a2a;--color-url-bg: #262626;--color-url-bg-hover: #303030;--color-track: #2f2f2f;--color-scrubber: #6f6f6f;--color-toggle-accent: #ededed;--color-toggle-accent-text: #121212;--color-button-bg: #444444;--color-button-text: #000000;--color-overlay-inner: rgba(38, 38, 38, .85);--color-overlay-mid: rgba(34, 34, 34, .7);--color-overlay-outer: rgba(34, 34, 34, .6);--color-overlay-base: rgba(18, 18, 18, .9);--shadow-card: 0px 2px 8px rgba(0, 0, 0, .55);--shadow-panel: 0px 0px 12px rgba(0, 0, 0, .6);--shadow-toggle: 0px 1px 3px rgba(0, 0, 0, .6);--shadow-overlay-text: 0px 2px 8px rgba(0, 0, 0, .66)}@media(max-width:767px){html[data-theme=dark]{--color-card-bg: #121212}}:root{color-scheme:light;--color-page-bg: #f8f8f8;--color-card-bg: #ffffff;--color-text: #000000;--color-text-muted: #888888;--color-text-muted-2: #b4b4b4;--color-text-soft: #777777;--color-chip-bg: #f0f0f0;--color-chip-bg-hover: #e5e5e5;--color-chip-border: #e0e0e0;--color-chip-selected-bg: #3b3b3b;--color-chip-selected-bg-hover: #000000;--color-chip-selected-border: #3b3b3b;--color-chip-selected-text: #ffffff;--color-nav-hover-bg: #eeeeee;--color-url-bg: #f4f4f4;--color-url-bg-hover: #ececec;--color-track: #f0f0f0;--color-scrubber: #aaaaaa;--color-toggle-accent: #3b3b3b;--color-toggle-accent-text: #ffffff;--color-button-bg: #222222;--color-button-text: #ffffff;--color-overlay-inner: rgba(240, 240, 240, .8);--color-overlay-mid: rgba(238, 238, 238, .6);--color-overlay-outer: rgba(238, 238, 238, .5);--color-overlay-base: rgba(255, 255, 255, .9);--shadow-card: 0px 2px 8px rgba(0, 0, 0, .06);--shadow-panel: 0px 0px 12px rgba(0, 0, 0, .12);--shadow-toggle: 0px 1px 3px rgba(0, 0, 0, .25);--shadow-overlay-text: 0px 2px 8px rgba(200, 200, 200, .66);--font-sans: "Public Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-display: -apple-system, BlinkMacSystemFont, "SF Pro Display", var(--font-sans);--content-max-width: 1024px;--mobile-card-width: 420px;--mobile-card-height: 848px}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%}body{font-family:var(--font-sans);color:var(--color-text);background:var(--color-page-bg)}img{display:block}a{color:inherit;text-decoration:none}button{font:inherit;border:none;background:none;padding:0;cursor:pointer;color:inherit}.viewport{display:flex;flex-direction:column;align-items:center;gap:12px;height:100dvh;padding:12px 8px}.toolbar{display:flex;justify-content:flex-end;align-items:center;gap:8px;width:100%;max-width:var(--content-max-width);flex-shrink:0}.card{display:flex;flex-direction:column;width:100%;max-width:var(--content-max-width);flex:0 1 auto;min-height:0;background:var(--color-card-bg);filter:drop-shadow(var(--shadow-card))}html[data-viewport=mobile] .card{max-width:var(--mobile-card-width);max-height:var(--mobile-card-height);border-radius:8px;overflow:hidden}@media(prefers-reduced-motion:no-preference){.card{transition:max-width .22s ease-in-out}}.site-footer{display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;max-width:var(--content-max-width);padding:8px 0;flex-shrink:0}.site-footer p{margin:0;font-size:13px;line-height:1.5;white-space:nowrap}.site-copyright{text-transform:uppercase;color:var(--color-text-muted);font-weight:500}.site-version{color:var(--color-text-muted-2);font-weight:300}@media(max-width:767px){:root{--color-page-bg: #ffffff}html,body{height:auto;min-height:100%}.viewport{height:auto;min-height:100dvh;padding:0;gap:0}.toolbar{display:none}html[data-viewport=mobile] .card{max-width:none;max-height:none;border-radius:0;filter:none}}.site-header{display:flex;flex-direction:column;padding-top:12px;padding-bottom:16px;flex-shrink:0;overflow:hidden}.site-title{margin:0;padding-left:16px;font-weight:500;line-height:normal;text-transform:uppercase;white-space:nowrap;font-size:32px}.site-title .small-caps{font-size:28px}.separator{height:18px;margin:0 16px;display:flex;align-items:center}.separator:after{content:"";width:100%;border-top:2px solid var(--color-text)}.site-nav{display:flex;align-items:center;gap:2px;padding:2px 13px 0;font-size:16px;font-weight:600;text-transform:uppercase;line-height:normal}.site-nav .bullet{margin:0}.nav-link{display:flex;align-items:center;justify-content:center;padding:0 3px;white-space:nowrap}.nav-link:hover{background:var(--color-nav-hover-bg)}.scrollable{display:flex;flex-direction:column;align-items:flex-start;gap:24px;flex:0 1 auto;min-height:0;width:100%;overflow-y:auto;overflow-x:clip;padding:16px}html[data-viewport=mobile] .scrollable{gap:32px}.icon-toggle{position:relative;display:flex;gap:.5px;width:52px;height:18px;border-radius:9px;overflow:hidden;filter:drop-shadow(var(--shadow-toggle))}.icon-toggle button{flex:1 0 0;display:flex;align-items:center;justify-content:center;background:var(--color-card-bg);color:var(--color-toggle-accent);transform:skew(-16.4deg)}.icon-toggle button:first-child{margin-left:-4px;padding-left:4px}.icon-toggle button:last-child{margin-right:-4px;padding-right:4px}.icon-toggle .icon{display:block;transform:skew(16.4deg)}html[data-viewport=desktop] .viewport-toggle button[data-mode-button=desktop],html[data-viewport=mobile] .viewport-toggle button[data-mode-button=mobile],html[data-theme=light] .theme-toggle button[data-theme-button=light],html[data-theme=dark] .theme-toggle button[data-theme-button=dark]{background:var(--color-toggle-accent);color:var(--color-toggle-accent-text);cursor:default}html[data-theme=light] .theme-toggle button[data-theme-button=light] .icon path,html[data-theme=dark] .theme-toggle button[data-theme-button=dark] .icon path{fill:currentColor}.panel[hidden]{display:none}.case-studies .panel[hidden]{display:block;width:0;opacity:0;visibility:hidden;margin-right:calc(-1 * var(--panel-gap));overflow:hidden}.panel{position:relative;flex-shrink:0;width:480px;aspect-ratio:480 / 288;box-shadow:var(--shadow-panel);background:var(--color-page-bg)}@media(prefers-reduced-motion:no-preference){.panel{transition:width .22s ease-in-out,height .22s ease-in-out,aspect-ratio .22s ease-in-out}.case-studies .panel{transition:opacity .33s ease-out .11s}.case-studies .panel[hidden]{transition:margin-right 0ms ease-out .22s,opacity .22s ease-out,visibility .22s ease-out,width 0ms ease-out .22s}html[data-viewport=desktop] .case-studies .panel{transition:width .22s ease-out,opacity .33s ease-out .22s}html[data-viewport=desktop] .case-studies .panel[hidden]{transition:width .22s ease-out}}.panel img{width:100%;height:100%;object-fit:cover}.panel .panel-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;padding:0 12px;text-align:center;text-transform:uppercase;font-weight:600;opacity:0;background:radial-gradient(120% 120% at 50% 50%,var(--color-overlay-inner) 33%,var(--color-overlay-mid) 66%,var(--color-overlay-outer) 80%),var(--color-overlay-base);text-shadow:var(--shadow-overlay-text)}@media(prefers-reduced-motion:no-preference){.panel .panel-overlay{transition:opacity .22s ease-out}}.panel .panel-overlay .panel-title,.panel .panel-overlay .panel-subtitle{margin:0;text-wrap:balance}.panel .panel-overlay .panel-title{font-size:20px}.panel .panel-overlay .panel-subtitle{font-size:14px}.panel.panel-hoverable:focus-visible .panel-overlay{opacity:.8}@media(hover:hover){.panel.panel-hoverable:hover .panel-overlay{opacity:.8}html[data-panel-hover] .panel.panel-hoverable:hover .panel-overlay{opacity:0}html[data-panel-hover] .panel.panel-hoverable.is-hovered .panel-overlay{opacity:.8}}.hscroll{display:flex;flex-direction:column;gap:12px;width:100%}.hscroll-viewport{display:flex;--panel-gap: 16px;gap:var(--panel-gap);align-items:flex-start;width:100%;overflow-x:auto;padding:13px;margin:-13px;scrollbar-width:none}html[data-viewport=mobile] .hscroll-viewport{width:calc(100% + 26px)}html[data-viewport=desktop] .hscroll-viewport{width:calc(100% + 64px);padding-left:16px;padding-right:16px;margin-left:-32px;margin-right:-32px}html[data-viewport=desktop] .hscroll-viewport{min-height:314px}html[data-viewport=desktop] .hscroll{padding:0 16px}html[data-viewport=desktop] .hscroll-track{width:calc(100% + 32px);margin-left:-16px;margin-right:-16px}.hscroll-viewport::-webkit-scrollbar{display:none}.hscroll-track[hidden]{display:none}.hscroll-track{width:100%;height:6px;margin-bottom:4px;border-radius:3px;background:var(--color-track);flex-shrink:0}.hscroll-scrubber{width:100%;height:6px;border-radius:3px;background:var(--color-scrubber)}.section{display:flex;flex-direction:column;align-items:flex-start;gap:12px;width:100%}.section-title{margin:0;font-size:16px;font-weight:600;text-transform:uppercase;line-height:normal;white-space:nowrap}html[data-viewport=mobile] .page-work .section-title{font-size:20px}.section-body{font-size:13px;font-weight:500;line-height:normal;width:100%}.section-body p{margin:0}.section-body p+p{margin-top:13px}.link-url{display:flex;align-items:center;gap:4px;width:100%;height:29px;padding:6px 8px;border-radius:8px;background:var(--color-url-bg);color:var(--color-text-soft)}.link-url:hover{background:var(--color-url-bg-hover)}.link-url .icon{flex-shrink:0;padding-bottom:1px}.link-url .link-title{margin:0;flex:1 0 0;min-width:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500}.filters{display:flex;align-items:center;gap:6px}.filter-label{font-size:12px;font-weight:400;color:var(--color-text-muted);text-transform:uppercase;text-align:center;white-space:nowrap}.chips{display:flex;align-items:center;gap:4px}.chip{display:flex;align-items:center;justify-content:center;height:20px;padding:2.5px 5px 2px;border-radius:7px;border:.33px solid var(--color-chip-border);background:var(--color-chip-bg);font-family:var(--font-display);font-size:12px;color:var(--color-text-muted);text-transform:uppercase;white-space:nowrap;line-height:normal}.chip:hover{background:var(--color-chip-bg-hover)}.chip[aria-pressed=true]{background:var(--color-chip-selected-bg);border-color:var(--color-chip-selected-border);color:var(--color-chip-selected-text)}.chip[aria-pressed=true]:hover{background:var(--color-chip-selected-bg-hover)}html[data-viewport=mobile] .chip{height:28px;padding:0 14px;border-radius:10px;border-width:.66px;font-size:15px;color:var(--color-text-soft)}html[data-viewport=mobile] .chip[aria-pressed=true]{color:var(--color-chip-selected-text)}html[data-viewport=mobile] .filter-label{font-size:14px}.page-work{display:flex;flex-direction:column;gap:24px;width:100%}html[data-viewport=mobile] .page-work{gap:32px}.about-content{display:grid;grid-template-columns:64px 1fr;column-gap:10px;row-gap:13px;width:100%;padding-right:8px}.about-content .avatar{grid-column:1;grid-row:1 / span 2;width:64px;height:64px;border-radius:50%;object-fit:cover}.about-content p{margin:0;font-size:13px;font-weight:500;line-height:normal;text-align:justify;grid-column:2}html[data-viewport=mobile] .about-content{padding-right:0;row-gap:12px}html[data-viewport=mobile] .about-content .avatar{grid-row:1}html[data-viewport=mobile] .about-content p:last-child{grid-column:1 / -1}.case-studies{display:flex;flex-direction:column;gap:12px;width:100%;padding-bottom:4px}.cs-header{display:flex;align-items:center;gap:6px;width:100%}.cs-header .section-title{margin-right:auto}html[data-viewport=mobile] .cs-header{flex-wrap:wrap;row-gap:6px}html[data-viewport=mobile] .cs-header .chips{width:100%;justify-content:space-between}html[data-viewport=mobile] .cs-header .chip{padding:0 10px}.cs-list-empty{margin:0;font-size:13px;font-weight:500;color:var(--color-text-muted)}.panel .hero-mobile{display:none}html[data-viewport=mobile] .panel .hero-mobile{display:block}html[data-viewport=mobile] .panel .hero-desktop{display:none}html[data-viewport=mobile] .case-studies .hscroll-viewport{--panel-gap: 10px;flex-wrap:wrap;overflow-x:visible}html[data-viewport=mobile] .case-studies .panel{width:calc(50% - var(--panel-gap) / 2);aspect-ratio:1}html[data-viewport=mobile] .case-studies .panel[hidden]{width:0}html[data-viewport=mobile] .case-studies .hscroll-track{display:none}.page-project{display:flex;flex-direction:column;gap:24px;width:100%}.project-header{display:flex;flex-direction:column;align-items:flex-start;gap:6px}.back-button{display:flex;align-items:center;justify-content:center;gap:2px;font-size:12px;font-weight:500;color:var(--color-text-muted);text-transform:uppercase;white-space:nowrap;line-height:normal}.back-button:hover{text-decoration:underline}.project-title{margin:0;font-size:24px;font-weight:600;text-transform:uppercase;line-height:normal;white-space:nowrap}.project-meta{display:flex;align-items:center;gap:4px;margin:0;font-size:16px;font-weight:600;text-transform:uppercase;line-height:normal;white-space:nowrap}html[data-viewport=mobile] .page-project .panel{width:250px}html[data-viewport=mobile] .page-project .hscroll{gap:8px}.card.fill-height,.card.fill-height .scrollable,.page-resume,.page-resume .section,.page-resume .section-body{flex:1 1 auto;min-height:0}.page-resume,.page-resume .section-body{display:flex;flex-direction:column;width:100%}.page-resume .back-button{margin-bottom:12px}@supports (-webkit-hyphens: none){.page-resume .back-button{margin-bottom:0}}.page-resume embed{flex:1 1 auto;min-height:0;width:100%}.resume-viewport{border-bottom:1px solid var(--color-chip-border)}.resume-download{display:none}@media(max-width:767px){.page-resume{gap:12px}.resume-viewport{border-bottom:1px solid var(--color-chip-border)}.resume-download{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:100%;padding:14px;border-radius:8px;background:var(--color-button-bg);color:var(--color-button-text);font-size:16px;font-weight:600;line-height:normal;text-transform:uppercase}}.spacer{width:100%;height:0;opacity:0;flex-shrink:0}
