@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff)format("woff");unicode-range:U+460-52F,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(/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff)format("woff");unicode-range:U+460-52F,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:500;src:url(/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-mono-cyrillic-ext-700-normal-BDQ-w_bc.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-ext-700-normal-CtgKGIh5.woff)format("woff");unicode-range:U+460-52F,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:700;src:url(/assets/ibm-plex-mono-cyrillic-700-normal-Bp80XfeI.woff2)format("woff2"),url(/assets/ibm-plex-mono-cyrillic-700-normal-O_YjL27c.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-mono-vietnamese-700-normal-apsD3J7v.woff2)format("woff2"),url(/assets/ibm-plex-mono-vietnamese-700-normal-Bs14ezHR.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-mono-latin-ext-700-normal-Dhimjc7-.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-ext-700-normal-Cwsjk1Jb.woff)format("woff");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:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/ibm-plex-mono-latin-700-normal-7sUh57Bg.woff2)format("woff2"),url(/assets/ibm-plex-mono-latin-700-normal-CNHXzs6v.woff)format("woff");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{--ink:#000;--paper:#fff;--muted:#ffffff9e;--line:#ffffff38;--face:#f0f0f0;--face-ink:#0a0a0a;--face-muted:#00000094;--face-line:#0003;--glass:#ffffff57;--mono:"IBM Plex Mono", ui-monospace, Menlo, monospace;--gutter:clamp(16px, 3.2vw, 44px);--s:min(56vmin, 460px, calc((100svh - 270px) / 1.2));--ease:cubic-bezier(.16, 1, .3, 1)}:root[data-theme=light]{--ink:#fff;--paper:#000;--muted:#0000009e;--line:#00000038;--face:#0a0a0a;--face-ink:#fff;--face-muted:#ffffff9e;--face-line:#ffffff38;--glass:#0000004d}*,:before,:after{box-sizing:border-box}html,body{height:100%}html{background:var(--ink);color:var(--paper);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}body{background:var(--ink);min-height:100svh;font-family:var(--mono);-webkit-tap-highlight-color:transparent;grid-template-rows:auto 1fr auto auto;margin:0;font-size:13px;line-height:1.5;display:grid;overflow:hidden}a{color:inherit}button{font:inherit;color:inherit}:focus-visible{outline:1px solid var(--paper);outline-offset:3px}::selection{background:var(--paper);color:var(--ink)}.is-loading .cube,.is-loading .shadow,.is-loading .caption,.is-loading .strip,.is-loading .top{visibility:hidden}.ambient{z-index:-2;background:var(--ink);position:fixed;inset:0;overflow:hidden}.ambient:before{content:"";z-index:2;background-image:linear-gradient(color-mix(in srgb, var(--paper) 8%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--paper) 8%, transparent) 1px, transparent 1px);background-position:50%;background-size:56px 56px;position:absolute;inset:0;-webkit-mask-image:radial-gradient(70% 60% at 50% 45%,#000 15%,#0000 80%);mask-image:radial-gradient(70% 60% at 50% 45%,#000 15%,#0000 80%)}.ambient__layer{filter:grayscale()blur(70px);opacity:0;background-position:50%;background-size:cover;transition:opacity 1.2s;position:absolute;inset:-10%;transform:scale(1.1)}.ambient__layer.is-on{opacity:.4}.ambient:after{content:"";background:color-mix(in srgb, var(--ink) 55%, transparent);position:absolute;inset:0}.top{padding:18px var(--gutter) 0;z-index:5;justify-content:space-between;align-items:center;gap:16px;display:flex;position:relative}.top__logo{align-items:center;gap:12px;font-size:12px;text-decoration:none;display:inline-flex}.top__logo svg{width:30px;height:30px;fill:var(--paper);transition:opacity .3s}.top__logo:hover svg{opacity:.55}.top__time{color:var(--muted);font-variant-numeric:tabular-nums;margin:0;font-size:12px}.top__actions{align-items:center;gap:8px;display:flex}.top__contact{gap:8px;display:flex}.top__contact a,.theme-toggle{border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:999px;padding:7px 14px;font-size:12px;text-decoration:none;transition:border-color .3s,background .3s,color .3s}.theme-toggle{place-items:center;width:32px;height:32px;padding:0;display:grid}.theme-toggle svg{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}:root[data-theme=dark] .icon-moon,:root[data-theme=light] .icon-sun{display:none}.top__contact a:hover,.theme-toggle:hover{border-color:var(--paper);background:var(--paper);color:var(--ink)}.stage{touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none;place-items:center;min-height:0;display:grid;position:relative}.stage.is-dragging{cursor:grabbing}.scene{width:var(--s);height:var(--s);perspective:calc(var(--s) * 3.4);position:relative}.cube{--h:calc(var(--s) / 2);--explode:0px;transform-style:preserve-3d;will-change:transform;position:absolute;inset:0}.glass,.face{backface-visibility:hidden;position:absolute}.glass{transform:var(--t) translateZ(calc(var(--h) + var(--explode) * 1.4));pointer-events:none;backface-visibility:visible;border:1px solid var(--glass);border-radius:7%;inset:0}.face{--ink:var(--face);--paper:var(--face-ink);--muted:var(--face-muted);--line:var(--face-line);color:var(--face-ink);--i:calc(var(--s) * .88);left:calc((var(--s) - var(--i)) / 2);top:calc((var(--s) - var(--i)) / 2);width:var(--i);height:var(--i);background:var(--face);transform:var(--t) translateZ(calc(var(--i) / 2 + var(--explode)));border-radius:3%;overflow:hidden;box-shadow:0 0 0 1px #0006}.face.is-active{cursor:pointer}.layer{position:absolute;inset:0}.layer+.layer{clip-path:circle(0%);transition:clip-path .9s var(--ease)}.layer.is-shown{clip-path:circle(75%)}.layer img{object-fit:cover;pointer-events:none;width:100%;height:100%;display:block}.shade{pointer-events:none;opacity:var(--dark,0);background:#000;position:absolute;inset:0}.flash{pointer-events:none;opacity:0;background:#fff;position:absolute;inset:0}.flash.is-on{animation:.55s ease-out flash}@keyframes flash{0%{opacity:.8}to{opacity:0}}.flip-badge{font-size:calc(var(--s) * .026);background:var(--face-ink);color:var(--face);opacity:0;transition:opacity .4s, transform .4s var(--ease);border-radius:999px;padding:3px 8px;position:absolute;top:5%;right:5%;transform:translateY(-4px)}.face.has-flip.is-active .flip-badge{opacity:1;transform:none}.layer--text{--u:calc(var(--s) / 100);background:var(--face);font-size:calc(var(--u) * 3.2);flex-direction:column;justify-content:center;padding:9%;line-height:1.4;display:flex}.layer--text p{margin:0}.eyebrow{font-size:calc(var(--u) * 2.9);color:var(--muted);align-self:flex-start;text-decoration:none;display:inline-block;margin-bottom:calc(var(--u) * 3.5)!important}p.eyebrow:before{content:"// "}a.eyebrow{border-bottom:1px solid var(--muted);color:var(--paper);padding-bottom:2px}a.eyebrow:hover{border-color:var(--paper)}.hello__name{font-weight:700;font-size:calc(var(--u) * 8.4);letter-spacing:-.05em;margin:0;line-height:1}.hello__role{font-weight:500;font-size:calc(var(--u) * 4.2);line-height:1.2;margin-top:calc(var(--u) * 5)!important}.hello__role span{font-weight:400;font-size:calc(var(--u) * 3);color:var(--muted)}.hello__meta{font-size:calc(var(--u) * 2.8);color:var(--muted);margin-top:calc(var(--u) * 4)!important}.stats{gap:calc(var(--u) * 4.4);margin:0;padding:0;list-style:none;display:grid}.stats li{grid-template-columns:calc(var(--u) * 20) 1fr;align-items:baseline;gap:calc(var(--u) * 2.5);padding-top:calc(var(--u) * 2.4);border-top:1px solid var(--line);display:grid}.stats li:first-child{border-top:0;padding-top:0}.stats b{font-weight:700;font-size:calc(var(--u) * 5.2);letter-spacing:-.05em;line-height:1}.stats span{font-size:calc(var(--u) * 2.9);line-height:1.4}.layer--figure{gap:calc(var(--u) * 3);margin:0;padding:7%}.layer--figure img{aspect-ratio:4/3;border-radius:calc(var(--u) * .8);width:100%;height:auto}.layer--figure figcaption{font-size:calc(var(--u) * 3.2);line-height:1.35}.layer--figure figcaption span{margin-bottom:calc(var(--u) * .8);font-size:calc(var(--u) * 2.6);color:var(--muted);display:block}.tags{gap:calc(var(--u) * 1.6);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.tags li{padding:calc(var(--u) * .9) calc(var(--u) * 2.2);border:1px solid var(--line);font-size:calc(var(--u) * 2.9);white-space:nowrap;border-radius:999px}.tags li:nth-child(-n+4){background:var(--paper);border-color:var(--paper);color:var(--ink)}.edu__school{font-weight:700;font-size:calc(var(--u) * 8.4);letter-spacing:-.05em;line-height:1;margin-bottom:calc(var(--u) * 5)!important}.edu__degree{font-size:calc(var(--u) * 3.6)}.edu__degree+.edu__degree{color:var(--muted);margin-top:calc(var(--u) * 1.5)!important}.timeline{padding:0 0 0 calc(var(--u) * 3);gap:calc(var(--u) * 2.6);border-left:1px solid var(--line);margin:0;list-style:none;display:grid}.timeline li{grid-template-columns:calc(var(--u) * 10) 1fr;column-gap:calc(var(--u) * 2);grid-template-rows:auto auto;align-items:baseline;display:grid;position:relative}.timeline li:before{content:"";left:calc(var(--u) * -4.1);top:calc(var(--u) * 1.6);width:calc(var(--u) * 2.2);height:calc(var(--u) * 2.2);background:var(--face);border:1px solid var(--muted);border-radius:50%;position:absolute}.timeline li:first-child:before{background:var(--paper);border-color:var(--paper)}.timeline time{font-size:calc(var(--u) * 3.1);color:var(--muted);grid-row:span 2}.timeline b{font-weight:700;font-size:calc(var(--u) * 3.7);line-height:1.15}.timeline span{font-size:calc(var(--u) * 2.8);color:var(--muted)}.interests{gap:calc(var(--u) * 2);margin:0;padding:0;list-style:none;display:grid}.interests li{font-weight:700;font-size:calc(var(--u) * 7.4);letter-spacing:-.05em;line-height:1}.shadow{left:15%;right:15%;bottom:calc(var(--s) * -.3);height:calc(var(--s) * .12);filter:blur(8px);transform:scale(var(--shadow-scale,1));opacity:var(--shadow-opacity,1);background:radial-gradient(closest-side,#000000bf,#0000);border-radius:50%;position:absolute}:root[data-theme=light] .shadow{opacity:calc(var(--shadow-opacity,1) * .45)}.caption{z-index:5;padding:0 var(--gutter);text-align:center;min-height:7.2em;position:relative}.caption__frame{color:var(--muted);margin:0 0 6px;font-size:11px}.caption__label{color:var(--paper)}.caption__label:not(:empty):before{content:" // ";color:var(--muted)}.caption__title{letter-spacing:-.06em;margin:0;font-size:clamp(2rem,5.2vw,3.4rem);font-weight:700;line-height:1.05}.caption__sub{max-width:56ch;color:var(--muted);margin:8px auto 0}.cursor{z-index:30;pointer-events:none;mix-blend-mode:difference;will-change:transform;background:#fff;border-radius:50%;position:fixed;top:0;left:0}.cursor--dot{width:8px;height:8px;margin:-4px 0 0 -4px}.cursor--ring{width:36px;height:36px;transition:width .3s var(--ease), height .3s var(--ease), margin .3s var(--ease), background .3s;background:0 0;border:1.5px solid #fff;margin:-18px 0 0 -18px}.cursor--ring.is-link{background:#fff;width:60px;height:60px;margin:-30px 0 0 -30px}.cursor--ring.is-drag{width:24px;height:24px;margin:-12px 0 0 -12px}.has-cursor,.has-cursor *{cursor:none!important}.ch{white-space:pre;display:inline-block}.strip{z-index:5;margin:14px var(--gutter) calc(16px + env(safe-area-inset-bottom));border:1px solid var(--line);border-radius:6px;justify-content:center;gap:2px;padding:6px;display:flex;position:relative}.strip button{cursor:pointer;min-width:0;max-width:150px;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;background:0 0;border:0;border-radius:4px;flex-direction:column;flex:1 1 0;align-items:center;gap:2px;padding:8px 4px;font-size:12px;transition:color .3s,background .3s;display:flex;overflow:hidden}.strip button span{opacity:.6;font-size:11px}.strip button:hover{color:var(--paper)}.strip button[aria-current=true]{color:var(--ink);background:var(--paper)}.strip button[aria-current=true] span{opacity:.7}@media (width<=640px){:root{--s:min(84vw, calc((100svh - 300px) / 1.2))}.top__logo span,.top__time{display:none}.top__contact a{padding:6px 12px}.strip{margin-top:10px;padding:4px 2px}.strip button{letter-spacing:-.04em;padding:6px 0;font-size:9.5px}.caption{min-height:8.6em}}@media (height<=600px){:root{--s:min(52vmin, 380px)}.caption__sub{display:none}.caption{min-height:0}}@media (prefers-reduced-motion:reduce){.layer+.layer{clip-path:none;opacity:0;transition:opacity .3s}.layer.is-shown{clip-path:none;opacity:1}.flash.is-on{animation:none}}
