@font-face{font-family:Bebas Neue;src:url(/assets/fonts/bebas-neue-latin.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:DM Sans;src:url(/assets/fonts/dm-sans-latin.woff2)format("woff2");font-weight:300 600;font-style:normal;font-display:swap}:root{--bg:#0a0a0a;--surface:#141414;--border:#f0ede817;--text:#f0ede8;--muted:#999794;--faint:#7d7c79;--accent:#e8284f;--accent-text:#f0496b;--accent-fill:#dc2248;--font-head:"Bebas Neue", "Arial Narrow", sans-serif;--font-body:"DM Sans", system-ui, sans-serif;--gutter:clamp(24px, 5vw, 60px);--maxw:1240px;--pad-x:max(var(--gutter), calc((100% - var(--maxw)) / 2));--ease:cubic-bezier(.16, 1, .3, 1)}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{color-scheme:dark;scroll-behavior:smooth;scrollbar-color:#2e2e2e var(--bg);-webkit-text-size-adjust:100%;scroll-padding-top:88px}body{background:var(--bg);color:var(--text);font-family:var(--font-body);-webkit-font-smoothing:antialiased;font-size:1rem;font-weight:350;line-height:1.75;overflow-x:hidden}img{max-width:100%;display:block}a{color:inherit;text-underline-offset:.22em}ul,ol{list-style:none}::selection{background:var(--accent);color:#fff}:focus-visible{outline:2px solid var(--accent-text);outline-offset:3px;border-radius:2px}.sr-only{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip-link{left:var(--gutter);z-index:200;background:var(--accent-fill);color:#fff;padding:10px 16px;text-decoration:none;position:absolute;top:-100px}.skip-link:focus{top:12px}nav{z-index:100;padding:22px var(--pad-x);border-bottom:1px solid #0000;justify-content:space-between;align-items:center;transition:border-color .4s,background-color .4s;display:flex;position:fixed;inset:0 0 auto}nav.scrolled{border-color:var(--border);backdrop-filter:blur(12px);background:#0a0a0adb}.nav-logo{font-family:var(--font-head);letter-spacing:.02em;font-size:1.6rem;line-height:1;text-decoration:none}.nav-logo span{color:var(--accent)}.nav-links{gap:36px;display:flex}.nav-links a{color:var(--muted);letter-spacing:.1em;text-transform:uppercase;font-size:.8rem;font-weight:450;text-decoration:none;transition:color .3s;position:relative}.nav-links a:after{content:"";background:var(--accent);height:1px;transition:right .35s var(--ease);position:absolute;bottom:-4px;left:0;right:100%}.nav-links a:is(:hover,.active){color:var(--text)}.nav-links a:is(:hover,.active):after{right:0}.nav-links .nav-lang{color:var(--accent-text)}.hero{min-height:92svh;padding:140px var(--pad-x) 96px;flex-direction:column;justify-content:center;display:flex}.hero-headline{font-family:var(--font-head);letter-spacing:.01em;font-size:clamp(3.25rem,7vw,5.4rem);font-weight:400;line-height:.95}.hero-headline .line{animation:lineUp .9s .1s var(--ease) backwards;display:block}.hero-headline .line:nth-child(2){animation-delay:.18s}.hero-headline .line:nth-child(3){animation-delay:.26s}.hero-headline .name{color:var(--accent);font-size:1.1em}.hero-headline .typed{min-height:.95em}.hero-headline .typed:after{content:"";background:currentColor;width:.05em;height:.72em;margin-left:.06em;animation:1.1s step-end infinite blink;display:inline-block}.hero-sub{max-width:34ch;color:var(--muted);animation:fadeUp .9s .45s var(--ease) both;margin-top:32px;font-size:1.1rem;line-height:1.65}.hero-actions{animation:fadeUp .9s .55s var(--ease) both;flex-wrap:wrap;align-items:center;gap:16px 32px;margin-top:44px;display:flex}.btn-primary{background:var(--accent-fill);color:#fff;font-family:var(--font-head);letter-spacing:.06em;transition:background-color .25s, transform .25s var(--ease);border-radius:2px;padding:17px 32px 15px;font-size:1.2rem;line-height:1;text-decoration:none;display:inline-block}.btn-primary:hover{background:#c41c40;transform:translateY(-2px)}.btn-primary:active{transform:none}.btn-ghost{color:var(--muted);align-items:center;gap:10px;font-size:.95rem;text-decoration:none;transition:color .3s;display:inline-flex}.btn-ghost svg{transition:transform .3s var(--ease)}.btn-ghost:hover{color:var(--text)}.btn-ghost:hover svg{transform:translate(4px)}.marquee{background:var(--surface);border-block:1px solid var(--border);padding:20px 0 17px;overflow:hidden}.marquee-track{width:max-content;animation:48s linear infinite marquee;display:flex}.marquee:hover .marquee-track{animation-play-state:paused}.marquee-item{font-family:var(--font-head);letter-spacing:.1em;color:var(--muted);white-space:nowrap;align-items:center;gap:36px;padding-right:36px;font-size:1.15rem;line-height:1;display:flex}.marquee-item:after{content:"";background:var(--accent);border-radius:50%;width:5px;height:5px;margin-top:-2px}section{padding:clamp(96px, 12vw, 150px) var(--pad-x)}section+section:not(.contact){padding-top:0}.section-title{font-family:var(--font-head);letter-spacing:.01em;text-wrap:balance;margin-bottom:clamp(40px,5vw,60px);font-size:clamp(2.6rem,5vw,4rem);font-weight:400;line-height:1}.section-title:before{content:"";background:var(--accent);width:32px;height:2px;margin-bottom:22px;display:block}#about{overflow-x:clip}.about{grid-template-columns:minmax(0,5fr) minmax(0,6fr);align-items:center;gap:clamp(56px,8vw,110px);display:grid}.about-visual{width:100%;max-width:420px;position:relative}.about-frame{aspect-ratio:4/5;background:var(--surface);border:1px solid var(--border);border-radius:2px;overflow:hidden}.about-frame img{object-fit:cover;object-position:50% 20%;width:100%;height:100%}.about-initials{height:100%;font-family:var(--font-head);color:var(--faint);place-items:center;font-size:8rem;display:grid}.about-badge{background:var(--accent-fill);color:#fff;width:140px;height:140px;font-family:var(--font-head);letter-spacing:.08em;text-align:center;border-radius:50%;place-items:center;font-size:1.25rem;line-height:1.05;display:grid;position:absolute;bottom:-28px;right:-28px;transform:rotate(-10deg)}.about-text .section-title{margin-bottom:28px}.about-text p{color:var(--muted);max-width:60ch;margin-bottom:16px}.about-stats{background:var(--border);border:1px solid var(--border);grid-template-columns:repeat(3,1fr);gap:1px;margin-top:44px;display:grid}.stat{background:var(--bg);flex-direction:column-reverse;justify-content:flex-end;gap:8px;padding:24px 22px 20px;display:flex}.stat dd{font-family:var(--font-head);color:var(--accent-text);font-variant-numeric:tabular-nums;font-size:2.6rem;line-height:1}.stat dt{letter-spacing:.1em;text-transform:uppercase;color:var(--faint);font-size:.72rem;font-weight:450}.now{margin-top:36px}.now-title{font-family:var(--font-head);letter-spacing:.02em;flex-wrap:wrap;align-items:baseline;gap:4px 14px;margin-bottom:12px;font-size:1.5rem;font-weight:400;line-height:1;display:flex}.now-title span{font-family:var(--font-body);letter-spacing:.1em;text-transform:uppercase;color:var(--faint);font-size:.72rem;font-weight:450}.now-list li{color:var(--muted);max-width:60ch;padding-left:20px;position:relative}.now-list li+li{margin-top:6px}.now-list li:before{content:"";background:var(--accent);border-radius:50%;width:5px;height:5px;position:absolute;top:.72em;left:2px}.skills-grid{background:var(--border);border:1px solid var(--border);grid-template-columns:repeat(3,1fr);gap:1px;display:grid}.skill{background:var(--bg);flex-direction:column;padding:44px 38px 38px;display:flex}.skill h3{font-family:var(--font-head);letter-spacing:.01em;margin-bottom:16px;font-size:1.9rem;font-weight:400;line-height:1}.skill p{color:var(--muted);font-size:.95rem}.skill-list{margin-top:auto;padding-top:32px}.skill-list li{border-top:1px solid var(--border);letter-spacing:.1em;text-transform:uppercase;padding:11px 0 10px;font-size:.75rem;font-weight:450}.timeline{position:relative}.timeline:before{content:"";background:var(--border);transform-origin:top;width:1px;transition:transform 1.4s var(--ease);margin-left:-.5px;position:absolute;top:0;bottom:0;left:50%}.timeline-entry{background:var(--surface);border:1px solid var(--border);width:calc(50% - 44px);padding:36px 40px 34px;transition:border-color .3s;position:relative}.timeline-entry+.timeline-entry{margin-top:-40px}.timeline-entry:hover{border-color:#e8284f59}.timeline-entry.right{margin-left:auto}.timeline-entry:before{content:"";background:var(--accent);border:3px solid var(--bg);box-sizing:content-box;border-radius:50%;width:13px;height:13px;position:absolute;top:42px}.timeline-entry.left:before{right:-54px}.timeline-entry.right:before{left:-54px}.timeline-dates{letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin-bottom:12px;font-size:.75rem;font-weight:450;display:block}.timeline-role{font-family:var(--font-head);letter-spacing:.01em;text-wrap:balance;margin-bottom:8px;font-size:2rem;font-weight:400;line-height:1.02}.timeline-company{color:var(--accent-text);margin-bottom:14px;font-size:.9rem;font-weight:450;display:block}.timeline-desc{color:var(--muted)}.projects-grid{background:var(--border);border:1px solid var(--border);grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;display:grid}.project{background:var(--bg);flex-direction:column;padding:clamp(32px,4vw,44px);transition:background-color .3s;display:flex;position:relative}.project-image{aspect-ratio:16/10;object-fit:cover;width:calc(100% + 2*clamp(32px,4vw,44px));max-width:none;margin:calc(-1*clamp(32px,4vw,44px)) calc(-1*clamp(32px,4vw,44px)) 32px}.project h3{font-family:var(--font-head);letter-spacing:.01em;margin-bottom:16px;font-size:clamp(2rem,3vw,2.4rem);font-weight:400;line-height:1}.project h3 a{text-decoration:none}.project h3 a:after{content:"";position:absolute;inset:0}.project h3 a:focus-visible{outline:none}.project:has(h3 a:focus-visible){outline:2px solid var(--accent-text);outline-offset:-2px}.project-body{flex-direction:column;flex:1;min-width:0;display:flex}.project-desc{color:var(--muted);max-width:62ch}.project-learned{max-width:62ch;color:var(--muted);margin-top:14px;font-size:.92rem}.project-learned span{letter-spacing:.1em;text-transform:uppercase;color:var(--accent-text);margin-right:6px;font-size:.7rem;font-weight:450}.project-install,.project-links,.stack{z-index:1;position:relative}.project-install{max-width:62ch;margin-top:22px}.project-install-label{letter-spacing:.1em;text-transform:uppercase;color:var(--faint);margin-bottom:8px;font-size:.7rem;font-weight:450;display:block}.project-install code{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text);background:var(--surface);border:1px solid var(--border);user-select:all;cursor:text;border-radius:2px;padding:12px 16px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:.8rem;line-height:1.6;display:block}.project-links{flex-wrap:wrap;gap:8px 24px;margin-top:16px;display:flex}.project-links a{color:var(--muted);align-items:center;gap:8px;font-size:.9rem;text-decoration:underline #e8284f73;transition:color .3s;display:inline-flex}.project-links a:hover{color:var(--text)}.project-links svg{color:var(--accent)}.stack{border-left:1px solid #e8284f73;max-width:62ch;margin-top:26px}.stack-row{grid-template-columns:9.5rem 1fr;align-items:baseline;gap:4px 16px;padding:9px 0 9px 22px;display:grid;position:relative}.stack-row+.stack-row{border-top:1px solid var(--border)}.stack-row:before{content:"";background:var(--accent);border-radius:50%;width:7px;height:7px;margin-top:-3.5px;position:absolute;top:50%;left:-4px}.stack dt{letter-spacing:.1em;text-transform:uppercase;color:var(--faint);font-size:.7rem;font-weight:450}.stack dd{color:var(--text);flex-wrap:wrap;gap:4px 18px;font-size:.92rem;display:flex}.project-meta{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px 24px;margin-top:auto;padding-top:28px;display:flex}.project-tags{flex-wrap:wrap;gap:8px;display:flex}.tag{letter-spacing:.1em;text-transform:uppercase;color:var(--accent-text);border:1px solid #e8284f47;border-radius:2px;padding:5px 11px 4px;font-size:.68rem;font-weight:450}.project-side{flex-wrap:wrap;align-items:baseline;gap:6px 20px;display:flex}.project-updated{letter-spacing:.1em;text-transform:uppercase;color:var(--faint);white-space:nowrap;font-size:.7rem;font-weight:450}.project-link{font-family:var(--font-head);letter-spacing:.06em;color:var(--text);white-space:nowrap;font-size:1.1rem}.project-link .arrow{color:var(--accent);transition:transform .35s var(--ease);display:inline-block}.project.has-link:hover{background:var(--surface)}.project.has-link:before{content:"";background:var(--accent);transform-origin:0;height:2px;transition:transform .5s var(--ease);position:absolute;inset:0 0 auto;transform:scaleX(0)}.project.has-link:is(:hover,:has(h3 a:focus-visible)):before{transform:none}.project.has-link:hover .arrow{transform:translate(5px)}.project.wide{grid-column:1/-1;grid-template-columns:minmax(0,5fr) minmax(0,7fr);align-items:start;column-gap:clamp(32px,5vw,72px);display:grid}.project.wide h3{font-size:clamp(2.4rem,4.4vw,3.6rem)}.project.wide .project-image{aspect-ratio:auto}@media (width>=961px){.project.wide:has(.project-image) h3{grid-area:1/1}.project.wide .project-image{border:1px solid var(--border);object-position:top left;border-radius:2px;grid-area:2/1;width:100%;margin:12px 0 0}.project.wide:has(.project-image) .project-body{grid-area:1/2/span 2}.project.wide:not(:has(.project-image)){display:flex}.project.wide:not(:has(.project-image)) .project-body{grid-template-columns:minmax(0,7fr) minmax(0,5fr);grid-auto-flow:dense;align-content:start;column-gap:clamp(32px,5vw,72px);display:grid}.project.wide:not(:has(.project-image)) .project-body>*{grid-column:1}.project.wide:not(:has(.project-image)) :is(.project-install,.project-links){grid-column:2}.project.wide:not(:has(.project-image)) .project-install{margin-top:0}.project.wide:not(:has(.project-image)) .project-meta{grid-column:1/-1}}.more-title{font-family:var(--font-head);letter-spacing:.01em;margin:clamp(56px,7vw,88px) 0 12px;font-size:clamp(2rem,3vw,2.4rem);font-weight:400;line-height:1}.more-list{border-top:1px solid var(--border)}.more-item{border-bottom:1px solid var(--border);grid-template-columns:minmax(0,5fr) minmax(0,7fr);column-gap:clamp(32px,5vw,72px);padding:22px 0;display:grid}.more-item h4{font-family:var(--font-head);letter-spacing:.01em;grid-row:span 2;font-size:1.6rem;font-weight:400;line-height:1.05}.more-item h4 a{text-decoration:none}.more-item h4 .arrow{color:var(--accent);transition:transform .35s var(--ease);display:inline-block}.more-item h4 a:is(:hover,:focus-visible) .arrow{transform:translate(5px)}.more-item p{max-width:62ch;color:var(--muted)}.more-meta{letter-spacing:.1em;text-transform:uppercase;color:var(--faint);margin-top:8px;font-size:.7rem;font-weight:450}.contact{text-align:center;background:var(--surface);border-top:1px solid var(--border);padding-block:clamp(120px,14vw,180px) clamp(110px,12vw,160px)}.contact h2{font-family:var(--font-head);letter-spacing:.01em;margin-bottom:28px;font-size:clamp(4rem,10vw,7.5rem);font-weight:400;line-height:.92}.contact h2 .line{display:block}.contact p{max-width:44ch;color:var(--muted);margin:0 auto 56px;font-size:1.1rem}.contact-links{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.contact-link{letter-spacing:.12em;text-transform:uppercase;border:1px solid #f0ede829;border-radius:2px;padding:17px 36px 16px;font-size:.8rem;font-weight:450;text-decoration:none;transition:color .3s,border-color .3s,background-color .3s}.contact-link:hover{color:var(--accent-text);background:#e8284f0f;border-color:#e8284f80}footer{padding:28px var(--pad-x);border-top:1px solid var(--border);color:var(--faint);justify-content:space-between;align-items:center;gap:12px 24px;font-size:.8rem;display:flex}footer a{text-decoration:none;transition:color .3s}footer a:hover{color:var(--text)}@keyframes fadeUp{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}@keyframes marquee{to{transform:translate(-50%)}}@keyframes lineUp{0%{clip-path:inset(-.3em -.3em 100%);transform:translateY(100%)}to{clip-path:inset(-.3em);transform:none}}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}}@media screen and (prefers-reduced-motion:no-preference){.js .section-title{transition:opacity .8s var(--ease) var(--d,0s), transform .8s var(--ease) var(--d,0s)}.js .section-title:before{transform-origin:0;transition:transform .7s var(--ease) calc(var(--d,0s) + .25s)}.js .section-title:not(.in){opacity:0;transform:translateY(20px)}.js .section-title:not(.in):before{transform:scaleX(0)}.js :is(.skill,.project,.stat)>*{transition:opacity .7s var(--ease) var(--d,0s), transform .8s var(--ease) var(--d,0s)}.js :is(.skill,.project,.stat)>*+*{transition-delay:calc(var(--d,0s) + 80ms)}.js :is(.skill,.project,.stat):not(.in)>*{opacity:0;transform:translateY(24px)}.js :is(.more-title,.more-item){transition:opacity .7s var(--ease) var(--d,0s), transform .8s var(--ease) var(--d,0s)}.js :is(.more-title,.more-item):not(.in){opacity:0;transform:translateY(16px)}.js .timeline:before{transform:scaleY(0)}.js .timeline.in:before{transform:none}.js .timeline-entry{transition:opacity .7s var(--ease) var(--d,0s), transform .9s var(--ease) var(--d,0s), border-color .3s}.js .timeline-entry:not(.in){opacity:0;transform:translate(-40px)}.js .timeline-entry.right:not(.in){transform:translate(40px)}.js .timeline-entry:before{transition:transform .45s var(--ease) calc(var(--d,0s) + .45s)}.js .timeline-entry:not(.in):before{transform:scale(0)}.js .about-frame img{clip-path:inset(0);transition:clip-path 1.1s var(--ease), transform 1.4s var(--ease)}.js .about-visual:not(.in) .about-frame img{clip-path:inset(100% 0 0);transform:scale(1.12)}.js .about-badge{transition:opacity .15s linear .75s,transform .4s cubic-bezier(.5,0,.75,0) .75s}.js .about-visual:not(.in) .about-badge{opacity:0;transform:rotate(-28deg)scale(1.7)}.js .contact h2:not(.in) .line{clip-path:inset(-.3em -.3em 100%);transform:translateY(100%)}.js .contact h2.in .line{animation:lineUp 1s var(--ease) backwards}.js .contact h2.in .line+.line{animation-delay:.1s}.js .contact-link{transition:opacity .6s var(--ease) var(--d,0s), transform .7s var(--ease) var(--d,0s), color .3s, border-color .3s, background-color .3s}.js .contact-link:not(.in){opacity:0;transform:translateY(16px)}@media (width<=960px){.js .timeline-entry:is(.left,.right):not(.in){transform:translateY(24px)}}}@media (width<=960px){.skills-grid{grid-template-columns:1fr}.skill-list{padding-top:24px}.projects-grid{grid-template-columns:minmax(0,1fr)}.project.wide{align-items:stretch;display:flex}.timeline:before,.timeline-entry:before{display:none}.timeline-entry{width:100%}.timeline-entry+.timeline-entry{margin-top:16px}.more-item{grid-template-columns:minmax(0,1fr)}.more-item h4{grid-row:auto;margin-bottom:6px}}@media (width<=768px){.nav-extra{display:none}.nav-links{gap:24px}.hero{padding-top:120px;padding-bottom:72px}.about{grid-template-columns:1fr}.about-visual{max-width:320px}.about-badge{width:112px;height:112px;font-size:1.05rem;bottom:-20px;right:-12px}.stat{padding:18px 14px 16px}.stat dd{font-size:2.1rem}.stat dt{letter-spacing:.06em;font-size:.65rem}.skill{padding:32px 26px 28px}.timeline-entry{padding:28px 24px 26px}.contact-link{flex:100%;max-width:340px}.stack-row{grid-template-columns:1fr;padding-left:18px}.stack-row:before{top:1.15em}footer{text-align:center;flex-direction:column}}
