@font-face{font-family:Montserrat Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/montserrat-cyrillic-ext-wght-normal-CO5hGrJv.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:Montserrat Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/montserrat-cyrillic-wght-normal-EAA9jha_.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Montserrat Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/montserrat-vietnamese-wght-normal-k7S-YeeD.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:Montserrat Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/montserrat-latin-ext-wght-normal-BsZE-iaG.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:Montserrat Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/montserrat-latin-wght-normal-l_AIctKy.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{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;--tx:0px;--ty:0px;--scroll-y:0px;--scroll-y-percent:0;--md-sys-color-primary:#546c8a;--md-sys-color-on-primary:#fff;--md-sys-color-primary-container:#d0e4ff;--md-sys-color-on-primary-container:#001d36;--md-sys-color-secondary:#55606f;--md-sys-color-on-secondary:#fff;--md-sys-color-secondary-container:#d9e4f6;--md-sys-color-on-secondary-container:#121d2a;--md-sys-color-tertiary:#6d5b7c;--md-sys-color-on-tertiary:#fff;--md-sys-color-tertiary-container:#f3dbff;--md-sys-color-on-tertiary-container:#271430;--md-sys-color-surface-variant:#dce3e9;--md-sys-color-on-surface-variant:#40484d;--md-sys-color-outline:#71787e;--md-sys-color-outline-variant:#c0c7cd;--md-sys-color-shadow:#000;--md-sys-color-inverse-primary:#9fcbff;background-color:#242424;font-family:Montserrat Variable,system-ui,sans-serif;font-weight:540;line-height:1.5}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}*{box-sizing:border-box;-webkit-user-select:none;user-select:none}html{overflow-y:auto;overflow-y:overlay;background-color:#09101a}body{min-width:320px;min-height:100vh;color:var(--md-sys-color-on-primary);margin:0;font-weight:540}a{-webkit-text-decoration:inherit;text-decoration:inherit;-webkit-tap-highlight-color:transparent}img,svg{display:block}#root{max-width:min(100% - 100px,1280px);min-height:100vh;margin:0 auto}@media (width<=768px){#root{max-width:calc(100% - 50px)}}::-webkit-scrollbar{background-color:#0000;width:14px;height:8px}::-webkit-scrollbar-track{background-color:#0000}::-webkit-scrollbar-thumb{background-color:color-mix(in srgb, var(--md-sys-color-inverse-primary), transparent clamp(55%, -83.3333% * var(--scroll-y-percent,0) + 80%, 80%));background-clip:content-box;border:4px solid #0000;border-radius:100px}::-webkit-scrollbar-thumb:hover{background-color:color-mix(in srgb, var(--md-sys-color-inverse-primary), transparent 30%);border:3px solid #0000}.banner-wrap{flex-direction:column;justify-content:center;display:flex}.banner{flex-direction:row;align-items:center;gap:50px;margin-top:45vh;margin-bottom:20px;display:flex;transform:translateY(-50%)}@media (width<=1300px){.banner{max-width:950px;margin-left:auto;margin-right:auto}}@media (width<=880px){.banner{flex-direction:column;align-items:flex-start;gap:20px;max-width:480px;margin-left:auto;margin-right:auto}}.avatar img{aspect-ratio:1;pointer-events:none;border-radius:50%;flex-shrink:0;width:clamp(120px,26vmin,200px);height:clamp(120px,26vmin,200px);animation:1s ease-in-out .3s both avatar}@keyframes avatar{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.title{flex-direction:column;align-items:flex-start;gap:20px;display:flex}.name{letter-spacing:.002em;width:min(560px,100%);max-width:100%;margin:0;font-size:clamp(42px,8vmin,76px);font-weight:520;line-height:1.08;animation:.9s cubic-bezier(.2,.9,.2,1) .2s both hero-text-in;position:relative}.hero-gradient-text{color:color-mix(in srgb, var(--md-sys-color-primary-container), #fff 50%);text-shadow:0 1px 2px #0000001a}.bio{letter-spacing:.004em;max-width:min(920px,100%);margin:0;font-size:clamp(18px,2.8vmin,24px);font-weight:500;line-height:1.58;animation:.9s cubic-bezier(.2,.9,.2,1) .45s both hero-text-in}@keyframes hero-text-in{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}.down-arrow{z-index:10;justify-content:center;transition:opacity .3s;display:flex;position:fixed;bottom:0;left:0;right:0}.down-arrow .down-arrow-inner{cursor:pointer;width:1em;height:1.5em;color:color-mix(in srgb, var(--md-sys-color-primary-container), #fff 30%);opacity:.55;padding-left:.25em;padding-right:.25em;font-size:min(60px,12vw);transition:opacity .25s}.down-arrow .down-arrow-inner svg{width:100%;height:100%}.down-arrow .down-arrow-inner:hover{opacity:.8}html.scrolled .down-arrow{opacity:0;pointer-events:none}.content{grid-column-gap:60px;grid-template-columns:repeat(12,1fr);display:grid}@supports (animation-timeline:scroll(root y)){.content{animation:linear both content-shift;animation-timeline:scroll(root y);animation-range:0 25vh}@keyframes content-shift{0%{opacity:0;margin-top:35vh;margin-bottom:0}to{opacity:1;margin-top:0;margin-bottom:35vh}}@keyframes widget-in{0%{opacity:0;scale:.8}to{opacity:1;scale:1}}.content .widget,.content .project{animation:linear both widget-in;animation-timeline:view();animation-range:entry 0 entry 100px}}@supports not (animation-timeline:scroll(root y)){.content{margin-top:max(0px, calc(-140vh * var(--scroll-y-percent) + 35vh));margin-bottom:calc(35vh - max(0px, calc(-140vh * var(--scroll-y-percent) + 35vh)));--opacity:calc(var(--scroll-y-percent) / .15)}}html[style*="--scroll-y: 0px"] .content,html[style*="--scroll-y: 1px"] .content,html[style*="--scroll-y: 2px"] .content,html[style*="--scroll-y: 3px"] .content,html[style*="--scroll-y: 4px"] .content,html[style*="--scroll-y: 5px"] .content,html[style*="--scroll-y: 6px"] .content,html[style*="--scroll-y: 7px"] .content{pointer-events:none}.content .bento{--template-columns:8;--bento-gap:40px;grid-template-columns:repeat(var(--template-columns), minmax(0, 1fr));grid-auto-rows:var(--square-size);gap:var(--bento-gap);grid-column:span 8;grid-auto-flow:dense;display:grid}.content .projects{grid-column:span 4}@media screen and (width<=1300px){.content{flex-direction:column;gap:40px;max-width:950px;margin-left:auto;margin-right:auto;display:flex}.content .projects{grid-template-columns:repeat(2,1fr);display:grid}}@media screen and (width<=880px){.content{max-width:480px;margin-left:auto;margin-right:auto}.content .bento{--template-columns:4;--bento-gap:25px}.content .bento .widget.mobile-aspect-ratio{height:unset;aspect-ratio:var(--mobile-aspect-ratio)}.content .bento .widget.mobile-specific-size{--c:min(var(--m-columns,2), var(--template-columns));--r:var(--m-rows,2)}.content .bento .widget.mobile-specific-placement{--grid-col-start:var(--m-col-start,var(--col-start,auto));--grid-row-start:var(--m-row-start,var(--row-start,auto))}.content .projects{display:flex!important}}.widget{--c:min(var(--columns,2), var(--template-columns));--r:var(--rows,2);--grid-col-start:var(--col-start,auto);--grid-row-start:var(--row-start,auto);grid-column-start:var(--grid-col-start);grid-column-end:span var(--c);grid-row-start:var(--grid-row-start);grid-row-end:span var(--r);touch-action:manipulation;width:100%;height:100%;color:var(--md-sys-color-on-secondary-container);background-color:var(--md-sys-color-secondary-container);opacity:var(--opacity,1);--x:0deg;--y:0deg;transform:perspective(var(--p,525px)) translateZ(var(--z,0px)) rotateX(var(--x)) rotateY(var(--y));border-radius:24px;font-size:16px;transition:transform .15s linear,background-color .2s linear,box-shadow .2s;overflow:hidden}.widget:active{--x:calc(var(--dx,0deg) * 1.1);--y:calc(var(--dy,0deg) * 1.1);--p:300px;--z:-15px}@supports (color:color-mix(in srgb, red, red)){.widget:hover{background-color:color-mix(in srgb, var(--md-sys-color-secondary-container), var(--md-sys-color-shadow) 5%)}.widget:active{background-color:color-mix(in srgb, var(--md-sys-color-secondary-container), var(--md-sys-color-shadow) 10%)}}@supports not (color:color-mix(in srgb, red, red)){.widget:before{content:"";background-color:var(--md-sys-color-shadow);opacity:0;transition:opacity .2s linear;position:absolute;inset:0}.widget:hover:before{opacity:.05}.widget:active:before{opacity:.1}}.widget>a,.widget>div{width:100%;height:100%;color:inherit;box-sizing:border-box;flex-direction:row;padding:24px;display:flex}.widget.one-line:not(.one-line-mobile-only):not(.one-line-pc-only)>a,.widget.one-line:not(.one-line-mobile-only):not(.one-line-pc-only)>div{align-items:center}.widget.one-line:not(.one-line-mobile-only):not(.one-line-pc-only)>a:not([style*=--padding]),.widget.one-line:not(.one-line-mobile-only):not(.one-line-pc-only)>div:not([style*=--padding]){padding-top:0;padding-bottom:0}.widget.one-line:not(.one-line-mobile-only):not(.one-line-pc-only) .widget-content{flex-direction:row;align-items:center}.widget.one-line:not(.one-line-mobile-only):not(.one-line-pc-only) .widget-content .widget-icon{width:35px;min-width:35px;height:35px;min-height:35px}.widget.one-line:not(.one-line-mobile-only):not(.one-line-pc-only) .widget-content .widget-meta{margin-top:0;margin-left:20px}@media screen and (width<=880px){.widget.one-line.one-line-mobile-only>a,.widget.one-line.one-line-mobile-only>div{align-items:center}.widget.one-line.one-line-mobile-only>a:not([style*=--padding]),.widget.one-line.one-line-mobile-only>div:not([style*=--padding]){padding-top:0;padding-bottom:0}.widget.one-line.one-line-mobile-only .widget-content{flex-direction:row;align-items:center}.widget.one-line.one-line-mobile-only .widget-content .widget-icon{width:35px;min-width:35px;height:35px;min-height:35px}.widget.one-line.one-line-mobile-only .widget-content .widget-meta{margin-top:0;margin-left:20px}}@media screen and (width>=880px){.widget.one-line.one-line-pc-only>a,.widget.one-line.one-line-pc-only>div{align-items:center}.widget.one-line.one-line-pc-only>a:not([style*=--padding]),.widget.one-line.one-line-pc-only>div:not([style*=--padding]){padding-top:0;padding-bottom:0}.widget.one-line.one-line-pc-only .widget-content{flex-direction:row;align-items:center}.widget.one-line.one-line-pc-only .widget-content .widget-icon{width:35px;min-width:35px;height:35px;min-height:35px}.widget.one-line.one-line-pc-only .widget-content .widget-meta{margin-top:0;margin-left:20px}}.weblink-widget{width:100%;height:100%;display:flex}.widget .weblink-widget .widget-content{flex-direction:column;flex:1;max-width:100%;display:flex}.widget .weblink-widget .widget-content .widget-icon{aspect-ratio:1;background-color:var(--bg,color-mix(in srgb, var(--md-sys-color-primary), white 82%));width:40px;min-width:40px;height:40px;min-height:40px;color:var(--fg,var(--md-sys-color-primary));fill:currentColor;border:1px solid #ffffff29;border-radius:10px;justify-content:center;align-items:center;display:flex;overflow:hidden;box-shadow:inset 0 1px #ffffff2e,0 1px 2px #00000014}.widget .weblink-widget .widget-content .widget-icon svg{width:var(--size,50%);height:var(--size,50%);stroke:currentColor}.widget .weblink-widget .widget-content .widget-meta{flex:1;margin-top:10px}.widget .weblink-widget .widget-content .widget-meta .widget-name{font-weight:650}.widget .weblink-widget .widget-content .widget-meta .widget-description{opacity:.7;font-size:.9em;font-weight:540}.widget .weblink-widget .widget-content .widget-button{background-color:color-mix(in srgb, transparent, var(--md-sys-color-shadow) 8%);border-radius:6px;width:fit-content;padding:3px 10px;font-size:.85em;font-weight:640;transition:background-color .2s;display:block}.widget .weblink-widget .widget-content .widget-button:hover{background-color:color-mix(in srgb, transparent, var(--md-sys-color-shadow) 16%)}.widget .weblink-widget .widget-image{aspect-ratio:1.4;border-radius:10px;height:100%;margin-left:1.5rem;overflow:hidden}.widget .weblink-widget .widget-image .widget-image-bg{background-color:#ffffff21;background-position:50%;background-repeat:no-repeat;background-size:cover;width:100%;height:100%}.widget .image-widget{background-color:var(--bg-color,transparent);padding:var(--padding,0px);box-sizing:border-box;width:100%;height:100%}.widget .image-widget .widget-pure-img{background-size:var(--bg-size,cover);background-position:var(--bg-pos,center);background-repeat:no-repeat;border-radius:10px;width:100%;height:100%}.widget .image-widget .widget-pure-img-element{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;border-radius:10px;width:100%;height:100%;display:block}@media screen and (width<=880px){.widget .image-widget .widget-pure-img{background-position:var(--bg-m-pos,var(--bg-pos,center));background-size:var(--bg-m-size,var(--bg-size,cover))}}.widget .image-widget.pixelated .widget-pure-img{image-rendering:pixelated}.widget .clock-widget{box-sizing:border-box;flex-direction:row;justify-content:space-around;align-items:center;gap:10px;width:100%;height:100%;padding:20px;display:flex}.widget .clock-widget .widget-clock-face{aspect-ratio:1;height:100%;position:relative}.widget .clock-widget .widget-clock-face>*{width:100%;height:100%;position:absolute;inset:0}.widget .clock-widget .widget-clock-face .widget-clock-bg{fill:var(--md-sys-color-inverse-primary)}.widget .clock-widget .widget-clock-face .widget-clock-hand{width:100%;height:100%}.widget .clock-widget .widget-clock-face .widget-clock-hand:before{content:"";width:var(--w);height:calc(var(--h) + 4%);left:calc(50% - var(--w) / 2);background-color:var(--color);border-radius:50px;display:block;position:absolute;bottom:46%}.widget .clock-widget .widget-clock-face .widget-clock-hour-hand{--w:8%;--h:25%;--color:var(--md-sys-color-secondary)}.widget .clock-widget .widget-clock-face .widget-clock-minute-hand{--w:8%;--h:34%;--color:var(--md-sys-color-primary)}.widget .clock-widget .widget-clock-face .widget-clock-second-hand{--color:var(--md-sys-color-primary);filter:saturate(.6)brightness(1.1);transition:transform .3s}.widget .clock-widget .widget-clock-face .widget-clock-second-hand:before{content:"";background-color:var(--color);border-radius:50px;width:9.5%;height:9.5%;display:block;position:absolute;top:6.5%;left:45.25%}.widget .clock-widget .widget-clock-text .widget-clock-date{opacity:.8;font-size:1.2em}.widget .clock-widget .widget-clock-text .widget-clock-date .widget-clock-date-text{font-weight:650}.widget .clock-widget .widget-clock-text .widget-clock-date .widget-clock-timezone-abbr{opacity:.72}.widget .clock-widget .widget-clock-text .widget-clock-time{min-width:7ch;margin-bottom:.1em;font-size:2.5em;font-weight:650}.widget .clock-widget .widget-clock-text .widget-clock-time .widget-clock-minute~*{opacity:.4}.widget .clock-widget .widget-clock-text .widget-clock-time .literal{font-weight:650}.widget .clock-widget .widget-clock-text .widget-clock-timezone{font-size:.95em}.widget .clock-widget .widget-clock-text .widget-clock-timezone .widget-clock-timezone-utc-offset{opacity:.6}.widget .clock-widget .widget-clock-text .widget-clock-timezone .widget-clock-timezone-diff{opacity:.8}.projects{flex-direction:column;gap:20px;display:flex}.project{background:var(--md-sys-color-secondary-container);opacity:var(--opacity,1);--x:0deg;--y:0deg;transform:perspective(var(--p,525px)) translateZ(var(--z,0px)) rotateX(var(--x)) rotateY(var(--y));border-radius:16px;transition:transform .15s linear,background-color .2s linear,box-shadow .2s;overflow:hidden}.project:active{--x:calc(var(--dx,0deg) * .5);--y:calc(var(--dy,0deg) * .5);--p:300px;--z:-8px}@supports (color:color-mix(in srgb, red, red)){.project:hover{background-color:color-mix(in srgb, var(--md-sys-color-secondary-container), var(--md-sys-color-shadow) 5%)}.project:active{background-color:color-mix(in srgb, var(--md-sys-color-secondary-container), var(--md-sys-color-shadow) 10%)}}.project>a{box-sizing:border-box;width:100%;height:100%;color:var(--md-sys-color-on-secondary-container);flex-direction:column;align-items:flex-start;gap:5px;padding:15px 20px;font-weight:540;display:flex}.project>a .project-title{color:var(--md-sys-color-tertiary);font-size:1.08em;font-weight:650}.project>a .project-description{flex:1}.project>a .project-metas{opacity:.75;flex-direction:row;gap:10px;width:100%;display:flex}.project>a .project-metas .project-meta{flex-direction:row;align-items:center;gap:5px;display:flex}.project>a .project-metas .project-meta svg{width:14px;height:14px}.project>a .project-metas .project-meta.project-language{flex:1;justify-content:flex-end}.project>a .project-metas .project-meta.project-language .project-language-color{aspect-ratio:1;border-radius:100%;width:.6em;height:.6em;margin-right:.1em}#background{z-index:-2;background-color:var(--md-sys-color-on-tertiary-container,#242424);will-change:filter;width:calc(100lvw + 60px);height:calc(100lvh + 60px);position:fixed;top:-30px;left:-30px}#background .background-image{background-position:50%;background-repeat:no-repeat;background-size:cover;animation:1s fadeIn;position:absolute;inset:0}#background .background-image.dismissing{animation:1.1s forwards fadeOut}@supports (animation-timeline:scroll(root y)){#background{animation:linear both background-blur-dim;animation-timeline:scroll(root y);animation-range:10vh 30vh}@keyframes background-blur-dim{0%{filter:blur()brightness()}to{filter:blur(10px)brightness(.7)}}}@supports not (animation-timeline:scroll(root y)){#background{--blur:clamp(0px, calc(50px * var(--scroll-y-percent,0) - 5px), 10px);--brightness:clamp(.7, calc(-1.5 * var(--scroll-y-percent,0) + 1.15), 1);filter:blur(var(--blur)) brightness(var(--brightness))}}body:not(.touch-device) #background{--multiplier:clamp(0, calc(-5 * var(--scroll-y-percent,0) + 1.5), 1);transform:translate(calc(var(--tx,0px) * var(--multiplier,1)), calc(var(--ty,0px) * var(--multiplier,1)));transition:transform .1s linear}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.footer{justify-content:center;align-items:center;height:15vh;margin-top:-35vh;font-size:20px;display:flex}.footer .footer-inner{text-align:center;opacity:.65;color:color-mix(in srgb, var(--md-sys-color-primary-container), #fff 50%);font-weight:520;line-height:2;transition:opacity .3s}.name.hero-gradient-text{opacity:.82}.bio.hero-gradient-text{opacity:.72}.footer .footer-inner:hover{opacity:.8}.footer .footer-inner .bg-name{color:inherit;font-weight:650}.footer .footer-inner .bg-name.bg-link{color:var(--md-sys-color-inverse-primary);transition:filter .3s}.footer .footer-inner .bg-name.bg-link:hover{filter:brightness(1.2)}body.safari .widget,body.safari .project,body.touch-device .widget,body.touch-device .project{transform:none!important}body.safari .widget:active,body.safari .project:active,body.touch-device .widget:active,body.touch-device .project:active{transform:scale(.95)!important}
