@font-face{font-family:Archivo;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(./archivo-wdth-DY7AcnAa.woff2)format("woff2")}:root{--paper:#e9ecea;--surface:#f5f7f6;--ink:#18211f;--graphite:#56605d;--rule:#c3c9c6;--field-border:#848e8a;--cobalt:#2340b8;--cobalt-strong:#1a3290;--on-cobalt:#fff;--cobalt-wash:#2340b81f;--error:#b3261e;--snow:#2340b859;--measure:42rem;--gutter:clamp(1.25rem, 5vw, 4rem);--row-h:1.75rem;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--paper:#16201e;--surface:#1d2826;--ink:#e2e8e5;--graphite:#9aa5a1;--rule:#34413e;--field-border:#66736f;--cobalt:#9db0ff;--cobalt-strong:#c3cfff;--on-cobalt:#10183d;--cobalt-wash:#9db0ff24;--error:#ffb4ab;--snow:#ffffffbf;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--paper:#16201e;--surface:#1d2826;--ink:#e2e8e5;--graphite:#9aa5a1;--rule:#34413e;--field-border:#66736f;--cobalt:#9db0ff;--cobalt-strong:#c3cfff;--on-cobalt:#10183d;--cobalt-wash:#9db0ff24;--error:#ffb4ab;--snow:#ffffffbf;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--paper);color:var(--ink);font-kerning:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-family:Archivo,system-ui,sans-serif;font-size:1.125rem;font-stretch:100%;line-height:1.6}h1,h2,h3{text-wrap:balance;margin:0;line-height:1.2}p{text-wrap:pretty;margin:0 0 1em}a{color:var(--cobalt);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--cobalt);outline-offset:3px;border-radius:2px}::selection{background:var(--cobalt);color:var(--on-cobalt)}.container{max-width:72rem;padding-inline:var(--gutter);margin-inline:auto}.skip-link{background:var(--ink);color:var(--paper);z-index:10;padding:.5rem 1rem;position:absolute;top:-4rem;left:1rem}.skip-link:focus{top:1rem}.topbar{justify-content:space-between;align-items:center;gap:1rem;padding-block:1.25rem;display:flex}.social-links{gap:.25rem;margin-left:-.5rem;display:flex}.social-links a{width:2.5rem;height:2.5rem;color:var(--graphite);place-items:center;display:grid}.social-links a:hover{color:var(--ink)}.theme-toggle{color:var(--graphite);cursor:pointer;align-items:center;gap:.625rem;font-size:.875rem;font-stretch:87.5%;display:inline-flex}.theme-toggle input{appearance:none;border:1.5px solid var(--field-border);cursor:pointer;background:0 0;border-radius:1rem;width:2.25rem;height:1.25rem;margin:0;transition:background-color .15s;position:relative}.theme-toggle input:before{content:"";background:var(--graphite);border-radius:50%;width:.8125rem;height:.8125rem;transition:transform .15s;position:absolute;top:2px;left:2px}.theme-toggle input:checked{background:var(--ink);border-color:var(--ink)}.theme-toggle input:checked:before{background:var(--paper);transform:translate(1rem)}.hero{padding-top:0;padding-bottom:clamp(3rem,6vw,5rem)}.hero-intro{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name portrait""role portrait""body body";column-gap:2rem;display:grid}.hero h1{letter-spacing:-.02em;grid-area:name;align-self:end;font-size:clamp(2.25rem,5.5vw,4.25rem);font-weight:600;font-stretch:106%;line-height:.95}.portrait{grid-area:portrait;align-self:end}.portrait img{aspect-ratio:4/5;object-fit:cover;object-position:50% 40%;background:var(--rule);border-radius:10px;width:clamp(6rem,12vw,10rem);height:auto;display:block}.hero-role{color:var(--graphite);grid-area:role;margin:clamp(.75rem,1.5vw,1.25rem) 0 0;font-size:clamp(1.125rem,2.2vw,1.625rem);font-weight:450;line-height:1.2}.hero-body{grid-template:"lede profile""actions profile"1fr/minmax(0,36rem) minmax(17rem,25rem);grid-area:body;justify-content:space-between;column-gap:3rem;display:grid}.hero-lede{grid-area:lede;max-width:36rem;margin:clamp(1.5rem,3vw,2.5rem) 0 2rem;font-size:clamp(1.125rem,2vw,1.3125rem);line-height:1.5}.nowrap{white-space:nowrap}.profile{border-top:1px solid var(--ink);grid-area:profile;align-self:start;margin:clamp(1.5rem,3vw,2.5rem) 0 0;font-size:1rem;line-height:1.4}.profile div{border-bottom:1px solid var(--rule);grid-template-columns:6.5rem minmax(0,1fr);gap:1rem;padding-block:.5rem;display:grid}.profile dt{color:var(--graphite);font-weight:500;font-stretch:75%}.profile dd{margin:0}.hero-actions{flex-wrap:wrap;grid-area:actions;align-self:start;align-items:center;gap:.75rem;display:flex}.hero-contact{color:var(--graphite);flex-wrap:wrap;flex-basis:100%;gap:.25rem 1.25rem;margin:.25rem 0 0;font-size:1rem;font-stretch:87.5%;display:flex}.print-only{display:none}.hero-contact a{color:inherit;text-decoration:none}.hero-contact a:hover{color:var(--ink);text-decoration:underline}.career{margin:clamp(3rem,7vw,5.5rem) 0 0}.career-rows{margin:0;padding:2rem 0 0;list-style:none;position:relative}.career-rows:before,.career-rows:after{animation:.4s ease-out 1.1s both career-appear;position:absolute;right:0}.career-rows:before{content:"";top:1.25rem;left:calc(var(--period-s) / var(--total) * 100%);border:1px solid var(--cobalt);border-bottom:0;height:.375rem}.career-rows:after{content:attr(data-period-label);white-space:nowrap;color:var(--cobalt);font-size:.875rem;font-weight:600;font-stretch:87.5%;line-height:1.125rem;top:0}.career-rows li{--left:calc(var(--s) / var(--total) * 100%);--width:calc((var(--e) - var(--s)) / var(--total) * 100%)}.career-row{height:var(--row-h);color:var(--ink);text-decoration:none;display:block;position:relative}.career-bar{top:.3125rem;left:var(--left);width:var(--width);min-width:3px;height:calc(var(--row-h) - .625rem);background:var(--ink);transform-origin:0;animation:.7s cubic-bezier(.2,.8,.2,1) both career-grow;animation-delay:calc(.15s + var(--i) * .11s);border-radius:2px;position:absolute}.career-label{top:0;right:calc(100% - var(--left) + .375rem);background:var(--paper);font-size:.9375rem;font-weight:600;font-stretch:87.5%;line-height:var(--row-h);white-space:nowrap;animation:.4s ease-out both career-appear;animation-delay:calc(.35s + var(--i) * .11s);padding-inline:.25rem;position:absolute}.career-row-after .career-label{right:auto;left:calc(var(--left) + var(--width) + .375rem)}.career-row-earlier .career-bar{-webkit-mask-image:linear-gradient(90deg,#0000,#000 75%);mask-image:linear-gradient(90deg,#0000,#000 75%)}.career-years{font-variant-numeric:tabular-nums;color:var(--graphite);margin-left:.375rem;font-weight:400;font-stretch:75%}.career-current .career-bar{background:var(--cobalt)}.career-current .career-label{color:var(--cobalt)}.career-row:hover .career-bar,.career-row:focus-visible .career-bar{background:var(--cobalt)}.career-row:hover .career-label{text-underline-offset:.2em;text-decoration:underline}.career-row:focus-visible{z-index:1;outline-offset:0}.career-axis{border-top:1px solid var(--rule);font-variant-numeric:tabular-nums;height:1.5rem;color:var(--graphite);margin-top:.5rem;font-size:.8125rem;font-stretch:75%;position:relative}.career-axis span{top:.25rem;left:calc(var(--s) / var(--total) * 100%);padding-left:.3125rem;position:absolute}.career-axis span:before{content:"";height:calc(8 * var(--row-h) + 1.25rem);border-left:1px solid var(--rule);z-index:-1;position:absolute;bottom:calc(100% - .75rem);left:0}.career figcaption{color:var(--graphite);margin-top:1rem;font-size:.9375rem}@keyframes career-grow{0%{transform:scaleX(0)}}@keyframes career-appear{0%{opacity:0}}.section{grid-template-columns:12rem minmax(0, var(--measure));border-top:1px solid var(--rule);column-gap:clamp(2rem,6vw,6rem);padding-block:clamp(2.5rem,6vw,4.5rem);display:grid}.section>h2{letter-spacing:-.01em;grid-column:1;align-self:start;font-size:1.5rem;font-weight:600;position:sticky;top:1.5rem}.section-body{grid-column:2}.section-body>:last-child{margin-bottom:0}.summary-lead{font-size:1.3125rem;font-weight:600;line-height:1.4}.entry{scroll-margin-top:1.5rem}.entry+.entry{margin-top:3rem}.entry-meta{color:var(--graphite);margin:0 0 .25rem;font-size:1rem;font-weight:500;font-stretch:75%}#job-cegeka .entry-meta{color:var(--cobalt)}.entry h3{margin-bottom:.75rem;font-size:1.3125rem;font-weight:650;line-height:1.25}.entry h3:has(+.entry-context){margin-bottom:.125rem}.entry-context{color:var(--graphite);margin:0 0 .75rem;font-size:.9375rem}.entry ul{margin:0;padding-left:1.125em}.entry li+li{margin-top:.5rem}.entry li::marker{color:var(--graphite)}.entry:target{animation:1.8s ease-out entry-arrive}@keyframes entry-arrive{0%{background:var(--cobalt-wash);box-shadow:0 0 0 .75rem var(--cobalt-wash)}to{background:0 0;box-shadow:0 0 0 .75rem #0000}}.entry .milestones{padding-left:0;list-style:none}.milestones li{grid-template-columns:3rem minmax(0,1fr);display:grid}.milestone-year{font-variant-numeric:tabular-nums;color:var(--graphite);font-weight:500;font-stretch:75%}.entry-summary{font-weight:500}.project-facts{grid-template-columns:7.5rem minmax(0,1fr);gap:.25rem 1rem;margin:0 0 1.25rem;font-size:1rem;display:grid}.project-facts dt{color:var(--graphite);font-weight:500;font-stretch:75%}.project-facts dd{margin:0}.tech-groups{grid-template-columns:repeat(2,minmax(0,1fr));gap:2.5rem 3rem;display:grid}.tech-group h3{margin-bottom:.75rem;font-size:1rem;font-weight:650}.tech-list{margin:0;padding:0;font-size:1rem;list-style:none}.tech-list li{border-bottom:1px solid var(--rule);align-items:center;gap:.625rem;padding-block:.3125rem;display:flex}.tech-list svg{width:1rem;height:1rem;fill:var(--graphite);flex:none}#background{display:block}.facts{grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));gap:2.5rem clamp(2rem,4vw,3rem);font-size:1rem;display:grid}.fact h2{margin-bottom:.625rem;font-size:1.125rem;font-weight:600}.fact ul{margin:0;padding:0;list-style:none}.fact p{margin:0}.contact-lead{font-size:1.3125rem;line-height:1.5}.contact-actions{flex-wrap:wrap;gap:.75rem;margin:2rem 0 3.5rem;display:flex}.contact-form{gap:1.25rem;display:grid}.contact-form h3{font-size:1.3125rem;font-weight:650}.form-row{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem;display:grid}.form-group{gap:.375rem;display:grid}.form-group[hidden]{display:none}.form-group label{font-size:1rem;font-weight:600}.form-group input,.form-group textarea{border:1.5px solid var(--field-border);background:var(--surface);width:100%;color:var(--ink);font:inherit;border-radius:4px;padding:.75rem .875rem;font-size:1rem}.form-group textarea{resize:vertical}.form-group input:focus-visible,.form-group textarea:focus-visible{outline-offset:0;border-color:var(--cobalt)}.form-submit{flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;display:flex}.form-status{margin:0;font-size:1rem;font-weight:500}.form-status.success{color:var(--cobalt)}.form-status.error{color:var(--error)}.btn{font:inherit;cursor:pointer;border:1.5px solid #0000;border-radius:6px;padding:.6875rem 1.125rem;font-size:1rem;font-weight:600;line-height:1.3;text-decoration:none;transition:background-color .15s,color .15s,border-color .15s;display:inline-block}.btn-primary{background:var(--cobalt);border-color:var(--cobalt);color:var(--on-cobalt)}.btn-primary:hover{background:var(--cobalt-strong);border-color:var(--cobalt-strong)}.btn-secondary{border-color:var(--ink);color:var(--ink);background:0 0}.btn-secondary:hover{background:var(--ink);color:var(--paper)}.btn:disabled{cursor:progress;opacity:.7}.site-footer{color:var(--graphite);text-align:right;padding-block:0 5rem;font-size:.875rem;font-stretch:87.5%}.site-footer p{border-top:1px solid var(--rule);margin:0;padding-top:2rem}#backToTopBtn{z-index:5;background:var(--ink);width:2.75rem;height:2.75rem;color:var(--paper);border-radius:6px;place-items:center;display:none;position:fixed;bottom:1.25rem;right:1.25rem}#backToTopBtn.visible{display:grid}#backToTopBtn:hover{background:var(--cobalt);color:var(--on-cobalt)}#snow-container{pointer-events:none;z-index:20;position:fixed;inset:0;overflow:hidden}.snowflake{background:var(--snow);border-radius:50%;animation:linear infinite fall;position:absolute;top:-10px}@keyframes fall{to{transform:translateY(105vh)}}@media (width<=60rem){.hero-body{grid-template:"lede""profile""actions"/minmax(0,1fr)}.profile{max-width:36rem;margin:0 0 2rem}}@media (width<=52rem){.section{grid-template-columns:minmax(0,1fr)}.section>h2{margin-bottom:1.5rem;position:static}.section-body{grid-column:1}.tech-groups{grid-template-columns:minmax(0,1fr)}}@media (width<=36rem){body{font-size:1.0625rem}.hero-intro{grid-template-columns:minmax(0,1fr);grid-template-areas:"portrait""name""role""body"}.portrait{margin-bottom:1.5rem}.portrait img{width:5.5rem}.profile div{grid-template-columns:5.75rem minmax(0,1fr);gap:.75rem}.career-label{font-size:.875rem}.career-row:not(.career-row-earlier) .career-years{display:none}.career-axis span:nth-child(2n){visibility:hidden}.form-row,.project-facts{grid-template-columns:minmax(0,1fr)}.project-facts dd+dt{margin-top:.5rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.theme-toggle input,.theme-toggle input:before,.career-rows:before,.career-rows:after,.career-bar,.career-label,.entry:target,.btn,.snowflake{transition:none;animation:none}}@media print{:root,:root[data-theme],:root:not([data-theme=light]){--paper:#fff;--ink:#000;--graphite:#444;--rule:#bbb;--cobalt:#000}body{font-size:10.5pt}.topbar,.skip-link,.hero-actions .btn,.career figcaption,#contact,#backToTopBtn,#snow-container{display:none}.hero{padding-block:0 1rem}.hero h1{font-size:28pt}.hero-role{font-size:13pt}.portrait img{width:1.2in}.hero-lede{margin-bottom:1rem;font-size:11.5pt}.hero-contact{color:var(--ink);flex-direction:column;margin:0}.print-only{display:inline}.section{padding-block:.875rem;display:block}.section>h2{break-after:avoid;margin-bottom:.5rem;font-size:16pt;position:static}.summary-lead{font-size:12pt}.entry+.entry{margin-top:1.125rem}.entry h3{break-after:avoid;margin-bottom:.375rem;font-size:12.5pt}.entry-context{break-after:avoid;margin-bottom:.375rem;font-size:9.5pt}.entry li+li{margin-top:.1875rem}.hero-body{grid-template:"lede profile""actions profile"1fr/minmax(0,1fr) minmax(0,1fr);column-gap:1.5rem}.profile{margin:1.25rem 0 0;font-size:9.5pt}.profile div{grid-template-columns:5rem minmax(0,1fr);gap:.5rem;padding-block:.25rem}.tech-groups{grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1.5rem}.tech-group h3{margin-bottom:.25rem}.tech-list{display:block}.tech-list li{border-bottom:0;padding:0;display:inline}.tech-list li:not(:last-child):after{content:", "}.tech-list svg{display:none}.project-facts{font-size:inherit;grid-template-columns:6rem minmax(0,1fr)}.facts{break-inside:avoid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem 1.5rem}.fact h2{font-size:12pt}.site-footer{display:none}.entry-meta{break-after:avoid}.entry li,.project-facts,#opensource{break-inside:avoid}.career-bar,.career-label{-webkit-print-color-adjust:exact;print-color-adjust:exact;animation:none}a{color:inherit;text-decoration:none}}
