@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-vietnamese-wght-normal-CnvboYUG.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:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.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:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-wght-normal-ukD16Tqj.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}@font-face{font-family:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-vietnamese-wght-italic-BicUS2cM.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:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-ext-wght-italic-BfTTTDIL.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:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/assets/fraunces-latin-wght-italic-Py8at3oI.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}@font-face{font-family:Instrument Sans Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/assets/instrument-sans-latin-ext-wght-normal-B5bTHO_g.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:Instrument Sans Variable;font-style:normal;font-display:swap;font-weight:400 700;src:url(/assets/instrument-sans-latin-wght-normal-BbzFLZTg.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}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-vietnamese-wght-normal-DadHysG0.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.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:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-latin-wght-normal-XN7g48iV.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{--void:#f6f5ef;--deep:#fffefa;--line:#d8d5c6;--ice:#17804f;--amber:#a8175c;--text:#14251c;--soft:#2f4337;--muted:#5d6b62;--on-ice:#fff;--on-amber:#fff;--bg:radial-gradient(100% 70% at 85% 0%, #e9eede 0%, transparent 60%), #f6f5ef;--panel:#fffefabd;--bar:#f6f5efcc;--well:#eae8dc;--g-dim:#98a593;--g-seen:#58a981;--g-flash:#14251c;--blend:multiply;--display:"Fraunces Variable", Georgia, serif;--body:"Instrument Sans Variable", system-ui, sans-serif;--mono:"Geist Mono Variable", ui-monospace, monospace;--name-size:clamp(3.2rem, 15vw, 15.5rem);--name-weight:480;--name-track:-.045em;--name-lead:.9;--name2-color:var(--ice);--name2-stroke:0px;--name2-style:italic;--h-weight:480;--h-track:-.035em;--h3-weight:520;--stack-weight:420;--learn-color:var(--amber);--learn-stroke:0px;--gutter:clamp(1.25rem, 5vw, 5rem);--measure:62ch}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);font-family:var(--body);-webkit-font-smoothing:antialiased;background-attachment:fixed;margin:0;font-size:clamp(1rem,.95rem + .25vw,1.15rem);line-height:1.55;overflow-x:hidden}h1,h2,h3,p,ol,ul,dl,dd{margin:0;padding:0}ol,ul{list-style:none}a{color:inherit}::selection{background:var(--amber);color:var(--on-amber)}:focus-visible{outline:2px solid var(--amber);outline-offset:4px;border-radius:4px}section:focus{outline:none}#field{z-index:0;pointer-events:none;width:100%;height:100%;mix-blend-mode:var(--blend);position:fixed;inset:0}.no-field #field{display:none}main,.foot,.top{z-index:1;position:relative}.top{z-index:10;padding:1.1rem var(--gutter);justify-content:space-between;align-items:center;gap:1rem;transition:background-color .4s,-webkit-backdrop-filter .4s,backdrop-filter .4s;display:flex;position:fixed;inset:0 0 auto}.scrolled .top{background:var(--bar);-webkit-backdrop-filter:blur(14px)}.mark{font-family:var(--display);letter-spacing:-.01em;font-size:.95rem;font-weight:600;text-decoration:none}.top nav{gap:clamp(.9rem,2.2vw,2rem);display:flex}.top nav a{color:var(--muted);padding:.3rem 0;font-size:.92rem;text-decoration:none;transition:color .25s;position:relative}.top nav a:after{content:"";background:var(--amber);transform-origin:100%;height:1px;transition:transform .35s cubic-bezier(.2,.8,.2,1);position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.top nav a:hover{color:var(--text)}.top nav a:hover:after{transform-origin:0;transform:scaleX(1)}.hero{min-height:100svh;padding:5.5rem var(--gutter) clamp(2rem, 6vh, 4rem);grid-template-rows:1fr auto;display:grid}.hud{width:min(19rem,100%);font-family:var(--mono);background:var(--panel);border:1px solid var(--line);-webkit-backdrop-filter:blur(10px);border-radius:14px;place-self:start end;padding:.9rem 1rem 1rem;font-size:.78rem;line-height:1.5}.hud-switch{background:var(--well);border-radius:9px;grid-template-columns:repeat(3,1fr);gap:4px;padding:4px;display:grid}.hud-switch button{font:inherit;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:.45rem .3rem;transition:color .2s,background-color .2s}.hud-switch button:hover{color:var(--text)}.hud-switch button[aria-pressed=true]{background:var(--ice);color:var(--on-ice);font-weight:700}.hud-read{gap:.15rem;margin:.8rem 0 .7rem;display:grid}.hud-read div{justify-content:space-between;gap:1rem;display:flex}.hud-read dt{color:var(--muted)}.hud-read dd{font-variant-numeric:tabular-nums;color:var(--ice)}.hud-read dd.found{color:var(--amber)}.hud-hint{color:var(--muted);font-family:var(--body);font-size:.82rem;line-height:1.4}.hero-copy{align-self:end}.name{font-family:var(--display);font-weight:var(--name-weight);font-size:var(--name-size);line-height:var(--name-lead);letter-spacing:var(--name-track);margin-left:-.04em}.name .line{margin-bottom:-.2em;padding:.06em .06em .2em 0;display:block;overflow:hidden}.name .line:nth-child(2){color:var(--name2-color);-webkit-text-stroke:var(--name2-stroke) var(--text);font-style:var(--name2-style)}.name .split{display:inline-block}.name .ch{will-change:transform;display:inline-block}.role{max-width:46ch;color:var(--soft);text-shadow:0 0 18px var(--void), 0 0 6px var(--void);margin-top:clamp(1.4rem,3vh,2.2rem);font-size:clamp(1.05rem,1rem + .5vw,1.4rem);line-height:1.45}.hero-links{flex-wrap:wrap;gap:.7rem;margin-top:1.6rem;display:flex}.btn{background:var(--amber);color:var(--on-amber);border:1px solid var(--amber);border-radius:999px;padding:.8rem 1.35rem;font-size:.98rem;font-weight:600;text-decoration:none;transition:background-color .25s,color .25s,border-color .25s,box-shadow .25s;display:inline-block}.btn:hover{box-shadow:0 0 34px color-mix(in srgb, var(--amber) 45%, transparent)}.btn.ghost{background:var(--panel);color:var(--text);border-color:var(--line);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.btn.ghost:hover{border-color:var(--ice);color:var(--ice);box-shadow:0 0 28px color-mix(in srgb, var(--ice) 20%, transparent)}.block{padding:clamp(5rem, 14vh, 10rem) var(--gutter)}.block>h2{font-family:var(--display);font-weight:var(--h-weight);letter-spacing:var(--h-track);font-size:clamp(2.2rem,6.2vw,5.6rem);line-height:1}.lede{max-width:var(--measure);color:var(--muted);margin-top:1rem;font-size:1.1em}h3{font-family:var(--display);font-weight:var(--h3-weight);letter-spacing:-.02em;line-height:1.15}.timeline{max-width:54rem;margin-top:clamp(2.5rem,6vh,4.5rem);padding-left:2.4rem;position:relative}.rail{background:var(--line);border-radius:2px;width:2px;position:absolute;top:.6rem;bottom:.6rem;left:.45rem}.rail-fill{background:linear-gradient(var(--ice), var(--amber));transform-origin:top;box-shadow:0 0 14px color-mix(in srgb, var(--ice) 60%, transparent);border-radius:2px;position:absolute;inset:0}.stop{grid-template-columns:10.5rem 1fr;gap:.4rem 2rem;padding:0 0 clamp(2.2rem,5vh,3.6rem);display:grid;position:relative}.stop:last-child{padding-bottom:0}.stop:before{content:"";background:var(--void);border:2px solid var(--line);border-radius:50%;width:1rem;height:1rem;transition:border-color .4s,background-color .4s,box-shadow .4s,transform .4s cubic-bezier(.2,1.6,.4,1);position:absolute;top:.42rem;left:-2.4rem}.stop.lit:before{border-color:var(--ice);background:var(--ice);box-shadow:0 0 0 6px color-mix(in srgb, var(--ice) 12%, transparent), 0 0 22px color-mix(in srgb, var(--ice) 70%, transparent);transform:scale(1.1)}.stop.now.lit:before{border-color:var(--amber);background:var(--amber);box-shadow:0 0 0 6px color-mix(in srgb, var(--amber) 14%, transparent), 0 0 26px color-mix(in srgb, var(--amber) 70%, transparent)}.stop time{font-family:var(--mono);color:var(--muted);padding-top:.3rem;font-size:.84rem;transition:color .4s}.stop.lit time{color:var(--ice)}.stop.now.lit time{color:var(--amber)}.stop h3{font-size:clamp(1.25rem,1rem + 1.3vw,2rem)}.stop .where{color:var(--text);margin-top:.35rem;font-weight:600}.stop p:not(.where){color:var(--muted);max-width:52ch;margin-top:.35rem}.stop>div{opacity:.45;transition:opacity .5s}.stop.lit>div{opacity:1}.stack{border-top:1px solid var(--line);margin-top:clamp(2.5rem,6vh,4.5rem)}.stack-row{border-bottom:1px solid var(--line);grid-template-columns:11rem 1fr;align-items:baseline;gap:.6rem 2rem;padding:clamp(1.1rem,2.6vh,1.8rem) 0;display:grid}.stack-row dt{color:var(--muted);font-size:.95rem}.stack-row dd{font-family:var(--display);font-weight:var(--stack-weight);letter-spacing:-.025em;flex-wrap:wrap;gap:.1em 1.1em;font-size:clamp(1.15rem,.9rem + 1.5vw,2.15rem);line-height:1.25;display:flex;overflow:hidden}.stack-row dd span{transition:color .25s;display:inline-block}.stack-row dd span:hover{color:var(--ice)}.stack-row.learning dt{color:var(--amber)}.stack-row.learning dd span{color:var(--learn-color);-webkit-text-stroke:var(--learn-stroke) var(--amber)}.stack-row.learning dd span:hover{color:var(--amber)}.projects{margin-top:clamp(2.5rem,6vh,4.5rem)}.project{--rule:1;--mx:50%;--my:50%;isolation:isolate;border-radius:16px;margin:0 calc(-1*clamp(.6rem,1.5vw,1.4rem));padding:clamp(1.4rem,3.2vh,2.2rem) clamp(.6rem,1.5vw,1.4rem);position:relative}.project:before{content:"";background:var(--line);height:1px;transform:scaleX(var(--rule));transform-origin:0;position:absolute;top:0;left:clamp(.6rem,1.5vw,1.4rem);right:clamp(.6rem,1.5vw,1.4rem)}.project:after{content:"";z-index:-1;border-radius:inherit;opacity:0;background:radial-gradient(420px circle at var(--mx) var(--my), color-mix(in srgb, var(--ice) 13%, transparent), transparent 65%), var(--panel);transition:opacity .35s;position:absolute;inset:0}.project:hover:after{opacity:1}.project-head{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr) auto;align-items:baseline;gap:.4rem 2rem;display:grid}.project h3{font-size:clamp(1.4rem,1rem + 2.1vw,2.7rem);transition:transform .45s cubic-bezier(.2,.8,.2,1),color .3s}.project:hover h3{color:var(--ice);transform:translate(.35em)}.project .tech{color:var(--text);font-size:.98rem}.project .year{font-family:var(--mono);color:var(--muted);white-space:nowrap;font-size:.84rem}.project .about{max-width:var(--measure);color:var(--muted);margin-top:.8rem}.project .about a{color:var(--amber);text-underline-offset:.22em;white-space:nowrap}.project .about a:hover{color:var(--text)}.apps h3 a{background:linear-gradient(var(--ice), var(--ice)) 0 100% / 100% 2px no-repeat;text-decoration:none}.apps h3 a:hover{color:var(--ice)}.status{font-family:var(--mono);color:var(--muted);white-space:nowrap;border:1px solid var(--line);border-radius:999px;align-items:center;gap:.45rem;padding:.25rem .7rem;font-size:.8rem;display:inline-flex}.status:before{content:"";border:1.5px solid var(--muted);border-radius:50%;width:.5rem;height:.5rem}.status.live{color:var(--ice);border-color:var(--ice)}.status.live:before{background:var(--ice);border-color:var(--ice);box-shadow:0 0 0 3px color-mix(in srgb, var(--ice) 18%, transparent)}.apps-note{color:var(--muted);margin-top:1.4rem;font-size:.95rem}.record{grid-template-columns:repeat(auto-fit,minmax(min(100%,19rem),1fr));gap:clamp(2rem,4vw,4rem);max-width:54rem;margin-top:clamp(2.5rem,6vh,4.5rem);display:grid}.record h3{margin-top:1rem;font-size:clamp(1.25rem,1rem + 1.2vw,1.9rem)}.record p{color:var(--muted);margin-top:.4rem}.stars{gap:.3rem;display:flex}.stars svg{fill:none;width:clamp(1.7rem,3vw,2.4rem);height:auto;stroke:var(--line);stroke-width:1.4px;stroke-linejoin:round}.stars svg.on{fill:var(--amber);stroke:var(--amber);filter:drop-shadow(0 0 8px color-mix(in srgb, var(--amber) 50%, transparent))}.contact{padding-bottom:clamp(4rem,10vh,7rem)}.mail{font-family:var(--display);font-weight:var(--h-weight);letter-spacing:var(--h-track);overflow-wrap:anywhere;background:linear-gradient(90deg, var(--ice), var(--amber)) 0 100% / 100% 2px no-repeat;margin-top:clamp(1.5rem,4vh,3rem);padding-bottom:.18em;font-size:clamp(1.1rem,4.6vw,4rem);line-height:1.1;text-decoration:none;transition:color .3s,background-size .45s cubic-bezier(.2,.8,.2,1);display:inline-block}.mail:hover{color:var(--amber);background-size:100% 4px}.foot{padding:1.6rem var(--gutter) 2.2rem;border-top:1px solid var(--line);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:.5rem 2rem;font-size:.88rem;display:flex}.cursor{display:none}.has-cursor .cursor{z-index:50;pointer-events:none;border:1px solid color-mix(in srgb, var(--ice) 70%, transparent);opacity:0;border-radius:50%;width:34px;height:34px;margin:-17px 0 0 -17px;transition:opacity .3s,width .3s,height .3s,margin .3s,background-color .3s,border-color .3s;display:block;position:fixed;top:0;left:0}.has-cursor .cursor.live{opacity:1}.has-cursor .cursor.on-link{background:color-mix(in srgb, var(--amber) 16%, transparent);border-color:var(--amber);width:62px;height:62px;margin:-31px 0 0 -31px}@media (width<=760px){.top nav a:nth-child(n+4){display:none}.hero{padding-top:4.6rem}.hud{justify-self:stretch;width:auto}.hud-hint{display:none}.hud-read{margin-bottom:0}.stop,.stack-row{grid-template-columns:1fr}.stop time{padding-top:0}.project-head{grid-template-columns:1fr auto}.project-head .tech{grid-area:2/1/auto/-1}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
