@font-face{font-family:Josefin Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/josefin-sans-vietnamese-400-normal.5bZRxDiL.woff2) format("woff2"),url(/_astro/josefin-sans-vietnamese-400-normal.7lki-pri.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:Josefin Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/josefin-sans-latin-ext-400-normal.WydUZGG0.woff2) format("woff2"),url(/_astro/josefin-sans-latin-ext-400-normal.GP5qjHwf.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:Josefin Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/josefin-sans-latin-400-normal.Bw73c5y2.woff2) format("woff2"),url(/_astro/josefin-sans-latin-400-normal.OLNf33Pm.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:Josefin Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/josefin-sans-vietnamese-500-normal.DFkkCNtv.woff2) format("woff2"),url(/_astro/josefin-sans-vietnamese-500-normal.CcjDXHVb.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:Josefin Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/josefin-sans-latin-ext-500-normal.PQ3ELRMs.woff2) format("woff2"),url(/_astro/josefin-sans-latin-ext-500-normal.JCDvbwDh.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:Josefin Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/josefin-sans-latin-500-normal.B8ul6K5U.woff2) format("woff2"),url(/_astro/josefin-sans-latin-500-normal.DhBW9vGa.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:Josefin Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/josefin-sans-vietnamese-700-normal.Bf6tRy0O.woff2) format("woff2"),url(/_astro/josefin-sans-vietnamese-700-normal.D0Hgujik.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:Josefin Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/josefin-sans-latin-ext-700-normal.CrzN3gB5.woff2) format("woff2"),url(/_astro/josefin-sans-latin-ext-700-normal.Cl1GrozZ.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:Josefin Sans;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/josefin-sans-latin-700-normal.dFmzeJn3.woff2) format("woff2"),url(/_astro/josefin-sans-latin-700-normal.DDiyraUl.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}:root{--bg: #f7f6f3;--surface: #ffffff;--nav-bg: #1e1e1f;--ink: #44444a;--ink-strong: #1b1b1d;--muted: #9a9690;--accent: #f2a365;--accent-soft: rgba(242, 163, 101, .14);--accent-ink: #1d1d1d;--border: #ebe8e3;--maxw: 940px;--radius: 16px;--shadow: 0 1px 2px rgba(20, 20, 20, .04), 0 6px 20px rgba(20, 20, 20, .05);--shadow-lift: 0 2px 6px rgba(20, 20, 20, .06), 0 16px 40px rgba(20, 20, 20, .1);--nav-h: 62px;--font: "Josefin Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font);font-weight:400;background:var(--bg);color:var(--ink);line-height:1.65;letter-spacing:.01em;padding-top:var(--nav-h);min-height:100vh;display:flex;flex-direction:column;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}main{flex:1 0 auto;width:100%;max-width:var(--maxw);margin:0 auto;padding:4.5rem 1.5rem 5rem}a{color:inherit;text-decoration:none}img{display:block;max-width:100%}h1,h2,h3{color:var(--ink-strong);line-height:1.15;letter-spacing:-.01em;font-weight:600}.accent{color:var(--accent)}.nav{position:fixed;inset:0 0 auto;height:var(--nav-h);z-index:100;display:flex;align-items:center;justify-content:space-between;padding:0 clamp(1.25rem,5vw,2.5rem);background:#1e1e1fd9;backdrop-filter:saturate(1.6) blur(14px);border-bottom:1px solid rgba(255,255,255,.07)}.nav__brand{font-size:1.2rem;font-weight:600;letter-spacing:.01em;color:#fff}.nav__brand span{color:var(--accent)}.nav__links{display:flex;gap:2.25rem;list-style:none}.nav__links a{color:#c8c6c2;font-size:.98rem;font-weight:500;letter-spacing:.02em;padding:.25rem 0;position:relative;transition:color .2s ease}.nav__links a:after{content:"";position:absolute;left:0;bottom:-2px;height:2px;width:0;background:var(--accent);transition:width .25s ease}.nav__links a:hover,.nav__links a[aria-current=page]{color:#fff}.nav__links a:hover:after,.nav__links a[aria-current=page]:after{width:100%}.nav__burger{display:none;flex-direction:column;gap:5px;background:none;border:0;cursor:pointer;padding:6px}.nav__burger span{width:26px;height:3px;background:#fff;border-radius:2px;transition:transform .3s ease,opacity .3s ease}.nav__burger.is-open span:nth-child(1){transform:translateY(8px) rotate(45deg)}.nav__burger.is-open span:nth-child(2){opacity:0}.nav__burger.is-open span:nth-child(3){transform:translateY(-8px) rotate(-45deg)}@media(max-width:720px){.nav__burger{display:flex}.nav__links{position:fixed;top:var(--nav-h);right:0;height:calc(100vh - var(--nav-h));width:min(70vw,280px);flex-direction:column;gap:1.5rem;padding:2.5rem 2rem;background:#191919fa;transform:translate(100%);transition:transform .35s ease}.nav__links.is-open{transform:translate(0)}.nav__links a{font-size:1.3rem}}.hero{display:flex;align-items:center;gap:clamp(1.5rem,5vw,3.5rem);margin-bottom:1rem}.hero__text{flex:1}.hero h1{font-size:clamp(2.25rem,6vw,3.75rem);margin-bottom:.75rem}.hero__tag{color:var(--muted);font-size:.95rem;font-weight:400;letter-spacing:.08em;text-transform:uppercase;margin-bottom:1.25rem}.hero__intro{font-size:clamp(1.1rem,1.6vw,1.35rem);color:var(--ink);max-width:44ch}.hero__intro strong{color:var(--ink-strong);font-weight:600}.hero__avatar{width:clamp(120px,22vw,180px);height:clamp(120px,22vw,180px);border-radius:50%;object-fit:cover;flex-shrink:0;box-shadow:0 0 0 1px var(--border),var(--shadow)}@media(max-width:600px){.hero{flex-direction:column-reverse;align-items:flex-start;gap:1.5rem}}.home-section{margin-top:3.5rem}.home-section__head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;margin-bottom:1.5rem}.home-section__head .section-title{margin-bottom:0}.home-section__more{color:var(--muted);font-size:.9rem;letter-spacing:.03em;white-space:nowrap;transition:color .2s ease}.home-section__more:hover{color:var(--accent)}.project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1.25rem}.project{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem 1.5rem 1.25rem;box-shadow:var(--shadow);display:flex;flex-direction:column;transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}.project:hover{transform:translateY(-3px);box-shadow:var(--shadow-lift);border-color:var(--accent)}.project__name{font-size:1.2rem;margin-bottom:.6rem}.project__blurb{font-size:.98rem;color:var(--ink);margin-bottom:1.1rem;flex:1}.project__tech{list-style:none;display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:1.1rem}.project__tech li{font-size:.78rem;letter-spacing:.02em;color:#a8702f;background:var(--accent-soft);padding:.2rem .6rem;border-radius:999px}.project__links{display:flex;flex-wrap:wrap;gap:1rem}.project__links a{font-size:.9rem;color:var(--ink-strong);font-weight:600;transition:color .2s ease}.project__links a:hover{color:var(--accent)}.photo-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem}.photo-strip img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:12px;box-shadow:var(--shadow);transition:transform .25s ease}.photo-strip:hover img{opacity:.92}.photo-strip img:hover{transform:translateY(-3px);opacity:1}@media(max-width:600px){.photo-strip{grid-template-columns:repeat(2,1fr)}}.prose p{font-size:clamp(1.05rem,1.4vw,1.2rem);color:var(--ink);margin-bottom:1.4rem;max-width:62ch}.prose .signoff{color:var(--accent);text-align:right;margin-top:2.5rem;font-size:1.3rem;letter-spacing:.02em}.section-title{font-size:clamp(1.7rem,3.5vw,2.4rem);margin-bottom:.4rem}.section-title span{color:var(--accent)}.section-sub{color:var(--muted);font-size:1.05rem;margin-bottom:2.5rem}.blog-list{display:grid;gap:1.5rem}.card{display:grid;grid-template-columns:200px 1fr;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease}.card:hover{transform:translateY(-3px);box-shadow:var(--shadow-lift);border-color:var(--accent)}.card__img{width:100%;height:100%;object-fit:cover;background:#ede9e3}.card__body{padding:1.5rem 1.75rem;display:flex;flex-direction:column}.card__title{font-size:1.3rem;margin-bottom:.6rem;display:flex;align-items:baseline;gap:.4rem}.card__title .ext{font-size:.85rem;color:var(--accent)}.card__excerpt{color:var(--ink);font-size:1rem;margin-bottom:auto}.card__date{color:var(--muted);font-size:.85rem;letter-spacing:.03em;margin-top:1rem}@media(max-width:600px){.card{grid-template-columns:1fr}.card__img{height:180px}}.react-photo-album--photo{border-radius:12px;overflow:hidden;box-shadow:var(--shadow);cursor:zoom-in;transition:transform .25s ease,box-shadow .25s ease}.react-photo-album--photo:hover{transform:translateY(-3px);box-shadow:var(--shadow-lift)}.footer{flex-shrink:0;background:#1b1b1d;color:#b8b6b2;margin-top:auto}.footer__inner{max-width:var(--maxw);margin:0 auto;padding:3rem 1.5rem 2rem;text-align:center}.footer h3{color:#f3f1ee;font-size:.85rem;font-weight:400;letter-spacing:.12em;text-transform:uppercase;margin-bottom:1.75rem}.socials{display:flex;justify-content:center;flex-wrap:wrap;gap:.6rem;list-style:none;margin-bottom:.5rem}.socials a{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;background:#ffffff0f;color:#d7d4cf;transition:transform .2s ease,background .2s ease,color .2s ease}.socials a:hover{transform:translateY(-3px);color:#fff}.socials a svg{width:19px;height:19px}.socials .linkedin:hover{background:#0e76a8}.socials .github:hover{background:#333}.socials .twitter:hover{background:#1da1f2}.socials .email:hover{background:#ea4335}.socials .instagram:hover{background:#e1306c}.footer__bottom{border-top:1px solid rgba(255,255,255,.06);color:#76746f;text-align:center;padding:1.25rem 1rem;font-size:.8rem;letter-spacing:.04em}.lb{position:fixed;inset:0;z-index:200;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:.5rem;padding:clamp(1rem,4vw,3rem);background:#000000e6;animation:lb-fade .2s ease}@keyframes lb-fade{0%{opacity:0}to{opacity:1}}.lb__img{max-width:100%;max-height:90vh;margin:0 auto;border-radius:6px;box-shadow:0 20px 60px #0009}.lb__close,.lb__nav{background:#ffffff1f;color:#fff;border:0;cursor:pointer;border-radius:50%;display:grid;place-items:center;transition:background .2s ease}.lb__close:hover,.lb__nav:hover{background:#ffffff47}.lb__close{position:absolute;top:1rem;right:1.25rem;width:44px;height:44px;font-size:1.8rem;line-height:1}.lb__nav{width:52px;height:52px;font-size:2rem;line-height:1}@media(max-width:600px){.lb__nav{width:40px;height:40px;font-size:1.5rem}}
