@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2) format("woff2"),url(./ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2) format("woff2"),url(./ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2) format("woff2"),url(./ibm-plex-mono-latin-400-normal.CvHOgSBP.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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-cyrillic-ext-400-normal.g30qAdWV.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-400-normal.Dsrv2Tcn.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-cyrillic-400-normal.DZqxrq2p.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-400-normal.BTotfTJu.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-greek-400-normal._efipK4i.woff2) format("woff2"),url(./ibm-plex-sans-greek-400-normal.D9ESIMu3.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-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-vietnamese-400-normal.DG4YqDda.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-400-normal.fK1oJ5dG.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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-ext-400-normal.C5H60-Va.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-400-normal.RBey6euL.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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-400-normal.CDDApCn2.woff2) format("woff2"),url(./ibm-plex-sans-latin-400-normal.CYLoc0-x.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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-cyrillic-ext-500-normal.Cs5J6C77.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-500-normal.DB5PtV2g.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-cyrillic-500-normal.CocWQlwt.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-500-normal.ByOcLdNv.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-greek-500-normal.JMMifIXV.woff2) format("woff2"),url(./ibm-plex-sans-greek-500-normal.CuWXN6rf.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-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-vietnamese-500-normal.e4dixQRQ.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-500-normal.BEb3_waV.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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-ext-500-normal.DakdToA3.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-500-normal.D0aIdm-b.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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-500-normal.6ng42L7E.woff2) format("woff2"),url(./ibm-plex-sans-latin-500-normal.BgVn5rGT.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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-cyrillic-ext-600-normal.DUMzJB7m.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-600-normal.Bz0x94Yp.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-cyrillic-600-normal.71GNu3SW.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-600-normal.BGq0mW3O.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-greek-600-normal.DzTrcv_p.woff2) format("woff2"),url(./ibm-plex-sans-greek-600-normal.D-CqTdkO.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-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-vietnamese-600-normal.DpPYBSTl.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-600-normal.DgdngZtN.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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-latin-ext-600-normal.DOrvGEcy.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-600-normal.DIrixKbi.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:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2) format("woff2"),url(./ibm-plex-sans-latin-600-normal.Cu4Hd6ag.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{--font-title: "IBM Plex Sans", sans-serif;--font-body: "IBM Plex Sans", sans-serif;--font-mono: "IBM Plex Mono", sans-serif;--color-bg: #fafafa;--color-title: #212121;--color-text: #7a7a7a;--color-link: #212121;--color-accent: #1a0dab;--color-visited: #681da8;--color-dimmed: #9a9a9a;--image-background: #dddddd;--color-button: #f1f1f1;--color-button-hover: #efefef;--interactive-background: #efefef;font-family:var(--font-body);color:var(--color-text);font-size:16px;font-weight:400;line-height:1.5rem}*{margin:0;padding:0;box-sizing:border-box}@media(prefers-color-scheme:dark){:root{--color-bg: #121212;--color-title: #f0f0f0;--color-text: #c1c1c1;--color-link: #f0f0f0;--color-accent: #99c3ff;--color-visited: #c58af9;--color-dimmed: #929292;--image-background: #323232;--color-button: #323232;--color-button-hover: #252525;--interactive-background: #252525}}@media screen and (max-width:480px){:root{font-size:18px}}body{min-height:100vh;width:100%;margin:0;background-color:var(--color-bg)}.contents{display:contents}h1,.h1{font-size:1rem;line-height:1.5rem;color:var(--color-title);margin:0;font-family:var(--font-title);font-weight:600;margin-bottom:2rem}h2{font-size:1rem;line-height:1.5rem;color:var(--color-title);margin:0;font-family:var(--font-title);font-weight:600;text-transform:lowercase;margin-bottom:2rem}h3{font-size:1rem;line-height:1.5rem;color:var(--color-title);margin:0;font-weight:500}p{font-size:1rem;line-height:1.5rem;font-weight:400;margin:0;margin-bottom:1.5rem}.dimmed{color:var(--color-dimmed)}pre{font-size:16px;font-family:var(--font-mono);background-color:var(--color-bg);border-radius:3px;box-shadow:2px 2px 6px #000;padding:.5em;overflow-x:auto;color:var(--color-text);font-weight:400}.mono{font-family:var(--font-mono)}.accent{color:var(--color-accent)!important;fill:var(--color-accent)!important}.accent:visited{color:var(--color-visited)!important}.link{color:var(--color-link);fill:var(--color-link)}img.real-size{width:50%;height:auto}@media(max-width:1024px){img.real-size{width:80%}}@media(max-width:800px){img.real-size{width:90%}}@media(max-width:560px){img.real-size{width:100%}}.svg-component.real-size>svg{width:50%;height:auto}@media(max-width:1024px){.svg-component.real-size>svg{width:80%}}@media(max-width:800px){.svg-component.real-size>svg{width:90%}}@media(max-width:560px){.svg-component.real-size>svg{width:100%}}.svg-component.full-size>svg{width:100%;height:auto}@media(max-width:1024px){.svg-component.full-size>svg{width:80%}}@media(max-width:800px){.svg-component.full-size>svg{width:90%}}@media(max-width:560px){.svg-component.full-size>svg{width:100%}}.project-gallery{display:grid;grid-template-columns:repeat(6,1fr);column-gap:1rem;row-gap:0rem;margin-bottom:1.5rem}.thumbnail{grid-column-end:span 2}.thumbnail:hover{border-bottom:none;margin-bottom:0}.thumbnail img{width:100%;border-radius:4px}.thumbnail img:hover{outline:var(--color-dimmed) solid 1px}@media(max-width:480px){.thumbnail{margin-top:-.5rem;grid-column-end:span 3}}#tooltip{color:var(--color-title);font-weight:600;cursor:pointer}.tippy-box a,.tippy-box p{color:#fafafa}.tippy-content{padding:.7rem 1rem}[data-tippy-root]{display:initial}article.star,article.case-study{grid-column-start:1;grid-column-end:span 8;grid-row-start:1;display:grid;grid-template-columns:repeat(8,1fr);column-gap:2rem;row-gap:0rem;justify-content:center}@media(max-width:1024px){article.star,article.case-study{grid-column-end:span 6;grid-template-columns:repeat(6,1fr);column-gap:4rem}}@media(max-width:800px){article.star,article.case-study{grid-template-columns:repeat(6,1fr);column-gap:2rem}}@media(max-width:480px){article.star,article.case-study{column-gap:1rem}}article.star p,article.case-study p,article.star h1,article.case-study h1,article.star h2,article.case-study h2,article.star h3,article.case-study h3,article.star h4,article.case-study h4,article.star h5,article.case-study h5,article.star h6,article.case-study h6,article.star ul,article.case-study ul,article.star ol,article.case-study ol,article.star pre,article.case-study pre,article.star blockquote,article.case-study blockquote,article.star table,article.case-study table,article.star.star iframe,article.case-study.star iframe,article.star .tags,article.case-study .tags{grid-column-start:2;grid-column-end:span 4}@media(max-width:1024px){article.star p,article.case-study p,article.star h1,article.case-study h1,article.star h2,article.case-study h2,article.star h3,article.case-study h3,article.star h4,article.case-study h4,article.star h5,article.case-study h5,article.star h6,article.case-study h6,article.star ul,article.case-study ul,article.star ol,article.case-study ol,article.star pre,article.case-study pre,article.star blockquote,article.case-study blockquote,article.star table,article.case-study table,article.star.star iframe,article.case-study.star iframe,article.star .tags,article.case-study .tags{grid-column-start:1;grid-column-end:span 4}}@media(max-width:720px){article.star p,article.case-study p,article.star h1,article.case-study h1,article.star h2,article.case-study h2,article.star h3,article.case-study h3,article.star h4,article.case-study h4,article.star h5,article.case-study h5,article.star h6,article.case-study h6,article.star ul,article.case-study ul,article.star ol,article.case-study ol,article.star pre,article.case-study pre,article.star blockquote,article.case-study blockquote,article.star table,article.case-study table,article.star.star iframe,article.case-study.star iframe,article.star .tags,article.case-study .tags{grid-column-end:span 5}}@media(max-width:560px){article.star p,article.case-study p,article.star h1,article.case-study h1,article.star h2,article.case-study h2,article.star h3,article.case-study h3,article.star h4,article.case-study h4,article.star h5,article.case-study h5,article.star h6,article.case-study h6,article.star ul,article.case-study ul,article.star ol,article.case-study ol,article.star pre,article.case-study pre,article.star blockquote,article.case-study blockquote,article.star table,article.case-study table,article.star.star iframe,article.case-study.star iframe,article.star .tags,article.case-study .tags{grid-column-end:span 6}}article.star h1,article.case-study h1{margin-bottom:1.5rem}article.star h2,article.case-study h2,article.star h3,article.case-study h3{margin:1.5rem 0 1rem;font-weight:500}article.star p,article.case-study p{margin-bottom:1.5rem}article.star .image,article.case-study .image,article.star iframe,article.case-study iframe{grid-column-start:1;grid-column-end:span 8;max-width:100%;margin:.5rem 0;background-color:var(--image-background);text-align:center;line-height:0}@media(max-width:1024px){article.star .image,article.case-study .image,article.star iframe,article.case-study iframe{grid-column-end:span 6}}article.star iframe,article.case-study iframe{margin-bottom:2rem}article.star .gallery,article.case-study .gallery{grid-column-start:1;grid-column-end:span 8;margin-top:2rem;margin-bottom:.5rem;text-align:center;display:grid;column-gap:2rem;row-gap:0rem;justify-content:center}@media(max-width:1024px){article.star .gallery,article.case-study .gallery{grid-column-end:span 6;grid-template-columns:repeat(6,1fr);column-gap:4rem}}@media(max-width:800px){article.star .gallery,article.case-study .gallery{grid-template-columns:repeat(6,1fr);column-gap:1rem}}@media(max-width:480px){article.star .gallery,article.case-study .gallery{column-gap:.5rem}}article.star .gallery .image,article.case-study .gallery .image{grid-column-start:initial;grid-column-end:initial;margin:.5rem 0;max-width:100%;background-color:var(--image-background);text-align:center}article.star ul.meta,article.case-study ul.meta{grid-column-start:7;grid-column-end:span 2;grid-row-start:1;grid-row-end:span 3;margin:0 0 1rem;padding:0;row-gap:.5rem}article.star ul.meta li,article.case-study ul.meta li{list-style:none}@media(max-width:1024px){article.star ul.meta,article.case-study ul.meta{grid-column-start:5}}@media(max-width:720px){article.star ul.meta,article.case-study ul.meta{grid-column-start:initial;grid-row-start:initial}}@media(max-width:560px){article.star ul.meta,article.case-study ul.meta{grid-column-end:span 6}}.list{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:auto;column-gap:2rem;row-gap:2rem;justify-content:center}.list p{margin-bottom:0}.list h3{text-transform:lowercase;margin-bottom:.25rem}.list a{color:var(--color-text);position:relative;text-decoration:none;background-color:var(--color-bg);padding:.75rem;margin:-.75rem;border:1px solid var(--color-bg)}.list a h3{color:var(--color-accent)}.list a:visited h3{color:var(--color-visited)}.list a:visited p{color:var(--color-dimmed)}.list a:hover,.list a:focus{text-decoration:none;color:var(--color-text);border:1px solid var(--color-accent)}.list a:hover h3,.list a:focus h3{color:var(--color-accent)}.list a:hover .corner,.list a:focus .corner{content:"";position:absolute;width:5px;height:5px;border:1px solid var(--color-accent);background-color:var(--color-bg)}.list a:hover .corner:nth-child(1),.list a:focus .corner:nth-child(1){top:-3px;left:-3px}.list a:hover .corner:nth-child(2),.list a:focus .corner:nth-child(2){top:-3px;right:-3px}.list a:hover .corner:nth-child(3),.list a:focus .corner:nth-child(3){bottom:-3px;left:-3px}.list a:hover .corner:nth-child(4),.list a:focus .corner:nth-child(4){bottom:-3px;right:-3px}@keyframes appearAnimation{0%{opacity:0;filter:blur(6px)}to{opacity:1;filter:blur(0)}}#appear{animation:appearAnimation 1s ease-out forwards}.app.svelte-12qhfyh{max-width:80rem;margin:0 auto;padding-left:.5rem;padding-right:.5rem}main.svelte-12qhfyh{display:grid;grid-template-columns:repeat(8,1fr);column-gap:2rem;row-gap:12rem;justify-content:center;margin:6rem 0 12rem;transition:.15s ease-in-out}main.about.svelte-12qhfyh{row-gap:8rem;transition:.15s ease-in-out}main.work.svelte-12qhfyh{row-gap:8rem;transition:.15s ease-in-out}@media(max-width:1312px){.app.svelte-12qhfyh{padding-left:2rem;padding-right:2rem}}@media(max-width:1024px){.app.svelte-12qhfyh{padding-left:2rem;padding-right:2rem}main.svelte-12qhfyh{display:grid;grid-template-columns:repeat(6,1fr);column-gap:4rem;row-gap:12rem;justify-content:center}}@media(max-width:800px){.app.svelte-12qhfyh{padding-left:1.5rem;padding-right:1.5rem}main.svelte-12qhfyh{display:grid;grid-template-columns:repeat(6,1fr);column-gap:2rem;row-gap:8rem;justify-content:center}}@media(max-width:480px){.app.svelte-12qhfyh{padding-left:1rem;padding-right:1rem}main.svelte-12qhfyh{column-gap:1rem;row-gap:6rem}main.about.svelte-12qhfyh{row-gap:6rem}}
