@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/inter-latin-400-normal.C38fXH4l.woff2)format("woff2"),url(/_astro/inter-latin-400-normal.CyCys3Eg.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/inter-latin-500-normal.Cerq10X2.woff2)format("woff2"),url(/_astro/inter-latin-500-normal.BL9OpVg8.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/inter-latin-600-normal.LgqL8muc.woff2)format("woff2"),url(/_astro/inter-latin-600-normal.CiBQ2DWP.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/inter-latin-700-normal.Yt3aPRUw.woff2)format("woff2"),url(/_astro/inter-latin-700-normal.BLAVimhd.woff)format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:800;src:url(/_astro/inter-latin-800-normal.BYj_oED-.woff2)format("woff2"),url(/_astro/inter-latin-800-normal.D1mf63XC.woff)format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/jetbrains-mono-latin-500-normal.BWZEU5yA.woff2)format("woff2"),url(/_astro/jetbrains-mono-latin-500-normal.CJOVTJB7.woff)format("woff")}:root{color-scheme:light dark;--bg:#fff;--fg:#1c1917;--muted:#78716c;--font-sans:"Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--ease-out-expo:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1)}@media (prefers-color-scheme:dark){:root{--bg:#0c0a09;--fg:#f5f5f4;--muted:#a8a29e}}*,:before,:after{box-sizing:border-box}html,body{background:var(--bg);height:100%;color:var(--fg);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;margin:0;overflow:hidden}#stage{position:fixed;inset:0}#scene{width:100%;height:100%;display:block}#loader{z-index:20;pointer-events:none;place-items:center;display:grid;position:fixed;inset:0}.loader-body{opacity:0;animation:loader-in .3s var(--ease-out-expo) forwards}#loader.is-done .loader-body{animation:loader-out .4s var(--ease-in-out) forwards}.loader-ring{width:44px;height:44px;animation:1.4s linear infinite ring-spin}.loader-ring circle{fill:none;stroke:var(--fg);stroke-width:3px;stroke-linecap:round}.loader-ring .track{opacity:.12}.loader-ring .arc{stroke-dasharray:6 113;animation:ring-arc 1.4s var(--ease-in-out) infinite}@keyframes loader-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes loader-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.6)}}@keyframes ring-spin{to{transform:rotate(360deg)}}@keyframes ring-arc{0%{stroke-dasharray:6 113;stroke-dashoffset:0}50%{stroke-dasharray:60 113;stroke-dashoffset:-20px}to{stroke-dasharray:6 113;stroke-dashoffset:-113px}}@media (prefers-reduced-motion:reduce){.loader-ring{animation-duration:3s}.loader-ring .arc{stroke-dasharray:60 113;animation:none}}:root{--hero-y-closed:.06;--hero-y-open:.39;--hero-scale-open:.3;--hero-x-open:0;--hero-dim:.35;--links-top-closed:.77;--links-top-open:.205;--sheet-top:.27;--p:0;--sheet-bg:#fff;--sheet-fg:#1c1917;--sheet-muted:#78716c;--sheet-line:#1c191714;--sheet-shadow:#0000000f;--name-blur:5px;--name-opacity:.9;--name-gradient:linear-gradient(90deg, #2f6df0 0%, #5a8cf5 30%, #8b7cf0 65%, #9b4dff 100%)}@media (prefers-color-scheme:dark){:root{--name-opacity:.85;--sheet-bg:#1c1917;--sheet-fg:#f5f5f4;--sheet-muted:#a8a29e;--sheet-line:#f5f5f41a;--sheet-shadow:#00000080;--name-gradient:linear-gradient(90deg, #5b9bff 0%, #a8dcef 22%, #e4e4f6 55%, #a98af0 85%, #7b5cf0 100%)}}#stage{z-index:1}.hero{transform:translateX(calc(100% * var(--hero-x-open) * var(--p))) translateY(calc(-100% * (var(--hero-y-closed) + (var(--hero-y-open) - var(--hero-y-closed)) * var(--p)))) scale(calc(1 + (var(--hero-scale-open) - 1) * var(--p)));opacity:calc(1 - var(--hero-dim) * var(--p));pointer-events:none;z-index:0;place-items:center;display:grid;position:fixed;inset:0}.name{letter-spacing:-.045em;white-space:nowrap;user-select:none;background:var(--name-gradient);color:#0000;-webkit-text-fill-color:transparent;opacity:0;filter:blur(28px);transition:opacity 1.4s var(--ease-out-expo), filter 1.9s var(--ease-out-expo), transform 1.9s var(--ease-out-expo);will-change:filter, opacity, transform;-webkit-background-clip:text;background-clip:text;margin:0;padding:0 .1em;font-size:clamp(3.5rem,14.5vw,17rem);font-weight:800;line-height:1.1;transform:scale(1.08)}html.name-in .name{opacity:var(--name-opacity);filter:blur(var(--name-blur));transform:none}.links{left:calc(50% + 100% * var(--hero-x-open) * var(--p));top:calc(100% * (var(--links-top-closed) + (var(--links-top-open) - var(--links-top-closed)) * var(--p)));transform:translateX(-50%) scale(calc(1 - .15 * var(--p)));z-index:2;pointer-events:none;width:min(92vw,40rem);font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;flex-wrap:wrap;justify-content:center;align-items:center;gap:.5rem 2rem;font-size:.75rem;font-weight:500;display:flex;position:fixed}@media (width<=480px){.links{box-sizing:border-box;flex-wrap:nowrap;justify-content:space-around;gap:clamp(.25rem,2vw,.75rem);padding:0 .75rem}}html.is-settled .links a{pointer-events:auto}.links a{color:var(--muted);white-space:nowrap;opacity:0;filter:blur(4px);transition:opacity .9s var(--ease-out-expo), transform .9s var(--ease-out-expo), filter .9s var(--ease-out-expo), color .25s ease;transition-delay:calc(var(--i) * 90ms), calc(var(--i) * 90ms), calc(var(--i) * 90ms), 0s;padding:.25rem 0;text-decoration:none;position:relative;transform:translateY(10px)}html.is-settled .links a{opacity:1;filter:none;transform:none}.links a:after{content:"";transform-origin:100%;height:1px;transition:transform .45s var(--ease-out-expo);background:currentColor;position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.links a:hover,.links a:focus-visible{color:var(--fg);outline:none}.links a:hover:after,.links a:focus-visible:after{transform-origin:0;transform:scaleX(1)}@media (prefers-reduced-motion:reduce){.name,.links a{transition-duration:.5s;transform:none}}html{touch-action:none}html.sheet-open #scene{cursor:pointer}.sheet{bottom:0;left:0;right:0;top:calc(100% * var(--sheet-top));z-index:3;background:var(--sheet-bg);color:var(--sheet-fg);box-shadow:0 -1px 0 var(--sheet-line), 0 -24px 80px var(--sheet-shadow);transform:translateY(calc((1 - var(--p)) * (100% + 120px)));will-change:transform;border-radius:28px 28px 0 0;flex-direction:column;display:flex;position:fixed;overflow:hidden}.sheet-handle{background:var(--sheet-fg);opacity:.15;border-radius:4px;flex:none;width:2.5rem;height:4px;margin:.75rem auto 0}.sheet-scroll{--ft:0px;--fb:0px;-webkit-mask-image:linear-gradient(to bottom, transparent 0, #000 var(--ft), #000 calc(100% - var(--fb)), transparent 100%);mask-image:linear-gradient(to bottom, transparent 0, #000 var(--ft), #000 calc(100% - var(--fb)), transparent 100%);z-index:1;overscroll-behavior:contain;touch-action:pan-y;scrollbar-width:thin;outline:none;flex:1;min-height:0;position:relative;overflow-y:auto}.sheet-inner{padding:clamp(2rem,5vw,4.5rem) clamp(1.5rem,6vw,5rem) clamp(3rem,8vw,6rem)}.content{max-width:46rem}.eyebrow{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--sheet-muted);margin:0 0 1.25rem;font-size:.75rem;font-weight:500}.title{text-wrap:balance;letter-spacing:-.05em;margin:0 0 clamp(1.5rem,3vw,2.25rem);font-size:clamp(2.75rem,8vw,6.25rem);font-weight:700;line-height:.95}.title .dot{color:#3b6bff}.intro{letter-spacing:-.02em;max-width:34rem;margin:0 0 clamp(3rem,7vw,5rem);font-size:clamp(1.25rem,2.4vw,1.75rem);font-weight:500;line-height:1.3}.projects{border-bottom:1px solid var(--sheet-line);margin:0 0 clamp(3rem,7vw,5rem);padding:0;list-style:none}.projects li{border-top:1px solid var(--sheet-line)}.projects .row{color:inherit;grid-template-columns:2.75rem 1fr auto 1.5rem;align-items:baseline;gap:0 1rem;padding:1.5rem 0;text-decoration:none;display:grid}.projects .idx,.projects .tag,.foot{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--sheet-muted);font-size:.75rem;font-weight:500}.projects .body{min-width:0;display:block}.projects .p-name{letter-spacing:-.035em;transition:transform .5s var(--ease-out-expo);font-size:clamp(1.5rem,3.4vw,2.25rem);font-weight:600;line-height:1.1;display:block}.projects .desc{color:var(--sheet-muted);margin-top:.5rem;font-size:1rem;font-weight:400;line-height:1.45;display:block}.projects .arrow{opacity:0;transition:opacity .3s ease, transform .5s var(--ease-out-expo);justify-self:end;font-size:1.25rem;transform:translate(-6px,6px)}.projects .row:hover .p-name,.projects .row:focus-visible .p-name{transform:translate(.6rem)}.projects .row:hover .arrow,.projects .row:focus-visible .arrow{opacity:1;transform:none}.projects .row:focus-visible{outline:2px solid var(--sheet-fg);outline-offset:4px}.foot{flex-wrap:wrap;justify-content:space-between;gap:.75rem 2rem;display:flex}.foot a{color:var(--sheet-fg);border-bottom:1px solid;text-decoration:none}.foot a:hover{opacity:.6}.reveal{opacity:0;transition:opacity .3s,transform .3s;transform:translateY(28px)}html.sheet-open .reveal{opacity:1;transition:opacity .9s var(--ease-out-expo), transform 1.1s var(--ease-out-expo);transition-delay:calc(.28s + var(--d,0) * 70ms);transform:none}@media (width<=640px){.projects .row{grid-template-columns:2.25rem 1fr 1.25rem}.projects .tag{display:none}.projects .arrow{opacity:.5;transform:none}}@media (prefers-reduced-motion:reduce){.reveal,html.sheet-open .reveal{transition-duration:.3s;transition-delay:0s;transform:none}}.block{margin:0 0 clamp(3rem,7vw,5rem)}.block>.eyebrow{margin-bottom:1.25rem}.timeline{border-top:1px solid var(--sheet-line);margin:0;padding:0;list-style:none}.timeline>li{border-bottom:1px solid var(--sheet-line);grid-template-columns:10.5rem 1fr;gap:0 1.25rem;padding:1.25rem 0;display:grid}.timeline .when{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--sheet-muted);padding-top:.3em;font-size:.6875rem;font-weight:500}.timeline .what{min-width:0;display:block}.timeline .role{letter-spacing:-.025em;font-size:1.1875rem;font-weight:600;line-height:1.25;display:block}.timeline .org{color:var(--sheet-muted);margin-top:.25rem;font-size:.9375rem;font-weight:400;line-height:1.4;display:block}.timeline .what>ul{color:var(--sheet-muted);margin:.75rem 0 0;padding-left:1.1rem;font-size:.9375rem;font-weight:400;line-height:1.5}.timeline .what>ul li{padding:.12rem 0}.timeline.compact>li{padding:.9rem 0}.timeline.compact .role{letter-spacing:-.015em;font-size:1rem;font-weight:600}.timeline.skills .when{padding-top:.15em}.timeline.skills .role{letter-spacing:-.01em;font-size:1rem;font-weight:500}.projects .is-static:hover .p-name{transform:none}@media (width<=640px){.timeline>li{grid-template-columns:1fr}.timeline .when{padding:0 0 .35rem}}:root{--g-royal:#0b47c9;--g-azure:#2f7bff;--g-sky:#6cc6ff;--g-cyan:#14b4ff;--g-indigo:#1f55f2;--glow-opacity:.85;--glow-blend:normal}@media (prefers-color-scheme:dark){:root{--glow-opacity:.9;--glow-blend:screen}}.sheet-glow{z-index:0;aspect-ratio:1;pointer-events:none;opacity:0;width:min(58vw,52rem);transition:opacity .6s;position:absolute;top:50%;right:calc(-1*clamp(6rem,11vw,13rem));translate:0 -48%;-webkit-mask-image:radial-gradient(closest-side,#000 0%,#000000d9 25%,#0009 45%,#0000004d 70%,#0000001a 88%,#0000 100%);mask-image:radial-gradient(closest-side,#000 0%,#000000d9 25%,#0009 45%,#0000004d 70%,#0000001a 88%,#0000 100%)}html.sheet-open .sheet-glow{opacity:var(--glow-opacity);transition:opacity 2.2s .35s}.sheet-glow:before,.sheet-glow:after{content:"";mix-blend-mode:var(--glow-blend);will-change:transform;border-radius:50%;animation:24s linear infinite paused glow-spin;position:absolute;inset:0}.sheet-glow:before{background:conic-gradient(from 0deg, var(--g-royal), var(--g-azure), var(--g-sky), var(--g-cyan), var(--g-indigo), var(--g-royal));-webkit-mask-image:radial-gradient(circle,#0000 0 7%,#000 24%);mask-image:radial-gradient(circle,#0000 0 7%,#000 24%)}.sheet-glow:after{background:radial-gradient(circle at 50% 50%, var(--g-azure) 0, #2f7bff8c 14%, transparent 34%), radial-gradient(circle at 28% 30%, var(--g-sky) 0, transparent 42%), radial-gradient(circle at 74% 58%, var(--g-indigo) 0, transparent 46%), radial-gradient(circle at 42% 82%, var(--g-cyan) 0, transparent 40%);opacity:.85;animation-duration:34s;animation-direction:reverse}html.sheet-open .sheet-glow:before,html.sheet-open .sheet-glow:after{animation-play-state:running}@keyframes glow-spin{to{transform:rotate(360deg)}}@media (width<=900px),(aspect-ratio<=1){.sheet-glow{width:110vw;top:auto;bottom:-18vw;right:-30vw;translate:none}html.sheet-open .sheet-glow{opacity:calc(var(--glow-opacity) * .45)}}@media (prefers-reduced-motion:reduce){.sheet-glow:before,.sheet-glow:after{animation:none}}.cue{left:50%;bottom:max(1rem, calc(env(safe-area-inset-bottom) + .5rem));z-index:2;width:3rem;height:3rem;color:var(--muted);cursor:pointer;-webkit-tap-highlight-color:transparent;opacity:0;visibility:hidden;pointer-events:none;background:0 0;border:0;place-items:center;margin:0;padding:0;transition:opacity .35s,transform .35s,visibility 0s linear .35s;display:grid;position:fixed;transform:translate(-50%,10px)}html.is-settled:not(.sheet-open) .cue{opacity:.7;visibility:visible;pointer-events:auto;transition:opacity 1s ease .8s, transform 1.1s var(--ease-out-expo) .8s, visibility 0s;transform:translate(-50%)}.cue:hover,.cue:focus-visible{color:var(--fg);outline:none}.cue svg{animation:2.4s ease-in-out infinite paused cue-bump;display:block}html.is-settled:not(.sheet-open) .cue svg{animation-play-state:running}@keyframes cue-bump{0%,to{transform:translateY(2px)}50%{transform:translateY(-5px)}}@media (prefers-reduced-motion:reduce){.cue svg{animation:none}}@media (width>=901px) and (aspect-ratio>=1){:root{--hero-x-open:-.25;--hero-y-open:.06;--hero-scale-open:.6;--hero-dim:.1;--links-top-open:.66;--panel-w:.5}.sheet{width:calc(100% * var(--panel-w) - 1rem);box-shadow:0 0 0 1px var(--sheet-line), 0 24px 80px var(--sheet-shadow);transform:translateY(calc((1 - var(--p)) * (100% + 2rem + 120px)));border-radius:28px;inset:1rem 1rem 1rem auto}.sheet-inner{padding:clamp(1.25rem,2.5vw,2.5rem) clamp(1.5rem,3.5vw,3.5rem) clamp(1.5rem,3.5vw,3.5rem)}.title{font-size:clamp(2.5rem,4.6vw,4.75rem)}.intro{font-size:clamp(1.125rem,1.65vw,1.5rem)}.timeline>li{grid-template-columns:7.5rem 1fr;gap:0 1rem}.timeline .what>ul{padding-left:1rem}.projects .row{grid-template-columns:2.25rem 1fr 1.5rem}.projects .idx{grid-area:1/1}.projects .body{grid-area:1/2}.projects .arrow{grid-area:1/3;align-self:start}.projects .tag{grid-area:2/2;margin-top:.6rem}.sheet-glow{width:140%;top:auto;bottom:-32%;right:-38%;translate:none}html.sheet-open .sheet-glow{opacity:calc(var(--glow-opacity) * .45)}}.note{z-index:2;pointer-events:none;position:fixed;inset:0}.note-line{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.note-path{fill:none;stroke:var(--fg);stroke-width:1px;opacity:.55;stroke-dashoffset:99999px}.note-dot{fill:var(--fg);opacity:0}.note-ring{fill:none;stroke:var(--fg);stroke-width:1px;opacity:0;transform-box:fill-box;transform-origin:50%}.note.is-on .note-ring{animation:2s ease-out infinite note-ping}@keyframes note-ping{0%{opacity:.55;transform:scale(.6)}to{opacity:0;transform:scale(1.9)}}.note-box{background:color-mix(in srgb, var(--bg) 72%, transparent);backdrop-filter:blur(10px);border:1px solid color-mix(in srgb, var(--fg) 14%, transparent);opacity:0;filter:blur(4px);width:min(17.5rem,100vw - 2rem);padding:.9rem 1rem 1rem;transition:opacity .2s,filter .2s,transform .2s;position:absolute;top:0;left:0;transform:translateY(6px)}.note.is-on .note-box{opacity:1;filter:none;transition:opacity .55s var(--ease-out-expo) .16s, filter .55s var(--ease-out-expo) .16s, transform .7s var(--ease-out-expo) .16s;transform:none}.note-box:before,.note-box:after{content:"";border:1.5px solid var(--fg);width:9px;height:9px;position:absolute}.note-box:before{border-bottom:0;border-right:0;top:-1px;left:-1px}.note-box:after{border-top:0;border-left:0;bottom:-1px;right:-1px}.note-text{text-wrap:pretty;color:var(--fg);margin:0;font-size:.8125rem;font-weight:400;line-height:1.55}@media (prefers-reduced-motion:reduce){.note.is-on .note-ring{animation:none}.note-box,.note.is-on .note-box{filter:none;transition-duration:.2s;transition-delay:0s;transform:none}}
