@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/ba9851c3c22cd980-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:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/21350d82a1f187e9-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/c5fe6dc8356a8c31-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/19cfc7226ec3afaa-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/df0a9ae256c0569c-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:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/8e9860b6e62d6359-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-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/e4af272ccee01ff0-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:Inter Fallback;src:local("Arial");ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.00%;size-adjust:107.12%}.__className_f367f3{font-family:Inter,Inter Fallback;font-style:normal}

/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */.visible{visibility:visible}.rotate-180{rotate:180deg}.resize{resize:both}.scroll-smooth{scroll-behavior:smooth}@layer base{:root{--font-size-min:16;--font-size-max:20;--font-ratio-min:1.2;--font-ratio-max:1.33;--font-width-min:375;--font-width-max:1500;--gap:8px;--base:clamp(2rem,8cqi,80px);--easing:linear(0 0%,.1538 4.09%,.2926 8.29%,.4173 12.63%,.5282 17.12%,.6255 21.77%,.7099 26.61%,.782 31.67%,.8425 37%,.8887 42.23%,.9257 47.79%,.9543 53.78%,.9752 60.32%,.9883 67.11%,.9961 75%,1 100%);--speed:.6s}html{color-scheme:light dark;scroll-behavior:smooth}*{box-sizing:border-box}body{color:light-dark(#000,#fff);background:light-dark(#fff,#000);margin:0;font-family:SF Pro Text,SF Pro Icons,AOS Icons,Helvetica Neue,Helvetica,Arial,sans-serif,system-ui;line-height:1.6}.background-grid{--size:45px;--line:color-mix(in hsl,canvasText,transparent 70%);background:linear-gradient(90deg,var(--line)1px,transparent 1px var(--size))50% 50%/var(--size)var(--size),linear-gradient(var(--line)1px,transparent 1px var(--size))50% 50%/var(--size)var(--size);pointer-events:none;z-index:-1;position:fixed;inset:0;-webkit-mask:linear-gradient(-20deg,#0000 50%,#fff);mask:linear-gradient(-20deg,#0000 50%,#fff)}.portfolio-container{position:relative}.portfolio-nav{z-index:100;background:color-mix(in hsl,canvas,transparent 10%);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid color-mix(in hsl,canvasText,transparent 90%);opacity:0;transition:all var(--speed)var(--easing);justify-content:space-between;align-items:center;padding:1rem 2rem;display:flex;position:fixed;top:0;left:0;right:0;transform:translateY(-100%)}.portfolio-nav.visible{opacity:1;transform:translateY(0)}.nav-home{color:inherit;cursor:pointer;background:0 0;border:none;font-size:1.25rem;font-weight:600;transition:opacity .2s}.nav-home:hover{opacity:.8}.nav-links{gap:2rem;display:flex}.nav-links button{color:inherit;cursor:pointer;opacity:0;background:0 0;border:none;font-size:1rem;transition:opacity .2s;animation:fadeInNav .5s forwards}.nav-links button:first-child{animation-delay:.1s}.nav-links button:nth-child(2){animation-delay:.2s}.nav-links button:nth-child(3){animation-delay:.3s}.nav-links button:nth-child(4){animation-delay:.4s}.nav-links button:hover{opacity:.7}@keyframes fadeInNav{to{opacity:1}}.hero-section{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:100vh;padding:2rem;display:flex}.hero-title{--font-size-min:22;--font-level:4.25;--fluid-min:calc(var(--font-size-min)*pow(var(--font-ratio-min),var(--font-level,0)));--fluid-max:calc(var(--font-size-max)*pow(var(--font-ratio-max),var(--font-level,0)));--fluid-preferred:calc((var(--fluid-max) - var(--fluid-min))/(var(--font-width-max) - var(--font-width-min)));--fluid-type:clamp((var(--fluid-min)/16)*1rem,((var(--fluid-min)/16)*1rem) - (((var(--fluid-preferred)*var(--font-width-min))/16)*1rem) + (var(--fluid-preferred)*var(--variable-unit,100vi)),(var(--fluid-max)/16)*1rem);font-size:var(--fluid-type);margin:0 0 2rem;font-weight:700}.hero-description{opacity:.8;max-width:74ch;margin:0 0 3rem;font-family:monospace;font-size:1.1rem;line-height:1.5}.hero-cta{background:linear-gradient(135deg,color-mix(in hsl,canvasText,transparent 85%),color-mix(in hsl,canvasText,transparent 90%));border:1px solid color-mix(in hsl,canvasText,transparent 70%);color:inherit;transition:all .3s var(--easing);cursor:pointer;box-shadow:0 4px 12px color-mix(in hsl,canvasText,transparent 90%);border-radius:12px;align-items:center;gap:.75rem;padding:1.25rem 2.5rem;font-size:1.1rem;font-weight:600;text-decoration:none;display:inline-flex;position:relative;overflow:hidden}.hero-cta:before{content:"";background:linear-gradient(90deg,transparent,color-mix(in hsl,canvasText,transparent 85%),transparent);width:100%;height:100%;transition:left .5s;position:absolute;top:0;left:-100%}.hero-cta:hover:before{left:100%}.hero-cta:hover{background:linear-gradient(135deg,color-mix(in hsl,canvasText,transparent 80%),color-mix(in hsl,canvasText,transparent 85%));box-shadow:0 8px 24px color-mix(in hsl,canvasText,transparent 80%);border-color:color-mix(in hsl,canvasText,transparent 60%);transform:translateY(-3px)}.hero-cta span,.hero-cta svg{z-index:1;position:relative}.hero-cta svg{transition:transform .3s}.hero-cta:hover svg{transform:translateY(2px)}.content-section{max-width:1200px;margin:0 auto;padding:6rem 2rem}.section-content h2{text-align:center;margin:0 0 1rem;font-size:2.5rem}.section-subtitle{text-align:center;opacity:.8;max-width:60ch;margin:0 auto 4rem;font-size:1.1rem}.about-grid{grid-template-columns:2fr 1fr;align-items:center;gap:4rem;margin-top:3rem;display:grid}.about-text p{margin:0 0 1.5rem;font-size:1.1rem;line-height:1.7}.about-text h3{margin:2rem 0 1rem;font-size:1.3rem}.skill-tags{flex-wrap:wrap;gap:.5rem;display:flex}.skill-tag{background:color-mix(in hsl,canvasText,transparent 90%);border-radius:20px;padding:.5rem 1rem;font-size:.9rem;font-weight:500}.about-image .profile-image,.about-image img{filter:grayscale(.3);border-radius:12px;width:100%;max-width:400px}.interactive-grid{gap:var(--gap);width:820px;max-width:calc(100% - 4rem);height:clamp(300px,40dvh,474px);transition:grid-template-columns var(--speed)var(--easing);--article-width:0;grid-template-columns:10fr 1fr 1fr 1fr;margin:0 auto;padding:0;list-style-type:none;display:grid;container-type:inline-size}.interactive-grid li{min-width:var(--base);border:1px solid color-mix(in hsl,canvas,canvasText 50%);background:light-dark(#fff,#000);border-radius:8px;position:relative;overflow:hidden}.interactive-grid li :is(svg,h3){opacity:.6;transition:opacity calc(var(--speed)*1.2)var(--easing)}.interactive-grid li :is(a,p,.tech-stack,.blog-meta,.project-links){opacity:0;transition:opacity calc(var(--speed)*1.2)var(--easing);width:fit-content}.interactive-grid li .blog-image,.interactive-grid li .project-image,.interactive-grid li img{filter:grayscale()brightness(1.5);transition-property:filter,scale;transition-duration:calc(var(--speed)*1.2);transition-timing-function:var(--easing);scale:1.1}.interactive-grid [data-active=true] :is(a,p,h3,svg,.tech-stack,.blog-meta,.project-links){opacity:var(--opacity,1)}.interactive-grid [data-active=true] :is(a,p,.tech-stack,.blog-meta,.project-links){transition-delay:calc(var(--speed)*.25)}.interactive-grid [data-active=true] .blog-image,.interactive-grid [data-active=true] .project-image,.interactive-grid [data-active=true] img{filter:grayscale(0)brightness();transition-delay:calc(var(--speed)*.25);scale:1}.interactive-grid article{width:calc(var(--article-width)*1px);height:100%;padding-inline:calc(var(--base)*.5 - 9px);flex-direction:column;justify-content:flex-end;gap:1.5rem;padding-bottom:2rem;font-family:monospace;display:flex;position:absolute;top:0;left:0;overflow:hidden}.interactive-grid article .desktop-title{top:1.5rem;left:calc(var(--base)*.5);transform-origin:0;text-transform:uppercase;white-space:nowrap;letter-spacing:.05em;margin:0;font-family:monospace;font-size:1.1rem;font-weight:400;display:block;position:absolute;rotate:90deg}.mobile-header{display:none}.article-icon{fill:none;flex-shrink:0;align-self:flex-start;width:20px;margin-top:.4rem}.interactive-grid article p{text-wrap:balance;--opacity:.85;max-width:55ch;margin:0;padding-left:2rem;font-size:14px;line-height:1.4}.tech-tag{background:color-mix(in hsl,canvasText,transparent 85%);letter-spacing:.02em;border-radius:6px;padding:.4rem .75rem;font-size:.8rem;font-weight:500}.blog-meta{opacity:.75;gap:1.25rem;margin-top:.5rem;margin-bottom:1rem;padding-left:2rem;font-size:.8rem}.blog-date,.blog-meta{align-items:center;display:flex}.blog-date{gap:.25rem}.tech-stack{flex-wrap:wrap;gap:.75rem;margin-top:.5rem;padding-left:2rem;display:flex}.icon-tech-row{align-items:center;gap:1rem;margin-top:.75rem;display:flex}.project-links{flex:1;gap:1.25rem;display:flex}.blog-read-row{align-items:center;gap:.75rem;display:flex}.interactive-grid article a{color:inherit;letter-spacing:.02em;font-size:.9rem;font-weight:600;text-decoration:none}.interactive-grid article a:hover span{text-underline-offset:4px;text-decoration:underline}.interactive-grid article .blog-image,.interactive-grid article .project-image,.interactive-grid article img{pointer-events:none;object-fit:cover;width:100%;height:100%;position:absolute;inset:0;-webkit-mask:radial-gradient(100% 100% at 100% 0,#fff,#0000);mask:radial-gradient(100% 100% at 100% 0,#fff,#0000)}.contact-grid{grid-template-columns:1fr 1fr;gap:4rem;margin-top:3rem;display:grid}.contact-info h3{margin:0 0 1rem;font-size:1.5rem}.contact-info p{opacity:.8;margin:0 0 2rem;line-height:1.7}.contact-methods{flex-direction:column;gap:1.5rem;display:flex}.contact-method{color:inherit;align-items:center;gap:1rem;font-size:1.1rem;text-decoration:none;transition:opacity .2s;display:flex}.contact-method:hover{opacity:.8}.social-links{gap:1rem;display:flex}.social-links a{border:1px solid color-mix(in hsl,canvasText,transparent 80%);color:inherit;border-radius:8px;align-items:center;gap:.5rem;padding:.75rem 1rem;text-decoration:none;transition:all .2s;display:flex}.social-links a:hover{background:color-mix(in hsl,canvasText,transparent 95%)}.contact-form{gap:1.5rem}.contact-form,.form-group{flex-direction:column;display:flex}.form-group{gap:.5rem}.form-group label{color:color-mix(in hsl,canvasText,transparent 20%);font-weight:600}.form-group input,.form-group textarea{border:1px solid color-mix(in hsl,canvasText,transparent 80%);background:color-mix(in hsl,canvas,canvasText 2%);color:inherit;border-radius:8px;padding:1rem;font-family:inherit;font-size:1rem;transition:all .2s}.form-group input:focus,.form-group textarea:focus{border-color:color-mix(in hsl,canvasText,transparent 60%);background:color-mix(in hsl,canvas,canvasText 1%);box-shadow:0 0 0 3px color-mix(in hsl,canvasText,transparent 95%);outline:none}.form-group textarea{resize:vertical;min-height:120px}.submit-button{background:linear-gradient(135deg,color-mix(in hsl,canvasText,transparent 85%),color-mix(in hsl,canvasText,transparent 90%));border:1px solid color-mix(in hsl,canvasText,transparent 70%);color:inherit;cursor:pointer;transition:all .3s var(--easing);box-shadow:0 2px 8px color-mix(in hsl,canvasText,transparent 92%);border-radius:8px;justify-content:center;align-items:center;gap:.5rem;padding:1rem 2rem;font-weight:600;display:inline-flex;position:relative;overflow:hidden}.submit-button:before{content:"";background:linear-gradient(90deg,transparent,color-mix(in hsl,canvasText,transparent 85%),transparent);width:100%;height:100%;transition:left .5s;position:absolute;top:0;left:-100%}.submit-button:hover:before{left:100%}.submit-button:hover{background:linear-gradient(135deg,color-mix(in hsl,canvasText,transparent 80%),color-mix(in hsl,canvasText,transparent 85%));box-shadow:0 4px 16px color-mix(in hsl,canvasText,transparent 85%);border-color:color-mix(in hsl,canvasText,transparent 60%);transform:translateY(-2px)}.submit-button span,.submit-button svg{z-index:1;position:relative}@media (max-width:768px){.nav-links{gap:1rem}.nav-links button{font-size:.9rem}.hero-section{padding:1rem}.content-section{padding:4rem 1rem}.about-grid,.contact-grid{grid-template-columns:1fr;gap:2rem}.interactive-grid{flex-direction:column;gap:.5rem;width:100%;max-width:none;height:auto;margin:0;padding:0;list-style:none;display:flex}.interactive-grid article .desktop-title{display:none}.interactive-grid li{background:color-mix(in hsl,canvas,canvasText 2%);border:1px solid color-mix(in hsl,canvasText,transparent 90%);height:auto;min-width:unset;border-radius:8px;width:100%;transition:all .3s;overflow:hidden}.interactive-grid article{cursor:pointer;flex-direction:column;gap:0;width:100%;height:auto;padding:0;display:flex;position:relative}.mobile-header{border-bottom:1px solid color-mix(in hsl,canvasText,transparent 95%);background:color-mix(in hsl,canvas,canvasText 1%);justify-content:space-between;align-items:center;padding:1rem 1.5rem;display:flex}.mobile-header h3{color:inherit;margin:0;font-family:inherit;font-size:1.1rem;font-weight:600}.mobile-toggle{background:color-mix(in hsl,canvasText,transparent 90%);border-radius:50%;justify-content:center;align-items:center;width:20px;height:20px;font-size:12px;font-weight:700;transition:transform .3s,background .3s;display:flex}.mobile-toggle:after{content:"+";transition:transform .3s}.interactive-grid li[data-mobile-expanded=true] .mobile-toggle{background:color-mix(in hsl,canvasText,transparent 85%);transform:rotate(45deg)}.mobile-content{max-height:0;padding:0 1.5rem;transition:max-height .4s,padding .4s;overflow:hidden}.interactive-grid li[data-mobile-expanded=true] .mobile-content{max-height:1000px;padding:1.5rem}.interactive-grid article .blog-image,.interactive-grid article .project-image,.interactive-grid article img{object-fit:cover;border-radius:6px;width:100%;height:180px;margin-bottom:1rem}.interactive-grid article h3{white-space:normal;text-transform:none;opacity:1;margin:0;font-family:inherit;font-size:1.5rem;font-weight:600;position:static;transform:rotate(0)}.interactive-grid article p{opacity:.8;margin:0 0 1rem;padding-left:1.5rem;font-family:inherit;font-size:.95rem;line-height:1.5}.tech-stack{flex-wrap:wrap;gap:.5rem;margin:1rem 0;padding-left:1.5rem;display:flex}.tech-tag{background:color-mix(in hsl,canvasText,transparent 92%);border-radius:4px;padding:.3rem .6rem;font-size:.8rem;font-weight:500}.blog-meta{opacity:.7;margin:1rem 0;padding-left:1.5rem;font-size:.85rem}.blog-meta,.icon-tech-row{align-items:center;gap:1rem;display:flex}.icon-tech-row{margin-top:1rem}.project-links{flex:1;gap:.75rem;display:flex}.interactive-grid article a{color:inherit;background:color-mix(in hsl,canvasText,transparent 92%);text-align:center;border:1px solid color-mix(in hsl,canvasText,transparent 90%);border-radius:6px;flex:1;padding:.6rem 1.2rem;font-size:.9rem;font-weight:600;text-decoration:none;transition:all .2s}.interactive-grid article a:hover{background:color-mix(in hsl,canvasText,transparent 88%)}.article-icon{display:none}.interactive-grid li :is(a,p,.tech-stack,.blog-meta,.project-links){opacity:1;width:auto;transition:none}.interactive-grid li :is(svg,h3){opacity:1;transition:none}.section-content h2{font-size:2rem}}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}