@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.B3hZxag_.woff2) format("woff2"),url(./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-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-cyrillic-400-normal.DvQQgHTq.woff2) format("woff2"),url(./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-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-vietnamese-400-normal.BFiUPp6R.woff2) format("woff2"),url(./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-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-ext-400-normal.DxDDqVQb.woff2) format("woff2"),url(./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-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-400-normal.Dm_PoFIZ.woff2) format("woff2"),url(./ibm-plex-mono-latin-400-normal.O6-GRVqx.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+2074,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.BJItruJi.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-400-normal.C1SKuNhx.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-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-cyrillic-400-normal.BPWuI_CM.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-400-normal.CTUnhTqV.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.n6oPB5VF.woff2) format("woff2"),url(./ibm-plex-sans-greek-400-normal.DSasf_jt.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.B97dYap6.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-400-normal.OKGpH0gQ.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.BHf956ki.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-400-normal.CyDjbWPV.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-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-sans-latin-400-normal.CdZtFfYS.woff2) format("woff2"),url(./ibm-plex-sans-latin-400-normal.BU83cd9M.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+2074,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.Cfrm0EKX.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-500-normal.DujcQJCN.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-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-cyrillic-500-normal.D1zm99-P.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-500-normal.BEypoZQd.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.By04ZBDJ.woff2) format("woff2"),url(./ibm-plex-sans-greek-500-normal.BwBTeJfm.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.rpgY82Kd.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-500-normal.V_-bWxzT.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.DprGrCew.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-500-normal.CgrnmiIU.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-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(./ibm-plex-sans-latin-500-normal.BFLYOLbL.woff2) format("woff2"),url(./ibm-plex-sans-latin-500-normal.Dh0NORqx.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+2074,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.jBHiQjEG.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-ext-600-normal.CJ5MtzOJ.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-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-cyrillic-600-normal.DM9A4i1K.woff2) format("woff2"),url(./ibm-plex-sans-cyrillic-600-normal.BuRiwhxF.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.FZrtz_q-.woff2) format("woff2"),url(./ibm-plex-sans-greek-600-normal.BJUfoJTU.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.DHNi5J5O.woff2) format("woff2"),url(./ibm-plex-sans-vietnamese-600-normal.D03elqKW.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.dAZVOL-H.woff2) format("woff2"),url(./ibm-plex-sans-latin-ext-600-normal.bp4QDljZ.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-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(./ibm-plex-sans-latin-600-normal.BGOKnPO6.woff2) format("woff2"),url(./ibm-plex-sans-latin-600-normal.ZykYOGKL.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+2074,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-1wd6h8p{max-width:80rem;margin:0 auto;padding-left:.5rem;padding-right:.5rem}main.svelte-1wd6h8p{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-1wd6h8p{row-gap:8rem;transition:.15s ease-in-out}main.work.svelte-1wd6h8p{row-gap:8rem;transition:.15s ease-in-out}@media (max-width: 1312px){.app.svelte-1wd6h8p{padding-left:2rem;padding-right:2rem}}@media (max-width: 1024px){.app.svelte-1wd6h8p{padding-left:2rem;padding-right:2rem}main.svelte-1wd6h8p{display:grid;grid-template-columns:repeat(6,1fr);column-gap:4rem;row-gap:12rem;justify-content:center}}@media (max-width: 800px){.app.svelte-1wd6h8p{padding-left:1.5rem;padding-right:1.5rem}main.svelte-1wd6h8p{display:grid;grid-template-columns:repeat(6,1fr);column-gap:2rem;row-gap:8rem;justify-content:center}}@media (max-width: 480px){.app.svelte-1wd6h8p{padding-left:1rem;padding-right:1rem}main.svelte-1wd6h8p{column-gap:1rem;row-gap:6rem}main.about.svelte-1wd6h8p{row-gap:6rem}}
