*,*::before,*::after{box-sizing:border-box}*{margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{min-height:100vh;line-height:1.65;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}a{color:inherit;text-decoration:none}ul,ol{list-style:none}:root{--color-bg:#fafaf9;--color-bg-elevated:#ffffff;--color-bg-subtle:#f0efed;--color-text:#1a1a1a;--color-text-muted:#6b6b6b;--color-border:#e0dfdd;--color-accent-mint:#0d9373;--color-accent-amber:#c47f0a;--color-accent-lilac:#8b5fc7;--color-accent-coral:#d4434b;--color-btn-text:#ffffff;--tint-about:rgba(139, 95, 199, 0.06);--tint-projects:rgba(197, 127, 10, 0.04);--tint-contact:rgba(212, 67, 75, 0.06);--step--2:clamp(0.69rem, 0.66rem + 0.18vw, 0.80rem);--step--1:clamp(0.83rem, 0.78rem + 0.25vw, 1.00rem);--step-0:clamp(1.00rem, 0.93rem + 0.36vw, 1.25rem);--step-1:clamp(1.20rem, 1.10rem + 0.50vw, 1.56rem);--step-2:clamp(1.44rem, 1.30rem + 0.70vw, 1.95rem);--step-3:clamp(1.73rem, 1.53rem + 0.98vw, 2.44rem);--step-4:clamp(2.07rem, 1.80rem + 1.37vw, 3.05rem);--step-5:clamp(2.49rem, 2.11rem + 1.88vw, 3.82rem);--space-xs:0.25rem;--space-sm:0.5rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--space-3xl:4rem;--space-4xl:6rem;--space-5xl:8rem;--max-width-content:720px;--max-width-wide:1080px;--max-width-full:1280px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--transition-fast:150ms ease;--transition-base:300ms ease}[data-theme=dark]{--color-bg:#0f1117;--color-bg-elevated:#1a1d27;--color-bg-subtle:#242836;--color-text:#e8e6e3;--color-text-muted:#8b8d98;--color-border:#2e3245;--color-accent-mint:#5de4c7;--color-accent-amber:#f5a623;--color-accent-lilac:#c4a7e7;--color-accent-coral:#f07178;--color-btn-text:#0f1117;--tint-about:rgba(196, 167, 231, 0.06);--tint-projects:rgba(245, 166, 35, 0.04);--tint-contact:rgba(240, 113, 120, 0.06)}@font-face{font-family:inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/fonts/inter-var-latin.woff2)format('woff2');unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+300-301,U+304,U+308,U+329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:jetbrains mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-var-latin.woff2)format('woff2')}body{font-family:inter,-apple-system,BlinkMacSystemFont,segoe ui,system-ui,sans-serif;font-size:var(--step-0);line-height:1.65;color:var(--color-text)}h1,h2,h3,h4,h5,h6{font-family:inter,-apple-system,BlinkMacSystemFont,segoe ui,system-ui,sans-serif;line-height:1.15;letter-spacing:-.02em;font-weight:700}h1{font-size:var(--step-4);font-weight:800}h2{font-size:var(--step-3)}h3{font-size:var(--step-2)}h4{font-size:var(--step-1)}.font-mono{font-family:jetbrains mono,fira code,cascadia code,monospace;letter-spacing:.05em}code,pre{font-family:jetbrains mono,fira code,cascadia code,monospace;font-size:var(--step--1);line-height:1.5}p+p{margin-top:var(--space-md)}strong{font-weight:600}html{scroll-padding-top:5rem}body{background-color:var(--color-bg);transition:background-color var(--transition-base),color var(--transition-base)}.container{width:100%;max-width:var(--max-width-full);margin-inline:auto;padding-inline:var(--space-lg)}.container--content{max-width:var(--max-width-content)}.container--wide{max-width:var(--max-width-wide)}.section{padding-block:clamp(3rem,5vw + 1rem,6rem)}.section__header{margin-bottom:var(--space-2xl)}.section__number{font-family:jetbrains mono,monospace;font-size:var(--step--1);letter-spacing:.05em;display:block;margin-bottom:var(--space-sm)}.section__title{font-size:var(--step-3)}.section--about{background-color:var(--tint-about)}.section--projects{background-color:var(--tint-projects)}.section--contact{background-color:var(--tint-contact)}.section__number--lilac{color:var(--color-accent-lilac)}.section__number--amber{color:var(--color-accent-amber)}.section__number--coral{color:var(--color-accent-coral)}.footer__inner{text-align:center;padding-block:var(--space-xl);color:var(--color-text-muted);font-size:var(--step--1)}.skip-link{position:absolute;top:-100%;left:var(--space-md);z-index:200;padding:var(--space-sm)var(--space-md);background-color:var(--color-accent-mint);color:var(--color-btn-text);border-radius:var(--radius-md);font-size:var(--step--1);font-weight:500}.skip-link:focus{top:var(--space-sm)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.theme-toggle{background:0 0;border:none;cursor:pointer;min-width:44px;min-height:44px;padding:var(--space-sm);color:var(--color-text-muted);transition:color var(--transition-fast);display:flex;align-items:center;justify-content:center}.theme-toggle:hover{color:var(--color-text)}.theme-toggle__icon{width:20px;height:20px}.theme-toggle__sun{display:none}.theme-toggle__moon{display:block}[data-theme=dark] .theme-toggle__sun{display:block}[data-theme=dark] .theme-toggle__moon{display:none}.section,.card,.about__photo-placeholder,.about__tech-tag,.card__tag,.footer{transition:background-color var(--transition-base),color var(--transition-base),border-color var(--transition-base)}.no-transitions .section,.no-transitions .card,.no-transitions .about__photo-placeholder,.no-transitions .about__tech-tag,.no-transitions .card__tag,.no-transitions .footer,.no-transitions body,.no-transitions .nav{transition:none!important}.nav{position:fixed;top:0;left:0;right:0;z-index:100;padding:var(--space-md)0;transition:background-color var(--transition-base),box-shadow var(--transition-base)}.nav--scrolled{background-color:var(--color-bg-elevated);box-shadow:0 1px 0 var(--color-border)}.nav__inner{display:flex;align-items:center;justify-content:space-between;max-width:var(--max-width-full);margin-inline:auto;padding-inline:var(--space-lg)}.nav__logo{display:flex;align-items:center;color:var(--color-accent-mint);transition:opacity var(--transition-fast)}.nav__logo:hover{opacity:.8}.nav__logo-svg{display:block}.nav__links{display:none;align-items:center;gap:var(--space-xl)}.nav__link{font-size:var(--step--1);color:var(--color-text-muted);transition:color var(--transition-fast);position:relative}.nav__link:hover,.nav__link--active{color:var(--color-text)}.nav__link--active::after{content:'';position:absolute;bottom:-4px;left:0;right:0;height:2px;background-color:var(--color-accent-mint)}.nav__mobile-actions{display:flex;align-items:center;gap:var(--space-sm)}.nav__toggle{display:flex;align-items:center;justify-content:center;background:0 0;border:none;cursor:pointer;min-width:44px;min-height:44px;padding:var(--space-sm);color:var(--color-text)}.nav__toggle-icon{width:24px;height:24px}.nav__mobile-menu{display:none;position:fixed;top:0;left:0;right:0;background-color:var(--color-bg-elevated);padding:var(--space-3xl)var(--space-lg)var(--space-xl);box-shadow:0 4px 12px rgba(0,0,0,.15);flex-direction:column;gap:var(--space-lg);z-index:99}.nav__mobile-menu--open{display:flex}.nav__mobile-link{font-size:var(--step-1);color:var(--color-text-muted);transition:color var(--transition-fast);padding:var(--space-sm)0}.nav__mobile-link:hover{color:var(--color-text)}@media(min-width:1024px){.nav__links{display:flex}.nav__mobile-actions{display:none}.nav__toggle{display:none}.nav__mobile-menu{display:none!important}}.hero{min-height:100vh;display:flex;align-items:center;position:relative}.hero__content{max-width:var(--max-width-content);margin-inline:auto;padding-inline:var(--space-lg);width:100%}.hero__greeting{font-size:var(--step-5);font-weight:800;line-height:1.1;margin-bottom:var(--space-lg)}.hero__title{font-size:var(--step-1);color:var(--color-text-muted);line-height:1.5;max-width:520px;margin-bottom:var(--space-2xl)}.hero__cta{display:flex;flex-wrap:wrap;gap:var(--space-md)}.hero__cursor{position:absolute;bottom:10vh;right:10vw;font-family:jetbrains mono,monospace;font-size:var(--step-3);color:var(--color-accent-mint);opacity:.3;user-select:none}.hero__cursor::after{content:'';display:inline-block;width:.6em;height:1.1em;background-color:var(--color-accent-mint);margin-left:.1em;vertical-align:text-bottom;animation:blink 1s step-end infinite}@keyframes blink{0%,100%{opacity:1}50%{opacity:0}}.about__content{display:flex;flex-direction:column;align-items:center;gap:var(--space-xl);margin-bottom:var(--space-2xl)}.about__photo{flex-shrink:0}.about__photo-placeholder{width:160px;height:160px;border-radius:50%;background:linear-gradient(135deg,var(--color-bg-subtle) 0%,var(--color-accent-lilac) 100%);opacity:.5}.about__photo-img{width:160px;height:160px;border-radius:50%;object-fit:cover;border:2px solid var(--color-border)}@media(min-width:640px){.about__photo-img{width:200px;height:200px}}.about__text p{color:var(--color-text);line-height:1.65}.about__text p+p{margin-top:var(--space-md)}.about__tech{display:flex;flex-wrap:wrap;gap:var(--space-sm)}.about__tech-tag{font-family:jetbrains mono,monospace;font-size:var(--step--2);background-color:var(--color-bg-subtle);color:var(--color-text-muted);padding:4px 14px;border-radius:999px}@media(min-width:640px){.about__content{flex-direction:row;align-items:flex-start}}.project-grid{display:grid;grid-template-columns:1fr;gap:var(--space-xl)}@media(min-width:640px){.project-grid{grid-template-columns:repeat(2,1fr)}}.card{background-color:var(--color-bg-elevated);border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden;transition:transform var(--transition-fast),box-shadow var(--transition-fast),border-color var(--transition-fast)}.card:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.12)}.card__image{aspect-ratio:16/10;overflow:hidden}.card__image-placeholder{width:100%;height:100%;background:linear-gradient(135deg,var(--color-bg-subtle) 0%,var(--color-bg-elevated) 100%)}.card__diagram{aspect-ratio:16/10;background:var(--color-bg-subtle);display:flex;align-items:center;justify-content:center;padding:16px 12px;border-bottom:1px solid var(--color-border);overflow:hidden}.card__diagram-svg{width:100%;height:auto;max-height:100%}.card__body{padding:var(--space-lg)}.card__header{display:flex;align-items:center;gap:var(--space-sm);margin-bottom:var(--space-sm)}.card__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.card__title{font-size:var(--step-1);font-weight:600}.card__description{color:var(--color-text-muted);font-size:var(--step--1);margin-bottom:var(--space-md);line-height:1.55}.card__tags{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-bottom:var(--space-md)}.card__tag{font-family:jetbrains mono,monospace;font-size:var(--step--2);background-color:var(--color-bg-subtle);padding:2px 10px;border-radius:999px;color:var(--color-text-muted)}.card__links{display:flex;gap:var(--space-lg)}.card__link{font-size:var(--step--1);font-weight:500;transition:color var(--transition-fast)}.card__link:hover{opacity:.8}.card--mint .card__dot{background-color:var(--color-accent-mint)}.card--mint .card__link{color:var(--color-accent-mint)}.card--mint:hover{border-color:var(--color-accent-mint)}.card--lilac .card__dot{background-color:var(--color-accent-lilac)}.card--lilac .card__link{color:var(--color-accent-lilac)}.card--lilac:hover{border-color:var(--color-accent-lilac)}.card--amber .card__dot{background-color:var(--color-accent-amber)}.card--amber .card__link{color:var(--color-accent-amber)}.card--amber:hover{border-color:var(--color-accent-amber)}.card--coral .card__dot{background-color:var(--color-accent-coral)}.card--coral .card__link{color:var(--color-accent-coral)}.card--coral:hover{border-color:var(--color-accent-coral)}.contact__container{text-align:center}.contact__intro{font-size:var(--step-0);color:var(--color-text-muted);margin-bottom:var(--space-xl)}.contact__email{display:inline-block;font-size:var(--step-2);font-weight:600;color:var(--color-accent-coral);margin-bottom:var(--space-xl);position:relative}.contact__email::after{content:'';position:absolute;bottom:-2px;left:0;right:0;height:2px;background-color:currentColor;transform:scaleX(0);transform-origin:right;transition:transform var(--transition-base)}.contact__email:hover::after{transform:scaleX(1);transform-origin:left}.contact__social{display:flex;justify-content:center;gap:var(--space-xl)}.contact__social-link{display:inline-flex;align-items:center;gap:var(--space-sm);font-size:var(--step-0);font-weight:500;color:var(--color-accent-coral);transition:opacity var(--transition-fast)}.contact__social-link:hover{opacity:.8}.contact__social-icon{width:20px;height:20px}.btn{display:inline-flex;align-items:center;gap:var(--space-sm);padding:.75em 1.5em;border-radius:var(--radius-md);font-size:var(--step--1);font-weight:500;border:none;cursor:pointer;transition:transform var(--transition-fast),filter var(--transition-fast);text-decoration:none}.btn:hover{filter:brightness(1.1);transform:scale(1.02)}.btn--primary{background-color:var(--color-accent-mint);color:var(--color-btn-text)}.btn--secondary{background-color:initial;border:1px solid var(--color-accent-mint);color:var(--color-accent-mint)}.btn--secondary:hover{background-color:var(--color-accent-mint);color:var(--color-btn-text)}.blog-list__title{font-size:var(--step-4);margin-bottom:var(--space-sm)}.blog-list__desc{color:var(--color-text-muted);font-size:var(--step-0);margin-bottom:var(--space-3xl)}.blog-list__posts{display:flex;flex-direction:column;gap:var(--space-lg)}.blog-list__item{border-bottom:1px solid var(--color-border);padding-bottom:var(--space-lg)}.blog-list__item:last-child{border-bottom:none}.blog-list__link{text-decoration:none;color:inherit;display:block}.blog-list__link:hover .blog-list__item-title{color:var(--color-accent-mint)}.blog-list__date{font-family:jetbrains mono,monospace;font-size:var(--step--1);color:var(--color-text-muted);letter-spacing:.05em}.blog-list__item-title{font-size:var(--step-2);margin-top:var(--space-xs);margin-bottom:var(--space-xs);transition:color var(--transition-fast)}.blog-list__excerpt{color:var(--color-text-muted);font-size:var(--step-0);margin-bottom:var(--space-sm)}.blog-list__tags{display:flex;gap:var(--space-xs);flex-wrap:wrap}.blog-list__tag{font-family:jetbrains mono,monospace;font-size:var(--step--2);color:var(--color-accent-mint);background:var(--color-bg-subtle);padding:2px var(--space-sm);border-radius:var(--radius-sm);letter-spacing:.05em}.blog-post__header{margin-bottom:var(--space-3xl);padding-bottom:var(--space-xl);border-bottom:1px solid var(--color-border)}.blog-post__date{font-family:jetbrains mono,monospace;font-size:var(--step--1);color:var(--color-text-muted);letter-spacing:.05em}.blog-post__title{font-size:var(--step-4);margin-top:var(--space-sm);margin-bottom:var(--space-sm)}.blog-post__desc{color:var(--color-text-muted);font-size:var(--step-1);margin-bottom:var(--space-md)}.blog-post__tags{display:flex;gap:var(--space-xs);flex-wrap:wrap;margin-bottom:var(--space-sm)}.blog-post__tag{font-family:jetbrains mono,monospace;font-size:var(--step--2);color:var(--color-accent-mint);background:var(--color-bg-subtle);padding:2px var(--space-sm);border-radius:var(--radius-sm);letter-spacing:.05em}.blog-post__reading-time{font-size:var(--step--1);color:var(--color-text-muted)}.blog-post__content h2{font-size:var(--step-2);margin-top:var(--space-3xl);margin-bottom:var(--space-md)}.blog-post__content h3{font-size:var(--step-1);margin-top:var(--space-2xl);margin-bottom:var(--space-md)}.blog-post__content p{margin-bottom:var(--space-lg)}.blog-post__content ul,.blog-post__content ol{margin-bottom:var(--space-lg);padding-left:var(--space-xl)}.blog-post__content li{margin-bottom:var(--space-sm)}.blog-post__content strong{font-weight:600}.blog-post__content a{color:var(--color-accent-mint);text-decoration:underline;text-underline-offset:2px}.blog-post__content a:hover{text-decoration-thickness:2px}.blog-post__content code{font-family:jetbrains mono,monospace;font-size:.9em;background:var(--color-bg-subtle);padding:2px 6px;border-radius:var(--radius-sm)}.blog-post__content pre{background:var(--color-bg-subtle);padding:var(--space-lg);border-radius:var(--radius-md);overflow-x:auto;margin-bottom:var(--space-lg)}.blog-post__content pre code{background:0 0;padding:0}.blog-post__content blockquote{border-left:3px solid var(--color-accent-mint);padding-left:var(--space-lg);color:var(--color-text-muted);margin-bottom:var(--space-lg)}.blog-post__footer{margin-top:var(--space-3xl);padding-top:var(--space-xl);border-top:1px solid var(--color-border)}.blog-post__back{color:var(--color-accent-mint);text-decoration:none;font-size:var(--step-0)}.blog-post__back:hover{text-decoration:underline}