*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #fafafa;--text: #1a1a1a;--text-muted: #666;--accent: #1a1a1a;--border: #e0e0e0}[data-theme=dark]{--bg: #0a0a0a;--text: #e5e5e5;--text-muted: #888;--accent: #e5e5e5;--border: #2a2a2a}@font-face{font-family:JetBrains Mono;src:url(/fonts/JetBrainsMono-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@view-transition{navigation:auto}@keyframes pop-in{0%{opacity:0;transform:scale(.96) translateZ(0)}to{opacity:1;transform:scale(1) translateZ(0)}}@keyframes pop-out{0%{opacity:1;transform:scale(1) translateZ(0)}to{opacity:0;transform:scale(1.04) translateZ(0)}}::view-transition-old(root){animation:.2s cubic-bezier(.4,0,.2,1) both pop-out;mix-blend-mode:normal}::view-transition-new(root){animation:.3s cubic-bezier(.4,0,.2,1) both pop-in;mix-blend-mode:normal}::view-transition-group(root){animation-timing-function:cubic-bezier(.4,0,.2,1)}@media(prefers-reduced-motion:reduce){@view-transition{navigation:auto}::view-transition-old(root),::view-transition-new(root){animation:none}}html{font-family:JetBrains Mono,monospace;font-size:16px;line-height:1.6;color:var(--text);background-color:var(--bg);transition:background-color .2s ease-out,color .2s ease-out,font-size .2s ease-out;margin:0;padding:0}[data-font-size=large]{font-size:18px}[data-font-size=extra-large]{font-size:20px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}h1{font-size:1.75rem;font-weight:400;line-height:1.2;margin-bottom:.75rem;letter-spacing:-.02em}h2{font-size:1.125rem;font-weight:400;line-height:1.4;margin-bottom:1rem}h3{font-size:1rem;font-weight:400;line-height:1.4;margin-bottom:.5rem;opacity:.95}p{margin-bottom:1rem}small{font-size:.875rem;letter-spacing:.02em}body{max-width:600px;margin:0 auto;padding:0 1.5rem;min-height:100vh}html:has(.home){height:100vh;overflow:hidden}body:has(.home){height:100vh;overflow:hidden}.home{height:100vh;max-height:100vh;display:flex;flex-direction:column;justify-content:center;overflow:hidden;padding-top:3rem}a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;transition:opacity .2s ease-out}a:hover{opacity:.7}a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.skip-link{position:absolute;top:-3rem;left:0;background:var(--accent);color:var(--bg);padding:.5rem 1rem;text-decoration:none;z-index:100}.skip-link:focus{top:0}[data-font-size=large] .skip-link{top:-4rem}[data-font-size=large] .skip-link:focus{top:0}[data-font-size=extra-large] .skip-link{top:-5rem}[data-font-size=extra-large] .skip-link:focus{top:0}section{margin-bottom:1.5rem}.intro{margin-bottom:.5rem}.intro p:first-of-type{color:var(--text-muted);font-size:.9375rem;margin-bottom:1.5rem}.nav-links{margin:1rem 0 2rem;display:flex;justify-content:center}.nav-links a{display:inline-block;padding:1rem 2.5rem;border:2px solid var(--accent);text-decoration:none;font-size:1.125rem;letter-spacing:.05em;transition:all .3s cubic-bezier(.34,1.56,.64,1);position:relative}@media(prefers-reduced-motion:no-preference){@keyframes pulse{0%,to{transform:scale(1);box-shadow:0 0 0 0 var(--accent)}50%{transform:scale(1.02);box-shadow:0 0 0 3px transparent}}.nav-links a{animation:pulse 4s ease-in-out infinite}.nav-links a:hover{animation:none}}.nav-links a:hover{background-color:var(--accent);color:var(--bg);transform:scale(1.05);opacity:1}.nav-links a:focus-visible{outline:2px solid var(--accent);outline-offset:4px;animation:none}.contact-links{margin-top:1rem;display:flex;gap:1.5rem;font-size:.875rem;color:var(--text-muted)}.contact-links a{color:var(--text-muted)}.back-link{position:fixed;top:1.5rem;left:1.5rem;font-size:.875rem;line-height:1;color:var(--text-muted);text-decoration:none;transition:opacity .2s ease-out;padding:.5rem;margin:-.5rem}.back-link:hover{opacity:.7}.back-link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}#main:has(.back-link){padding:4rem 0 2rem;min-height:100vh;overflow-y:auto}body:has(.back-link){padding:0 1.5rem}.theme-toggle{position:fixed;top:1.5rem;right:1.5rem;background:none;border:none;font-family:inherit;font-size:.875rem;line-height:1;color:var(--text-muted);cursor:pointer;padding:.5rem;margin:-.5rem;transition:opacity .2s ease-out,transform .2s ease-out;z-index:100;display:flex;align-items:center;justify-content:center}.theme-toggle:hover{opacity:.7}.theme-toggle:hover svg path{fill:currentColor}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.font-size-toggle{position:fixed;top:1.5rem;right:3.75rem;background:none;border:none;font-family:inherit;font-size:.875rem;line-height:1;color:var(--text-muted);cursor:pointer;padding:.5rem;margin:-.5rem;transition:opacity .2s ease-out,transform .2s ease-out;z-index:100;display:flex;align-items:center;justify-content:center}.font-size-toggle:hover{opacity:.7}.font-size-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.lang-switcher{position:fixed;top:1.6rem;right:6rem;padding:.5rem;margin:-.5rem;font-size:.875rem;line-height:1;color:var(--text-muted);text-decoration:none;border:none;transition:opacity .2s ease-out,transform .2s ease-out;background:none;z-index:100;display:flex;align-items:center;justify-content:center;padding-top:calc(.5rem - 1px);padding-bottom:calc(.5rem + 1px)}[data-font-size=large] .lang-switcher{top:1.55rem}.lang-switcher:hover{opacity:.7}.lang-switcher:focus-visible{outline:2px solid var(--accent);outline-offset:2px}[data-font-size=large] .theme-toggle,[data-font-size=large] .font-size-toggle,[data-font-size=large] .lang-switcher{transform:scale(1.125)}#tagline{margin-top:1.5rem}.projects-list{display:flex;flex-direction:column;gap:2rem;margin-bottom:4rem}.project-card{display:block;padding:1.5rem;border:1px solid var(--border);text-decoration:none;transition:background-color .25s ease-out,border-color .25s ease-out,transform .25s ease-out}.project-card:hover,.project-card:focus-visible,.project-card.force-hover-state{background-color:var(--border);border-color:var(--text-muted);transform:translateY(-2px);opacity:1}.project-image{width:100%;margin-bottom:1rem;overflow:hidden;border-radius:2px;position:relative;cursor:zoom-in}.project-image img{width:100%;height:auto;display:block;transition:opacity .25s ease-out}.project-card:hover .project-image img,.project-card:focus-visible .project-image img,.project-card.force-hover-state .project-image img{opacity:.9}.project-image-zoom-icon{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:48px;height:48px;background:#000000b3;border-radius:50%;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .25s ease-out;pointer-events:none;z-index:1}.project-image-zoom-icon svg{width:24px;height:24px;color:#fff}.project-image:hover .project-image-zoom-icon{opacity:1}@media(hover:none){.project-image-zoom-icon{display:none}}.project-content{display:flex;flex-direction:column}.project-card h3{margin-bottom:.75rem;display:flex;align-items:baseline;gap:.5rem;opacity:1;font-size:clamp(.9375rem,4vw,1.0625rem);letter-spacing:-.01em}.project-title-link{text-decoration:none}.project-title-text{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}.external-icon{font-size:1.2rem;opacity:.6;position:relative;top:.28rem}.earlier-work .external-icon{margin-left:0;top:.3rem}.project-card p.description{margin-bottom:1rem;color:var(--text);opacity:.85;line-height:1.5;font-size:clamp(.875rem,3.5vw,1rem)}.project-details{max-height:0;overflow:hidden;opacity:0;transition:max-height .3s ease-out,opacity .25s ease-out,margin-top .3s ease-out;margin-top:0}.project-card:hover .project-details,.project-card:focus-visible .project-details,.project-card.force-hover-state .project-details{max-height:200px;opacity:1;margin-top:.75rem}@media(hover:none){.project-details{max-height:none;opacity:1;margin-top:.75rem}}.detail-item{font-size:.8125rem;color:var(--text-muted);margin-bottom:.25rem;line-height:1.5}.detail-item:last-child{margin-bottom:0}.detail-label{opacity:.7;margin-right:.25rem}.tech-list{opacity:.85}.tags{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.tag{font-size:.75rem;color:var(--text-muted);letter-spacing:.02em}.tag-separator{font-size:.75rem;color:var(--text-muted);opacity:.4;margin:0 .25rem}.client-link{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;transition:opacity .2s ease-out}.client-link:hover,.client-link:focus-visible{opacity:.6}.earlier-work{margin-top:4rem;padding-top:2rem;border-top:1px solid var(--border)}.earlier-work h2{font-size:.875rem;color:var(--text-muted);margin-bottom:1rem}.earlier-work h2:after{content:" ↓";font-size:.75rem;opacity:.5;margin-left:.25rem}.earlier-work-list{display:flex;flex-direction:column;gap:.5rem}.earlier-work-card{color:var(--text-muted);font-size:.875rem;text-decoration:none;display:block;padding:.5rem 0;transition:color .2s ease-out,padding-left .2s ease-out}.earlier-work-card:hover,.earlier-work-card:focus-visible{color:var(--text);padding-left:.5rem;opacity:1}.project-title{display:inline-flex;align-items:baseline;gap:.25rem}.project-hover-info{display:block;margin-top:.25rem;font-size:.8125rem;max-height:0;overflow:hidden;opacity:0;transition:max-height .25s ease-out,opacity .2s ease-out,margin-top .25s ease-out}.earlier-work-card:hover .project-hover-info,.earlier-work-card:focus-visible .project-hover-info{max-height:50px;opacity:.7;margin-top:.35rem}@media(hover:none){.project-hover-info{max-height:none;opacity:.7;margin-top:.35rem}}.hover-description{color:var(--text-muted)}.hover-separator{margin:0 .5rem;opacity:.5}.hover-tech{color:var(--text-muted);opacity:.8}@media(max-width:768px){.theme-toggle{top:1rem;right:1rem}.font-size-toggle{top:1rem;right:3rem}.lang-switcher{top:1.25rem;right:5rem}}@media(max-width:640px){html{font-size:15px}body{padding:0 1rem}html:has(.home){height:100vh;overflow:hidden}body:has(.home){height:100vh;overflow:hidden;padding:0 1rem}.home{height:100vh;max-height:100vh;padding:0;overflow:hidden}.back-link{top:1rem;left:1rem}#main:has(.back-link){padding:3rem 0 1rem;min-height:100vh;overflow-y:auto}body:has(.back-link){padding:0 1rem}h1{font-size:1.375rem;line-height:1.1;margin-bottom:.5rem}h2{font-size:1rem}p{margin-bottom:.75rem;line-height:1.5}.intro p:first-of-type{font-size:.875rem;margin-bottom:1rem}section{margin-bottom:1rem}.nav-links{margin:1.25rem 0}.nav-links a{padding:.85rem 2rem;font-size:1rem}.contact-links{margin-top:.75rem;font-size:.8125rem}.project-card h3{font-size:.9375rem;margin-bottom:.5rem}.project-card{padding:1rem}.project-card p.description{margin-bottom:.75rem;line-height:1.4}.project-image{margin-bottom:.75rem}.detail-item{font-size:.75rem}.tags{gap:.35rem}.tag{font-size:.6875rem}.tag-separator{font-size:.6875rem;margin:0 .15rem}.projects-list{gap:1.25rem;margin-bottom:5rem}.earlier-work{margin-top:3rem;margin-bottom:2rem}.earlier-work h2{cursor:pointer}.earlier-work-card{padding:.75rem 0;font-size:.8125rem}.project-hover-info{font-size:.75rem}}[data-font-size=large] .home{padding-top:4rem}[data-font-size=extra-large] .home{padding-top:5rem}@media(max-width:640px){[data-font-size=large] .nav-links{margin:.25rem 0 .75rem}[data-font-size=large] section{margin-bottom:.5rem}[data-font-size=large] .intro{margin-bottom:0rem}[data-font-size=large] .lang-switcher{top:1rem;right:5rem}}@media(max-width:768px){[data-font-size=large] .lang-switcher{top:1.05rem;right:5rem}}
