@import "https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&family=DM+Mono:wght@400;500&display=swap";#root{transition:opacity .2s}#root.lang-fade-out{opacity:0}:root{--color-bg:#f7f6f3;--color-bg-alt:#efede9;--color-surface:#fff;--color-surface-hover:#f0eee9;--color-text:#181816;--color-text-secondary:#424240;--color-text-muted:#7a7876;--color-text-inverse:#f7f6f3;--color-border:#ddd9d1;--color-border-strong:#b8b4ac;--color-accent:#181816;--color-accent-light:#3a3a38;--color-glass-bg:#f7f6f3d1;--color-glass-border:#ddd9d199;--shadow-sm:0 1px 3px #1818160f;--shadow-md:0 4px 16px #18181614;--shadow-lg:0 12px 40px #1818161f;--shadow-topbar:0 1px 0 #18181614}:root[data-theme=dark]{--color-bg:#141413;--color-bg-alt:#1c1c1a;--color-surface:#1e1e1c;--color-surface-hover:#2a2a28;--color-text:#f7f6f3;--color-text-secondary:#c4c2be;--color-text-muted:#8e8c88;--color-text-inverse:#181816;--color-border:#2e2e2c;--color-border-strong:#4a4a48;--color-accent:#f7f6f3;--color-accent-light:#e0ded9;--color-glass-bg:#141413d9;--color-glass-border:#2e2e2c99;--shadow-sm:0 1px 3px #0006;--shadow-md:0 4px 16px #00000080;--shadow-lg:0 12px 40px #0009;--shadow-topbar:0 1px 0 #0006}:root{--font-sans:"DM Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:"DM Mono", "Fira Code", "Cascadia Code", monospace;--font-size-xs:.75rem;--font-size-sm:.875rem;--font-size-base:1rem;--font-size-lg:1.125rem;--font-size-xl:1.25rem;--font-size-2xl:1.5rem;--font-size-3xl:1.875rem;--font-size-4xl:2.25rem;--font-size-5xl:3rem;--font-weight-light:300;--font-weight-regular:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--line-height-tight:1.2;--line-height-snug:1.35;--line-height-normal:1.6;--line-height-relaxed:1.75;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--space-20:5rem;--space-24:6rem;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-full:9999px;--transition-fast:.15s ease;--transition-base:.25s ease;--transition-slow:.4s ease;--transition-spring:.3s cubic-bezier(.34, 1.56, .64, 1);--topbar-height:64px;--content-max-width:1120px;--content-padding-x:var(--space-6)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;tab-size:4}body{font-family:var(--font-sans);font-size:var(--font-size-base);font-weight:var(--font-weight-regular);line-height:var(--line-height-normal);color:var(--color-text);background-color:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;min-height:100vh;transition:background-color var(--transition-base), color var(--transition-base)}img,picture,video,canvas,svg{max-width:100%;display:block}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{line-height:var(--line-height-tight);font-weight:var(--font-weight-semibold);color:var(--color-text)}a{color:inherit;text-decoration:none}ul,ol{list-style:none}button{cursor:pointer;background:0 0;border:none}#root{flex-direction:column;min-height:100vh;display:flex}:where(*){transition:background-color var(--transition-base), border-color var(--transition-base), color var(--transition-base)}:where(.lang-toggle,.theme-toggle,.topbar__nav-link,.social-link,.form-input,.form-textarea,.form-submit,.topbar__hamburger){transition:revert}.container{width:100%;max-width:var(--content-max-width);padding-inline:var(--content-padding-x);margin-inline:auto}.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}:focus-visible{outline:2px solid var(--color-text);outline-offset:3px;border-radius:var(--radius-sm)}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:var(--color-bg-alt)}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-muted)}::selection{background:var(--color-text);color:var(--color-text-inverse)}@keyframes fadeInUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInRight{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:translate(0)}}.lang-toggle{align-items:center;gap:var(--space-1);padding:var(--space-2) var(--space-3);border-radius:var(--radius-full);border:1.5px solid var(--color-border);cursor:pointer;transition:border-color var(--transition-base), background var(--transition-base);font-family:var(--font-mono);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);letter-spacing:.08em;background:0 0;display:flex}.lang-toggle:hover{border-color:var(--color-text);background:var(--color-surface-hover)}.lang-option{color:var(--color-text-muted);transition:color var(--transition-fast)}.lang-option.lang-active{color:var(--color-text);font-weight:var(--font-weight-semibold)}.lang-separator{color:var(--color-border-strong);-webkit-user-select:none;user-select:none;margin-inline:1px}.theme-toggle{all:unset;cursor:pointer;border-radius:var(--radius-full);justify-content:center;align-items:center;display:inline-flex}.theme-toggle:focus-visible .theme-toggle__track{outline:2px solid var(--color-text);outline-offset:2px}.theme-toggle__track{border-radius:var(--radius-full);border:1.5px solid var(--color-border);background:var(--color-bg-alt);width:52px;height:28px;transition:background var(--transition-base), border-color var(--transition-base);justify-content:space-between;align-items:center;padding:0 5px;display:flex;position:relative}.theme-toggle--dark .theme-toggle__track{background:var(--color-surface);border-color:var(--color-border-strong)}.theme-toggle__track:hover{border-color:var(--color-border-strong)}.theme-toggle__icon{color:var(--color-text-muted);transition:color var(--transition-base), opacity var(--transition-base);z-index:1;pointer-events:none;justify-content:center;align-items:center;line-height:1;display:flex}.theme-toggle__icon--sun{color:var(--color-text)}.theme-toggle__icon--moon{opacity:.35}.theme-toggle--dark .theme-toggle__icon--sun{opacity:.35;color:var(--color-text-muted)}.theme-toggle--dark .theme-toggle__icon--moon{opacity:1;color:var(--color-text)}.theme-toggle__thumb{border-radius:var(--radius-full);background:var(--color-text);width:20px;height:20px;box-shadow:var(--shadow-sm);transition:left var(--transition-base), background var(--transition-base);pointer-events:none;position:absolute;top:50%;left:4px;transform:translateY(-50%)}.theme-toggle--dark .theme-toggle__thumb{left:25px}.mobile-overlay{z-index:150;opacity:0;transition:opacity var(--transition-base);background:#18181680;display:none;position:fixed;inset:0}.mobile-overlay--visible{opacity:1;display:block}.mobile-menu{background:var(--color-surface);border-left:1px solid var(--color-border);z-index:200;width:min(320px,85vw);transition:transform var(--transition-slow) cubic-bezier(.4, 0, .2, 1);box-shadow:var(--shadow-lg);flex-direction:column;display:flex;position:fixed;top:0;bottom:0;right:0;transform:translate(100%)}.mobile-menu--open{transform:translate(0)}.mobile-menu__header{height:var(--topbar-height);padding-inline:var(--space-6);border-bottom:1px solid var(--color-border);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.mobile-menu__title{font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);letter-spacing:-.02em;color:var(--color-text)}.mobile-menu__close{border-radius:var(--radius-md);border:1.5px solid var(--color-border);width:36px;height:36px;font-size:var(--font-size-sm);color:var(--color-text-secondary);cursor:pointer;transition:border-color var(--transition-fast), color var(--transition-fast), background var(--transition-fast);background:0 0;justify-content:center;align-items:center;display:flex}.mobile-menu__close:hover{border-color:var(--color-text);color:var(--color-text);background:var(--color-surface-hover)}.mobile-menu__list{padding:var(--space-4) 0;flex:1;overflow-y:auto}.mobile-menu__item{opacity:0;animation:none}.mobile-menu--open .mobile-menu__item{animation:slideInRight var(--transition-base) both}.mobile-menu__link{align-items:center;gap:var(--space-4);padding:var(--space-4) var(--space-6);font-size:var(--font-size-lg);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);transition:color var(--transition-fast), background var(--transition-fast), padding-left var(--transition-base);border-radius:0;text-decoration:none;display:flex}.mobile-menu__link:hover{color:var(--color-text);background:var(--color-surface-hover);padding-left:calc(var(--space-6) + var(--space-2))}.mobile-menu__index{font-family:var(--font-mono);font-size:var(--font-size-xs);color:var(--color-text-muted);min-width:24px;transition:color var(--transition-fast)}.mobile-menu__link:hover .mobile-menu__index{color:var(--color-text-secondary)}.mobile-menu__footer{padding:var(--space-6);border-top:1px solid var(--color-border);flex-shrink:0;justify-content:center;display:flex}@media (width>=768px){.mobile-overlay,.mobile-menu{display:none!important}}.topbar{z-index:100;height:var(--topbar-height);background:var(--color-bg);transition:background var(--transition-base),  border-color var(--transition-base), backdrop-filter var(--transition-slow),  box-shadow var(--transition-slow);will-change:background, box-shadow;border-bottom:1px solid #0000;position:sticky;top:0}.topbar--scrolled{background:var(--color-glass-bg);-webkit-backdrop-filter:blur(16px)saturate(1.4);border-bottom-color:var(--color-glass-border);box-shadow:var(--shadow-topbar)}.topbar__inner{justify-content:space-between;align-items:center;gap:var(--space-6);height:100%;display:flex}.topbar__logo{font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);letter-spacing:-.03em;color:var(--color-text);transition:opacity var(--transition-fast);flex-shrink:0;text-decoration:none;position:relative}.topbar__logo:after{content:".";color:var(--color-text-muted)}.topbar__logo:hover{opacity:.72}.topbar__nav{flex:1;justify-content:flex-end;display:flex}.topbar__nav-list{align-items:center;gap:var(--space-1);display:flex}.topbar__nav-link{padding:var(--space-2) var(--space-3);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-text-secondary);border-radius:var(--radius-md);white-space:nowrap;transition:color var(--transition-fast), background var(--transition-fast);text-decoration:none;display:block;position:relative}.topbar__nav-link:after{content:"";bottom:4px;left:var(--space-3);right:var(--space-3);background:var(--color-text);border-radius:var(--radius-full);transform-origin:100%;height:1.5px;transition:transform var(--transition-base);position:absolute;transform:scaleX(0)}.topbar__nav-link:hover{color:var(--color-text);background:var(--color-surface-hover)}.topbar__nav-link:hover:after{transform-origin:0;transform:scaleX(1)}.topbar__controls{align-items:center;gap:var(--space-3);flex-shrink:0;display:flex}.topbar__hamburger{width:40px;height:40px;padding:var(--space-2);border-radius:var(--radius-md);border:1.5px solid var(--color-border);cursor:pointer;transition:border-color var(--transition-fast), background var(--transition-fast);background:0 0;flex-direction:column;justify-content:center;align-items:center;gap:5px;display:none}.topbar__hamburger:hover{border-color:var(--color-text);background:var(--color-surface-hover)}.hamburger__bar{background:var(--color-text);border-radius:var(--radius-full);width:18px;height:1.5px;transition:transform var(--transition-base), opacity var(--transition-base);transform-origin:50%;display:block}.topbar__hamburger--open .hamburger__bar:first-child{transform:translateY(6.5px)rotate(45deg)}.topbar__hamburger--open .hamburger__bar:nth-child(2){opacity:0;transform:scaleX(0)}.topbar__hamburger--open .hamburger__bar:nth-child(3){transform:translateY(-6.5px)rotate(-45deg)}@media (width<=767px){.topbar__nav{display:none}.topbar__hamburger{display:flex}}.footer{background:var(--color-text);color:var(--color-text-inverse);border-top:1px solid var(--color-border)}:root[data-theme=dark] .footer{color:#f7f6f3;background:#111110;border-top-color:#2e2e2c}.footer__inner{gap:var(--space-12);padding-block:var(--space-16);grid-template-columns:1fr;display:grid}@media (width>=768px){.footer__inner{gap:var(--space-16);grid-template-columns:1fr 1.6fr;align-items:start}}.footer__brand{margin-bottom:var(--space-8)}.footer__name{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);letter-spacing:-.03em;color:inherit;margin-bottom:var(--space-3);display:block}.footer__tagline{font-size:var(--font-size-sm);color:#f7f6f38c;line-height:var(--line-height-relaxed);max-width:32ch}.footer__social{gap:var(--space-3);margin-bottom:var(--space-8);display:flex}.social-link{border-radius:var(--radius-md);color:#f7f6f3a6;width:42px;height:42px;transition:color var(--transition-base), border-color var(--transition-base), background var(--transition-base), transform var(--transition-spring);background:0 0;border:1.5px solid #f7f6f326;justify-content:center;align-items:center;text-decoration:none;display:flex}.social-link:hover{color:#f7f6f3;background:#f7f6f31a;border-color:#f7f6f380;transform:translateY(-2px)}.footer__built{font-family:var(--font-mono);font-size:var(--font-size-xs);color:#f7f6f359;letter-spacing:.06em}.footer__contact-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-semibold);color:inherit;letter-spacing:-.02em;margin-bottom:var(--space-8)}.contact-form{gap:var(--space-5);flex-direction:column;display:flex}.form-group{gap:var(--space-2);flex-direction:column;display:flex}.form-label{font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:#f7f6f3bf;letter-spacing:.02em}.form-required{color:#f7f6f373}.form-input,.form-textarea{width:100%;padding:var(--space-3) var(--space-4);font-family:var(--font-sans);font-size:var(--font-size-sm);color:#f7f6f3;border-radius:var(--radius-md);transition:border-color var(--transition-fast), background var(--transition-fast), box-shadow var(--transition-fast);resize:none;background:#f7f6f30f;border:1.5px solid #f7f6f326;outline:none}.form-input::placeholder,.form-textarea::placeholder{color:#f7f6f34d}.form-input:hover,.form-textarea:hover{border-color:#f7f6f34d}.form-input:focus,.form-textarea:focus{background:#f7f6f31a;border-color:#f7f6f399;box-shadow:0 0 0 3px #f7f6f314}.form-textarea{min-height:130px;line-height:var(--line-height-relaxed)}.form-error{font-size:var(--font-size-xs);color:#ff7b7b;margin-top:var(--space-1)}.form-error--general{padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:#ff7b7b1a;border:1px solid #ff7b7b4d}.form-submit{padding:var(--space-3) var(--space-8);font-family:var(--font-sans);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:#181816;border-radius:var(--radius-md);cursor:pointer;letter-spacing:.01em;transition:background var(--transition-fast), opacity var(--transition-fast), transform var(--transition-spring);background:#f7f6f3;border:none;align-self:flex-start}.form-submit:hover:not(:disabled){background:#f7f6f3e6;transform:translateY(-1px)}.form-submit:active:not(:disabled){transform:translateY(0)}.form-submit:disabled,.form-submit--loading{opacity:.55;cursor:not-allowed;transform:none}.form-success{gap:var(--space-3);padding:var(--space-8);border-radius:var(--radius-lg);animation:fadeInUp var(--transition-slow) both;background:#f7f6f30f;border:1.5px solid #f7f6f326;flex-direction:column;display:flex}.form-success__icon{border-radius:var(--radius-full);width:44px;height:44px;font-size:var(--font-size-lg);color:#f7f6f3;background:#f7f6f31f;border:1.5px solid #f7f6f340;justify-content:center;align-items:center;display:flex}.form-success__title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:#f7f6f3}.form-success__message{font-size:var(--font-size-sm);color:#f7f6f3a6;line-height:var(--line-height-relaxed)}.footer__bottom{border-top:1px solid #f7f6f31a}.footer__bottom-inner{justify-content:space-between;align-items:center;gap:var(--space-4);padding-block:var(--space-5);flex-wrap:wrap;display:flex}.footer__copyright{font-size:var(--font-size-xs);color:#f7f6f359}.footer__powered{font-size:var(--font-size-xs);color:#f7f6f359;transition:color var(--transition-fast);text-decoration:none}.footer__powered:hover{color:#f7f6f3a6}.layout{flex-direction:column;min-height:100vh;display:flex}.layout__main{flex:1}.section{padding-block:var(--space-20);min-height:60vh}.section--alt{background-color:var(--color-bg-alt)}.section__header{margin-bottom:var(--space-12)}.section__label{font-family:var(--font-mono);font-size:var(--font-size-xs);font-weight:var(--font-weight-medium);letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-muted);margin-bottom:var(--space-3);display:inline-block}.section__title{font-size:clamp(var(--font-size-3xl), 5vw, var(--font-size-5xl));font-weight:var(--font-weight-bold);letter-spacing:-.03em;color:var(--color-text);line-height:var(--line-height-tight)}.section__subtitle{margin-top:var(--space-4);font-size:var(--font-size-lg);color:var(--color-text-secondary);line-height:var(--line-height-normal);max-width:54ch}.hero{min-height:calc(100vh - var(--topbar-height));align-items:center;display:flex}.hero__content{width:100%}.about__content{gap:var(--space-10);grid-template-columns:1fr;display:grid}@media (width>=768px){.about__content{grid-template-columns:1fr 2fr;align-items:start}}.tech__grid{gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(120px,1fr));display:grid}.projects__grid{gap:var(--space-6);grid-template-columns:1fr;display:grid}@media (width>=640px){.projects__grid{grid-template-columns:repeat(2,1fr)}}@media (width>=1024px){.projects__grid{grid-template-columns:repeat(3,1fr)}}.preloader{z-index:9999;background-color:var(--color-bg);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.preloader__content{color:var(--color-text);align-items:baseline;display:flex}.preloader__counter{font-size:clamp(var(--font-size-5xl), 10vw, 8rem);font-weight:var(--font-weight-bold);font-variant-numeric:tabular-nums;letter-spacing:-.04em;line-height:1}.preloader__percent{font-size:clamp(var(--font-size-2xl), 4vw, 3rem);font-weight:var(--font-weight-medium);margin-left:var(--space-2);color:var(--color-text-secondary)}
