:root{--page:#101112;--surface:#191a1c;--surface-raised:#1d1e20;--surface-hover:#222326;--text:#f3f1ec;--muted:#aaa8a4;--subtle:#82827f;--border:#303236;--border-strong:#44464b;--green:#63ca69;--radius:9px;--shadow:0 8px 22px #00000038;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;font-synthesis:none;text-rendering:optimizelegibility;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;scrollbar-width:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;min-width:320px}html::-webkit-scrollbar{display:none}body{min-height:100vh;color:var(--text);background:var(--page);margin:0;font-size:14px;line-height:1.45;overflow-x:hidden}a{color:inherit;text-decoration:none}p,h1,h2,ul{margin:0}button,a,summary{-webkit-tap-highlight-color:transparent}:focus-visible{outline-offset:3px;outline:2px solid #e9e6df}.icon-sprite,.sr-only{clip:rect(0, 0, 0, 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.icon{fill:none;stroke:currentColor;stroke-width:1.65px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:1em;height:1em}.skip-link{z-index:100;color:var(--page);background:var(--text);border-radius:7px;padding:8px 12px;transition:transform .16s;position:fixed;top:10px;left:10px;transform:translateY(-220%)}.skip-link:focus{transform:translateY(0)}.portfolio-shell{grid-template-columns:202px 460px;align-items:start;gap:24px;width:810px;margin-inline:auto;padding:14px 0 58px;display:grid}.sidebar{z-index:2;position:sticky;top:16px}.profile-card,.contact-card{border:1px solid var(--border);background:var(--surface);box-shadow:var(--shadow);border-radius:10px}.profile-card{padding:9px 10px 13px}.portrait{aspect-ratio:180/195;object-fit:cover;object-position:42% 50%;outline-offset:-1px;background:#bbc2bd;border-radius:8px;outline:1px solid #ffffff1a;width:100%;height:195px;display:block}.profile-card h1{color:var(--text);letter-spacing:-.045em;margin-top:9px;font-size:24px;font-weight:560;line-height:1.12}.profile-card h1 span{color:#d5d3cf}.role{color:var(--muted);letter-spacing:-.015em;margin-top:7px;font-size:15.5px;line-height:1.48}.availability{border:1px solid var(--border-strong);color:#c9c7c2;border-radius:999px;align-items:center;gap:6px;margin-top:8px;padding:3px 8px 4px 6px;font-size:12.5px;line-height:1;display:inline-flex}.status-dot{background:var(--green);border-radius:50%;width:9px;height:9px;animation:2.8s ease-in-out infinite breathe;box-shadow:0 0 0 4px #63ca691f}@keyframes breathe{50%{box-shadow:0 0 0 5px #63ca690d}}.location{color:var(--muted);align-items:center;gap:6px;margin-top:9px;font-size:12.5px;display:flex}.location .icon{color:#989894;fill:currentColor;stroke-width:0;width:12px;height:12px}.contact-card{margin-top:7px;padding:8px 8px 7px}.contact-list{gap:0;padding:0;list-style:none;display:grid}.contact-list a,.contact-list li>span{min-width:0;height:28px;color:var(--muted);letter-spacing:-.015em;align-items:center;gap:7px;padding-inline:1px;font-size:12.5px;display:flex}.contact-list a span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.contact-list .icon{color:#c8c6c1;width:12px;height:12px}.contact-list .github-icon{fill:currentColor;stroke:none}.contact-list a{transition:color .15s}.contact-list a:hover{color:var(--text)}.profile-actions{gap:6px;margin-top:4px;display:grid}.button{border:1px solid var(--border-strong);border-radius:7px;justify-content:center;align-items:center;min-height:40px;font-size:13px;font-weight:550;transition:transform .15s,border-color .15s,background-color .15s;display:flex}.button:hover{transform:translateY(-1px)}.button:active{transform:scale(.96)}.button-primary{color:#161719;background:#f0ede7;border-color:#f0ede7}.button-primary:hover{background:#fff}#main-content{min-width:0;padding-top:11px}.content-section{scroll-margin-top:20px}.section-label{border:1px solid var(--border);color:#ece9e3;letter-spacing:-.015em;text-transform:uppercase;background:#17181a;border-radius:9px;align-items:center;min-height:25px;padding:3px 8px;font-size:13px;font-weight:450;line-height:1;display:inline-flex}.about-copy{margin-top:23px}.about-copy p{color:#c4c2bd;letter-spacing:-.016em;text-wrap:pretty;max-width:455px;font-size:16px;font-weight:390;line-height:1.62}.about-copy strong{color:var(--text);font-weight:500}.about-copy p+p{margin-top:18px}.text-link{color:#ddd9d2;text-underline-offset:.18em;-webkit-text-decoration:underline #69a9ff75;text-decoration:underline #69a9ff75;text-decoration-thickness:1px;transition:color .16s,text-decoration-color .16s}.text-link:hover{color:var(--text);text-decoration-color:#69a9ff}.skills-section{margin-top:46px}.skill-list{flex-wrap:wrap;gap:6px;margin-top:19px;padding:0;list-style:none;display:flex}.skill-list li{border:1px solid var(--border);color:#c2c0bc;background:var(--surface);letter-spacing:-.02em;white-space:nowrap;border-radius:8px;align-items:center;gap:7px;min-height:30px;padding:5px 9px;font-size:13.5px;line-height:1;transition:color .16s,border-color .16s,transform .16s;display:inline-flex;box-shadow:0 5px 15px #00000024}.skill-icon{fill:none;stroke:#5c9dff;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;flex:0 0 14px;width:14px;height:14px}.skill-list li:hover{color:var(--text);border-color:var(--border-strong);transform:translateY(-2px)}.experience-section{margin-top:36px}.experience-list{box-shadow:none;background:0 0;border:0;border-radius:0;gap:8px;margin-top:20px;padding-left:31px;display:grid;position:relative;overflow:visible}.experience-list:before{content:"";background:linear-gradient(#0000,#5499ff75 18%,#5499ff2e 82%,#0000);width:1px;position:absolute;top:24px;bottom:24px;left:27px}.experience-row{box-shadow:none;background:0 0;border:0;border-radius:12px;transition:transform .18s;position:relative;overflow:visible}.experience-row:hover{transform:translate(3px)}.experience-row[open] summary{background:#1a1d21}.experience-row summary{cursor:pointer;background:#17191c;border-radius:12px;grid-template-columns:minmax(0,1fr) 14px;align-items:center;min-height:64px;padding:8px 10px 8px 28px;list-style:none;transition:background-color .18s,box-shadow .18s;display:grid;position:relative;overflow:visible;box-shadow:0 8px 22px #03081129}.experience-row:hover summary{background:#1a1c20;box-shadow:0 11px 25px #03081138}.experience-row summary::-webkit-details-marker{display:none}.company-mark{z-index:2;width:43px;height:43px;box-shadow:0 0 0 5px var(--page), 0 7px 18px #00000042, inset 0 0 0 1px #ffffff0f;border-radius:12px;place-items:center;transition:transform .18s,box-shadow .18s;display:grid;position:absolute;top:50%;left:-24px;overflow:hidden;transform:translateY(-50%)}.experience-row:hover .company-mark{box-shadow:0 0 0 5px var(--page), 0 9px 22px #00000052, inset 0 0 0 1px #ffffff1a;transform:translateY(-50%)scale(1.04)}.mark-agents{background:#142c48}.mark-layers{background:#173359}.mark-catalog{background:#18365f}.mark-agency{background:#163b38}.mark-fivem{background:#321523}.mark-minecraft{background:#142d4c}.experience-icon{fill:none;stroke:currentColor;stroke-width:1.65px;stroke-linecap:round;stroke-linejoin:round;width:18px;height:18px}.mark-agents .experience-icon{color:#6aafff}.mark-layers .experience-icon{color:#5ca6ff}.mark-catalog .experience-icon{color:#79afff}.mark-agency .experience-icon{color:#52c9bd}.experience-brand-logo{object-fit:contain;width:24px;height:24px;display:block}.mark-fivem .experience-brand-logo{width:23px;height:23px}.mark-minecraft .experience-brand-logo{width:21px;height:27px}.experience-copy{gap:1px;min-width:0;padding-left:0;display:grid}.experience-specialty{color:#69a9ff;letter-spacing:.105em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap;font-size:8.5px;font-weight:600;line-height:1.15;overflow:hidden}.experience-copy strong{color:#eeeae4;letter-spacing:-.025em;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:560;line-height:1.18;overflow:hidden}.experience-copy small{color:#9f9e9a;letter-spacing:-.015em;font-size:10.5px;font-weight:400}.chevron{fill:none;stroke:#e4e1dc;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;align-self:center;width:13px;height:13px;margin-top:0;margin-left:4px;transition:transform .18s}.experience-row[open] .chevron{transform:rotate(180deg)}.experience-row>p{color:var(--muted);background:#15171a;border-radius:0 0 12px 12px;margin-top:-7px;padding:12px 13px 11px 28px;font-size:11.5px;line-height:1.5;box-shadow:0 12px 26px #03081136}.experience-row>p .text-link{color:#d4d1cb}.experience-row[open]>p{animation:.18s ease-out experience-reveal}@keyframes experience-reveal{0%{opacity:0;transform:translateY(-4px)}}.stack-section{margin-top:40px}.tech-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;width:100%;margin-top:21px;padding:0;list-style:none;display:grid}.tech-grid li{width:100%;min-width:0;height:40px;color:var(--text);background:#17191c;border-radius:10px;transition:filter .16s,transform .16s,box-shadow .16s;box-shadow:0 5px 15px #00000024}.tech-grid a{width:100%;min-width:0;height:100%;color:inherit;align-items:center;gap:9px;padding:5px 12px 5px 8px;display:inline-flex}.tech-grid li:hover{filter:brightness(1.12);transform:translateY(-2px);box-shadow:0 0 0 1px #fff1,0 9px 20px #0003}.tech-logo{object-fit:contain;filter:drop-shadow(0 3px 7px #00000047);flex:none;width:26px;height:26px;display:block}.tech-name{color:#d8d6d1;letter-spacing:-.015em;white-space:nowrap;font-size:11.5px;font-weight:520;line-height:1}.tech-grid li[data-brand=java] .tech-logo{width:23px;height:29px}.tech-grid li[data-brand=nextjs] .tech-logo,.tech-grid li[data-brand=react] .tech-logo,.tech-grid li[data-brand=tanstack] .tech-logo,.tech-grid li[data-brand=vuejs] .tech-logo,.tech-grid li[data-brand=python] .tech-logo{width:27px;height:27px}.tech-grid li[data-brand=figma] .tech-logo,.tech-grid li[data-brand=framer] .tech-logo{width:22px;height:27px}.tech-grid li[data-brand=cloudflare] .tech-logo{width:30px;height:23px}.tech-grid li[data-brand=rust] .tech-logo,.tech-grid li[data-brand=typescript] .tech-logo,.tech-grid li[data-brand=redis] .tech-logo,.tech-grid li[data-brand=docker] .tech-logo{width:25px;height:25px}.tech-grid li[data-brand=electron] .tech-logo,.tech-grid li[data-brand=nodejs] .tech-logo,.tech-grid li[data-brand=postgresql] .tech-logo,.tech-grid li[data-brand=tauri] .tech-logo{width:26px;height:26px}.portfolio-section{margin-top:48px}.portfolio-list{gap:8px;width:460px;margin-top:20px;display:grid}.compact-case{width:100%;min-height:90px;color:var(--text);background:#17191c;border-radius:10px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:13px;padding:12px 14px 13px;transition:transform .19s,box-shadow .19s;display:grid;box-shadow:0 9px 24px #0000002e}.compact-case:hover{transform:translateY(-2px);box-shadow:0 0 0 1px #fff1,0 13px 28px #00000040}.compact-case-research:hover{transform:none;box-shadow:0 9px 24px #0000002e}.compact-case-content{flex-direction:column;justify-content:center;min-width:0;display:flex}.compact-case-kicker{color:#67a7ff;letter-spacing:.08em;text-transform:uppercase;margin-bottom:4px;font-size:8.5px;font-weight:600;line-height:1}.compact-case-content>strong{letter-spacing:-.035em;font-size:15px;font-weight:560;line-height:1.1}.compact-case-description{color:#aaa9a5;text-wrap:pretty;max-width:260px;margin-top:4px;font-size:10.5px;line-height:1.42}.compact-case-link{color:#e7e5df;white-space:nowrap;align-items:center;gap:6px;margin-top:0;font-size:10.5px;font-weight:500;display:inline-flex}.compact-case-metric{align-content:center;justify-items:end;min-width:68px;display:grid}.compact-case-metric strong{color:#72adff;letter-spacing:-.045em;font-variant-numeric:tabular-nums;font-size:18px;font-weight:580;line-height:1}.compact-case-metric small{color:#8f908d;letter-spacing:.06em;text-transform:uppercase;margin-top:4px;font-size:9px;line-height:1}.compact-case-link .icon{color:#67a7ff;width:12px;height:12px;transition:transform .18s}.compact-case:hover .compact-case-link .icon{transform:translate(3px)}@media (width>=1600px) and (height>=900px){.portfolio-shell{zoom:1.05}}@media (width>=1920px) and (height>=1050px){.portfolio-shell{zoom:1.1}}@media (width>=2560px) and (height>=1300px){.portfolio-shell{zoom:1.4}}@media (width>=3200px) and (height>=1700px){.portfolio-shell{zoom:1.7}}@media (width>=3840px) and (height>=2000px){.portfolio-shell{zoom:2.05}}@supports (zoom:calc(100vw / 1700px)){@media (width>=1440px) and (height>=800px){.portfolio-shell{zoom:clamp(1, min(calc(100vw / 1700px), calc(100vh / 1000px)), 2.1)}}}.js .reveal{opacity:0;transform:translateY(10px)}.js .reveal.is-visible{opacity:1;transition:opacity .44s,transform .44s cubic-bezier(.2,.72,.2,1);transform:translateY(0)}@media (width<=880px){.portfolio-shell{grid-template-columns:202px minmax(0,460px);width:calc(100% - 32px)}}@media (width<=720px){.portfolio-shell{width:min(460px,100% - 28px);padding-top:14px;display:block}.sidebar{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;display:grid;position:static}.profile-card,.contact-card{margin-top:0}.portrait{aspect-ratio:1;height:auto}#main-content{padding-top:46px}.compact-case{grid-template-columns:minmax(0,1fr) auto}.portfolio-list{width:100%}}@media (width<=520px){.sidebar{display:block}.contact-card{margin-top:10px}.portrait{aspect-ratio:16/13;object-position:42% 50%;height:auto}.about-copy p{font-size:15.5px}.compact-case{grid-template-columns:minmax(0,1fr);gap:8px;min-height:98px;padding:12px 13px}.compact-case-content>strong{font-size:15px}.compact-case-link{grid-column:1;margin-top:-3px}.compact-case-metric{justify-items:start;min-width:0}.skill-list{gap:6px}.skill-list li{font-size:13px}.experience-list{gap:8px;padding-left:28px}.experience-list:before{left:24px}.experience-row summary{grid-template-columns:minmax(0,1fr) 14px;min-height:62px;padding:8px 10px 8px 24px}.company-mark{width:40px;height:40px;left:-22px}.experience-row>p{padding-left:24px}.tech-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.tech-grid li{height:40px}.tech-grid a{padding-right:10px}.tech-name{font-size:11px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.js .reveal{opacity:1;transform:none}}
