:root{--bg-primary:#0e0e10;--bg-card:#17171a;--bg-elevated:#1d1d21;--text-primary:#f4f4f5;--text-secondary:#a1a1aa;--text-muted:#71717a;--accent:#7dd3a8;--accent-hover:#a3e4c4;--border-color:#26262b;--border-hover:#3a3a42;--error-color:#f87171;--font-primary:"Geist", system-ui, -apple-system, sans-serif;--font-mono:"Geist Mono", "Fira Code", "Consolas", monospace;--spacing-xs:8px;--spacing-sm:16px;--spacing-md:24px;--spacing-lg:32px;--spacing-xl:48px;--spacing-2xl:64px;--spacing-3xl:80px;--radius-card:16px;--radius-control:10px;--radius-pill:999px;--max-width:1040px;--header-height:64px;--transition-fast:.15s ease;--transition-base:.25s ease}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-size:16px}body{font-family:var(--font-primary);background-color:var(--bg-primary);color:var(--text-primary);min-height:100vh;line-height:1.6}section[id]{scroll-margin-top:calc(var(--header-height) + 16px)}h1,h2,h3,h4,h5,h6{letter-spacing:-.02em;color:var(--text-primary);font-weight:600;line-height:1.2}h1{font-size:3rem}h2{font-size:1.75rem}h3{font-size:1.25rem}p{color:var(--text-secondary);line-height:1.7}a{color:var(--accent);transition:color var(--transition-fast);text-decoration:none}a:hover{color:var(--accent-hover)}code,pre{font-family:var(--font-mono)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}::selection{background-color:var(--accent);color:var(--bg-primary)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-primary)}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--border-hover)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.container{width:100%;max-width:var(--max-width);padding:0 var(--spacing-lg);margin:0 auto}@keyframes reveal-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.reveal{animation:.5s ease-out both reveal-up}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media (max-width:768px){:root{--spacing-lg:24px;--spacing-xl:32px;--spacing-2xl:48px;--spacing-3xl:64px}h1{font-size:2.25rem}h2{font-size:1.5rem}h3{font-size:1.125rem}.container{padding:0 var(--spacing-sm)}}
.header{z-index:100;-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border-color);background:#0e0e10cc;position:sticky;top:0}.header__container{max-width:var(--max-width);padding:0 var(--spacing-lg);height:var(--header-height);justify-content:space-between;align-items:center;margin:0 auto;display:flex}.header__logo{color:var(--text-primary);letter-spacing:-.02em;font-size:1rem;font-weight:600}.header__logo:hover{color:var(--accent)}.header__nav{gap:var(--spacing-xs);display:flex}.header__link{color:var(--text-secondary);border-radius:var(--radius-control);transition:color var(--transition-fast), background-color var(--transition-fast);padding:8px 14px;font-size:.9rem;display:inline-block}.header__link:hover{color:var(--text-primary);background:var(--bg-elevated)}.header__link[aria-current=true]{color:var(--text-primary);background:var(--bg-card)}.header__menu-btn{cursor:pointer;border-radius:var(--radius-control);background:0 0;border:none;flex-direction:column;justify-content:center;gap:5px;width:44px;height:44px;padding:10px;display:none}.header__menu-btn span{background:var(--text-primary);width:100%;height:2px;transition:transform var(--transition-fast), opacity var(--transition-fast);border-radius:1px;display:block}.header__nav--mobile{display:none}@media (max-width:768px){.header__nav:not(.header__nav--mobile){display:none}.header__menu-btn{display:flex}.header__nav--mobile.header__nav--open{padding:var(--spacing-xs) var(--spacing-sm) var(--spacing-sm);border-bottom:1px solid var(--border-color);-webkit-backdrop-filter:blur(12px);background:#0e0e10f2;flex-direction:column;gap:4px;display:flex}.header__nav--mobile .header__link{padding:12px 14px}}.btn{min-height:44px;font-family:var(--font-primary);border-radius:var(--radius-control);cursor:pointer;transition:background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast), transform var(--transition-fast);border:1px solid #0000;justify-content:center;align-items:center;gap:8px;padding:10px 22px;font-size:.95rem;font-weight:500;display:inline-flex}.btn:active{transform:scale(.98)}.btn--primary{background:var(--accent);color:var(--bg-primary)}.btn--primary:hover{background:var(--accent-hover);color:var(--bg-primary)}.btn--secondary{color:var(--text-primary);border-color:var(--border-hover);background:0 0}.btn--secondary:hover{color:var(--text-primary);border-color:var(--text-muted);background:var(--bg-elevated)}.btn:disabled{opacity:.5;cursor:not-allowed}.section{max-width:var(--max-width);padding:var(--spacing-2xl) var(--spacing-lg);margin:0 auto}.section-kicker{font-family:var(--font-mono);color:var(--accent);margin-bottom:var(--spacing-xs);font-size:.8rem;display:block}.section>h2,.section-header h2{margin-bottom:var(--spacing-md)}.hero{max-width:var(--max-width);padding:calc(var(--spacing-3xl) + var(--spacing-xl)) var(--spacing-lg) var(--spacing-3xl);margin:0 auto}.hero__label{font-family:var(--font-mono);color:var(--accent);margin-bottom:var(--spacing-sm);font-size:.85rem;display:block}.hero-title{margin-bottom:var(--spacing-xs)}.hero__role{color:var(--text-primary);margin-bottom:var(--spacing-sm);font-size:1.35rem;font-weight:500}.hero__intro{max-width:560px;margin-bottom:var(--spacing-lg)}.hero-actions{gap:var(--spacing-sm);flex-wrap:wrap;display:flex}.about-card{grid-gap:var(--spacing-lg);gap:var(--spacing-lg);background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-card);padding:var(--spacing-lg);grid-template-columns:2fr 1fr;display:grid}.about-card__prose p+p{margin-top:var(--spacing-sm)}.about-facts{gap:var(--spacing-sm);border-left:1px solid var(--border-color);padding-left:var(--spacing-lg);flex-direction:column;display:flex}.about-fact__label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin-bottom:2px;font-size:.75rem;display:block}.about-fact__value{color:var(--text-primary);font-size:.95rem}@media (max-width:768px){.about-card{grid-template-columns:1fr}.about-facts{border-left:none;border-top:1px solid var(--border-color);padding-left:0;padding-top:var(--spacing-sm);gap:var(--spacing-md);flex-flow:wrap}}.projects-grid{grid-gap:var(--spacing-sm);gap:var(--spacing-sm);grid-template-columns:repeat(2,1fr);display:grid}.project-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-card);padding:var(--spacing-md);color:inherit;transition:border-color var(--transition-fast), transform var(--transition-fast), background-color var(--transition-fast);flex-direction:column;display:flex}.project-card:hover{border-color:var(--border-hover);background:var(--bg-elevated);color:inherit;transform:translateY(-2px)}.project-card--featured{grid-column:span 2}.project-card__kicker{font-family:var(--font-mono);color:var(--accent);margin-bottom:var(--spacing-xs);font-size:.75rem}.project-card__title{margin-bottom:6px}.project-card__desc{margin-bottom:var(--spacing-sm);font-size:.95rem}.project-card__tech{margin-top:auto;margin-bottom:var(--spacing-sm);flex-wrap:wrap;gap:8px;display:flex}.project-card__tag{font-family:var(--font-mono);color:var(--text-secondary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-pill);padding:3px 10px;font-size:.75rem}.project-card__cta{color:var(--accent);align-items:center;gap:6px;font-size:.9rem;font-weight:500;display:inline-flex}.project-card:hover .project-card__cta{color:var(--accent-hover)}.project-card__cta svg{transition:transform var(--transition-fast)}.project-card:hover .project-card__cta svg{transform:translate(3px)}@media (max-width:768px){.projects-grid{grid-template-columns:1fr}.project-card--featured{grid-column:auto}}.skills-grid{grid-gap:var(--spacing-sm);gap:var(--spacing-sm);grid-template-columns:repeat(3,1fr);display:grid}.skill-tile{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-card);padding:var(--spacing-md)}.skill-tile__label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);margin-bottom:var(--spacing-sm);font-size:.75rem;display:block}.skills-chips{flex-wrap:wrap;gap:8px;display:flex}.skill-chip{font-family:var(--font-mono);color:var(--text-primary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-pill);padding:4px 12px;font-size:.8rem}.karl-tile{justify-content:center;align-items:center;gap:var(--spacing-xs);text-align:center;background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-card);padding:var(--spacing-md);flex-direction:column;display:flex}.karl-tile__image{-o-object-fit:cover;object-fit:cover;border-radius:12px}.karl-tile__caption{font-family:var(--font-mono);color:var(--text-secondary);font-size:.8rem}@media (max-width:900px){.skills-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:600px){.skills-grid{grid-template-columns:1fr}}.contact-card{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-card);padding:var(--spacing-lg);max-width:560px}.contact-card>p{margin-bottom:var(--spacing-md)}.contact-form{gap:var(--spacing-sm);flex-direction:column;display:flex}.form-group{flex-direction:column;gap:6px;display:flex}.form-label{color:var(--text-primary);font-size:.9rem;font-weight:500}.form-input,.form-textarea{font-family:var(--font-primary);color:var(--text-primary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-control);transition:border-color var(--transition-fast);padding:12px 14px;font-size:1rem}.form-input:hover,.form-textarea:hover{border-color:var(--border-hover)}.form-input:focus,.form-textarea:focus{border-color:var(--accent);outline:none}.form-textarea{resize:vertical;min-height:140px}.form-error,.contact-form [role=alert]{color:var(--error-color);font-size:.85rem}.contact-success__title{color:var(--text-primary);margin-bottom:4px;font-weight:600}.footer{border-top:1px solid var(--border-color);margin-top:var(--spacing-2xl)}.footer__container{max-width:var(--max-width);padding:var(--spacing-md) var(--spacing-lg);justify-content:space-between;align-items:center;gap:var(--spacing-sm);margin:0 auto;display:flex}.footer__copy{color:var(--text-muted);font-size:.85rem}.footer__links{gap:var(--spacing-xs);display:flex}.footer__link{color:var(--text-secondary);border-radius:var(--radius-control);transition:color var(--transition-fast), background-color var(--transition-fast);align-items:center;gap:6px;padding:8px 12px;font-size:.85rem;display:inline-flex}.footer__link:hover{color:var(--text-primary);background:var(--bg-elevated)}@media (max-width:600px){.footer__container{flex-direction:column;align-items:flex-start}}.project-page{flex-direction:column;min-height:100vh;display:flex}.project-page__container{width:100%;max-width:760px;padding:var(--spacing-xl) var(--spacing-lg);flex:1;margin:0 auto}.back-link{color:var(--text-secondary);margin-bottom:var(--spacing-lg);transition:color var(--transition-fast);align-items:center;gap:8px;padding:8px 0;font-size:.9rem;display:inline-flex}.back-link:hover{color:var(--text-primary)}.project-page__title{margin-bottom:var(--spacing-sm);font-size:2.25rem}.project-page__subtitle{margin-bottom:var(--spacing-lg);font-size:1.1rem}.project-page__section{margin-bottom:var(--spacing-xl)}.project-page__section h2{margin-bottom:var(--spacing-sm);font-size:1.35rem}.project-page__section p+p{margin-top:var(--spacing-sm)}.project-page__section strong{color:var(--text-primary)}.tech-tags{flex-wrap:wrap;gap:8px;display:flex}.tech-tag{font-family:var(--font-mono);color:var(--text-primary);background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-pill);padding:4px 12px;font-size:.8rem}.project-page__table{border-collapse:collapse;width:100%;font-size:.95rem}.project-page__table td{border:1px solid var(--border-color);color:var(--text-secondary);padding:10px 12px}.project-page__table td:first-child{color:var(--text-primary);white-space:nowrap}.project-page__code{background:var(--bg-card);border:1px solid var(--border-color);border-radius:var(--radius-card);padding:var(--spacing-sm) var(--spacing-md);margin:var(--spacing-sm) 0;color:var(--text-secondary);font-size:.85rem;line-height:1.6;overflow-x:auto}.project-page__link{align-items:center;gap:6px;font-weight:500;display:inline-flex}
@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/fef07dbb0973bf53-s.12tyk43_3sh9u.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/8a480f0b521d4e75-s.0jzbimsg8vl84.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/53b9e256198e5412-s.0-wfv7uh4i7h9.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:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/7178b3e590c64307-s.0nx0ww8fni_q3.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:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.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:Geist Fallback;src:local(Arial);ascent-override:95.94%;descent-override:28.16%;line-gap-override:0.0%;size-adjust:104.76%}.geist_60404c3a-module__AvAe8G__className{font-family:Geist,Geist Fallback;font-style:normal}.geist_60404c3a-module__AvAe8G__variable{--font-primary:"Geist", "Geist Fallback"}
@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/5ce348bf30bf5439-s.0zgw-jeven.3w.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/4fa387ec64143e14-s.0wkzw~je483f-.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/6306c77e7c8268e4-s.0rhz0arwfsn~5.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/7d817b4c03b0c5f1-s.0l76wvqk9d84w.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:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/bbc41e54d2fcbd21-s.0k4k9394f2q-k.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:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/797e433ab948586e-s.p.08e28id.o-okb.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:Geist Mono Fallback;src:local(Arial);ascent-override:74.67%;descent-override:21.92%;line-gap-override:0.0%;size-adjust:134.59%}.geist_mono_4ac27a97-module__1EEhOq__className{font-family:Geist Mono,Geist Mono Fallback;font-style:normal}.geist_mono_4ac27a97-module__1EEhOq__variable{--font-mono:"Geist Mono", "Geist Mono Fallback"}
