html:has(#wechat-dialog[open]){overflow:hidden}.wechat-dialog[data-astro-cid-2vspqoth]{border:1px solid var(--strong-line);background:var(--bg);width:min(420px,100% - 32px);max-width:none;max-height:calc(100dvh - 32px);color:var(--body);overscroll-behavior:contain;border-radius:14px;margin:auto;padding:20px}.wechat-dialog[data-astro-cid-2vspqoth]::backdrop{background:#07090fa6}.wechat-panel[data-astro-cid-2vspqoth]{grid-template-columns:minmax(0,1fr);gap:12px;display:grid}.wechat-header[data-astro-cid-2vspqoth]{justify-content:space-between;align-items:center;gap:16px;display:flex}.wechat-header[data-astro-cid-2vspqoth] h2[data-astro-cid-2vspqoth]{font-size:1.5rem}.wechat-header[data-astro-cid-2vspqoth] form[data-astro-cid-2vspqoth]{margin:0}.wechat-close[data-astro-cid-2vspqoth]{border:1px solid var(--strong-line);width:44px;height:44px;color:var(--link);cursor:pointer;background:0 0;border-radius:50%;place-items:center;padding:0;display:grid}.wechat-close[data-astro-cid-2vspqoth]:hover{background:var(--surface);border-color:var(--link)}.wechat-close[data-astro-cid-2vspqoth] svg{width:22px;height:22px}.wechat-qr[data-astro-cid-2vspqoth]{object-fit:contain;background:#fff;justify-self:center;width:auto;max-width:100%;height:auto;max-height:calc(100dvh - 192px)}.wechat-original[data-astro-cid-2vspqoth]{justify-content:center;align-items:center;min-height:44px;font-size:.875rem;display:flex}@media (width>=600px) and (height<=540px){.wechat-dialog[data-astro-cid-2vspqoth]{width:min(640px,100% - 32px)}.wechat-panel[data-astro-cid-2vspqoth]{grid-template-columns:minmax(0,1fr) 220px;align-items:center;column-gap:24px}.wechat-header[data-astro-cid-2vspqoth]{grid-column:2}.wechat-qr[data-astro-cid-2vspqoth]{grid-area:1/1/3;max-height:calc(100dvh - 76px)}.wechat-original[data-astro-cid-2vspqoth]{grid-column:2;align-self:start}}.profile-card[data-astro-cid-kie4ijr3]{--profile-icon-size:20px;width:var(--profile-rail-width);max-height:calc(100dvh - var(--profile-top) - 16px);overscroll-behavior:contain;scrollbar-width:thin;z-index:10;isolation:isolate;background:var(--bg);color:var(--body);font-family:var(--sans);text-align:center;padding:6px;font-size:14px;line-height:1.55;position:fixed;inset-block-start:var(--profile-top);inset-inline-start:max(var(--page-gutter), calc((100% - var(--page-max-width)) / 2));overflow-y:auto}.portrait[data-astro-cid-kie4ijr3]{width:156px;margin:0 auto 18px}.portrait[data-astro-cid-kie4ijr3] img[data-astro-cid-kie4ijr3]{object-fit:cover;border:4px solid var(--bg);outline:1px solid var(--line);border-radius:50%;width:156px;height:156px}.profile-titles[data-astro-cid-kie4ijr3]{min-width:0}h1[data-astro-cid-kie4ijr3]{color:var(--ink);font-family:var(--serif);letter-spacing:-.035em;margin:0;font-size:2.15rem;font-weight:600;line-height:1.2}p[data-astro-cid-kie4ijr3]{margin:0}.profile-role[data-astro-cid-kie4ijr3]{color:var(--ink);margin-top:12px;font-size:.875rem;font-weight:600;line-height:1.5}.profile-specialisms[data-astro-cid-kie4ijr3]{max-width:27ch;color:var(--muted);margin:6px auto 0;font-size:.75rem;line-height:1.6}.profile-contacts[data-astro-cid-kie4ijr3]{grid-template-columns:repeat(5,44px);justify-content:space-between;gap:0;margin-top:18px;display:grid}.profile-contacts[data-astro-cid-kie4ijr3] .profile-contact{width:44px;height:44px;color:var(--link);border-radius:4px;place-items:center;padding:0;text-decoration:none;display:grid}.profile-contacts[data-astro-cid-kie4ijr3] .profile-contact:hover{background:var(--surface)}.profile-contacts[data-astro-cid-kie4ijr3] .profile-contact svg{width:var(--profile-icon-size);height:var(--profile-icon-size)}.profile-contacts[data-astro-cid-kie4ijr3] .contact-label{display:none}@media (width>=901px) and (height>=621px){.profile-contacts[data-astro-cid-kie4ijr3]{text-align:left;grid-template-columns:minmax(0,1fr);justify-content:stretch;gap:2px}.profile-contacts[data-astro-cid-kie4ijr3] .profile-contact{grid-template-columns:var(--profile-icon-size) minmax(0, 1fr);width:auto;min-width:0;height:auto;min-height:44px;font-family:var(--sans);justify-items:stretch;gap:12px;padding:6px 8px;font-size:.8125rem;line-height:1.5}.profile-contacts[data-astro-cid-kie4ijr3] .profile-contact:hover{text-decoration:underline}.profile-contacts[data-astro-cid-kie4ijr3] .contact-label{overflow-wrap:anywhere;min-width:0;display:block}}@media (width>=901px) and (height>=621px) and (height<=780px){.portrait[data-astro-cid-kie4ijr3],.portrait[data-astro-cid-kie4ijr3] img[data-astro-cid-kie4ijr3]{width:116px;height:116px}.portrait[data-astro-cid-kie4ijr3]{margin-bottom:12px}h1[data-astro-cid-kie4ijr3]{font-size:1.9rem}.profile-role[data-astro-cid-kie4ijr3]{margin-top:8px}.profile-contacts[data-astro-cid-kie4ijr3]{gap:0;margin-top:12px}}@media (width<=900px),(height<=620px){.profile-card[data-astro-cid-kie4ijr3]{width:100%;height:var(--profile-header-height);max-height:none;padding:calc(8px + env(safe-area-inset-top)) var(--page-gutter) 8px;text-align:left;position:static;overflow-y:auto}.profile-identity[data-astro-cid-kie4ijr3]{min-height:var(--profile-identity-height);grid-template-columns:48px minmax(0,1fr);align-items:center;gap:14px;padding-inline-end:var(--profile-tools-reserve);display:grid}.portrait[data-astro-cid-kie4ijr3],.portrait[data-astro-cid-kie4ijr3] img[data-astro-cid-kie4ijr3]{width:48px;height:48px}.portrait[data-astro-cid-kie4ijr3]{margin:0}.portrait[data-astro-cid-kie4ijr3] img[data-astro-cid-kie4ijr3]{border-width:2px}h1[data-astro-cid-kie4ijr3]{font-size:1.375rem;line-height:1.2}.profile-role[data-astro-cid-kie4ijr3]{margin-top:2px;font-size:.75rem;line-height:1.5}.profile-specialisms[data-astro-cid-kie4ijr3]{display:none}.profile-contacts[data-astro-cid-kie4ijr3]{margin-top:4px}}@media (width>=700px) and (width<=900px),(width>=700px) and (height<=620px){.profile-card[data-astro-cid-kie4ijr3]{grid-template-columns:minmax(0,1fr) 220px;align-items:center;column-gap:24px;padding-inline-end:calc(var(--page-gutter) + 120px);display:grid}.profile-identity[data-astro-cid-kie4ijr3]{padding-inline-end:0}.profile-contacts[data-astro-cid-kie4ijr3]{margin-top:0}}@media (width<=380px){.profile-identity[data-astro-cid-kie4ijr3]{grid-template-columns:40px minmax(0,1fr);gap:10px}.portrait[data-astro-cid-kie4ijr3],.portrait[data-astro-cid-kie4ijr3] img[data-astro-cid-kie4ijr3]{width:40px;height:40px}h1[data-astro-cid-kie4ijr3]{font-size:1.125rem}.profile-role[data-astro-cid-kie4ijr3]{font-size:.6875rem}}@media print{.profile-card[data-astro-cid-kie4ijr3]{width:100%;height:auto;max-height:none;position:static;overflow:visible}.profile-specialisms[data-astro-cid-kie4ijr3]{display:block}}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_astro/inter-latin-wght-normal.Dx4kXJAl.woff2)format("woff2")}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:200 900;font-display:swap;src:url(/_astro/source-serif-4-latin-wght-normal.D9elroTD.woff2)format("woff2")}:root{color-scheme:light;--bg:#faf9f4;--surface:#f1efe8;--ink:#181712;--body:#38372f;--muted:#68665d;--link:#06657e;--line:#dedcd4;--strong-line:#aaa79b;--solid:#181712;--solid-ink:#faf9f4;--solid-hover:#32302a;--sans:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;--serif:"Source Serif 4", "Iowan Old Style", "Songti SC", "Noto Serif CJK SC", "SimSun", serif}:root[data-theme=dark]{color-scheme:dark;--bg:#07090f;--surface:#0f131d;--ink:#f1f0eb;--body:#c6c9d0;--muted:#a0a6b1;--link:#8fd8ea;--line:#2c313b;--strong-line:#737b88;--solid:#f1f0eb;--solid-ink:#0b0d12;--solid-hover:#d9d9d3}*{box-sizing:border-box}html{scroll-padding-top:1.5rem}body{background:var(--bg);color:var(--body);font-family:var(--serif);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.65}::selection{background:var(--link);color:var(--bg)}a{color:var(--link);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}button,a,summary{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{font:inherit}:focus-visible{outline:3px solid var(--link);outline-offset:5px;border-radius:3px}[hidden]{display:none!important}img,svg{max-width:100%;display:block}img{height:auto}figure,p,h1,h2,h3{margin:0}h1,h2,h3{color:var(--ink);font-family:var(--serif)}h1,h2{text-wrap:balance;font-weight:600}h1{letter-spacing:-.035em;font-size:2.3rem;line-height:1.2}h2{letter-spacing:-.025em;font-size:1.8rem;line-height:1.25}h3{font-size:1.375rem;font-weight:620;line-height:1.4}p{text-wrap:pretty}main:focus{outline:none}.skip-link{z-index:20;border:1px solid var(--link);background:var(--bg);font-family:var(--sans);padding:.65rem 1rem;position:fixed;top:-10rem;left:1rem}.skip-link:focus{top:1rem}.site-header{border-bottom:1px solid var(--line);min-height:72px;font-family:var(--sans);grid-template-columns:1fr auto 1fr;align-items:center;gap:1.5rem;font-size:.8125rem;display:grid}.wordmark{color:var(--ink);white-space:nowrap;width:fit-content;padding-block:.7rem;font-size:.9375rem;font-weight:650;text-decoration:none}.wordmark span{color:var(--link)}.primary-nav{align-items:center;gap:1.75rem;display:flex}.primary-nav a{color:var(--body);white-space:nowrap;padding-block:.75rem;text-decoration:none}.primary-nav a:hover{color:var(--link);text-decoration:underline}.header-tools{justify-self:end;align-items:center;gap:1rem;display:flex}.language-link{white-space:nowrap;padding-block:.7rem;text-decoration:none}.language-link:hover{text-decoration:underline}.theme-toggle{border:1px solid var(--line);width:44px;height:44px;color:var(--ink);cursor:pointer;background:0 0;border-radius:50%;place-items:center;padding:0;display:grid}.theme-toggle:hover{background:var(--surface);border-color:var(--strong-line)}.theme-toggle svg{width:19px;height:19px}.theme-toggle .sun,[data-theme=dark] .theme-toggle .moon{display:none}[data-theme=dark] .theme-toggle .sun{display:block}.resume-content{min-width:0;padding-bottom:12px}.section{margin-bottom:30px;scroll-margin-top:1.5rem;position:relative}.section-heading{margin-bottom:16px}.biography{max-width:84ch}.biography p+p{margin-top:12px}.anchor-alias{position:absolute;top:0}.timeline{margin:0;padding:0;list-style:none}.timeline-entry{grid-template-columns:96px minmax(0,1fr);column-gap:20px;padding:0 0 14px 28px;display:grid;position:relative}.timeline-entry:before{content:"";background:var(--line);width:1px;position:absolute;top:12px;bottom:-12px;left:6px}.timeline-entry:last-child{padding-bottom:0}.timeline-entry:last-child:before{content:none}.timeline-dot{border:2px solid var(--muted);background:var(--bg);width:13px;height:13px;box-shadow:0 0 0 5px var(--bg);border-radius:50%;position:absolute;top:8px;left:0}.timeline-latest .timeline-dot{background:var(--link);border-color:var(--link)}.timeline-date{font-family:var(--sans);font-variant-numeric:tabular-nums;color:var(--muted);padding-top:2px;font-size:.75rem;line-height:1.6}.timeline-date>time{font-weight:650}.timeline-end{white-space:nowrap;margin-top:1px;display:block}.timeline-body{min-width:0}.experience-heading{align-items:baseline;gap:10px;min-width:0;display:flex}.timeline-body h3{flex:0 auto;min-width:0;max-width:60%;font-size:1.0625rem}.timeline-body h3 a{text-overflow:ellipsis;white-space:nowrap;min-height:26px;color:var(--ink);text-decoration:none;display:block;overflow:hidden}.timeline-body h3 a:hover{color:var(--link);text-decoration:underline}.experience-role{font-family:var(--sans);color:var(--muted);margin:2px 0 5px;font-size:.78125rem;line-height:1.6}.experience-heading .experience-role{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;margin:0;overflow:hidden}.experience-heading-only{flex-wrap:wrap}.experience-heading-only .experience-role{white-space:normal;flex:0 auto;overflow:visible}.experience-details>summary{cursor:pointer;align-items:flex-start;gap:12px;min-height:32px;padding-block:3px;list-style:none;display:flex}.experience-details>summary::-webkit-details-marker{display:none}.experience-summary{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:.9375rem;line-height:1.6;display:block;overflow:hidden}.experience-toggle{width:28px;height:24px;color:var(--link);border-radius:4px;flex:none;place-items:center;display:grid}.experience-toggle svg{width:20px;height:20px}.experience-details>summary:hover .experience-toggle{background:var(--surface)}.experience-details[open] .experience-toggle svg{transform:rotate(180deg)}.experience-details[open] .experience-summary{white-space:normal;overflow:visible}.timeline-body:has(.experience-details[open]) .experience-heading{flex-wrap:wrap;gap:2px 10px}.timeline-body:has(.experience-details[open]) h3{max-width:none}.timeline-body:has(.experience-details[open]) h3 a{white-space:normal;overflow:visible}.timeline-body:has(.experience-details[open]) .experience-role{white-space:normal;flex:0 auto;overflow:visible}.experience-outcome{color:var(--ink);margin-top:4px;font-size:.875rem;line-height:1.6}.education-entry{grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:5px 22px;display:grid}.education-entry+.education-entry{margin-top:14px}.education-entry h3{font-size:1.0625rem}.education-entry p:not(.education-date){margin-top:2px;font-size:.9375rem}.education-date{font-family:var(--sans);color:var(--muted);white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right;font-size:.75rem}.skills-list{margin:0}.skills-list>div{grid-template-columns:96px minmax(0,1fr);gap:20px;display:grid}.skills-list>div+div{margin-top:8px}.skills-list dt{font-family:var(--sans);color:var(--muted);padding-top:3px;font-size:.8125rem;font-weight:600}.skills-list dd{margin:0;font-size:.9375rem}.writing-entry{grid-template-columns:96px minmax(0,1fr);gap:20px;display:grid}.writing-entry>time{font-family:var(--sans);color:var(--muted);font-variant-numeric:tabular-nums;padding-top:3px;font-size:.8125rem}.writing-entry h3{font-size:1.0625rem}.writing-entry+.writing-entry{margin-top:12px}.writing-entry h3 a{text-decoration:none}.writing-entry h3 a:hover{text-decoration:underline}.external-arrow{font-family:var(--sans);vertical-align:.15em;margin-left:.45em;font-size:.65em;display:inline-block}.site-footer{font-family:var(--sans);justify-content:flex-end;padding-block:20px 28px;font-size:.75rem;display:flex}.site-footer a{padding-block:4px}.not-found{padding-block:100px 160px}.not-found h1{margin-top:20px;font-size:clamp(2.5rem,6vw,4rem)}.not-found p:not(.eyebrow){max-width:60ch;margin-block:24px}.eyebrow{color:var(--muted);font-family:var(--sans);font-size:.8125rem}.button{background:var(--solid);min-height:44px;color:var(--solid-ink);font-family:var(--sans);border-radius:6px;align-items:center;padding:.6rem 1.2rem;font-size:.875rem;text-decoration:none;display:inline-flex}:lang(zh-CN) body{font-family:var(--sans);font-size:16px;line-height:1.75}:lang(zh-CN) h2{letter-spacing:0;font-size:1.6rem;line-height:1.45}:lang(zh-CN) h3{font-family:var(--sans);font-size:1rem}:lang(zh-CN) p{text-wrap:wrap}:lang(zh-CN) .experience-summary{font-size:.9375rem;line-height:1.75}:lang(zh-CN) .experience-outcome{font-size:.875rem;line-height:1.75}@media (width<=1100px){.timeline-entry{grid-template-columns:84px minmax(0,1fr);column-gap:16px;padding-left:26px}.education-entry{grid-template-columns:minmax(0,1fr)}.education-date{text-align:left}.site-header{grid-template-columns:auto 1fr auto;gap:1.25rem}.primary-nav{justify-self:center;gap:1.25rem}}@media (width<=850px){.timeline-entry{grid-template-columns:96px minmax(0,1fr);column-gap:20px;padding-left:28px}.education-entry{grid-template-columns:minmax(0,1fr) auto}.education-date{text-align:right}}@media (width<=700px){body{font-size:16px}.site-header{grid-template-columns:minmax(0,1fr) auto;gap:2px 16px;min-height:0;padding-top:10px}.primary-nav{grid-area:2/1/auto/-1;justify-self:start;gap:24px;padding-block:0 8px;font-size:.75rem}.header-tools{grid-area:1/2;gap:12px}.language-link{font-size:.8125rem}.section{margin-bottom:26px}.section-heading{margin-bottom:14px;font-size:1.65rem}.biography p+p{margin-top:12px}.timeline-entry{grid-template-columns:minmax(0,1fr);gap:3px;padding:0 0 12px 24px}.timeline-date{flex-wrap:wrap;gap:8px;padding-top:0;font-size:.75rem;display:flex}.timeline-end{margin:0}.timeline-dot{width:11px;height:11px;top:4px;left:1px}.timeline-entry:before{top:9px;bottom:-9px}.experience-heading{gap:8px}.timeline-body h3{font-size:1rem}.experience-role{font-size:.75rem}.experience-details>summary{gap:8px;min-height:36px}.education-entry{grid-template-columns:minmax(0,1fr)}.education-date{text-align:left}.skills-list>div{grid-template-columns:minmax(0,1fr);gap:4px}.skills-list dd{font-size:.9375rem}.writing-entry{grid-template-columns:minmax(0,1fr);gap:7px}.writing-entry h3{font-size:1.0625rem}:lang(zh-CN) h2{font-size:1.45rem}}@media (width<=380px){.primary-nav{gap:18px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important}}:root{--page-max-width:1180px;--page-gutter:40px;--profile-rail-width:260px;--profile-rail-gap:52px;--profile-top:96px;--profile-identity-height:48px;--profile-header-height:calc(112px + env(safe-area-inset-top));--profile-tools-reserve:104px}.shell{width:min(var(--page-max-width), calc(100% - 2 * var(--page-gutter)));margin-inline:auto}.resume-layout{padding-top:32px;padding-inline-start:calc(var(--profile-rail-width) + var(--profile-rail-gap))}@media (width>=901px) and (height>=621px){.profile-page .site-header{grid-template-columns:1fr auto 1fr}.profile-page .primary-nav{grid-area:1/2}.profile-page .header-tools{grid-area:1/3}}@media (width<=1100px){:root{--page-gutter:32px;--profile-rail-width:244px;--profile-rail-gap:32px}}@media (width<=700px){:root{--page-gutter:20px}}@media (width<=900px),(height<=620px){.profile-page{padding-top:var(--profile-header-height)}.profile-page .page-header{height:var(--profile-header-height);z-index:10;background:var(--bg);position:fixed;inset:0 0 auto}.profile-page .site-header{display:contents}.profile-page .primary-nav{display:none}.profile-page .header-tools{z-index:1;top:calc(10px + env(safe-area-inset-top));right:var(--page-gutter);gap:8px;width:96px;position:absolute}.profile-page .language-link{flex:0 0 44px;justify-content:center;align-items:center;min-height:44px;padding:0;font-size:.75rem;display:flex}.profile-page .theme-toggle{border:0;flex:0 0 44px}.resume-layout{padding-top:22px;padding-inline-start:0}html:has(.profile-page){scroll-padding-top:calc(var(--profile-header-height) + 12px)}}@media (width>=700px) and (width<=900px),(width>=700px) and (height<=620px){:root{--profile-header-height:calc(80px + env(safe-area-inset-top))}.profile-page .header-tools{top:calc(18px + env(safe-area-inset-top))}}@media (width<=380px){:root{--profile-identity-height:64px;--profile-header-height:calc(128px + env(safe-area-inset-top))}}@media print{.profile-page{padding-top:0}.profile-page .page-header{height:auto;position:static}.profile-page .site-header{display:none}.resume-layout{padding-inline-start:0}}
