*,:after,:before{box-sizing:border-box}*{margin:0}img{background-repeat:no-repeat;background-size:cover;font-style:italic;height:auto;max-width:100%;shape-margin:1rem;vertical-align:middle}body{line-height:1.5;-webkit-font-smoothing:antialiased}canvas,img,picture,svg,video{display:block;max-width:100%}button,input,select,textarea{font:inherit}h1,h2,h3,h4,h5,h6,p{word-wrap:break-word}h1,h2,h3,h4,strong{font-family:IBM Plex Mono,monospace;font-family:var(--font-mono);font-weight:400;line-height:1.2;scroll-margin-top:9rem;scroll-margin-top:calc(var(--header-height) + 6rem)}h1,h2{font-size:2.5em;font-size:var(--font-size-xl)}h3,h4{font-size:1.842em;font-size:var(--font-size-lg)}h1+h1,h1+h2,h1+h3,h1+p,h2+h1,h2+h2,h2+h3,h2+p,h3+h1,h3+h3,h3+p,p+h1,p+h2,p+h3,p+p{margin-top:1rem}a{color:var(--color-accent);display:inline-block;font-family:IBM Plex Mono,monospace;font-family:var(--font-mono);position:relative;-webkit-text-decoration:none;text-decoration:none;transition:color .36s ease;transition:color var(--transition-time) ease;z-index:1}a:not(.project-card):not(nav a):not(.control-bar a) svg{display:inline-block;max-height:.75rem}a:not(.project-card):not(nav a):not(.control-bar a) svg path{transition:fill .36s ease;transition:fill var(--transition-time) ease}a.external{cursor:alias}a.external svg{fill:currentColor}a:after,a:before{background:var(--color-accent);bottom:0;content:"";position:absolute;right:0;z-index:-1}a:before{height:100%;transition:width .36s ease;transition:width var(--transition-time) ease;width:0}a:after{height:1px;width:100%}a:focus,a:hover{color:var(--color-background)}a:focus path,a:hover path{fill:var(--color-background)}a:focus:before,a:hover:before{left:0;right:auto;width:100%}.visually-hidden{height:1px;left:-9999px;opacity:.001;position:absolute;top:-9999px;width:1px}.container{padding-left:max(2rem,calc(50vw - 30rem));padding-left:var(--container-inline-padding);padding-right:max(2rem,calc(50vw - 30rem));padding-right:var(--container-inline-padding)}:root{--font-size-base:16px;--color-black:#071013;--color-white:#e6e1db;--color-gray-dark:#303637;--color-gray-light:#bdbbb7;--color-dark-blue:#373f58;--color-green:#307351;--color-green-light:#56b35f;--header-height:3rem;--container-width:60rem;--container-max-width:90rem;--container-min-padding:2rem;--container-inline-padding:max(var(--container-min-padding),calc((100vw - var(--container-width))/2));--transition-time:.36s;--font-mono:"IBM Plex Mono",monospace;--font-sans:"Inter",sans-serif;--font-size-xl:2.5em;--font-size-lg:1.842em;--font-size-md:1.25em;--font-size-base:1em;--font-size-sm:.75em;scroll-behavior:smooth}body{--color-background:var(--color-white);--color-foreground:var(--color-black);--color-accent:var(--color-green);--color-ob:var(--color-gray-light);--transition-time:0;background:#e6e1db;background:var(--color-background);color:#071013;color:var(--color-foreground);font-family:Inter,sans-serif;font-family:var(--font-sans);font-size:clamp(1.13rem,.34vw + 1.04rem,1.31rem);font-size:clamp(1.13rem,.34vi + 1.04rem,1.31rem);transition:color 0 ease,background 0 ease;transition:color var(--transition-time) ease,background var(--transition-time) ease}body.initialized{--transition-time:.36s}@media (min-width:60rem){.fluid{font-size:1.5em}}body.light{--color-background:var(--color-white);--color-foreground:var(--color-black);--color-accent:var(--color-green);--color-ob:var(--color-gray-light);font-weight:400}body.dark{--color-background:var(--color-black);--color-foreground:var(--color-white);--color-accent:var(--color-green-light);--color-ob:var(--color-gray-dark)}@media (prefers-color-scheme:dark){body{--color-background:var(--color-black);--color-foreground:var(--color-white);--color-accent:var(--color-green-light);--color-ob:var(--color-gray-dark)}}@media (prefers-color-scheme:light){body{--color-background:var(--color-white);--color-foreground:var(--color-black);--color-accent:var(--color-green);--color-ob:var(--color-gray-light)}}body.dark .icon--vis .dark,body.light .icon--vis .light{display:none}main{background:inherit;color:inherit;display:flex;flex-direction:column}hr{background:var(--color-foreground);border:none;color:var(--color-foreground);height:2px;margin-bottom:2rem;margin-top:2rem;width:100%}::-moz-selection{background:var(--color-accent);color:var(--color-background);-moz-transition:background .36s ease,color .36s ease;transition:background .36s ease,color .36s ease;-moz-transition:background var(--transition-time) ease,color var(--transition-time) ease;transition:background var(--transition-time) ease,color var(--transition-time) ease}::selection,strong{background:var(--color-accent);color:var(--color-background);transition:background .36s ease,color .36s ease;transition:background var(--transition-time) ease,color var(--transition-time) ease}strong::-moz-selection{background:var(--color-foreground);color:var(--color-background)}strong::selection{background:var(--color-foreground);color:var(--color-background)}.frame{min-height:100dvh;padding-top:7rem;padding-top:calc(var(--header-height) + 4rem)}@media (min-width:60rem){.frame{padding-bottom:9rem;padding-bottom:calc(var(--header-height) + 6rem);padding-top:9rem;padding-top:calc(var(--header-height) + 6rem)}.frame:not(#section--intro):not(:last-child){border-bottom:2px solid var(--color-foreground)}}@media (max-width:60rem){.frame{padding-bottom:2.5rem;padding-top:2.5rem}.frame:not(:last-child){border-bottom:2px solid var(--color-foreground)}}.intro{display:grid;grid-template-columns:1fr 3fr;grid-gap:2rem}@media (max-width:60rem){.intro{grid-template-columns:1fr}}main>nav{order:2}#section--intro{min-height:calc(100dvh - 3rem);min-height:calc(100dvh - var(--header-height));order:1}#section--work{order:3}#section--about{order:4}#section--contact{order:5}.frame{position:relative}.frame nav{background:var(--color-background);left:0;padding-left:inherit;padding-right:inherit;position:fixed;top:0;width:100%;z-index:99}.frame nav menu{display:flex;justify-content:space-between;list-style:none;margin:0;padding:0}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:100;src:url(/_astro/ibm-plex-mono-cyrillic-ext-100-normal.CA8l4_DY.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-100-normal.CZrxNwtD.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:100;src:url(/_astro/ibm-plex-mono-cyrillic-100-normal.Dwm9A50R.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-100-normal.G8ygyWpG.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:100;src:url(/_astro/ibm-plex-mono-vietnamese-100-normal.TPsdIGmy.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-100-normal.CWHUvCJ4.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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:100;src:url(/_astro/ibm-plex-mono-latin-ext-100-normal.zsXZhFx5.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-100-normal.DP6ljJip.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:100;src:url(/_astro/ibm-plex-mono-latin-100-normal.C44viotf.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-100-normal.BEFv3vkB.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.B3hZxag_.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.ZyMXPjaT.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-400-normal.DvQQgHTq.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-400-normal.CJUKFyLa.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/_astro/ibm-plex-mono-vietnamese-400-normal.BFiUPp6R.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-400-normal.DLynVohM.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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-ext-400-normal.DxDDqVQb.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-400-normal.uwM7KshN.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.Dm_PoFIZ.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.O6-GRVqx.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:700;src:url(/_astro/ibm-plex-mono-cyrillic-ext-700-normal.CcGNpAf3.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-700-normal.zA2EAszW.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:700;src:url(/_astro/ibm-plex-mono-cyrillic-700-normal.p0--0TT5.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-700-normal.XGhtXPWC.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:700;src:url(/_astro/ibm-plex-mono-vietnamese-700-normal.D7b4BDym.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-700-normal.bCyYmTho.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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:700;src:url(/_astro/ibm-plex-mono-latin-ext-700-normal.ChDdxD0n.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-700-normal.DCf1kqJT.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,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-display:swap;font-family:IBM Plex Mono;font-style:normal;font-weight:700;src:url(/_astro/ibm-plex-mono-latin-700-normal.QW6cfU13.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-700-normal.DP9fNao9.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/_astro/inter-cyrillic-ext-300-normal.B8-SKPy6.woff2) format("woff2"),url(/_astro/inter-cyrillic-ext-300-normal.CxBffQcw.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/_astro/inter-cyrillic-300-normal.DuKDqihX.woff2) format("woff2"),url(/_astro/inter-cyrillic-300-normal.CpVW2Piz.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/_astro/inter-greek-ext-300-normal.Bzbb9qoQ.woff2) format("woff2"),url(/_astro/inter-greek-ext-300-normal.BHRnjIck.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/_astro/inter-greek-300-normal._k6LbL93.woff2) format("woff2"),url(/_astro/inter-greek-300-normal.t-A5Zxgo.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/_astro/inter-vietnamese-300-normal.Bdr24Bqb.woff2) format("woff2"),url(/_astro/inter-vietnamese-300-normal.B710x6d6.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-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/_astro/inter-latin-ext-300-normal.C2kLfG2J.woff2) format("woff2"),url(/_astro/inter-latin-ext-300-normal.n8Ps4oXY.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,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-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/_astro/inter-latin-300-normal.CvRFFuZy.woff2) format("woff2"),url(/_astro/inter-latin-300-normal.ORCTF8i-.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}#mobile-menu-toggle{display:none}@media (max-width:60rem){#mobile-menu-toggle{aspect-ratio:1/1;background:none;border:none;cursor:pointer;display:block;height:auto;padding:0;position:fixed;right:var(--container-min-padding);top:calc(var(--container-min-padding) - 1.5rem);width:3rem;z-index:999999}#mobile-menu-toggle .close,#mobile-menu-toggle .open{aspect-ratio:1/1;display:block;position:relative;width:100%}#mobile-menu-toggle .close{margin:0 auto;width:2.25rem}#mobile-menu-toggle svg{height:100%;left:0;position:absolute;top:0;width:100%}html:not(.mobile-nav-open) #mobile-menu-toggle .close{display:none}html:not(.mobile-nav-open) #mobile-menu-toggle .open{display:block}.mobile-nav-open{height:100dvh;overflow:hidden}.mobile-nav-open nav{left:0}.mobile-nav-open nav li{opacity:1;transform:translate(0)}.mobile-nav-open #mobile-menu-toggle .close{display:block}.mobile-nav-open #mobile-menu-toggle .open{display:none}}
