@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-cyrillic-wght-normal.DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-ext-wght-normal.DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-greek-wght-normal.CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-vietnamese-wght-normal.CBcvBZtf.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-ext-wght-normal.DO1Apj_S.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/inter-latin-wght-normal.Dx4kXJAl.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}@font-face{font-family:Newsreader Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-vietnamese-wght-normal.Czsa-EzN.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:Newsreader Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-latin-ext-wght-normal.C-3rgBeH.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:Newsreader Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/newsreader-latin-wght-normal.CCVVNp6i.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}:root{--color-canvas:#f2f4f6;--color-paper:#fff;--color-ink:#202d39;--color-muted:#566473;--color-accent:#203d5b;--color-link:#245a86;--color-line:#dce3e9;--color-tint:#eef3f7;--font-body:"Inter Variable", "Segoe UI", sans-serif;--font-display:"Newsreader Variable", Georgia, serif}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--color-canvas);color:var(--color-ink);font:400 .9375rem/1.65 var(--font-body);-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3,p,ul,dl,dd{margin:0}a{color:var(--color-link);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{text-decoration:underline}button{font:inherit;cursor:pointer}[hidden]{display:none!important}:focus-visible{outline:3px solid var(--color-link);outline-offset:5px;border-radius:2px}::selection{background:#d5e5f2}.skip-link{z-index:10;background:#fff;padding:.6rem 1rem;position:fixed;top:-6rem;left:1rem}.skip-link:focus{top:1rem}.print-continuation{display:none}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}.site-shell{max-width:1120px;margin-inline:auto;padding:0 32px}.site-header{justify-content:space-between;align-items:center;gap:24px;padding:26px 0;display:flex}.site-brand{color:var(--color-accent);align-items:center;gap:13px;text-decoration:none;display:flex}.site-brand__mark{letter-spacing:-1.4px;font-size:20px;font-weight:750;line-height:1}.site-brand__mark span{color:#698caa}.site-brand__name{font-size:12px;font-weight:600}.site-nav{align-items:center;gap:26px;font-size:12px;display:flex}.site-nav a{color:var(--color-muted);text-decoration:none}.site-nav .site-nav__current{color:var(--color-accent);text-underline-offset:5px;font-weight:600;text-decoration:underline}.print-button{border:1px solid var(--color-accent);background:var(--color-accent);color:#fff;border-radius:4px;align-items:center;gap:9px;padding:10px 15px;font-size:12px;font-weight:550;display:inline-flex}.print-button:hover{background:#315573}.resume{background:var(--color-paper);border-top:4px solid var(--color-accent);padding:62px 66px 58px;box-shadow:0 5px 32px #203d5b08,0 0 0 1px #203d5b08}.resume:focus{outline:none}.resume-header{grid-template-columns:minmax(0,1fr) auto;gap:28px 36px;display:grid}.eyebrow{letter-spacing:1.7px;text-transform:uppercase;color:var(--color-accent);font-size:10px;font-weight:650;line-height:1.5}h1{font:430 clamp(44px, 5.5vw, 65px)/1 var(--font-display);letter-spacing:-2.1px;color:var(--color-accent);margin:16px 0 10px}.resume-header__focus{color:var(--color-muted);font-size:13px}.contact{flex-direction:column;align-items:flex-start;gap:2px;padding-top:2px;font-size:11.5px;font-style:normal;line-height:1.75;display:flex}.contact a{color:var(--color-muted);text-decoration:none}.contact a:hover{color:var(--color-link);text-decoration:underline}.contact__location{color:var(--color-ink);margin-bottom:5px;font-weight:550}.resume-summary{color:#445260;grid-column:1/-1;max-width:790px;font-size:14px;line-height:1.8}.resume-section{margin-top:38px}.section-heading{border-bottom:1px solid var(--color-accent);justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:21px;padding-bottom:10px;display:flex}.section-heading h2{color:var(--color-accent);text-transform:uppercase;letter-spacing:1.4px;font-size:11px;font-weight:700;line-height:1.6}.section-heading>span{color:var(--color-muted);letter-spacing:.3px;font-size:10px}.skills__groups{grid-template-columns:.8fr 1.1fr 1.1fr;gap:30px;display:grid}.skills__groups dt{color:var(--color-accent);margin-bottom:7px;font-size:11px;font-weight:650}.skills__groups dd{color:var(--color-muted);font-size:12px;line-height:1.9}.project{border-bottom:1px solid var(--color-line);grid-template-columns:30px minmax(0,1fr);gap:12px;padding:24px 0;display:grid}.projects>.project:first-of-type{padding-top:0}.project__number{color:#718497;font-variant-numeric:tabular-nums;padding-top:3px;font-size:10px;font-weight:550}.project__eyebrow{color:var(--color-muted);flex-wrap:wrap;align-items:center;gap:11px;margin-bottom:6px;font-size:10px;display:flex}.project__status{color:#365d56;background:#f3f8f5;border:1px solid #d8e5e0;border-radius:3px;padding:1px 7px;font-size:9px}.entry-heading{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:5px 20px;display:flex}.entry-heading h3{color:var(--color-accent);letter-spacing:-.35px;font-size:17px;font-weight:630;line-height:1.4}.project__link{font-size:11px;text-decoration:none}.project__description{color:#445260;margin-top:8px;font-size:12.5px;line-height:1.75}.detail-list{color:#445260;margin-top:9px;padding-left:17px;font-size:12px;line-height:1.8}.detail-list li{margin-top:3px;padding-left:3px}.detail-list li::marker{color:#718497;font-size:.7em}.project__technologies{flex-wrap:wrap;gap:5px 7px;margin-top:12px;padding:0;list-style:none;display:flex}.project__technologies li{background:var(--color-tint);color:#3d5971;border-radius:3px;padding:3px 7px;font-size:9px;font-weight:500;line-height:1.5}.job{margin-top:24px}.job:first-of-type{margin-top:0}.job .entry-heading h3{letter-spacing:-.1px;font-size:14px}.entry-dates{color:var(--color-muted);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:11px}.job__role{color:#445260;margin-top:4px;font-size:11px;font-weight:550}.job__location{color:var(--color-muted);font-weight:400}.job__location:before{content:" · ";margin-inline:4px}.education__grid{grid-template-columns:1.1fr 1fr;gap:32px;display:grid}.education h3{color:var(--color-accent);margin-bottom:5px;font-size:12px;font-weight:600;line-height:1.6}.education p{color:var(--color-muted);font-size:11px}.education .education__label{color:var(--color-muted);text-transform:uppercase;letter-spacing:.8px;margin-bottom:5px;font-size:9px}.site-footer{color:var(--color-muted);justify-content:space-between;padding:25px 2px 38px;font-size:11px;display:flex}.site-footer a{text-decoration:none}@media screen and (width<=850px){.resume{padding:40px 36px}.resume-header{column-gap:22px}h1{font-size:49px}.resume-header__focus{font-size:11px}.contact{font-size:10px}}@media screen and (width<=620px){.site-shell{padding:0 16px}.site-header{gap:14px;padding:19px 0}.site-brand__name,.site-nav__github{display:none}.site-nav{gap:17px}.print-button{padding:8px 11px}.resume{padding:32px 24px}.resume-header{grid-template-columns:1fr;row-gap:22px}h1{font-size:49px}.contact{border-left:2px solid var(--color-line);padding-left:14px;font-size:11px}.resume-summary{font-size:13px}.skills__groups{grid-template-columns:1fr;gap:16px}.skills__groups dt{margin-bottom:2px}.resume-section{margin-top:30px}.project{grid-template-columns:20px minmax(0,1fr);gap:8px}.project__eyebrow{gap:6px}.entry-heading h3{font-size:16px}.section-heading{gap:8px}.section-heading h2{letter-spacing:.9px;font-size:10px}.section-heading>span{font-size:9px}.job__location{margin-top:2px;display:block}.job__location:before{content:none}.education__grid{grid-template-columns:1fr;gap:20px}}@page{size:Letter;margin:.55in .6in}@media print{html{scroll-behavior:auto;font-size:10pt}body{color:#202d39;background:#fff;font-size:10pt;line-height:1.4}.site-header,.site-footer,.skip-link,.screen-only{display:none!important}.site-shell{max-width:none;margin:0;padding:0}.resume{box-shadow:none;border:0;padding:0}a{color:inherit;text-decoration:none}h1,h2,h3{break-after:avoid}p,li{orphans:2;widows:2}.resume-header{grid-template-columns:minmax(0,1fr) auto;gap:13pt 18pt}.eyebrow{letter-spacing:0;font-size:8pt}h1{letter-spacing:-1.1pt;margin:10pt 0 6pt;font-size:36pt}.resume-header__focus{font-size:9pt}.contact{gap:0;padding-top:0;font-size:8pt;line-height:1.65}.contact__location{margin-bottom:3pt}.resume-summary{max-width:none;font-size:9.5pt;line-height:1.55}.resume-section{margin-top:19pt}.section-heading{break-after:avoid;margin-bottom:11pt;padding-bottom:5pt}.section-heading h2{letter-spacing:0;font-size:8.3pt}.section-heading>span{font-size:7.5pt}.skills__groups{gap:16pt}.skills__groups dt{margin-bottom:4pt;font-size:8.2pt}.skills__groups dd{font-size:8.6pt;line-height:1.65}.project{break-inside:avoid;padding:12pt 0;display:block}.project__number{display:none}.project__eyebrow{gap:8pt;margin-bottom:3pt;font-size:7.6pt}.project__status{background:0 0;padding:0 4pt;font-size:7pt}.entry-heading h3{letter-spacing:-.15pt;font-size:12pt}.project__link{font-size:8pt}.project__description{margin-top:4pt;font-size:9.2pt;line-height:1.5}.detail-list{margin-top:5pt;padding-left:12pt;font-size:9pt;line-height:1.5}.detail-list li{margin-top:2pt;padding-left:1pt}.project__technologies{gap:0;margin-top:6pt}.project__technologies li{color:#566473;background:0 0;padding:0;font-size:7.7pt}.project__technologies li+li:before{content:" / ";color:#718497;margin-inline:5pt}.projects__continuation{break-before:page}.print-continuation{border-bottom:1px solid var(--color-accent);color:#566473;justify-content:space-between;padding:0 0 8pt;font-size:8pt;display:flex}.print-continuation strong{color:var(--color-accent)}.job{break-inside:avoid;margin-top:13pt}.job .entry-heading h3{font-size:10.4pt}.entry-dates{font-size:8.5pt}.job__role{margin-top:3pt;font-size:8.7pt}.education{break-inside:avoid}.education__grid{gap:20pt}.education h3{margin-bottom:3pt;font-size:9pt}.education p{font-size:8.5pt}.education .education__label{margin-bottom:4pt;font-size:7pt}}
