*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0}img{max-width:100%;height:auto;display:block}h1,h2,h3,p,ul,ol,dl,dd,figure{margin:0}ul,ol{padding:0;list-style:none}a{color:inherit}body{background:var(--bg);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;font-size:1.0625rem;line-height:1.6}:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:2px}.skip-link{background:var(--ink);color:var(--bg);z-index:100;padding:.5rem .875rem;text-decoration:none;position:absolute;top:-3rem;left:1rem}.skip-link:focus{top:.75rem}.wrap{width:min(100% - 2rem,72rem);margin-inline:auto}.switchbar{top:env(safe-area-inset-top,0px);z-index:50;background:var(--bar-bg);border-bottom:1px solid var(--bar-line);-webkit-backdrop-filter:saturate(140%)blur(10px);position:sticky}.switchbar .wrap{justify-content:space-between;align-items:center;gap:1rem;min-height:3.5rem;display:flex}.switchbar__name{font-family:var(--font-display);white-space:nowrap;font-size:1.0625rem;text-decoration:none}.switch{background:var(--switch-track);border-radius:999px;padding:3px;display:inline-flex}.switch a{color:var(--switch-ink);border-radius:999px;padding:.375rem .875rem;font-size:.875rem;line-height:1.3;text-decoration:none;transition:background-color .2s,color .2s;display:block}.switch a:hover{color:var(--ink)}.switch a[aria-current=page],.switch a.is-active{background:var(--switch-thumb);color:var(--switch-thumb-ink)}@media (width<=30rem){.switchbar__name{font-size:.9375rem}.switch a{padding:.375rem .625rem;font-size:.8125rem}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-delay:0s!important}}.site-qa{--bg:#0b131c;--surface:#121d29;--ink:#e2eaf1;--muted:#8da1b3;--line:#213142;--accent:#4dd49c;--accent-2:#8b9cff;--pass:#4dd49c;--fail:#f47f7f;--track:#17232f;--link:#6fe0af;--focus:#6fe0af;--btn-bg:#4dd49c;--btn-ink:#04211a;--btn-hover:#7be2b6;--chip-bg:#121d29;--run-bg:#070e15;--run-border:#213142;--run-ink:#c9d7e2;--run-dim:#7b90a2;--run-pass:#4dd49c;--run-accent:#4dd49c;--run-fail:#f47f7f;--run-flaky:#f2c46d;--run-shadow:#00000080;--bar-bg:#0b131cd1;--bar-line:#1b2938;--switch-track:#15212e;--switch-ink:#8da1b3;--switch-thumb:#e2eaf1;--switch-thumb-ink:#0b131c;--font-display:"Bricolage Grotesque", "Instrument Sans", system-ui, sans-serif;--font-body:"Instrument Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--font-name:"Poppins", "Instrument Sans", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;color-scheme:dark}html[data-scheme=light] .site-qa{--bg:#f1f5f8;--surface:#fff;--ink:#0f1e2c;--muted:#4e6172;--line:#d2dce5;--accent:#0e7a52;--accent-2:#4a5bd1;--pass:#12805a;--fail:#c23b3b;--track:#e2e9ef;--link:#0e7a52;--focus:#0e7a52;--btn-bg:#0f1e2c;--btn-ink:#fff;--btn-hover:#24384a;--chip-bg:#fff;--run-bg:#102030;--run-border:#102030;--run-shadow:#0f1e2c66;--bar-bg:#f1f5f8db;--bar-line:#d2dce5;--switch-track:#e0e7ed;--switch-ink:#4e6172;--switch-thumb:#0f1e2c;--switch-thumb-ink:#fff;color-scheme:light}.site-qa a{color:var(--link);text-underline-offset:.2em;text-decoration-thickness:1px}.site-qa a:hover{text-decoration-thickness:2px}.site-qa .switchbar a{color:inherit}.site-qa .switch a{color:var(--switch-ink)}.site-qa .switch a[aria-current=page]{color:var(--switch-thumb-ink)}.switchbar__left{align-items:center;gap:1.25rem;min-width:0;display:flex}.switch__locked{color:var(--switch-ink);opacity:.75;cursor:not-allowed;user-select:none;border-radius:999px;align-items:center;gap:.375rem;padding:.375rem .75rem;font-size:.875rem;line-height:1.3;display:inline-flex}.switch__locked svg{width:.8125rem;height:.8125rem}.site-switch .switch>*{white-space:nowrap}@media (width<=60rem){.switchbar .wrap{flex-wrap:wrap;row-gap:0}.switchbar__left{display:contents}.site-switch{flex-basis:100%;order:3;padding-bottom:.625rem}.site-switch .switch{width:100%;max-width:28rem}.site-switch .switch>*{text-align:center;flex:1;justify-content:center}}.switch__soon{font-family:var(--font-mono);border:1px solid var(--line);color:var(--accent);white-space:nowrap;border-radius:999px;padding:.0625rem .375rem;font-size:.6875rem}.switchbar__tools{align-items:center;gap:.75rem;display:flex}.theme-toggle{border:1px solid var(--line);width:2.25rem;height:2.25rem;color:var(--ink);cursor:pointer;background:0 0;border-radius:999px;place-items:center;display:inline-grid}.theme-toggle:hover{border-color:var(--muted)}.social{align-items:center;gap:.25rem;display:flex}.lang{border:1px solid var(--line);border-radius:999px;padding:2px;display:inline-flex}.site-qa .lang a{font-family:var(--font-mono);color:var(--muted);border-radius:999px;padding:.25rem .5rem;font-size:.75rem;text-decoration:none}.site-qa .lang a:hover{color:var(--ink)}.site-qa .lang a[aria-current=page]{background:var(--switch-thumb);color:var(--switch-thumb-ink)}.site-qa .social a{width:2.25rem;height:2.25rem;color:var(--muted);border-radius:999px;place-items:center;display:inline-grid}.site-qa .social a:hover{color:var(--accent);background:var(--switch-track)}.social svg,.theme-toggle svg{width:1.125rem;height:1.125rem}.theme-toggle .icon-sun{display:none}html[data-scheme=light] .theme-toggle .icon-sun{display:block}html[data-scheme=light] .theme-toggle .icon-moon{display:none}.qa-hero{padding-block:clamp(3rem,8vw,6.5rem) clamp(3rem,7vw,5.5rem)}.qa-hero .wrap{grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);align-items:center;gap:clamp(2rem,5vw,4.5rem);display:grid}.qa-hero__where{color:var(--muted);margin-bottom:1.25rem;font-size:1rem}.qa-hero__name{font-family:var(--font-name);letter-spacing:-.03em;font-size:clamp(2.5rem,5.4vw,4.25rem);font-weight:600;line-height:1.04}.qa-hero__line{max-width:30ch;margin-top:1.5rem;font-size:clamp(1.1875rem,2vw,1.375rem);line-height:1.45}.qa-hero__actions{flex-wrap:wrap;align-items:center;gap:.75rem 1.5rem;margin-top:2rem;display:flex}.btn{background:var(--btn-bg);border-radius:6px;padding:.75rem 1.25rem;font-size:1rem;font-weight:600;display:inline-block;color:var(--btn-ink)!important;text-decoration:none!important}.btn:hover{background:var(--btn-hover)}.runner{background:var(--run-bg);color:var(--run-ink);font-family:var(--font-mono);border:1px solid var(--run-border);box-shadow:0 24px 48px -24px var(--run-shadow);border-radius:10px;font-size:.8125rem;line-height:1.75;overflow:hidden}.runner__head{color:var(--run-dim);border-bottom:1px solid #ffffff14;justify-content:space-between;gap:1rem;padding:.75rem 1.125rem;display:flex}.runner__body{padding:1rem 1.125rem .5rem}.runner__line{--step:.38s;--start:calc(var(--i) * var(--step) + .4s);--end:calc(var(--start) + var(--step));grid-template-columns:1.25rem minmax(0,1fr) auto;gap:.5rem;display:grid}.runner__spec{text-overflow:ellipsis;white-space:nowrap;color:var(--run-dim);animation:runner-ink 0s var(--end) forwards;overflow:hidden}.runner__tick{place-items:center start;display:grid}.runner__tick>*{grid-area:1/1}.runner__pending{color:var(--run-dim);animation:runner-out 0s var(--start) forwards}.runner__spin{border:1.5px solid var(--run-dim);opacity:0;width:.7em;height:.7em;animation:runner-in 0s var(--start) forwards, runner-out 0s var(--end) forwards, runner-spin .6s linear infinite;border-right-color:#0000;border-radius:50%}.runner__done{opacity:0;animation:runner-pop .28s cubic-bezier(.3, 1.6, .5, 1) var(--end) forwards;transform:scale(.4)}.runner__line .runner__ms{opacity:0;animation:runner-in .2s var(--end) forwards}@keyframes runner-out{to{opacity:0}}@keyframes runner-ink{to{color:var(--run-ink)}}@keyframes runner-spin{to{transform:rotate(360deg)}}@keyframes runner-pop{to{opacity:1;transform:scale(1)}}.runner__tick{color:var(--run-pass)}.runner__tick--fail{color:var(--run-fail)}.runner__tick--flaky{color:var(--run-flaky)}.runner__note{margin-left:.625rem;font-style:normal}.runner__note--fail{color:var(--run-fail)}.runner__note--flaky{color:var(--run-flaky)}.runner__ms{color:var(--run-dim)}.runner__line.runner__more{color:var(--run-dim);padding-left:1.75rem;display:block}.runner__summary{opacity:0;animation:.4s ease-out forwards runner-in;animation-delay:calc(var(--n) * .38s + .9s);border-top:1px solid #ffffff14;margin-top:.75rem;padding:1rem 1.125rem 1.125rem}.runner__total{font-family:var(--font-display);letter-spacing:-.02em;color:var(--run-accent);font-size:clamp(1.75rem,3.2vw,2.25rem);font-weight:700;line-height:1.1}.runner__total small{font-family:var(--font-mono);letter-spacing:0;color:var(--run-ink);margin-left:.5rem;font-size:.8125rem;font-weight:400}.runner__facts{color:var(--run-dim);flex-wrap:wrap;gap:.25rem 1.5rem;margin-top:.625rem;display:flex}.runner__facts b{color:var(--run-ink);font-weight:500}@keyframes runner-in{to{opacity:1}}.qa-section{border-top:1px solid var(--line);padding-block:clamp(3.5rem,8vw,6rem)}.qa-section__grid{grid-template-columns:minmax(0,14rem) minmax(0,1fr);gap:1.5rem clamp(2rem,5vw,4rem);display:grid}.qa-h2{font-family:var(--font-display);letter-spacing:-.02em;font-size:clamp(1.5rem,2.6vw,1.875rem);font-weight:600;line-height:1.15}.qa-lede{color:var(--muted);max-width:26ch;margin-top:.75rem;font-size:1rem}.prose p+p{margin-top:1rem}.prose{max-width:62ch;font-size:1.125rem}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;position:absolute!important}.chart{gap:1rem;min-width:0;margin:0;display:grid}.chart__title{font-size:1rem;font-weight:600}.chart__caption{color:var(--muted);max-width:60ch;font-size:.9375rem}.bars{gap:.875rem;display:grid}.bars__row{grid-template-columns:minmax(6rem,10rem) minmax(0,1fr) minmax(4.5rem,auto);align-items:center;gap:1rem;display:grid}.bars__label{font-size:.9375rem}.bars__track{background:var(--track);border-radius:999px;height:.625rem;position:relative;overflow:hidden}.bars__fill{transform-origin:0;border-radius:999px;animation:.9s cubic-bezier(.2,.7,.2,1) both bar-grow;position:absolute;inset:0 auto 0 0}.bars__fill--accent{background:var(--accent)}.bars__fill--fail{background:var(--fail)}.bars__value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap;font-size:.875rem}.bars__value small{color:var(--muted);font-size:.75rem;display:block}@keyframes bar-grow{0%{transform:scaleX(0)}}.codes{flex-wrap:wrap;gap:.375rem;display:flex}.codes__chip{font-family:var(--font-mono);border:1px solid;border-radius:4px;padding:.25rem .5rem;font-size:.8125rem}.codes__chip--client{color:var(--accent-2);border-color:color-mix(in srgb, var(--accent-2) 45%, transparent)}.codes__chip--server{color:var(--fail);border-color:color-mix(in srgb, var(--fail) 45%, transparent)}.codes__legend{color:var(--muted);flex-wrap:wrap;align-items:center;gap:.375rem .5rem;font-size:.8125rem;display:flex}.codes__key{border-radius:2px;width:.625rem;height:.625rem;display:inline-block}.codes__key--client{background:var(--accent-2)}.codes__key--server{background:var(--fail);margin-left:.75rem}.project__charts{border-top:1px solid var(--line);grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem 2rem;padding-top:1.25rem;display:grid}.chart--compact .bars__row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"label value""track track";gap:.375rem}.chart--compact .bars__label{grid-area:label}.chart--compact .bars__value{grid-area:value}.chart--compact .bars__track{grid-area:track}.ai{gap:2rem;display:grid}.ai__thesis{border-left:3px solid var(--accent);margin:0;padding-left:1.25rem}.ai__thesis p{font-family:var(--font-name);letter-spacing:-.01em;max-width:36ch;font-size:clamp(1.25rem,2.4vw,1.625rem);font-weight:600;line-height:1.35}.ai__items{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.75rem 2.5rem;display:grid}.ai__item h3{font-size:1.0625rem;font-weight:600;line-height:1.3}.ai__item p{color:var(--muted);margin-top:.375rem;font-size:1rem}.projects{gap:2rem;display:grid}.project{background:var(--surface);border:1px solid var(--line);border-radius:12px;gap:1.25rem;padding:clamp(1.25rem,3vw,2rem);display:grid}.project__head{flex-wrap:wrap;align-items:baseline;gap:.25rem 1rem;display:flex}.project__name{font-family:var(--font-name);letter-spacing:-.02em;font-size:clamp(1.625rem,3vw,2rem);font-weight:600;line-height:1.1}.project__tagline{color:var(--accent);font-size:1rem}.project__summary{max-width:60ch}.project__facts{gap:.875rem;display:grid}.project__facts div{border-top:1px solid var(--line);grid-template-columns:5.5rem minmax(0,1fr);gap:1rem;padding-top:.875rem;display:grid}.project__facts dt{font-family:var(--font-mono);color:var(--pass);padding-top:.2rem;font-size:.8125rem}.project__facts dd{color:var(--muted);font-size:1rem}.project__foot{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;display:flex}.project__stack{flex-wrap:wrap;gap:.375rem;display:flex}.project__stack li{font-family:var(--font-mono);background:var(--switch-track);color:var(--muted);border-radius:4px;padding:.1875rem .5rem;font-size:.75rem}.project__link{font-weight:600}.shots{gap:.625rem;min-width:0;display:grid}.shots__track{scroll-snap-type:x mandatory;scrollbar-width:none;border:1px solid var(--run-border);background:var(--run-bg);box-shadow:0 18px 40px -24px var(--run-shadow);border-radius:8px;display:flex;overflow-x:auto}.shots__track::-webkit-scrollbar{display:none}.shots__slide{scroll-snap-align:start;flex:0 0 100%;margin:0;display:grid}.shots__slide img{width:100%;height:auto;display:block}.shots__slide figcaption{border-top:1px solid var(--run-border);color:var(--run-ink);padding:.625rem .875rem;font-size:.8125rem}.shots__nav{justify-content:center;align-items:center;gap:.75rem;display:flex}.shots__arrow{border:1px solid var(--line);width:2rem;height:2rem;color:var(--ink);cursor:pointer;background:0 0;border-radius:999px;place-items:center;display:inline-grid}.shots__arrow:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}.shots__arrow:disabled{opacity:.35;cursor:default}.shots__arrow svg{width:1rem;height:1rem}.shots__dots{gap:.375rem;display:flex}.shots__dot{background:var(--line);cursor:pointer;border:0;border-radius:999px;width:.5rem;height:.5rem;padding:0;transition:width .2s,background-color .2s}.shots__dot[aria-current=true]{background:var(--accent);width:1.25rem}.project__status{font-size:.8125rem}.upcoming{gap:.875rem;padding-top:.5rem;display:grid}.upcoming__title{font-family:var(--font-display);letter-spacing:-.01em;font-size:1.25rem;font-weight:600}.upcoming__intro{color:var(--muted);max-width:62ch;font-size:1rem}.upcoming__list{display:grid}.upcoming__item{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:1rem;padding-block:1rem;display:flex}.upcoming__item:last-child{border-bottom:1px solid var(--line)}.upcoming__item>div{min-width:0}.upcoming__name{font-weight:600}.upcoming__text{color:var(--muted);margin-top:.125rem;font-size:.9375rem}.upcoming__tag{font-family:var(--font-mono);border:1px solid var(--line);color:var(--accent);white-space:nowrap;border-radius:999px;flex-shrink:0;padding:.25rem .625rem;font-size:.8125rem}.site-qa a.upcoming__tag--live{color:var(--pass);border-color:var(--pass);text-decoration:none}.releases{grid-template-columns:repeat(2,minmax(0,1fr));gap:2.25rem 2.5rem;display:grid}.release{border-left:2px solid var(--accent-2);padding-left:1rem}.release h3{font-size:1.125rem;font-weight:600;line-height:1.3}.release p{color:var(--muted);margin-top:.5rem;font-size:1rem}.timeline>li{border-bottom:1px solid var(--line);grid-template-columns:8rem minmax(0,1fr);gap:1.5rem;padding-block:1.375rem;display:grid}.timeline>li:first-child{padding-top:0}.timeline>li:last-child{border-bottom:0}.timeline__period{color:var(--muted);font-variant-numeric:tabular-nums;padding-top:.125rem;font-size:1rem}.timeline h3{font-size:1.125rem;font-weight:600;line-height:1.35}.timeline__org{color:var(--muted);font-size:1rem}.timeline__body{max-width:60ch;margin-top:.5rem}.timeline__bullets{gap:.5rem;max-width:62ch;margin-top:.625rem;display:grid}.timeline__bullets li{padding-left:1.125rem;position:relative}.timeline__bullets li:before{content:"";background:var(--accent);border-radius:2px;width:.375rem;height:.375rem;position:absolute;top:.62em;left:0}.timeline .timeline__book{flex-wrap:wrap;align-items:center;gap:.375rem .625rem;margin-top:.75rem;display:flex}.timeline__book cite{font-style:italic;font-weight:600}.timeline__role{flex-wrap:wrap;align-items:center;gap:.25rem .625rem;display:flex}.timeline__role .tag{font-weight:400}.site-qa a.tag--buy{color:var(--pass);border-color:var(--pass);text-decoration:none}.site-qa a.tag--buy:hover{background:color-mix(in srgb, var(--pass) 14%, transparent)}.tag{font-family:var(--font-mono);border:1px solid var(--line);color:var(--accent);white-space:nowrap;border-radius:999px;padding:.1875rem .625rem;font-size:.75rem}.qa-section--compact{padding-block:clamp(2.5rem,5vw,3.5rem)}.edu{display:grid}.edu li{border-bottom:1px solid var(--line);grid-template-columns:9rem minmax(0,1fr) minmax(0,17rem);align-items:baseline;gap:.25rem 1.5rem;padding-block:.625rem;font-size:.9375rem;display:grid}.edu li:first-child{padding-top:0}.edu li:last-child{border-bottom:0}.edu__period{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;align-items:center;gap:.5rem;display:inline-flex}.edu__icon{flex-shrink:0;width:1rem;height:1rem}.edu__icon--done circle{fill:color-mix(in srgb, var(--pass) 18%, transparent);stroke:var(--pass);stroke-width:1.25px}.edu__icon--done path{fill:none;stroke:var(--pass);stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round}.edu__ring{fill:none;stroke:var(--line);stroke-width:1.75px}.edu__arc{fill:none;stroke:var(--accent);stroke-width:1.75px;stroke-linecap:round;transform-origin:8px 8px;animation:2.4s linear infinite edu-spin}@keyframes edu-spin{to{transform:rotate(360deg)}}.edu__title{font-weight:600}.edu__school{color:var(--muted);text-align:right}.skills{gap:1.5rem;display:grid}.skills div{grid-template-columns:12rem minmax(0,1fr);gap:1rem;display:grid}.skills dt{font-weight:600}.skills dd ul{flex-wrap:wrap;gap:.5rem;display:flex}.skills dd li{border:1px solid var(--line);background:var(--chip-bg);border-radius:4px;padding:.1875rem .625rem;font-size:.9375rem}.contact__email{font-family:var(--font-name);letter-spacing:-.02em;word-break:break-word;font-size:clamp(1.5rem,4.4vw,2.75rem);font-weight:600;line-height:1.15;display:inline-block}.social--lg{gap:.625rem;margin-top:1.5rem}.site-qa .social--lg a{border:1px solid var(--line);width:3rem;height:3rem;color:var(--ink)}.site-qa .social--lg a:hover{border-color:var(--accent);color:var(--accent);background:0 0}.social--lg svg{width:1.375rem;height:1.375rem}.qa-footer{border-top:1px solid var(--line);color:var(--muted);padding-block:2rem 2.5rem;font-size:.9375rem}@media (width<=56rem){.qa-hero .wrap,.qa-section__grid{grid-template-columns:minmax(0,1fr)}.qa-lede{max-width:none}}@media (width<=40rem){.releases,.ai__items{grid-template-columns:minmax(0,1fr)}.timeline>li{grid-template-columns:minmax(0,1fr);gap:.25rem}.skills div{grid-template-columns:minmax(0,1fr);gap:.5rem}.edu li{grid-template-columns:minmax(0,1fr);gap:.125rem}.edu__school{text-align:left}.project__facts div{grid-template-columns:minmax(0,1fr);gap:.25rem}.project__charts{grid-template-columns:minmax(0,1fr)}.switchbar__tools{gap:.375rem}.social{gap:0}.site-qa .social--sm a,.theme-toggle{width:2rem;height:2rem}.bars__row{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"label value""track track";gap:.375rem}.bars__label{grid-area:label}.bars__value{grid-area:value}.bars__track{grid-area:track}.runner{font-size:.75rem}.runner__ms{display:none}.runner__line{grid-template-columns:1.25rem minmax(0,1fr)}}@media (width<=25rem){.switchbar__name{display:none}.switchbar .wrap{justify-content:flex-end}}
