@font-face{font-family:Karla;font-style:normal;font-weight:300;font-display:swap;src:url(../media/ba35eb811246f14c-s.9af79fe1.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:Karla;font-style:normal;font-weight:300;font-display:swap;src:url(../media/680aa1e827d679d2-s.p.59922d9b.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:Karla;font-style:normal;font-weight:400;font-display:swap;src:url(../media/ba35eb811246f14c-s.9af79fe1.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:Karla;font-style:normal;font-weight:400;font-display:swap;src:url(../media/680aa1e827d679d2-s.p.59922d9b.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:Karla;font-style:normal;font-weight:500;font-display:swap;src:url(../media/ba35eb811246f14c-s.9af79fe1.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:Karla;font-style:normal;font-weight:500;font-display:swap;src:url(../media/680aa1e827d679d2-s.p.59922d9b.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:Karla;font-style:normal;font-weight:600;font-display:swap;src:url(../media/ba35eb811246f14c-s.9af79fe1.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:Karla;font-style:normal;font-weight:600;font-display:swap;src:url(../media/680aa1e827d679d2-s.p.59922d9b.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:Karla Fallback;src:local(Arial);ascent-override:89.55%;descent-override:24.61%;line-gap-override:0.0%;size-adjust:102.4%}.karla_b887a3fe-module__2g_bDG__className{font-family:Karla,Karla Fallback;font-style:normal}.karla_b887a3fe-module__2g_bDG__variable{--font-karla:"Karla","Karla Fallback"}
@font-face{font-family:Newsreader;font-style:normal;font-weight:400;font-display:swap;src:url(../media/150f724d70372c02-s.cfe419c8.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:Newsreader;font-style:normal;font-weight:400;font-display:swap;src:url(../media/750c737482d9de2f-s.1c29fe1a.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:Newsreader;font-style:normal;font-weight:400;font-display:swap;src:url(../media/5f402bd2d8eef81a-s.p.b72f0478.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:Newsreader;font-style:normal;font-weight:500;font-display:swap;src:url(../media/150f724d70372c02-s.cfe419c8.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:Newsreader;font-style:normal;font-weight:500;font-display:swap;src:url(../media/750c737482d9de2f-s.1c29fe1a.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:Newsreader;font-style:normal;font-weight:500;font-display:swap;src:url(../media/5f402bd2d8eef81a-s.p.b72f0478.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:Newsreader Fallback;src:local(Times New Roman);ascent-override:69.68%;descent-override:25.12%;line-gap-override:0.0%;size-adjust:105.48%}.newsreader_56a56a8b-module__XBGgGG__className{font-family:Newsreader,Newsreader Fallback;font-style:normal}.newsreader_56a56a8b-module__XBGgGG__variable{--font-newsreader:"Newsreader","Newsreader Fallback"}
html,body{background:#e9e1d6;margin:0}html{font-size:clamp(15px,1.7vh,22px)}[hidden]{display:none!important}.hm{--paper:#efebe3;--ink:#1a1917;--muted:#6c665c;--rule:#c9c1b4;--card:#f2ede3;--faint:#9a9387;--launch-bg:#faf8f08c;--ph:#fff;--grain-op:.22;--grain-card-op:.16;--grain-blend:multiply;--bg:radial-gradient(90% 75% at 30% 62%,#fffdf6 0%,#e9e1d6 50%,#c3b7a0 100%);background:var(--bg);color:var(--ink);transition:color .5s}html.dark .hm{--paper:#1c1a17;--ink:#ece5d8;--muted:#a39b8d;--rule:#4b463e;--card:#23201c;--faint:#7d766a;--launch-bg:#23201c99;--ph:#2b2824;--grain-op:.13;--grain-card-op:.1;--grain-blend:screen;--bg:radial-gradient(90% 75% at 30% 62%,#37322b 0%,#1f1c19 50%,#0c0a09 100%)}html.dark,html.dark body{background:#1f1c19}html{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.hm .theme{width:44px;height:44px;color:var(--muted);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;margin:-12px -12px -12px 0;padding:0;transition:color .4s;display:flex}.hm .theme:hover,.hm .theme:focus-visible{color:var(--ink);outline:none}.hm .theme svg{transition:transform .6s cubic-bezier(.2,.7,.2,1)}html.dark .hm .theme svg{transform:rotate(180deg)}@media (prefers-reduced-motion:reduce){.hm .theme svg{transition:none}}.hm{--sans:var(--font-karla),system-ui,sans-serif;--serif:var(--font-newsreader),Georgia,serif;--gutter:max(2.934rem,calc(50% - 29.334rem));box-sizing:border-box;min-height:max(100vh,780px);font-family:var(--sans);font-weight:300;position:relative;overflow:hidden}.hm .grain{pointer-events:none;width:100%;height:100%;opacity:var(--grain-op);mix-blend-mode:var(--grain-blend);position:fixed;inset:0}.hm .muted{color:var(--muted)}.hm .nav{top:1.867rem;left:var(--gutter);right:var(--gutter);z-index:1;justify-content:space-between;align-items:center;font-size:.934rem;font-weight:400;display:flex;position:absolute}.hm .nav-links{align-items:center;gap:1.867rem;display:flex}.hm .nav a.navl{padding:.8rem 0}.hm a.navl{color:var(--muted);text-decoration-color:#0000;transition:color .4s,text-decoration-color .5s}.hm a.navl:hover,.hm a.navl.active{color:var(--ink)}.hm a.navl:hover{text-decoration-color:currentColor}.hm a{color:inherit;text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--rule);text-decoration-color:var(--rule);transition:text-decoration-color .5s,text-underline-offset .5s}.hm a:not(.navl):not(.glyph){font-weight:500}.hm a:hover{text-underline-offset:4px;text-decoration-color:currentColor}.hm .glyph{width:2.134rem;height:2.134rem;color:var(--muted);justify-content:center;align-items:center;text-decoration:none;transition:color .4s,opacity .4s;display:flex}.hm .glyph:hover{color:var(--ink)}.hm .glyph svg{width:1.134rem;height:1.134rem}.hm .mk{background:var(--ink);width:.934rem;height:.934rem;color:var(--paper);vertical-align:1px;border-radius:3px;justify-content:center;align-items:center;margin-right:.334rem;font-family:system-ui,sans-serif;font-size:.6rem;font-weight:600;line-height:1;text-decoration:none;display:inline-flex}.hm .mk.logo{object-fit:cover;vertical-align:-.067rem;background:0 0;margin-left:.2rem}.hm .line{transition:letter-spacing .6s,opacity .6s}.hm .line:hover{letter-spacing:.01em}.hm .ln{position:relative}.hm .hang{width:1.067rem;color:var(--muted);white-space:nowrap;position:absolute;top:0;left:-1.467rem}.hm .lbl{color:var(--muted)}.hm .grp{flex-direction:column;display:flex}.hm .grp+.grp{margin-top:.934rem}.hm .grp .ln.line{padding-left:1.467rem}.hm .grp .ln.line>.hang{left:0}@keyframes hm-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.hm .fade{animation:1.4s cubic-bezier(.2,.7,.2,1) both hm-in}.hm .f1{animation-delay:.1s}.hm .f2{animation-delay:.3s}.hm .f3{animation-delay:.5s}.hm .f4{animation-delay:.7s}.hm .f5{animation-delay:.9s}.hm .f6{animation-delay:1.1s}.hm .col{left:var(--gutter);flex-direction:column;font-size:1rem;line-height:1.7;display:flex;position:absolute}.hm .col-home{width:42.667rem;bottom:8.667rem}.hm .col-projects{width:41.334rem;bottom:9.334rem}.hm .name-row{align-items:baseline;gap:.8rem;margin-bottom:.934rem;display:flex}.hm .name-btn{font:inherit;font-family:var(--serif);letter-spacing:-.01em;color:inherit;cursor:pointer;min-height:44px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-color:var(--rule);text-decoration-color:var(--rule);text-underline-offset:.4rem;background:0 0;border:0;padding:0;font-size:1.734rem;font-weight:500}.hm .secret{animation:.9s cubic-bezier(.2,.7,.2,1) both hm-in}.hm .glyphs{gap:.267rem;margin-top:1.334rem;margin-left:-.467rem;display:flex}.hm .plist{margin-top:.934rem}.hm .plist .proj{transition:opacity .6s}.hm .plist:hover .proj{opacity:.5}.hm .plist .proj:hover{opacity:1}.hm a.ttl{-webkit-text-decoration-color:var(--rule);text-decoration-color:var(--rule);text-decoration-thickness:1px;transition:text-decoration-color .5s,text-decoration-thickness .4s,text-underline-offset .5s}.hm .proj:hover a.ttl{text-underline-offset:4px;text-decoration-color:currentColor;text-decoration-thickness:2px}.hm .go{color:var(--muted);opacity:0;margin-left:.534rem;transition:opacity .5s,transform .6s cubic-bezier(.2,.7,.2,1);display:inline-block;transform:translate(-4px)}.hm .proj:hover .go{opacity:1;transform:none}.hm .proj .ln{padding-left:1.467rem}.hm .proj .ln>.hang{left:0}.hm .proj .tech{color:var(--faint);font-size:.834rem}.hm .gallery-title{left:var(--gutter);padding-left:1.467rem;font-size:1rem;line-height:1.7;position:absolute;top:10rem}.hm .gallery-title>.hang{left:0}.hm .gallery-hint{color:var(--muted);margin-left:.534rem;font-size:.8rem}.hm .strip{height:14.667rem;position:absolute;left:0;right:0;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000 0,#000 12% 88%,#0000 100%);mask-image:linear-gradient(90deg,#0000 0,#000 12% 88%,#0000 100%)}.hm .strip-1{top:14.667rem}.hm .strip-2{top:30.667rem}.hm .track{width:max-content;animation:drift var(--drift,600s)linear infinite;gap:1.334rem;display:flex}.hm .track.rev{animation-direction:reverse}.hm .strip:hover .track{animation-play-state:paused}@keyframes drift{0%{transform:translate(0)}to{transform:translate(calc(-50% - .667rem))}}.hm .ph{background:var(--ph);object-fit:cover;border-radius:.934rem;flex:none;width:14.667rem;height:14.667rem;transition:transform .6s cubic-bezier(.2,.7,.2,1),box-shadow .6s;box-shadow:0 0 0 1px #3c2d190f}.hm .ph:hover{transform:translateY(-3px);box-shadow:0 0 0 1px #3c2d191a,0 10px 24px #3c2d1914}.hm .launch{z-index:5;background:var(--launch-bg);width:44px;height:44px;color:var(--ink);border:1px solid var(--rule);font:500 15px/1 var(--sans);letter-spacing:0;cursor:pointer;border-radius:10px;justify-content:center;align-items:center;padding:0;transition:letter-spacing .45s,border-color .45s,opacity .45s;display:flex;position:fixed;bottom:32px;right:32px}.hm .launch:hover,.hm .launch:focus-visible{letter-spacing:.08em;border-color:var(--ink);outline:none}.hm .launch.is-open{opacity:.55}@keyframes cb-blink{0%,45%{opacity:1}55%,to{opacity:0}}.hm .caret{animation:1.8s ease-in-out infinite cb-blink;display:inline-block}.hm .chat{z-index:6;box-sizing:border-box;background:var(--card);width:340px;height:392px;color:var(--ink);border:1px solid var(--rule);font:300 14px/1.6 var(--sans);transform-origin:100% 100%;opacity:0;visibility:hidden;pointer-events:none;border-radius:12px;flex-direction:column;transition:opacity .28s cubic-bezier(.22,.61,.36,1),transform .28s cubic-bezier(.22,.61,.36,1),visibility 0s linear .28s;display:flex;position:fixed;bottom:88px;right:32px;overflow:hidden;transform:translateY(6px)scale(.97);box-shadow:0 10px 28px #3c2d190f}.hm .chat.open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .28s cubic-bezier(.22,.61,.36,1),transform .28s cubic-bezier(.22,.61,.36,1),visibility;transform:none}.hm .chat-grain{pointer-events:none;width:100%;height:100%;opacity:var(--grain-card-op);mix-blend-mode:var(--grain-blend);position:absolute;inset:0}.hm .chat-head{border-bottom:1px solid var(--rule);height:40px;color:var(--muted);justify-content:space-between;align-items:center;padding:0 6px 0 14px;display:flex;position:relative}.hm .chat-x{font:inherit;color:var(--muted);cursor:pointer;text-underline-offset:3px;background:0 0;border:0;min-height:36px;padding:0 8px;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;transition:color .35s,text-decoration-color .35s}.hm .chat-x:hover,.hm .chat-x:focus-visible{color:var(--ink);outline:none;text-decoration-color:currentColor}.hm .chat-log{scrollbar-width:thin;flex-direction:column;flex:auto;gap:8px;padding:12px 14px;display:flex;position:relative;overflow-y:auto}.hm .chat-examples{flex-direction:column;gap:2px;display:flex}.hm .chat-examples>.muted{margin-bottom:4px}.hm .msg{overflow-wrap:anywhere;padding-left:16px;animation:.5s cubic-bezier(.2,.7,.2,1) both hm-in;position:relative}.hm .msg .pfx{color:var(--muted);position:absolute;top:0;left:0}.hm .msg.bot{padding-left:0}.hm .msg .who{color:var(--muted);margin-right:6px}@keyframes cb-think{0%,80%,to{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}.hm .thinking{vertical-align:-1px;align-items:center;gap:4px;height:1em;display:inline-flex}.hm .thinking span{background:var(--ink);border-radius:50%;width:4px;height:4px;animation:1.2s cubic-bezier(.45,0,.55,1) infinite cb-think}.hm .thinking span:nth-child(2){animation-delay:.15s}.hm .thinking span:nth-child(3){animation-delay:.3s}.hm .ex{font:inherit;color:var(--ink);text-align:left;cursor:pointer;text-decoration:underline;-webkit-text-decoration-color:var(--rule);text-decoration-color:var(--rule);text-underline-offset:3px;background:0 0;border:0;padding:2px 0;transition:text-decoration-color .4s,letter-spacing .4s;display:block}.hm .ex:hover,.hm .ex:focus-visible{letter-spacing:.01em;outline:none;text-decoration-color:currentColor}.hm .chat-in{border-top:1px solid var(--rule);align-items:center;gap:8px;height:46px;padding:0 8px 0 14px;display:flex;position:relative}.hm .chat-input{min-width:0;height:44px;font:inherit;color:var(--ink);caret-color:var(--ink);background:0 0;border:0;outline:none;flex:auto;padding:0}.hm .chat-input::placeholder{color:var(--faint)}.hm .send{font:inherit;color:var(--ink);cursor:pointer;opacity:0;background:0 0;border:0;width:32px;height:32px;transition:opacity .35s,transform .35s;transform:translate(-3px)}.hm .send.on{opacity:.8;transform:none}.hm .send.on:hover{opacity:1}.hm .pointer{z-index:4;width:64px;height:40px;color:var(--muted);pointer-events:none;transition:opacity .35s;animation:3.2s ease-in-out infinite nudge;position:fixed;bottom:50px;right:84px}.hm .pointer.is-open{opacity:0}@keyframes nudge{0%,to{transform:translate(0)}50%{transform:translate(3px,2px)}}@media (prefers-reduced-motion:reduce){.hm .chat,.hm .chat.open{transition:opacity 10ms linear,visibility;transform:none}.hm .caret,.hm .msg,.hm .pointer,.hm .track{animation:none}.hm .thinking span{opacity:.6;animation:none}.hm .launch,.hm .send{transition:none}}@media (max-width:720px){.hm{min-height:100vh;overflow-x:hidden}.hm .nav{right:20px}.hm .col{width:auto;margin:120px 20px 110px var(--gutter);position:static}.hm .strip .ph{width:160px;height:160px}.hm .strip{height:160px}.hm .strip-2{top:400px}.hm .launch{bottom:16px;right:16px}.hm .pointer{display:none}.hm .chat{width:auto;height:min(392px,70vh);bottom:72px;left:12px;right:12px}}
