@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/f639721981034f88-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/9766a7e9e2e0ad5a-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/b66cf8e69499582a-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/aa016aab0e6d1295-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/22a5144ee8d83bca-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Geist Fallback;src:local("Arial");ascent-override:95.94%;descent-override:28.16%;line-gap-override:0.00%;size-adjust:104.76%}.__className_8eaea4{font-family:Geist,Geist Fallback;font-style:normal}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(/_next/static/media/e1aab0933260df4d-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(/_next/static/media/b7387a63dd068245-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Space Grotesk;font-style:normal;font-weight:300 700;font-display:swap;src:url(/_next/static/media/36966cca54120369-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,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.00%;size-adjust:109.69%}.__className_c219ed{font-family:Space Grotesk,Space Grotesk Fallback;font-style:normal}.__variable_c219ed{--font-display:"Space Grotesk","Space Grotesk Fallback"}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/013b72fa676f92e0-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/b9408752a0c24fb9-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/65f03d54ccadf4a8-s.woff2) format("woff2");unicode-range:u+2000-2001,u+2004-2008,u+200a,u+23b8-23bd,u+2500-259f}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/e038a29029a234f2-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/2b5b02fc7e511755-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/7d4881bb7e1bf84d-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,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 Fallback;src:local("Arial");ascent-override:74.67%;descent-override:21.92%;line-gap-override:0.00%;size-adjust:134.59%}.__className_8c25df{font-family:Geist Mono,Geist Mono Fallback;font-style:normal}.__variable_8c25df{--font-mono:"Geist Mono","Geist Mono Fallback"}.portfolio{--bg:#0f0f0f;--surface:#161616;--surface-deep:#0b0b0b;--surface-header:rgba(15,15,15,0.82);--ink:#f0efed;--ink-2:rgba(240,239,237,0.74);--ink-3:rgba(240,239,237,0.54);--ink-4:rgba(240,239,237,0.4);--ink-5:rgba(240,239,237,0.25);--line:rgba(255,255,255,0.08);--line-strong:rgba(255,255,255,0.16);--signal:#ff5a1f;--warn:rgba(240,239,237,0.85);--pv-ink:rgba(240,239,237,0.78);--pv-dim:rgba(255,255,255,0.12);--pv-muted:rgba(255,255,255,0.42);background:var(--bg);color-scheme:dark}.portfolio,.portfolio .tint{--signal-soft:color-mix(in srgb,var(--signal) 7%,transparent);--signal-edge:color-mix(in srgb,var(--signal) 55%,transparent)}.portfolio .font-display{font-family:var(--font-display),sans-serif}.portfolio .font-mono,.pv{font-family:var(--font-mono),ui-monospace,monospace}.pv{color:var(--pv-ink)}.pv *{transform-box:fill-box;transform-origin:center}.pv .dim{stroke:var(--pv-dim)}.pv .sig{stroke:var(--signal)}.pv .lbl{fill:var(--pv-muted);stroke:none;font-size:10px;letter-spacing:.08em}.pv .acc,.pv .hl{fill:var(--signal);stroke:none}.pv .warn{fill:var(--warn);stroke:none}.pv .warn-edge{stroke:var(--warn)}.pv .strong{fill:var(--ink)}.pv .draw{stroke-dasharray:1;stroke-dashoffset:1}.pv .blip,.pv .pop{opacity:0}.pv .grow{transform:scaleX(0);transform-origin:left}.pv .ripple{opacity:0}.pv .blip,.pv .draw,.pv .grow,.pv .move,.pv .out,.pv .pop,.pv .ripple{animation-duration:6s;animation-delay:var(--d,0s);animation-iteration-count:infinite;animation-fill-mode:both;animation-timing-function:cubic-bezier(.4,0,.2,1)}.pv .draw{animation-name:var(--pv-draw,none)}.pv .pop{animation-name:var(--pv-pop,none)}.pv .out{animation-name:var(--pv-out,none)}.pv .out.gone,.pv text.out{animation-name:var(--pv-gone,none)}.pv .move{animation-name:var(--pv-move,none)}.pv .blip{animation-name:var(--pv-blip,none)}.pv .grow{animation-name:var(--pv-grow,none)}.pv .ripple{animation-name:var(--pv-ripple,none);animation-duration:1.8s;animation-timing-function:ease-out}.group:hover .pv,.pv.live{--pv-draw:pv-draw;--pv-pop:pv-pop;--pv-out:pv-out;--pv-gone:pv-gone;--pv-move:pv-move;--pv-blip:pv-blip;--pv-grow:pv-grow;--pv-ripple:pv-ripple}@media (hover:none){.pv{--pv-draw:pv-draw;--pv-pop:pv-pop;--pv-out:pv-out;--pv-gone:pv-gone;--pv-move:pv-move;--pv-blip:pv-blip;--pv-grow:pv-grow;--pv-ripple:pv-ripple}}@media (prefers-reduced-motion:reduce){.pv *{animation:none!important}.pv .draw{stroke-dashoffset:0}.pv .pop{opacity:1}.pv .out{opacity:.1}.pv .out.gone,.pv text.out{opacity:0}.pv .move{transform:translate(var(--tx),var(--ty))}.pv .grow{transform:none}}@keyframes pv-draw{0%{stroke-dashoffset:1}30%,88%{stroke-dashoffset:0;opacity:1}to{stroke-dashoffset:0;opacity:0}}@keyframes pv-pop{0%{opacity:0;transform:scale(.6)}8%,88%{opacity:1;transform:none}to{opacity:0}}@keyframes pv-out{0%{opacity:1}8%,88%{opacity:.08}to{opacity:1}}@keyframes pv-gone{0%{opacity:1}8%,88%{opacity:0}to{opacity:1}}@keyframes pv-move{0%{transform:none}30%,88%{transform:translate(var(--tx),var(--ty))}to{transform:none}}@keyframes pv-blip{0%,to{opacity:0}22%,6%{opacity:1}28%{opacity:0}}@keyframes pv-grow{0%{transform:scaleX(0)}20%,88%{transform:scaleX(1);opacity:1}to{transform:scaleX(1);opacity:0}}@keyframes pv-ripple{0%{opacity:.9;transform:scale(.15)}to{opacity:0;transform:scale(1)}}@keyframes fade-up{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}.fade-up{animation:fade-up .5s ease-out both}@media (prefers-reduced-motion:reduce){.fade-up{animation:none}}.project-dialog{width:min(56rem,100% - 2rem);max-height:calc(100dvh - 4rem);margin:auto;overflow-y:auto;overscroll-behavior:contain;border:1px solid var(--line-strong);border-radius:16px;background:var(--surface);color:var(--ink)}.project-dialog::backdrop{background:rgba(0,0,0,.7);backdrop-filter:blur(3px)}.project-dialog[open]{animation:dialog-in .22s ease-out}.project-dialog[open]::backdrop{animation:backdrop-in .22s ease-out}html:has(.project-dialog[open]){overflow:hidden}@media (max-width:640px){.project-dialog{width:100%;max-width:100%;height:100dvh;max-height:100dvh;border:0;border-radius:0}}@keyframes dialog-in{0%{opacity:0;transform:translateY(12px) scale(.98)}}@keyframes backdrop-in{0%{opacity:0}}@media (prefers-reduced-motion:reduce){.project-dialog[open],.project-dialog[open]::backdrop{animation:none}}