@font-face{font-family:DM Mono;font-style:italic;font-weight:300;font-display:swap;src:url(../media/ce8c9d7a56f920bc-s.ce8d954f.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:DM Mono;font-style:italic;font-weight:300;font-display:swap;src:url(../media/475197ef9cf73ba9-s.p.035d6fd3.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:DM Mono;font-style:italic;font-weight:400;font-display:swap;src:url(../media/587b2df5ecc06205-s.fb36229b.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:DM Mono;font-style:italic;font-weight:400;font-display:swap;src:url(../media/bdef460321aa07a0-s.p.c4530df2.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:DM Mono;font-style:italic;font-weight:500;font-display:swap;src:url(../media/f82326de2f9f680d-s.7357be16.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:DM Mono;font-style:italic;font-weight:500;font-display:swap;src:url(../media/f9fc8f485db6b190-s.p.01f2a084.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:DM Mono;font-style:normal;font-weight:300;font-display:swap;src:url(../media/ba8e772932784a28-s.7bb0ada4.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:DM Mono;font-style:normal;font-weight:300;font-display:swap;src:url(../media/7546fe8f902b88b8-s.p.5f7c9333.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:DM Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/b12e986493c137cf-s.4b5f6188.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:DM Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/36363bfb06833f56-s.p.d8302362.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:DM Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/b2fa3ef4ca165ab4-s.e316a4a9.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:DM Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/a73419dd2ba2d841-s.p.f2813c2a.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:DM Mono Fallback;src:local(Arial);ascent-override:73.71%;descent-override:23.03%;line-gap-override:0.0%;size-adjust:134.59%}.dm_mono_4db40bb5-module__lHzZRG__className{font-family:DM Mono,DM Mono Fallback}.dm_mono_4db40bb5-module__lHzZRG__variable{--font-mono:"DM Mono","DM Mono Fallback"}
@font-face{font-family:DM Sans;font-style:normal;font-weight:300;font-display:swap;src:url(../media/c3cb240f9c892514-s.d8e4bce2.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:DM Sans;font-style:normal;font-weight:300;font-display:swap;src:url(../media/5c285b27cdda1fe8-s.p.a62025f2.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:DM Sans;font-style:normal;font-weight:400;font-display:swap;src:url(../media/c3cb240f9c892514-s.d8e4bce2.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:DM Sans;font-style:normal;font-weight:400;font-display:swap;src:url(../media/5c285b27cdda1fe8-s.p.a62025f2.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:DM Sans;font-style:normal;font-weight:500;font-display:swap;src:url(../media/c3cb240f9c892514-s.d8e4bce2.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:DM Sans;font-style:normal;font-weight:500;font-display:swap;src:url(../media/5c285b27cdda1fe8-s.p.a62025f2.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:DM Sans Fallback;src:local(Arial);ascent-override:94.9%;descent-override:29.66%;line-gap-override:0.0%;size-adjust:104.53%}.dm_sans_7c148f7a-module__FWTbya__className{font-family:DM Sans,DM Sans Fallback;font-style:normal}.dm_sans_7c148f7a-module__FWTbya__variable{--font-sans:"DM Sans","DM Sans Fallback"}
*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#f9f8f6;--bg2:#f2f1ee;--fg:#1a1916;--fg2:#5a5750;--fg3:#9a9690;--accent:#225a39;--accent-bg:#225a3914;--border:#1a191617;--card:#ffffff8c;--radius:6px}@supports (color:lab(0% 0 0)){:root{--accent:lab(33.7628% -25.4361 13.1055);--accent-bg:lab(33.7628% -25.4361 13.1055/.08)}}html.dark{--bg:#111110;--bg2:#1c1b19;--fg:#eae8e4;--fg2:#9a9690;--fg3:#5a5750;--accent:#57966e;--accent-bg:#57966e1a;--border:#ffffff12;--card:#ffffff08}@supports (color:lab(0% 0 0)){html.dark{--accent:lab(57.1052% -28.3757 14.59);--accent-bg:lab(57.1052% -28.3757 14.59/.1)}}body.variant-dark{--bg:#0e0e0d;--bg2:#181716;--fg:#edeae4;--fg2:#8a8782;--fg3:#484542;--accent:#59a174;--accent-bg:#59a1741a;--border:#ffffff12;--card:#ffffff06}@supports (color:lab(0% 0 0)){body.variant-dark{--accent:lab(60.7142% -31.5774 16.2422);--accent-bg:lab(60.7142% -31.5774 16.2422/.1)}}body.variant-warm{--bg:#fcf8f1;--bg2:#f3ede2;--fg:#2a2018;--fg2:#78695a;--fg3:#afa090;--accent:#7d4a07;--accent-bg:#7d4a0714;--border:#2a201817;--card:#ffffffa6}@supports (color:lab(0% 0 0)){body.variant-warm{--accent:lab(37.0334% 18.8905 43.8836);--accent-bg:lab(37.0334% 18.8905 43.8836/.08)}}body.variant-mono{--bg:#f9f9f9;--bg2:#f1f1f1;--fg:#111;--fg2:#555;--fg3:#999;--accent:#111;--accent-bg:#1111110d;--border:#00000017;--card:#00000005}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased}body{background:var(--bg);color:var(--fg);min-height:100vh;font-size:15px;line-height:1.65;transition:background .35s,color .35s}h1,h2,h3,h4,h5,h6{font-weight:inherit;font-size:inherit;line-height:inherit;display:block}a{color:inherit;text-decoration:none}#cursor-glow{pointer-events:none;background:radial-gradient(circle,var(--accent-bg)0%,transparent 68%);z-index:0;opacity:0;will-change:transform;border-radius:50%;width:380px;height:380px;transition:opacity .5s;position:fixed;top:0;left:0;transform:translate(-50%,-50%)}#grid-bg{z-index:0;pointer-events:none;background-image:linear-gradient(var(--border)1px,transparent 1px),linear-gradient(90deg,var(--border)1px,transparent 1px);opacity:0;background-size:52px 52px;animation:1.2s .3s forwards gridFadeIn;position:fixed;inset:0;-webkit-mask-image:radial-gradient(75% 75% at 50% 40%,#000 20%,#0000 100%);mask-image:radial-gradient(75% 75% at 50% 40%,#000 20%,#0000 100%)}@keyframes gridFadeIn{to{opacity:.6}}.page-wrap{z-index:1;max-width:740px;margin:0 auto;padding:0 36px;position:relative}@media (max-width:560px){.page-wrap{padding:0 20px}}header{background:var(--bg);z-index:10;justify-content:space-between;align-items:center;padding:26px 0 22px;transition:background .35s;display:flex;position:sticky;top:0}header:after{content:"";background:var(--border);opacity:0;height:1px;transition:opacity .3s;position:absolute;bottom:0;left:-36px;right:-36px}header.scrolled:after{opacity:1}.logo{color:var(--fg3);letter-spacing:.05em;font-size:13px;transition:color .2s}.logo:hover{color:var(--fg)}.header-right{align-items:center;gap:22px;display:flex}.nav-link{color:var(--fg3);letter-spacing:.05em;font-size:12px;transition:color .2s;position:relative}.nav-link:after{content:"";background:var(--accent);transform-origin:0;height:1px;transition:transform .2s;position:absolute;bottom:-2px;left:0;right:0;transform:scaleX(0)}.nav-link:hover,.nav-link.active{color:var(--fg)}.nav-link.active:after,.nav-link:hover:after{transform:scaleX(1)}.theme-btn{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;width:32px;height:32px;color:var(--fg3);background:0 0;flex-shrink:0;justify-content:center;align-items:center;transition:border-color .2s,color .2s,background .2s;display:flex}.theme-btn:hover{color:var(--fg);border-color:var(--fg3);background:var(--bg2)}.hero{padding:80px 0 72px}.hero-inner{align-items:flex-start;gap:28px;display:flex}@media (max-width:480px){.hero-inner{flex-direction:column;gap:20px}}.hero-photo{-o-object-fit:cover;object-fit:cover;-o-object-position:center top;object-position:center top;border:1px solid var(--border);opacity:0;border-radius:10px;flex-shrink:0;width:96px;height:96px;animation:.7s cubic-bezier(.25,.46,.45,.94) .1s forwards fadeUp;transform:translateY(8px)}.hero-text{flex:1;min-width:0}.hero-label{letter-spacing:.14em;color:var(--accent);text-transform:uppercase;opacity:0;margin-bottom:10px;font-size:10.5px;animation:.6s .18s forwards fadeUp}.hero-name{color:var(--fg);letter-spacing:-.025em;opacity:0;margin-bottom:14px;font-size:clamp(30px,5vw,46px);font-weight:500;line-height:1.08;animation:.7s .25s forwards fadeUp}.cursor-blink{background:var(--accent);vertical-align:middle;border-radius:1px;width:2.5px;height:.85em;margin-left:3px;animation:1.1s step-end infinite blink;display:inline-block}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.hero-bio{color:var(--fg2);opacity:0;max-width:500px;font-size:14.5px;line-height:1.72;animation:.7s .32s forwards fadeUp}.hero-bio strong{color:var(--fg);font-weight:500}.hero-bio a{color:var(--fg);text-underline-offset:3px;text-decoration:underline;-webkit-text-decoration-color:var(--border);text-decoration-color:var(--border);transition:text-decoration-color .2s}.hero-bio a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.hero-meta{color:var(--fg3);letter-spacing:.05em;opacity:0;margin-top:8px;font-size:10.5px;animation:.6s .38s forwards fadeUp}.hero-actions{opacity:0;flex-wrap:wrap;align-items:center;gap:10px;margin-top:26px;animation:.6s .44s forwards fadeUp;display:flex}.btn-primary{background:var(--fg);color:var(--bg);letter-spacing:.04em;border-radius:var(--radius);border:1px solid var(--fg);cursor:pointer;align-items:center;gap:7px;padding:9px 18px;font-size:11.5px;transition:background .2s,border-color .2s,transform .15s;display:inline-flex}.btn-primary:hover{background:var(--accent);border-color:var(--accent);color:#fff;transform:translateY(-1px)}.btn-ghost{color:var(--fg2);letter-spacing:.04em;border-radius:var(--radius);border:1px solid var(--border);cursor:pointer;background:0 0;align-items:center;gap:7px;padding:9px 18px;font-size:11.5px;transition:border-color .2s,color .2s,transform .15s;display:inline-flex}.btn-ghost:hover{border-color:var(--fg3);color:var(--fg);transform:translateY(-1px)}.social-row{opacity:0;flex-wrap:wrap;gap:6px;margin-top:36px;animation:.6s .54s forwards fadeUp;display:flex}.social-chip{border:1px solid var(--border);border-radius:var(--radius);color:var(--fg3);align-items:center;gap:6px;padding:5px 12px;font-size:11px;transition:border-color .2s,color .2s,background .2s;display:inline-flex}.social-chip:hover{border-color:var(--accent);color:var(--fg);background:var(--accent-bg)}.social-chip svg{flex-shrink:0}.divider{background:var(--border);opacity:0;height:1px;animation:.5s .7s forwards fadeIn}.content-section{padding:60px 0}.section-label{letter-spacing:.14em;color:var(--accent);text-transform:uppercase;margin-bottom:6px;font-size:10.5px}.section-title{color:var(--fg);letter-spacing:-.015em;margin-bottom:28px;font-size:21px;font-weight:500;line-height:1.2}.about-body{color:var(--fg2);max-width:580px;font-size:14.5px;line-height:1.82}.about-body p+p{margin-top:14px}.about-body strong{color:var(--fg);font-weight:500}.about-body a{color:var(--fg);text-underline-offset:3px;text-decoration:underline;-webkit-text-decoration-color:var(--border);text-decoration-color:var(--border);transition:text-decoration-color .2s}.about-body a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.skills-grid{grid-template-columns:1fr 1fr;gap:14px;display:grid}@media (max-width:520px){.skills-grid{grid-template-columns:1fr}}.skill-card{background:var(--card);border:1px solid var(--border);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:8px;padding:22px;transition:border-color .22s,transform .22s,box-shadow .22s}.skill-card:hover{border-color:var(--accent);transform:translateY(-2px);box-shadow:0 6px 24px #0000000f}html.dark .skill-card:hover{box-shadow:0 6px 24px #0000004d}.skill-card-label{letter-spacing:.12em;text-transform:uppercase;color:var(--accent);margin-bottom:10px;font-size:10px}.skill-card-title{color:var(--fg);letter-spacing:-.01em;margin-bottom:14px;font-size:14px;font-weight:500}.skill-list{flex-direction:column;gap:7px;margin:0;padding:0;list-style:none;display:flex}.skill-list li{color:var(--fg2);align-items:center;gap:9px;font-size:12.5px;line-height:1.4;display:flex}.skill-list li:before{content:"";background:var(--accent);border-radius:50%;flex-shrink:0;width:3px;height:3px;display:block}.stack-row{flex-wrap:wrap;gap:7px;margin-top:28px;display:flex}.stack-badge{background:var(--accent-bg);border-radius:var(--radius);color:var(--accent);letter-spacing:.04em;cursor:default;border:1px solid #0000;align-items:center;gap:5px;padding:4px 11px;font-size:10.5px;transition:border-color .2s;display:inline-flex}.stack-badge:hover{border-color:var(--accent)}a.stack-badge{cursor:pointer}.cta-box{border:1px solid var(--border);background:var(--card);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:10px;flex-direction:column;gap:20px;padding:44px 40px;transition:border-color .2s;display:flex}.cta-box:hover{border-color:#1a191629}html.dark .cta-box:hover{border-color:#ffffff1f}@media (max-width:520px){.cta-box{padding:30px 22px}}.cta-title{color:var(--fg);letter-spacing:-.015em;font-size:22px;font-weight:500;line-height:1.25}.cta-body{color:var(--fg2);max-width:420px;font-size:14px;line-height:1.72}.cta-actions{flex-wrap:wrap;gap:10px;display:flex}footer{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px;padding:24px 0 32px;display:flex}@media (max-width:480px){footer{flex-direction:column;align-items:flex-start;gap:4px}}.footer-copy{color:var(--fg3);letter-spacing:.04em;font-size:10.5px}.footer-quote{color:var(--fg3);letter-spacing:.02em;font-size:10.5px;font-style:italic}.scroll-progress{background:var(--accent);z-index:100;opacity:.7;width:0%;height:2px;transition:width .1s linear;position:fixed;top:0;left:0}@keyframes fadeUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{to{opacity:1}}.reveal{opacity:0;transition:opacity .6s cubic-bezier(.25,.46,.45,.94),transform .6s cubic-bezier(.25,.46,.45,.94);transform:translateY(18px)}.reveal.visible{opacity:1;transform:translateY(0)}.reveal-stagger>*{opacity:0;transition:opacity .5s,transform .5s;transform:translateY(14px)}.reveal-stagger.visible>:first-child{opacity:1;transition-delay:50ms;transform:none}.reveal-stagger.visible>:nth-child(2){opacity:1;transition-delay:.12s;transform:none}.reveal-stagger.visible>:nth-child(3){opacity:1;transition-delay:.19s;transform:none}.reveal-stagger.visible>:nth-child(4){opacity:1;transition-delay:.26s;transform:none}
