@font-face{font-family:Geist;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/8a480f0b521d4e75-s.8e0177b5.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/7178b3e590c64307-s.b97b3418.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.853070df.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_967664a6-module__4K9MCG__className{font-family:Geist,Geist Fallback;font-style:normal}.geist_967664a6-module__4K9MCG__variable{--font-geist-sans:"Geist","Geist Fallback"}
@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/4fa387ec64143e14-s.c1fdd6c2.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/bbc41e54d2fcbd21-s.799d8ef8.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.dbea232f.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_5ce8c3f-module__SSBbPG__className{font-family:Geist Mono,Geist Mono Fallback;font-style:normal}.geist_mono_5ce8c3f-module__SSBbPG__variable{--font-geist-mono:"Geist Mono","Geist Mono Fallback"}
:root{--bg:#0b0c0e;--bg-card:#17191d;--bg-header:#0b0c0e66;--bg-tag:#f3f6fa0d;--bg-button-primary:#f3f6fa;--bg-button-primary-hover:#f3f6facc;--bg-button-secondary:#f3f6fa1a;--bg-button-secondary-hover:#f3f6fa33;--border:#f3f6fa0d;--border-solid:#f3f6fa;--text-primary:#f3f6fae6;--text-secondary:#f3f6fa80;--text-tertiary:#f3f6fa4d;--text-inverse:#0b0c0e}[data-theme=light]{--bg:#f3f6fa;--bg-card:#fcfdff;--bg-header:#f3f6fa66;--bg-tag:#0b0c0e0d;--bg-button-primary:#0b0c0e;--bg-button-primary-hover:#0b0c0ecc;--bg-button-secondary:#0b0c0e0d;--bg-button-secondary-hover:#0b0c0e1a;--border:#0b0c0e0d;--border-solid:#0b0c0e;--text-primary:#0b0c0ee6;--text-secondary:#0b0c0e80;--text-tertiary:#0b0c0e4d;--text-inverse:#f3f6fa}*{box-sizing:border-box;margin:0;padding:0}body{min-width:320px;min-height:100vh;color:var(--text-primary);background-color:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,system-ui,sans-serif;font-size:14px;font-weight:400;line-height:18px}.portfolio{background-color:var(--bg);flex-direction:column;align-items:center;width:100%;min-height:100vh;transition:background-color .2s;display:flex}.section{width:100%;max-width:720px;padding:40px;position:relative}.section:before,.section:after{content:"";background-color:var(--border);width:1px;height:100%;transition:background-color .2s;position:absolute;top:0}.section:before{clip-path:inset(0 0 100%);transition:clip-path .8s cubic-bezier(.4,0,.2,1) .4s,background-color .2s;left:0}.section:after{clip-path:inset(100% 0 0);transition:clip-path .8s cubic-bezier(.4,0,.2,1) .4s,background-color .2s;right:0}.section.lines-revealed:before,.section.lines-revealed:after{clip-path:inset(0)}.section.section-lines-top-down{padding:20px 20px 0}.section.section-lines-top-down:after{clip-path:inset(0 0 100%)}.section.section-lines-top-down.lines-revealed:after{clip-path:inset(0)}.section-title{letter-spacing:0;color:var(--text-secondary);text-transform:uppercase;margin:0 0 32px;font-size:14px;font-weight:500;line-height:18px}.btn{cursor:pointer;transform-origin:50%;border:none;border-radius:999px;justify-content:center;align-items:center;font-family:inherit;font-weight:500;text-decoration:none;transition:scale .3s ease-out,background-color .3s ease-out;display:inline-flex;position:relative;overflow:hidden;scale:1}.btn:hover{scale:1.03}.btn:active{transition:scale .15s ease-out,background-color .15s ease-out;scale:.97}.btn-primary{background-color:var(--bg-button-primary);color:var(--text-inverse)}.btn-primary:hover{background-color:var(--bg-button-primary-hover)}.btn-primary-s{height:32px;padding:6px 12px;font-size:14px;line-height:16px}.btn-primary-m{height:40px;padding:10px 20px;font-size:16px;line-height:20px}.btn-secondary{background-color:var(--bg-button-secondary);color:var(--text-primary);height:40px;padding:10px 20px;font-size:16px;line-height:20px}.btn-secondary:hover{background-color:var(--bg-button-secondary-hover)}.btn-tertiary{color:var(--text-primary);background:0 0}.btn-tertiary:hover{background-color:var(--bg-button-secondary)}.tag{background-color:var(--bg-tag);height:32px;color:var(--text-primary);border-radius:6px;justify-content:center;align-items:center;padding:4px 12px;font-size:14px;font-weight:400;line-height:18px;transition:background-color .2s,color .2s;display:inline-flex}.tag-primary{background-color:var(--bg-button-primary);height:24px;color:var(--text-inverse);border-radius:4px;padding:4px 6px}.tag-secondary{background-color:var(--bg-tag);height:24px;color:var(--text-secondary);border-radius:4px;padding:4px 6px}.external-link{color:var(--text-secondary);cursor:pointer;align-items:center;gap:6px;font-size:14px;font-weight:500;line-height:18px;text-decoration:none;transition:color .2s,opacity .2s;display:inline-flex}.external-link:hover{color:var(--text-primary);opacity:1}.external-link-secondary{color:var(--text-secondary)}.external-link-secondary:hover{color:var(--text-primary);opacity:1}.external-link-icon{opacity:.7;flex-shrink:0;width:16px;height:16px;transition:opacity .2s ease-out,rotate .2s ease-out}.external-link:hover .external-link-icon{opacity:1;rotate:45deg}.internal-link{color:var(--text-secondary);text-underline-offset:2px;text-decoration:underline;-webkit-text-decoration-color:var(--text-tertiary);text-decoration-color:var(--text-tertiary);align-items:center;gap:6px;font-size:14px;font-weight:500;line-height:18px;transition:color .2s,text-decoration-color .2s;display:inline-flex}.internal-link:hover{color:var(--text-primary);-webkit-text-decoration-color:var(--text-secondary);text-decoration-color:var(--text-secondary)}.header-lang{color:var(--text-secondary);align-items:center;gap:4px;font-size:14px;font-weight:500;line-height:16px;display:flex}.header-lang button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;padding:0;transition:color .2s;position:relative}.header-lang button:after{content:"";background-color:var(--border-solid);width:0;height:1px;transition:width .2s ease-out;position:absolute;bottom:-2px;left:0}.header-lang button.header-lang-active,.header-lang button:hover{color:var(--text-primary)}.header-lang button:hover:after{width:100%}@media (hover:none){.header-lang button:hover:after{width:0}}.theme-btn{cursor:pointer;width:20px;height:20px;color:var(--text-primary);background:0 0;border:none;justify-content:center;align-items:center;padding:0;transition:color .2s,scale .15s,opacity .2s;display:flex}.theme-btn:hover{opacity:.7}.theme-btn:active{scale:.95}.theme-btn-icon{object-fit:contain;width:20px;height:20px}[data-theme=light] .theme-btn-icon path{fill:#0b0c0e;fill-opacity:.5}.pattern{clip-path:inset(0 100% 0 0);width:100%;max-width:720px;height:40px;line-height:0;transition:clip-path .8s cubic-bezier(.4,0,.2,1) .4s}.pattern.pattern-revealed{clip-path:inset(0)}.pattern svg{display:block}.projects-list{flex-direction:column;gap:24px;display:flex}.project-card{background-color:var(--bg-card);opacity:0;border-radius:24px;gap:16px;padding:16px;transition:opacity .6s ease-out,translate .6s ease-out,background-color .3s ease-out,box-shadow .3s ease-out;display:flex;position:relative;overflow:hidden;translate:0 24px}.project-card.revealed{opacity:1;translate:0}.project-card:hover{box-shadow:0 12px 32px -6px #060708cc,0 32px 72px -14px #0a0b0d99}[data-theme=light] .project-card:hover{box-shadow:0 8px 24px -6px #33415524,0 24px 64px -12px #4755691a}.project-card:active{transition:translate .15s ease-out,background-color .15s ease-out,box-shadow .15s ease-out;translate:0}.project-cover{border:1px solid var(--border);border-radius:8px;width:240px;min-width:240px;height:240px;overflow:hidden}.project-cover-img{object-fit:cover;transform-origin:50%;width:100%;height:100%;transition:scale .3s ease-out;scale:1}.project-card:hover .project-cover-img{scale:1.05}.project-details{flex-direction:column;flex:1;justify-content:space-between;padding:8px 0;display:flex}.project-name{color:var(--text-primary);margin:0 0 16px;font-size:20px;font-weight:500;line-height:24px}.project-tags{flex-wrap:wrap;gap:12px;margin-bottom:16px;display:flex}.project-tag{background-color:var(--bg-tag);height:24px;color:var(--text-secondary);border-radius:4px;justify-content:center;align-items:center;padding:4px 6px;font-size:14px;font-weight:400;line-height:18px;display:inline-flex}.project-description{color:var(--text-secondary);margin:0;font-size:14px;line-height:18px}.project-card-link,.experiments-card-link{color:inherit;cursor:pointer;text-decoration:none}.project-card-link:hover{opacity:.95}.ripple{opacity:.15;pointer-events:none;background:currentColor;border-radius:50%;animation:.6s ease-out forwards ripple-expand;position:absolute;transform:scale(0)}@keyframes ripple-expand{to{opacity:0;transform:scale(2.5)}}.img-reveal{opacity:0;filter:blur(8px);transition:opacity .6s ease-out,scale .6s ease-out,filter .6s ease-out;scale:.95}.img-reveal.revealed{opacity:1;filter:none;scale:1}.text-reveal-title{opacity:0;filter:blur(8px);transition:opacity .6s ease-out,translate .6s ease-out,scale .6s ease-out,filter .6s ease-out;translate:0 24px}.text-reveal-body{opacity:0;filter:blur(8px);transition:opacity .6s ease-out,translate .6s ease-out,scale .6s ease-out,filter .6s ease-out;translate:0 16px}.text-reveal-title.revealed,.text-reveal-body.revealed{opacity:1;filter:none;translate:0}.tag-reveal{opacity:0;transition:opacity .3s ease-out,translate .3s ease-out,scale .3s ease-out;translate:0 16px}.tag-reveal.revealed{opacity:1;translate:0}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){z-index:9999}::view-transition-old(root){z-index:1}@media (max-width:768px){.section{padding:40px 16px}.section.section-lines-top-down{padding:20px 8px 0}.section:before,.section:after{display:none}.btn:hover{scale:1}.project-card{flex-direction:column;min-height:30.125rem}.project-cover{aspect-ratio:329/247;width:100%;min-width:auto;height:auto}.project-details{padding:0 6px 6px}.project-name{margin-bottom:12px}.project-tags{gap:6px;margin-bottom:40px}.project-card:hover,.experiments-card-link:hover{box-shadow:none}}.icon-rotate{transform-origin:50%;rotate:var(--icon-angle,0deg)}
