html.resume-swiss{--resume-paper:#fff;--resume-ink:#181b1e;--resume-text:#3d444b;--resume-muted:#656d75;--resume-rule:#dce0e3;--resume-field:#f4f5f6;--resume-columns:repeat(12, minmax(0, 1fr));--resume-gutter:32px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;background:var(--resume-paper);color:var(--resume-text);font-family:"Helvetica Neue", Helvetica, Arial, var(--font-frex-gb,"PingFang SC"), "PingFang SC", sans-serif;-webkit-font-smoothing:antialiased;-moz-text-size-adjust:100%;text-size-adjust:100%;font-size:16px;line-height:1.9}.resume-swiss *,.resume-swiss :before,.resume-swiss :after{box-sizing:border-box}.resume-swiss :where(body,h1,h2,h3,h4,p,ol,ul,dl,dd){margin:0}.resume-swiss :where(ol,ul){padding:0;list-style:none}.resume-swiss :where(a){color:inherit;text-decoration:none}.resume-swiss :where(button,input){font:inherit}.resume-swiss :where(button){color:inherit;cursor:pointer;background:0 0;border:0;padding:0}.resume-swiss :where(a,button,input):focus-visible{outline:2px solid var(--resume-ink);outline-offset:5px}.resume-swiss :where(a,button,input){touch-action:manipulation}.resume-swiss ::selection{background:var(--resume-ink);color:var(--resume-paper)}.resume-swiss :where(h1,h2,h3,h4){color:var(--resume-ink);text-wrap:balance;font-weight:500}.resume-page{width:min(1120px,100% - 96px);padding-bottom:max(64px, env(safe-area-inset-bottom));margin-inline:auto}.resume-nav{justify-content:space-between;align-items:center;margin-bottom:88px;padding-top:32px;display:flex}.resume-text-control,.resume-contact a{min-height:44px;color:var(--resume-muted);text-underline-offset:5px;align-items:center;gap:8px;font-size:14px;text-decoration-thickness:1px;display:inline-flex}.resume-hero,.resume-section,.resume-footer,.resume-gate{grid-template-columns:var(--resume-columns);column-gap:var(--resume-gutter);display:grid}.resume-hero{row-gap:48px}.resume-document-label,.resume-role,.resume-section-title,.resume-footer>p{grid-column:1/4}.resume-name,.resume-introduction,.resume-section>:last-child,.resume-actions{grid-column:4/-1}.resume-hero>*,.resume-section>*,.resume-job-heading>*{min-width:0}.resume-document-label{color:var(--resume-ink);padding-top:8px;font-size:14px;line-height:1.6}.resume-document-label>span{color:var(--resume-muted);margin-top:8px;font-size:12px;display:block}.resume-name{letter-spacing:-.035em;font-size:clamp(48px,5.8vw,80px);line-height:1.12}.resume-name>span{display:block}.resume-name-alternate{color:var(--resume-muted);letter-spacing:-.055em;margin-top:8px}.resume-role{color:var(--resume-ink);padding-top:3px;font-size:17px;line-height:1.65}.resume-intro{text-wrap:pretty;max-width:42em;font-size:18px;line-height:1.9}.resume-contact{flex-wrap:wrap;column-gap:28px;margin-top:24px;display:flex}.resume-contact a{color:var(--resume-ink)}.resume-contact svg,.resume-text-control svg{pointer-events:none;flex:none}.resume-section{border-top:1px solid var(--resume-ink);align-items:start;margin-top:96px;padding-top:32px}.resume-section-title{padding-right:16px;font-size:18px;line-height:1.7;position:sticky;top:32px}.resume-overline{color:var(--resume-muted);letter-spacing:.12em;text-transform:uppercase;margin-bottom:10px;font-size:11px;font-weight:400;display:block}.resume-job+.resume-job{border-top:1px solid var(--resume-rule);margin-top:64px;padding-top:32px}.resume-job-heading{grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:16px 24px;display:grid}.resume-job h3{letter-spacing:-.025em;font-size:25px;line-height:1.4}.resume-job-role{color:var(--resume-muted);margin-top:8px;font-size:14px;line-height:1.75}.resume-periods{gap:4px;max-width:260px;display:grid}.resume-date{color:var(--resume-muted);font-variant-numeric:tabular-nums;font-size:12px;line-height:1.75}.resume-bullets{gap:16px;max-width:46em;margin-top:24px;padding-left:18px;list-style:outside;display:grid}.resume-bullets li{text-wrap:pretty;padding-left:6px}.resume-bullets li::marker{color:var(--resume-muted);font-size:.65em}.resume-bullets strong{color:var(--resume-ink);font-weight:500}.resume-job-description{text-wrap:pretty;max-width:46em;margin-top:16px}.resume-clients{overflow-wrap:anywhere;text-wrap:pretty;margin-top:20px;font-size:13px;line-height:1.85}.resume-clients strong{color:var(--resume-ink);font-weight:500}.resume-engagements{margin-top:48px}.resume-subsection-label{border-bottom:1px solid var(--resume-rule);color:var(--resume-muted);padding-bottom:16px;font-size:12px}.resume-engagement{margin-top:32px}.resume-engagement+.resume-engagement{margin-top:40px}.resume-engagement h4,.resume-open-source h3,.resume-education h3{letter-spacing:-.015em;font-size:20px;line-height:1.55}.resume-context-note{max-width:48em;color:var(--resume-muted);margin-top:16px;font-size:13px;line-height:1.85}.resume-engagement .resume-bullets{margin-top:16px}.resume-open-source+.resume-open-source,.resume-education+.resume-education{border-top:1px solid var(--resume-rule);margin-top:32px;padding-top:32px}.resume-capabilities>div+div{margin-top:24px}.resume-capabilities dt{color:var(--resume-ink);font-weight:500}.resume-capabilities dd{max-width:46em;margin-top:8px}.resume-education p{margin-top:8px}.resume-education p+p,.resume-education-note{color:var(--resume-muted);font-size:14px}.resume-education-note{margin-top:32px}.resume-footer{border-top:1px solid var(--resume-rule);align-items:center;margin-top:96px;padding-top:24px}.resume-footer>p{color:var(--resume-muted);font-size:13px}.resume-actions{flex-wrap:wrap;justify-content:space-between;gap:8px 24px;display:flex}.resume-gate{border-top:1px solid var(--resume-ink);margin-top:120px;padding-top:40px}.resume-gate-body{grid-column:4/10}.resume-gate-heading h1{letter-spacing:-.04em;font-size:clamp(30px,4vw,48px);line-height:1.3}.resume-form{margin-top:48px}.resume-form label{color:var(--resume-ink);margin-bottom:12px;font-size:14px;display:block}.resume-input-wrap{position:relative}.resume-input-wrap input{border:1px solid var(--resume-rule);background:var(--resume-field);width:100%;min-height:56px;color:var(--resume-ink);border-radius:0;padding:12px 72px 12px 16px;font-size:16px}.resume-reveal{min-width:60px;min-height:44px;color:var(--resume-muted);font-size:13px;position:absolute;top:6px;right:4px}.resume-form-message{min-height:64px;color:var(--resume-muted);padding-top:12px;font-size:13px;line-height:1.6}.resume-form-message[role=alert]{color:var(--resume-ink)}.resume-submit{background:var(--resume-ink);width:100%;min-height:56px;color:var(--resume-paper);justify-content:space-between;align-items:center;padding:12px 20px;font-size:14px;display:flex}.resume-page button:disabled{cursor:default;opacity:.5}@media (hover:hover) and (pointer:fine){.resume-text-control:hover,.resume-contact a:hover,.resume-job a:hover,.resume-open-source a:hover{color:var(--resume-ink);text-decoration:underline}.resume-reveal:hover{color:var(--resume-ink)}}@media (prefers-color-scheme:dark){html.resume-swiss{--resume-paper:#17191b;--resume-ink:#f0f2f3;--resume-text:#c7cdd2;--resume-muted:#99a2aa;--resume-rule:#393e43;--resume-field:#22262a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}@media (max-width:900px){html.resume-swiss{--resume-gutter:24px}.resume-page{width:calc(100% - 64px)}.resume-job-heading{grid-template-columns:1fr;gap:12px}.resume-periods{max-width:none}.resume-section-title{font-size:16px}.resume-role{font-size:15px}.resume-gate-body{grid-column:4/-1}}@media (max-width:640px){.resume-page{width:calc(100% - 48px);padding-bottom:max(40px, env(safe-area-inset-bottom))}.resume-nav{margin-bottom:56px;padding-top:16px}.resume-hero,.resume-section,.resume-footer,.resume-gate{grid-template-columns:minmax(0,1fr)}.resume-hero{row-gap:24px}.resume-hero>*,.resume-section>*,.resume-section>:last-child,.resume-footer>*,.resume-gate>*{grid-column:1}.resume-document-label{padding:0}.resume-document-label>span{margin-left:16px;display:inline}.resume-name{margin:8px 0;font-size:clamp(40px,11vw,64px)}.resume-name-alternate{margin-top:8px}.resume-role{padding:0;font-size:16px}.resume-intro{font-size:16px}.resume-contact{gap:0 24px;margin-top:20px}.resume-section{row-gap:32px;margin-top:64px;padding-top:24px}.resume-section-title{padding:0;font-size:18px;position:static}.resume-overline{margin-bottom:6px}.resume-job h3{font-size:23px}.resume-job+.resume-job{margin-top:48px;padding-top:24px}.resume-bullets{gap:16px;margin-top:20px}.resume-bullets li{padding-left:4px}.resume-footer{row-gap:12px;margin-top:64px}.resume-gate{row-gap:40px;margin-top:64px;padding-top:24px}.resume-form{margin-top:32px}}@media print{@page{size:A4;margin:16mm}html.resume-swiss{--resume-paper:#fff;--resume-ink:#111;--resume-text:#333;--resume-muted:#555;--resume-rule:#ccc;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-size:12px;line-height:1.7}.resume-page{width:100%;padding:0}.resume-nav,.resume-actions{display:none}.resume-hero{grid-template-columns:1fr 3fr;gap:20px 24px;display:grid}.resume-document-label,.resume-role{grid-column:1}.resume-name,.resume-introduction{grid-column:2}.resume-document-label{padding:0;font-size:11px}.resume-document-label>span{margin:4px 0 0;font-size:10px;display:block}.resume-name{margin:0;font-size:38px}.resume-name-alternate{margin-top:4px}.resume-role{padding:0;font-size:12px}.resume-intro{font-size:12px;line-height:1.75}.resume-contact{gap:16px;margin-top:8px}.resume-contact a{min-height:0;font-size:10px}.resume-contact svg{width:12px;height:12px}.resume-section{margin-top:24px;padding-top:12px;display:block}.resume-section-title{align-items:baseline;gap:12px;margin-bottom:12px;padding:0;font-size:14px;display:flex;position:static}.resume-overline{order:1;margin:0;font-size:9px}.resume-job-heading{justify-content:space-between;gap:16px;display:flex}.resume-job h3{font-size:16px}.resume-job-role{margin-top:4px;font-size:11px}.resume-date{font-size:10px}.resume-periods{gap:2px;max-width:240px}.resume-bullets{gap:8px;max-width:none;margin-top:12px;padding-left:14px}.resume-bullets li{padding-left:2px}.resume-job+.resume-job{margin-top:20px;padding-top:12px}.resume-engagements{margin-top:20px}.resume-subsection-label{padding-bottom:8px;font-size:10px}.resume-engagement,.resume-engagement+.resume-engagement{margin-top:16px}.resume-engagement h4,.resume-open-source h3,.resume-education h3{font-size:14px}.resume-context-note{margin-top:8px;font-size:10px}.resume-engagement .resume-bullets{margin-top:8px}.resume-job-description{max-width:none;margin-top:8px}.resume-clients{margin-top:10px;font-size:10px}.resume-open-source+.resume-open-source,.resume-education+.resume-education{margin-top:12px;padding-top:12px}.resume-capabilities>div+div{margin-top:12px}.resume-capabilities dd{max-width:none;margin-top:4px}.resume-education p{margin-top:4px}.resume-education p+p,.resume-education-note{font-size:11px}.resume-education-note{margin-top:16px}.resume-footer{margin-top:16px;padding-top:12px;display:block}.resume-footer>p{font-size:10px}.resume-hero,.resume-master header,.resume-bullets li,.resume-open-source,.resume-education,.resume-capabilities>div{break-inside:avoid}.resume-section-title,.resume-master header,.resume-subsection-label,.resume-education:last-of-type{break-after:avoid}.resume-content p,.resume-bullets li{orphans:3;widows:3}}.resume-content{box-sizing:border-box;width:100%;max-width:640px;margin:48px auto;padding:0 36px}.resume-content .resume-section{border-top:1px solid #e5e5e5;margin-top:56px;padding-top:28px;display:block}.resume-content .resume-section-title{align-items:center;gap:14px;margin-bottom:28px;font-size:15px;font-weight:600;display:flex}.resume-content .resume-overline{color:#888;font-size:11px}.resume-content .resume-section-body{margin:0;padding:0;list-style:none}.resume-content .resume-section-body li{border-bottom:1px solid #eee;padding:12px 0}.resume-content .resume-job-heading{justify-content:space-between;align-items:flex-start;gap:20px;display:flex}.resume-content .resume-date{white-space:nowrap;color:#888;font-size:12px}.resume-content .resume-hero{flex-direction:column;gap:16px;display:flex}.resume-content .resume-name{letter-spacing:-.04em;margin:8px 0;font-size:clamp(32px,5vw,48px);line-height:1.15}.resume-content .resume-role{color:#666;font-size:14px}.resume-content .resume-introduction{margin-top:8px}.resume-content .resume-intro{font-size:14px;line-height:1.8}.resume-content .resume-section{margin-top:40px}.resume-content .resume-footer{margin-top:48px}.resume-content .resume-section-title{overflow:visible}.resume-content .resume-section-title>span{white-space:normal;overflow:visible}.resume-content{letter-spacing:0;font-family:Arial,Helvetica,sans-serif;font-size:14px;font-weight:400;line-height:1.65}.resume-content .resume-name{letter-spacing:-.025em;font-family:inherit;font-size:32px;font-weight:600;line-height:1.25}.resume-content .resume-section-title,.resume-content .resume-job-heading h3{letter-spacing:0;font-family:inherit;font-size:15px;font-weight:600;line-height:1.5}.resume-content .resume-intro,.resume-content .resume-role,.resume-content .resume-job-role,.resume-content .resume-section-body li{letter-spacing:0;font-family:inherit;font-size:14px;font-weight:400;line-height:1.7}.resume-content .resume-document-label,.resume-content .resume-overline,.resume-content .resume-date,.resume-content .resume-footer{letter-spacing:0;font-family:inherit;font-size:12px;font-weight:400;line-height:1.6}.resume-content .resume-footer a{font-size:13px}@media (max-width:640px){.resume-content .resume-name{font-size:28px}}
