@font-face{font-family:Fraunces;font-style:italic;font-weight:400;font-display:swap;src:url(../media/50a3f1070da3c6cc-s.14adbkwhbql9r.woff2)format("woff2");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;font-style:italic;font-weight:400;font-display:swap;src:url(../media/b887d91685b8c137-s.3vw1idf69ly-m.woff2)format("woff2");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;font-style:italic;font-weight:400;font-display:swap;src:url(../media/3c7c6164b2587822-s.p.1kjlm4q41a8i_.woff2)format("woff2");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;font-style:italic;font-weight:600;font-display:swap;src:url(../media/50a3f1070da3c6cc-s.14adbkwhbql9r.woff2)format("woff2");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;font-style:italic;font-weight:600;font-display:swap;src:url(../media/b887d91685b8c137-s.3vw1idf69ly-m.woff2)format("woff2");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;font-style:italic;font-weight:600;font-display:swap;src:url(../media/3c7c6164b2587822-s.p.1kjlm4q41a8i_.woff2)format("woff2");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;font-style:normal;font-weight:400;font-display:swap;src:url(../media/1e219c03c996efbd-s.00ewlnc1znsu7.woff2)format("woff2");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;font-style:normal;font-weight:400;font-display:swap;src:url(../media/b35b0dbffda7f2c4-s.0bnyh_2yo1emg.woff2)format("woff2");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;font-style:normal;font-weight:400;font-display:swap;src:url(../media/03bda585a99c6450-s.p.0glcd8n2pdab0.woff2)format("woff2");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;font-style:normal;font-weight:600;font-display:swap;src:url(../media/1e219c03c996efbd-s.00ewlnc1znsu7.woff2)format("woff2");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;font-style:normal;font-weight:600;font-display:swap;src:url(../media/b35b0dbffda7f2c4-s.0bnyh_2yo1emg.woff2)format("woff2");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;font-style:normal;font-weight:600;font-display:swap;src:url(../media/03bda585a99c6450-s.p.0glcd8n2pdab0.woff2)format("woff2");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 Fallback;src:local(Times New Roman);ascent-override:84.71%;descent-override:22.09%;line-gap-override:0.0%;size-adjust:115.45%}.fraunces_d120f1c4-module__flN5PG__className{font-family:Fraunces,Fraunces Fallback}.fraunces_d120f1c4-module__flN5PG__variable{--font-display:"Fraunces", "Fraunces Fallback"}
@font-face{font-family:Space Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/32687112bd2dd8db-s.0v2ipp7s07_p9.woff2)format("woff2");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:Space Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/28868e710e86be81-s.44ks8kcggj012.woff2)format("woff2");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:Space Grotesk;font-style:normal;font-weight:400;font-display:swap;src:url(../media/0c89a48fa5027cee-s.p.1ii7211jqpzi_.woff2)format("woff2");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:Space Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/32687112bd2dd8db-s.0v2ipp7s07_p9.woff2)format("woff2");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:Space Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/28868e710e86be81-s.44ks8kcggj012.woff2)format("woff2");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:Space Grotesk;font-style:normal;font-weight:500;font-display:swap;src:url(../media/0c89a48fa5027cee-s.p.1ii7211jqpzi_.woff2)format("woff2");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:Space Grotesk Fallback;src:local(Arial);ascent-override:89.71%;descent-override:26.62%;line-gap-override:0.0%;size-adjust:109.69%}.space_grotesk_5d45fbf7-module__h_TdFq__className{font-family:Space Grotesk,Space Grotesk Fallback;font-style:normal}.space_grotesk_5d45fbf7-module__h_TdFq__variable{--font-body:"Space Grotesk", "Space Grotesk Fallback"}
@font-face{font-family:Space Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/4ba802ed8e67eac5-s.341_rbs6dql3t.woff2)format("woff2");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:Space Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/d7a0600e467cf0bd-s.40d3ll7mho212.woff2)format("woff2");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:Space Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/dc0d9adbac686440-s.p.3-4lwpipb4a4k.woff2)format("woff2");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:Space Mono;font-style:normal;font-weight:700;font-display:swap;src:url(../media/b8f2b92a9960dd69-s.37aqrzupgb8zi.woff2)format("woff2");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:Space Mono;font-style:normal;font-weight:700;font-display:swap;src:url(../media/28e60ca39c9ae554-s.0e_5-ojqbtsw9.woff2)format("woff2");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:Space Mono;font-style:normal;font-weight:700;font-display:swap;src:url(../media/8d05cfa5faa8406c-s.p.2p-978ij53_v6.woff2)format("woff2");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:Space Mono Fallback;src:local(Arial);ascent-override:81.58%;descent-override:26.3%;line-gap-override:0.0%;size-adjust:137.28%}.space_mono_7f9f0134-module__VYKLqG__className{font-family:Space Mono,Space Mono Fallback;font-style:normal}.space_mono_7f9f0134-module__VYKLqG__variable{--font-mono:"Space Mono", "Space Mono Fallback"}
.GlowDot-module__quLTNW__glowDot{--dot-color:#b8863f;width:16px;height:16px;display:inline-block;position:relative}.GlowDot-module__quLTNW__glowDot:before{content:"";background-color:var(--dot-color);opacity:.15;border-radius:50%;position:absolute;inset:0}.GlowDot-module__quLTNW__glowDot:after{content:"";background-color:var(--dot-color);border-radius:50%;width:8px;height:8px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}
.Divider-module__vd2iYG__dotDivider{align-items:center;gap:var(--spacing-sm);display:flex}.Divider-module__vd2iYG__dotDivider .Divider-module__vd2iYG__line{background:var(--color-line-subtle);flex:1;height:1px}.Divider-module__vd2iYG__titleDivider{align-items:center;gap:var(--spacing-xs);color:var(--color-accent-base);text-transform:uppercase;display:flex}.Divider-module__vd2iYG__titleDivider:after{content:"";background:var(--color-line-subtle);flex:1;height:1px}.Divider-module__vd2iYG__gradientDivider{background:linear-gradient(90deg, transparent, var(--color-accent-base) 20%, var(--color-accent-base) 80%, transparent);opacity:.5;width:100%;height:1px}
.Hero-module__b0RKna__hero{background-color:var(--color-bg-base);flex-direction:column;flex-shrink:0;justify-content:center;min-height:calc(100dvh - 80px);display:flex;position:relative;overflow:hidden}.Hero-module__b0RKna__hero:before{content:"";opacity:.5;filter:blur(10px);pointer-events:none;background:radial-gradient(circle at 40% 40%,#3d5a3f,#0000 70%);border-radius:50%;width:380px;height:380px;position:absolute;top:40px;right:20px}.Hero-module__b0RKna__eyebrow{align-items:center;gap:var(--spacing-xs);display:flex}.Hero-module__b0RKna__eyebrow>p{color:var(--color-accent-base);max-width:35ch}.Hero-module__b0RKna__description{font-size:var(--font-size-16);max-width:45ch}.Hero-module__b0RKna__copy>h1{max-width:20ch}.Hero-module__b0RKna__highlight{color:var(--color-accent-base)}.Hero-module__b0RKna__buttons{gap:var(--spacing-sm);display:flex}.Hero-module__b0RKna__copy{gap:var(--spacing-sm);z-index:10;flex-direction:column;width:100%;display:flex;position:relative}@media (min-width:640px){.Hero-module__b0RKna__description{font-size:var(--font-size-18)}.Hero-module__b0RKna__hero{min-height:calc(100dvh - 64px)}.Hero-module__b0RKna__hero:before{width:480px;height:480px;top:50px;right:70px}.Hero-module__b0RKna__eyebrow>p{max-width:60ch}}@media (min-width:1536px){.Hero-module__b0RKna__hero:before{width:680px;height:680px;top:80px;right:200px}}
.ProfilePhoto-module__NvHuRa__frame{aspect-ratio:4/4;border-radius:var(--radius-full);border:3px solid var(--color-accent-base);box-shadow:0 8px 24px #0006, 0 4px 10px color-mix(in srgb, var(--color-accent-base) 35%, transparent);position:relative;overflow:hidden}.ProfilePhoto-module__NvHuRa__photo{object-fit:cover;object-position:center 40%;transform:scale(1.8)}
.QuickFactsCode-module__NfwIYq__codeWindow{max-width:500px;box-shadow:2px 2px 10px var(--color-bg-base);background:#202c21;border:1px solid #f0ece11a;border-radius:10px;font-family:Space Mono,monospace;font-size:.82rem;line-height:1.85;overflow:hidden}.QuickFactsCode-module__NfwIYq__titlebar{background:#00000026;border-bottom:1px solid #f0ece11a;align-items:center;gap:7px;padding:10px 16px;display:flex}.QuickFactsCode-module__NfwIYq__dot{appearance:none;cursor:default;border:none;border-radius:50%;width:9px;height:9px;padding:0}.QuickFactsCode-module__NfwIYq__dot1{opacity:.6;background:#e5645a}.QuickFactsCode-module__NfwIYq__dot2{opacity:.6;background:#e0b04a}.QuickFactsCode-module__NfwIYq__dot3{opacity:.6;cursor:pointer;background:#6fae6a;position:relative}.QuickFactsCode-module__NfwIYq__dot3:after{content:"⤢";color:#182219;opacity:0;pointer-events:none;font-size:10px;line-height:1;transition:opacity .15s,transform .15s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.7)}@media (hover:hover) and (pointer:fine){.QuickFactsCode-module__NfwIYq__dot3:hover{opacity:1}.QuickFactsCode-module__NfwIYq__dot3:hover:after{opacity:1;transform:translate(-50%,-50%)scale(1)}}.QuickFactsCode-module__NfwIYq__filename{color:var(--color-ink-faint);margin-left:8px;font-size:.72rem}.QuickFactsCode-module__NfwIYq__body{padding:20px 22px}.QuickFactsCode-module__NfwIYq__collapsed{display:none}@media (min-width:640px){.QuickFactsCode-module__NfwIYq__collapsed{display:block}}.QuickFactsCode-module__NfwIYq__indent{padding-left:20px}.QuickFactsCode-module__NfwIYq__indentDouble{padding-left:40px}.QuickFactsCode-module__NfwIYq__key{color:#8fb2e8}.QuickFactsCode-module__NfwIYq__variable{color:#b8863f}.QuickFactsCode-module__NfwIYq__prop{color:#9fac97}.QuickFactsCode-module__NfwIYq__str{color:#a3c98a}.QuickFactsCode-module__NfwIYq__punc,.QuickFactsCode-module__NfwIYq__comment{color:var(--color-ink-faint)}.QuickFactsCode-module__NfwIYq__cursor{color:#b8863f;animation:1s step-end infinite QuickFactsCode-module__NfwIYq__blink}@keyframes QuickFactsCode-module__NfwIYq__blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.QuickFactsCode-module__NfwIYq__imgLine{cursor:pointer;border-radius:3px;margin-left:-4px;padding:1px 4px 1px 20px;transition:background .15s;position:relative}.QuickFactsCode-module__NfwIYq__hint{color:var(--color-ink-faint);opacity:0;margin-left:8px;font-size:.68rem;transition:opacity .15s}@media (hover:hover) and (pointer:fine){.QuickFactsCode-module__NfwIYq__imgLine:hover{background:#b8863f1f}.QuickFactsCode-module__NfwIYq__imgLine:hover .QuickFactsCode-module__NfwIYq__hint{opacity:1}}.QuickFactsCode-module__NfwIYq__photoReveal{max-height:0;margin-top:0;transition:max-height .35s,margin-top .35s;overflow:hidden}.QuickFactsCode-module__NfwIYq__photoReveal.QuickFactsCode-module__NfwIYq__open{max-height:220px;margin-top:14px}
.Intro-module__eDfktG__intro{gap:var(--spacing-lg);grid-template-columns:1fr;align-items:center;display:grid}@media (min-width:640px){.Intro-module__eDfktG__intro{grid-template-columns:repeat(2,1fr)}}
.ProjectCard-module__JMlgRa__cardLink{width:100%;display:flex}.ProjectCard-module__JMlgRa__projectCard{flex-direction:column;width:100%;height:100%;transition:transform .5s;display:flex;position:relative}.ProjectCard-module__JMlgRa__titleLink{color:inherit;text-decoration:none}.ProjectCard-module__JMlgRa__titleLink:after{content:"";position:absolute;inset:0}.ProjectCard-module__JMlgRa__projectCard.ProjectCard-module__JMlgRa__isLatest{border-top:1px solid var(--color-accent-base)}.ProjectCard-module__JMlgRa__imageWrapper{aspect-ratio:3/2;border-bottom:1px solid var(--color-line-default);border-radius:var(--radius-md) var(--radius-md) 0px 0px;flex-shrink:0;width:100%;position:relative;overflow:hidden}.ProjectCard-module__JMlgRa__image{object-fit:cover}.ProjectCard-module__JMlgRa__wipPlaceholder{--stripe-width:12px;background:repeating-linear-gradient(45deg, var(--color-accent-base) 0px, var(--color-accent-base) var(--stripe-width), var(--color-accent-hover) var(--stripe-width), var(--color-accent-hover) calc(var(--stripe-width) * 2));justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:relative}.ProjectCard-module__JMlgRa__wipIcon{object-fit:contain;width:clamp(120px,60%,320px);height:auto}.ProjectCard-module__JMlgRa__header{width:100%;padding:var(--spacing-xs);padding-inline:var(--spacing-sm);flex-direction:row;justify-content:space-between;display:flex;position:absolute;top:4px}.ProjectCard-module__JMlgRa__tech{column-gap:var(--spacing-xs);row-gap:var(--spacing-sm);flex-wrap:wrap;display:flex}.ProjectCard-module__JMlgRa__links{z-index:1;border-top:1px solid var(--color-line-default);padding-block:var(--spacing-xs);flex-direction:column;justify-content:center;align-items:flex-start;margin-top:auto;display:flex;position:relative}.ProjectCard-module__JMlgRa__links a{transition:transform .2s}@media (hover:hover) and (pointer:fine){.ProjectCard-module__JMlgRa__links a:hover{transform:translateY(-2px)}}.ProjectCard-module__JMlgRa__summary{gap:var(--spacing-xs);flex-direction:column;display:flex}.ProjectCard-module__JMlgRa__body{gap:var(--spacing-md);padding-inline:var(--spacing-md);padding-top:var(--spacing-md);flex-direction:column;flex:1;display:flex}@media (min-width:640px){.ProjectCard-module__JMlgRa__links{border-top:1px solid var(--color-line-default);flex-direction:row;justify-content:left}}@media (hover:hover) and (pointer:fine){.ProjectCard-module__JMlgRa__projectCard:not(.ProjectCard-module__JMlgRa__wip):hover{border:1px solid var(--color-accent-base);box-shadow:0 4px 16px color-mix(in srgb, var(--color-accent-base) 25%, transparent);transform:translateY(-4px)}}.ProjectCard-module__JMlgRa__projectCard:not(.ProjectCard-module__JMlgRa__wip):active{transform:scale(.98)}
.Button-module__TIWZAq__button{justify-content:center;align-items:center;gap:var(--spacing-xs);border-radius:var(--radius-sm);font-family:var(--font-family-body);cursor:pointer;border:none;transition:background-color .2s,color .2s,transform .15s;display:inline-flex}.Button-module__TIWZAq__button:disabled,.Button-module__TIWZAq__button[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}.Button-module__TIWZAq__sm{min-width:80px;min-height:44px;padding:0 var(--spacing-sm)}.Button-module__TIWZAq__md{min-width:96px;min-height:48px;padding:0 var(--spacing-md)}.Button-module__TIWZAq__lg{min-width:112px;min-height:52px;padding:0 var(--spacing-lg)}.Button-module__TIWZAq__fullWidth{width:100%}.Button-module__TIWZAq__iconOnly{min-width:unset;aspect-ratio:1;padding:0}.Button-module__TIWZAq__primary{background-color:var(--color-accent-base);color:var(--color-bg-base);font-weight:var(--font-weight-semibold)}.Button-module__TIWZAq__secondary{background-color:var(--color-bg-elevated);color:var(--color-ink-primary);border:1px solid var(--color-line-default)}.Button-module__TIWZAq__tertiary{color:var(--color-accent-base);border:1px solid var(--color-line-accent);border-radius:var(--radius-full);background-color:#0000}.Button-module__TIWZAq__ghost{color:var(--color-ink-primary);background-color:#0000}.Button-module__TIWZAq__ghostAccent{color:var(--color-accent-base);background-color:#0000}@media (hover:hover) and (pointer:fine){.Button-module__TIWZAq__button.Button-module__TIWZAq__ghost:hover:not(:disabled):not([aria-disabled=true]),.Button-module__TIWZAq__button.Button-module__TIWZAq__ghostAccent:hover:not(:disabled):not([aria-disabled=true]){color:var(--color-accent-hover)}.Button-module__TIWZAq__button.Button-module__TIWZAq__primary:hover:not(:disabled):not([aria-disabled=true]){background-color:var(--color-accent-hover);transform:translateY(-2px)}.Button-module__TIWZAq__button.Button-module__TIWZAq__secondary:hover:not(:disabled):not([aria-disabled=true]){background-color:var(--color-bg-base);transform:translateY(-2px)}.Button-module__TIWZAq__button.Button-module__TIWZAq__tertiary:hover:not(:disabled):not([aria-disabled=true]){background-color:var(--color-bg-tertiary-hover)}}
.Pill-module__fllKGW__pill{text-transform:uppercase;background:linear-gradient(135deg, var(--color-accent-base), var(--color-accent-hover));border-radius:var(--radius-full);color:var(--color-bg-base);font-weight:var(--font-weight-semibold);padding-inline:12px;box-shadow:0 2px 8px #00000059}.Pill-module__fllKGW__transparent{border:1px solid var(--color-line-default);color:var(--color-ink-dim);background:#000000ba;box-shadow:0 1px 4px #00000059}.Pill-module__fllKGW__tech{text-transform:capitalize;color:var(--color-ink-dim);font-weight:var(--font-weight-regular);border:1px solid var(--color-line-default);box-shadow:none;background:0 0;padding-block:5px;padding-inline:12px}
.ScrollReveal-module__D-pxda__reveal{opacity:0;width:100%;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1);display:flex;transform:translateY(24px)}.ScrollReveal-module__D-pxda__visible{opacity:1;transform:translateY(0)}@media (prefers-reduced-motion:reduce){.ScrollReveal-module__D-pxda__reveal{opacity:1;transition:none;transform:none}}
.PracticeProjectsCta-module__-0WoEq__cta{gap:var(--spacing-md);padding:var(--spacing-lg);flex-direction:column;display:flex}.PracticeProjectsCta-module__-0WoEq__text{gap:var(--spacing-xs);flex-direction:column;display:flex}.PracticeProjectsCta-module__-0WoEq__chips{width:fit-content;margin-top:var(--spacing-2xs);border:1px solid var(--color-line-default);border-radius:var(--radius-sm);display:flex;overflow:hidden}.PracticeProjectsCta-module__-0WoEq__chip{font-family:var(--font-family-mono);font-size:var(--font-size-12);color:var(--color-ink-faint);background:var(--color-bg-base);padding:var(--spacing-2xs) var(--spacing-xs)}.PracticeProjectsCta-module__-0WoEq__chip+.PracticeProjectsCta-module__-0WoEq__chip{border-left:1px solid var(--color-line-default)}@media (min-width:640px){.PracticeProjectsCta-module__-0WoEq__cta{justify-content:space-between;align-items:center;gap:var(--spacing-lg);flex-direction:row}.PracticeProjectsCta-module__-0WoEq__cta>a{flex-shrink:0}}
.Navigation-module__w_-T5W__list{gap:var(--spacing-sm);display:flex}.Navigation-module__w_-T5W__active{color:var(--color-ink-primary)}.Navigation-module__w_-T5W__navLink{align-items:center;gap:var(--spacing-2xs);display:inline-flex}.Navigation-module__w_-T5W__link{align-items:center;margin:-10px -8px;padding:10px 8px;display:inline-flex}@media (hover:hover) and (pointer:fine){.Navigation-module__w_-T5W__navLink:hover{color:var(--color-accent-hover)}.Navigation-module__w_-T5W__navLink .Navigation-module__w_-T5W__active:hover{transform:none}}
.Projects-module__oGmmJG__section{gap:var(--spacing-lg);flex-direction:column;display:flex}.Projects-module__oGmmJG__projects{gap:var(--spacing-md);min-width:300px;padding:var(--spacing-xs) var(--spacing-xs) 24px;margin:calc(var(--spacing-xs) * -1) calc(var(--spacing-xs) * -1) 0;flex-direction:column;display:flex;overflow:hidden}.Projects-module__oGmmJG__intro{gap:var(--spacing-xs);flex-direction:column;display:flex}@media (min-width:640px){.Projects-module__oGmmJG__projects{flex-direction:row}}
.LanguageSwitcher-module__uIhz-a__switcher,.LanguageSwitcher-module__uIhz-a__language{align-items:center;display:inline-flex}.LanguageSwitcher-module__uIhz-a__divider{color:var(--color-ink-faint);margin:0 4px}.LanguageSwitcher-module__uIhz-a__option{color:#9fac97;cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit;font-size:14px}.LanguageSwitcher-module__uIhz-a__option[data-active]{color:var(--color-ink-primary);cursor:default;pointer-events:none}@media (hover:hover) and (pointer:fine){.LanguageSwitcher-module__uIhz-a__option:hover{color:var(--color-accent-hover)}}
.SkillList-module__iVIQxq__label{text-transform:uppercase;color:var(--color-accent-base);min-width:100px}.SkillList-module__iVIQxq__textValue{color:var(--color-ink-primary)}.SkillList-module__iVIQxq__skills{column-gap:var(--spacing-xs);row-gap:var(--spacing-sm);flex-wrap:wrap;display:flex}.SkillList-module__iVIQxq__skillList{gap:var(--spacing-md);flex-direction:column;display:flex}.SkillList-module__iVIQxq__skillList.SkillList-module__iVIQxq__textVariant{gap:var(--spacing-xs)}@media (min-width:640px){.SkillList-module__iVIQxq__skillList{flex-direction:row;align-items:center}.SkillList-module__iVIQxq__skillList.SkillList-module__iVIQxq__textVariant{gap:var(--spacing-md)}}
.Skills-module__lMWr6a__skillsContainer{z-index:1;gap:var(--spacing-lg);flex-direction:column;display:flex;position:relative}.Skills-module__lMWr6a__intro{gap:var(--spacing-xs);flex-direction:column;display:flex}.Skills-module__lMWr6a__skills{gap:var(--spacing-lg);flex-direction:column;display:flex}.Skills-module__lMWr6a__layout{border-left:2px solid var(--color-accent-base);padding-left:var(--spacing-sm);flex-direction:column;justify-content:space-between;display:flex}.Skills-module__lMWr6a__circles{flex-shrink:0;align-self:center;width:min(170px,100%);height:auto;display:none;overflow:visible}.Skills-module__lMWr6a__outerPath{opacity:.6;stroke:var(--color-accent-base);stroke-width:1.5px;fill:none;stroke-linecap:round}.Skills-module__lMWr6a__innerPath{opacity:.2;stroke:#f0ece1;fill:none;stroke-linecap:round}.Skills-module__lMWr6a__topDot{fill:var(--color-accent-base)}.Skills-module__lMWr6a__faintDot{opacity:.5;fill:var(--color-accent-base)}@media (min-width:620px){.Skills-module__lMWr6a__layout{flex-direction:row;max-width:1000px;display:flex}.Skills-module__lMWr6a__circles{display:block}.Skills-module__lMWr6a__topDot{offset-path:path("M8.5,93C-11.5,53,8.5,8,53.5,3s70,30,60,70c-7,30-40,50-70,40");animation:24s ease-in-out infinite alternate Skills-module__lMWr6a__orbit}}@keyframes Skills-module__lMWr6a__orbit{0%{offset-distance:0%}to{offset-distance:100%}}@media (prefers-reduced-motion:reduce){.Skills-module__lMWr6a__topDot{animation:none}}
.Logo-module__v9t6TW__logo{display:block}
.page-module__LBTDbq__band{background-color:var(--color-bg-elevated)}.page-module__LBTDbq__bandAlt{background-color:var(--color-bg-base)}.page-module__LBTDbq__bandContent{gap:var(--spacing-xl);padding-block:var(--spacing-xl);flex-direction:column;display:flex}
.BackLink-module__RJg4pG__back{align-items:center;gap:var(--spacing-2xs);width:fit-content;transition:transform .3s,color .3s;display:inline-flex}@media (hover:hover) and (pointer:fine){.BackLink-module__RJg4pG__back:hover{color:var(--color-accent-base);transform:translate(4px)}}
.Header-module__gbg3bW__controls{align-items:center;gap:var(--spacing-2xs);flex-direction:column;display:flex}.Header-module__gbg3bW__langWrapper{align-self:flex-end}.Header-module__gbg3bW__divider{display:none}.Header-module__gbg3bW__header{z-index:50;background-color:var(--color-bg-base);width:100%;position:sticky;top:0}.Header-module__gbg3bW__inner{padding-block:var(--spacing-sm);justify-content:space-between;align-items:center;display:flex}.Header-module__gbg3bW__header:after{content:"";background:linear-gradient(90deg, transparent, var(--color-accent-base) 20%, var(--color-accent-base) 80%, transparent);opacity:0;pointer-events:none;height:1px;transition:opacity .3s;position:absolute;bottom:0;left:0;right:0}.Header-module__gbg3bW__stuck:after{opacity:.5}@media (min-width:640px){.Header-module__gbg3bW__controls{align-items:center;gap:var(--spacing-sm);flex-direction:row}.Header-module__gbg3bW__langWrapper{align-self:auto}.Header-module__gbg3bW__divider{background:var(--color-line-default);width:1px;height:16px;display:block}}
.Footer-module__8-teKW__label{color:var(--color-ink-faint);text-transform:uppercase}.Footer-module__8-teKW__link{transition:color .3s}@media (hover:hover) and (pointer:fine){.Footer-module__8-teKW__link:hover{color:var(--color-accent-base)}}.Footer-module__8-teKW__group{gap:var(--spacing-sm);flex-direction:column;display:flex}.Footer-module__8-teKW__nav{gap:var(--spacing-md);flex-direction:column;display:flex}.Footer-module__8-teKW__description{max-width:30ch}.Footer-module__8-teKW__brand{gap:var(--spacing-xs);flex-direction:column;display:flex}.Footer-module__8-teKW__top{gap:var(--spacing-lg);flex-direction:column;width:100%;display:flex}.Footer-module__8-teKW__footer{gap:var(--spacing-lg);padding-top:var(--spacing-lg);border-top:1px solid var(--color-line-default);flex-direction:column;display:flex}.Footer-module__8-teKW__copyright{gap:var(--spacing-sm);color:var(--color-ink-faint);padding-block:var(--spacing-sm);border-top:1px solid #f0ece10f;flex-direction:column;width:100%;display:flex}.Footer-module__8-teKW__year{gap:var(--spacing-xs);align-items:center;display:flex}.Footer-module__8-teKW__noTextTransform{text-transform:none}@media (min-width:640px){.Footer-module__8-teKW__nav{flex-direction:row}.Footer-module__8-teKW__top,.Footer-module__8-teKW__copyright{flex-direction:row;justify-content:space-between}}
.PreviewGrid-module__27Rj4W__grid{justify-content:center;gap:var(--spacing-sm);grid-template-columns:repeat(auto-fill,minmax(200px,240px));display:grid}
.ProjectsCta-module__kQ0apW__cta{gap:var(--spacing-md);padding:var(--spacing-lg);--surface-bg:var(--color-accent-surface);flex-direction:column;display:flex}.ProjectsCta-module__kQ0apW__text{gap:var(--spacing-xs);flex-direction:column;display:flex}@media (min-width:640px){.ProjectsCta-module__kQ0apW__cta{justify-content:space-between;align-items:center;gap:var(--spacing-lg);flex-direction:row}.ProjectsCta-module__kQ0apW__cta>a{flex-shrink:0}}
.page-module__ZP1igW__frame{max-width:700px;margin-inline:auto}.page-module__ZP1igW__titlebar{border-bottom:1px solid var(--color-line-default);background:#00000026;align-items:center;gap:7px;padding:10px 16px;display:none}.page-module__ZP1igW__dot{border-radius:50%;width:9px;height:9px}.page-module__ZP1igW__dot1{opacity:.6;background:#e5645a}.page-module__ZP1igW__dot2{opacity:.6;background:#e0b04a}.page-module__ZP1igW__dot3{opacity:.6;background:#6fae6a}.page-module__ZP1igW__filename{font-family:var(--font-family-mono);font-size:var(--font-size-12);color:var(--color-ink-faint);margin-left:8px}.page-module__ZP1igW__page{gap:var(--spacing-md);padding-block:var(--spacing-xl);flex-direction:column;display:flex}@media (min-width:640px){.page-module__ZP1igW__frame{border:1px solid var(--color-line-default);border-radius:var(--radius-md);background:var(--color-bg-elevated);box-shadow:2px 2px 10px var(--color-bg-base);margin-block:var(--spacing-lg);overflow:hidden}.page-module__ZP1igW__titlebar{display:flex}.page-module__ZP1igW__page{padding-inline:var(--spacing-lg)}}.page-module__ZP1igW__highlight{color:var(--color-ink-primary)}.page-module__ZP1igW__divider{margin:var(--spacing-md) 0}.page-module__ZP1igW__photoContainer{justify-content:center;align-items:center;gap:var(--spacing-lg);flex-direction:column;display:flex}
.page-module__4iYw3a__page{gap:var(--spacing-lg);padding-block:var(--spacing-lg);flex-direction:column;max-width:800px;margin-inline:auto;display:flex}.page-module__4iYw3a__divider{margin:0}.page-module__4iYw3a__skills{gap:var(--spacing-md);flex-direction:column;display:flex}.page-module__4iYw3a__education,.page-module__4iYw3a__section{gap:var(--spacing-lg);flex-direction:column;display:flex}.page-module__4iYw3a__dashList{gap:var(--spacing-xs);flex-direction:column;display:flex}.page-module__4iYw3a__dashList li{gap:var(--spacing-xs);display:flex}.page-module__4iYw3a__dashList li:before{content:"–";color:var(--color-accent-base)}.page-module__4iYw3a__group{gap:var(--spacing-lg);flex-direction:column;display:flex}.page-module__4iYw3a__cvHeader{align-items:center;gap:var(--spacing-sm) var(--spacing-md);grid-template-columns:1fr auto;grid-template-areas:"title button""role role""links links";display:grid}.page-module__4iYw3a__title{grid-area:title}.page-module__4iYw3a__downloadButton{grid-area:button}.page-module__4iYw3a__role{color:var(--color-accent-base);grid-area:role;align-self:start}.page-module__4iYw3a__linksList{grid-area:links}.page-module__4iYw3a__link{transition:color .3s}@media (hover:hover) and (pointer:fine){.page-module__4iYw3a__link:hover{color:var(--color-accent-base)}}@media (min-width:640px){.page-module__4iYw3a__education{gap:var(--spacing-sm)}.page-module__4iYw3a__group{gap:var(--spacing-lg);flex-direction:row}.page-module__4iYw3a__group>section{flex:1}.page-module__4iYw3a__cvHeader{grid-template-columns:1fr 1fr;grid-template-areas:"title button""role links"}.page-module__4iYw3a__linksList{text-align:right}.page-module__4iYw3a__downloadButton{justify-self:end}.page-module__4iYw3a__page{border:1px solid var(--color-line-default);background:var(--color-bg-elevated);padding-inline:var(--spacing-lg);border-radius:var(--radius-md);margin-block:var(--spacing-lg)}.page-module__4iYw3a__section{gap:var(--spacing-md)}}
.not-found-module__mpbYFq__page{text-align:center;justify-content:center;align-items:center;gap:var(--spacing-sm);flex-direction:column;min-height:60vh;display:flex}.not-found-module__mpbYFq__eyebrow{color:var(--color-accent-base)}.not-found-module__mpbYFq__description{max-width:45ch;color:var(--color-ink-dim)}.not-found-module__mpbYFq__actions{gap:var(--spacing-sm);margin-top:var(--spacing-sm);display:flex}
.NextProjectCard-module__uWAouq__card{justify-content:space-between;align-items:center;gap:var(--spacing-md);padding:var(--spacing-lg);text-decoration:none;transition:border-color .2s,transform .2s;display:flex}.NextProjectCard-module__uWAouq__text{gap:var(--spacing-2xs);flex-direction:column;min-width:0;display:flex}.NextProjectCard-module__uWAouq__label{color:var(--color-ink-dim)}.NextProjectCard-module__uWAouq__arrow{color:var(--color-accent-base);flex-shrink:0;transition:transform .2s}@media (hover:hover) and (pointer:fine){.NextProjectCard-module__uWAouq__card:hover{border-color:var(--color-line-accent)}.NextProjectCard-module__uWAouq__card:hover .NextProjectCard-module__uWAouq__arrow{transform:translate(4px)}}.NextProjectCard-module__uWAouq__card:active{transform:scale(.99)}
.SkipLink-module__H6yi-G__skipLink{top:-100%;left:var(--spacing-sm);z-index:100;padding:var(--spacing-xs) var(--spacing-sm);background:var(--color-bg-elevated);color:var(--color-ink-primary);border:1px solid var(--color-line-default);border-radius:var(--radius-sm);position:absolute}.SkipLink-module__H6yi-G__skipLink:focus{top:var(--spacing-sm)}
.page-module__II3uHW__page{gap:var(--spacing-lg);padding-inline:var(--spacing-md);padding-block:var(--spacing-lg);flex-direction:column;max-width:800px;margin-inline:auto;display:flex}@media (min-width:640px){.page-module__II3uHW__page{padding-inline:var(--spacing-lg)}}.page-module__II3uHW__header{gap:var(--spacing-sm);flex-direction:column;display:flex}.page-module__II3uHW__tech{column-gap:var(--spacing-xs);row-gap:var(--spacing-sm);padding-top:var(--spacing-sm);flex-wrap:wrap;display:flex}.page-module__II3uHW__imageWrapper{border:1px solid var(--color-line-default);border-radius:var(--radius-md);width:100%;overflow:hidden}.page-module__II3uHW__image{width:100%;height:auto}.page-module__II3uHW__body{gap:var(--spacing-sm);flex-direction:column;display:flex}.page-module__II3uHW__sections{gap:var(--spacing-lg);flex-direction:column;display:flex}.page-module__II3uHW__section{gap:var(--spacing-xs);flex-direction:column;display:flex}.page-module__II3uHW__sectionHeading{align-items:center;gap:var(--spacing-xs);display:flex}.page-module__II3uHW__list{gap:var(--spacing-xs);flex-direction:column;display:flex}.page-module__II3uHW__list li{gap:var(--spacing-xs);display:flex}.page-module__II3uHW__list li:before{content:"→";color:var(--color-accent-base);flex-shrink:0}.page-module__II3uHW__techHeading{text-transform:uppercase}.page-module__II3uHW__techLinks{gap:var(--spacing-lg);border-top:1px solid var(--color-line-default);padding-top:var(--spacing-md);flex-direction:column;display:flex}.page-module__II3uHW__links{gap:var(--spacing-sm);flex-wrap:wrap;display:flex}
.ExperienceRow-module__ookgNW__row,.ExperienceRow-module__ookgNW__header{gap:var(--spacing-xs);flex-direction:column;display:flex}.ExperienceRow-module__ookgNW__titleGroup{gap:var(--spacing-2xs);color:var(--color-ink-primary);display:flex}.ExperienceRow-module__ookgNW__dateGroup{gap:var(--spacing-2xs);align-items:center;display:flex}.ExperienceRow-module__ookgNW__dateGroup>span{text-transform:capitalize;color:var(--color-ink-faint)}.ExperienceRow-module__ookgNW__description{max-width:60ch}@media (min-width:640px){.ExperienceRow-module__ookgNW__dateGroup{text-align:right;margin-inline-start:auto}.ExperienceRow-module__ookgNW__header{flex-direction:row;align-items:baseline}}
