@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(../media/3e29d6c8df211d66-s.0s54-9j8fqoaz.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(../media/2956efe007516702-s.09r8l3blh1ec3.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(../media/84ad0737ea41e2e3-s.115leyq-zclg2.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(../media/658fb2a9c2a0ea5d-s.0t4.fkypj~.t2.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(../media/7c125d9da13f978a-s.0c5~l_-mfojha.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:400;font-display:swap;src:url(../media/a46a75cfd765634f-s.p.0frrt3lqaciv8.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:600;font-display:swap;src:url(../media/6a793dba767aa497-s.0w_k.lkp_pqj6.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:600;font-display:swap;src:url(../media/cf54ce4ee2f7915c-s.0g4f7kikl8-x~.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:600;font-display:swap;src:url(../media/f5e716599e675f0a-s.0ls16a.j.5wdp.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:600;font-display:swap;src:url(../media/bb1a7daf057744c1-s.0q4i0.b8ov4ym.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:600;font-display:swap;src:url(../media/eb34f5373173429c-s.0x7s~51vq5128.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:italic;font-weight:600;font-display:swap;src:url(../media/cb74272c1a4b1482-s.p.04fyg_lsf_oya.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/e390973e931a41c5-s.08hd0g.321csk.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/59b15b4bcd7b1eb5-s.04~8wrixaores.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/77ce6907447ba740-s.0kthejenztfvv.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/e532fa1b9921e1cd-s.0laye7~lz6rwj.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/2fe89d53234c61d4-s.0g~oxf16~d6j1.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/99e609270109b47d-s.p.0zci0fh8pcr5h.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/6ff74e33ebd7bca3-s.0_n_qwbzcushi.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/1a69062cfe6f77f8-s.0pbq25jg3rqby.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/f7cb89c1bcef4d27-s.0~avwgpoo~y94.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/9a4838fcda0d1bca-s.0cwrs7exspjrd.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/2e95a7d252b9825a-s.0e.mqn5-ne2ol.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/23b7a97ae3b5c134-s.p.0d-721.18xg51.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono Fallback;src:local(Arial);ascent-override:76.16%;descent-override:20.43%;line-gap-override:0.0%;size-adjust:134.59%}.ibm_plex_mono_cbd2332d-module__64IxCG__className{font-family:IBM Plex Mono,IBM Plex Mono Fallback}.ibm_plex_mono_cbd2332d-module__64IxCG__variable{--font-mono:"IBM Plex Mono", "IBM Plex Mono Fallback"}
:root{--bg:#fbfbf8;--fg:#1b1c1a;--muted:#6a6c65;--rule:#d9dad3;--accent:#1d6b45;--code-bg:#f0f1ec;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0f1110;--fg:#d5d9d2;--muted:#868d85;--rule:#272b28;--accent:#8ccb9c;--code-bg:#171a18;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#0f1110;--fg:#d5d9d2;--muted:#868d85;--rule:#272b28;--accent:#8ccb9c;--code-bg:#171a18;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;font-size:16px}body{background:var(--bg);color:var(--fg);font-family:var(--font-mono), ui-monospace, "SFMono-Regular", Menlo, Consolas, "Microsoft YaHei", monospace;margin:0;line-height:1.6}.page{max-width:120ch;margin:0 auto;padding:28px 16px 32px}a{color:var(--accent);text-decoration:none}a:hover{text-underline-offset:3px;text-decoration:underline}p{margin:0 0 14px}h1,h2{text-transform:uppercase;margin:44px 0 14px;scroll-margin-top:24px;font-size:1rem;font-weight:600}img{max-width:100%}::selection{background:color-mix(in srgb, var(--accent) 28%, transparent)}.muted{color:var(--muted)}.muted strong{color:var(--fg);font-weight:600}.small{font-size:.875rem}.zh,.zh-text{font-family:PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans SC,sans-serif}header .top{justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.name{color:var(--fg);font-size:1.5rem;font-weight:600;line-height:1.2}.name:hover{text-decoration:none}.zh{color:var(--muted);margin-left:12px;font-size:1.1rem;font-weight:400}.life{width:200px;height:48px;color:var(--muted);opacity:.5;cursor:crosshair;touch-action:none;display:block}nav{border-bottom:1px solid var(--rule);flex-wrap:wrap;gap:4px 20px;margin:14px 0 32px;padding-bottom:12px;font-size:.9375rem;display:flex}nav a,.theme{color:var(--muted)}nav a:hover,.theme:hover{color:var(--accent);text-decoration:none}.theme{font:inherit;cursor:pointer;background:0 0;border:0;margin-left:auto;padding:0}.intro{grid-template-columns:minmax(0,1fr) 176px;align-items:start;gap:40px;display:grid}.photo{object-fit:cover;width:176px;height:220px;display:block}.links{flex-wrap:wrap;gap:4px 18px;display:flex}.dated{margin:0;padding:0;list-style:none}.dated li{grid-template-columns:9ch minmax(0,1fr);gap:16px;margin:4px 0;display:grid}.date,.years{color:var(--muted)}.pub{margin:0 0 16px}.bib{display:inline}.bib summary{color:var(--accent);cursor:pointer;list-style:none;display:inline}.bib summary::-webkit-details-marker{display:none}.bib summary:hover{text-underline-offset:3px;text-decoration:underline}pre{background:var(--code-bg);color:var(--fg);margin:8px 0 4px;padding:12px 14px;font-family:inherit;font-size:.8125rem;line-height:1.5;display:block;overflow-x:auto}.legend{color:var(--muted);margin:0 0 18px;font-size:.875rem}.projects{margin:0;padding:0;list-style:none}.project{grid-template-columns:9ch 2ch minmax(0,1fr);gap:12px;margin:0 0 8px;display:grid}.project.long{margin:10px 0 34px}.dot{font-size:.75rem;line-height:2.1}.dot.open{color:var(--muted)}.p-title{font-weight:600}.p-body ul{max-width:88ch;margin:8px 0 0;padding-left:2ch;list-style:"- "}.p-body ul li{margin:5px 0}.p-body li::marker{color:var(--muted)}figure{max-width:54rem;margin:14px 0 6px}figure img{background:#fff;width:100%;height:auto;display:block}:root[data-theme=dark] figure img{opacity:.9}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) figure img{opacity:.9}}figure .fig-dark,:root[data-theme=dark] figure .fig-light{display:none}:root[data-theme=dark] figure .fig-dark{opacity:1;display:block}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) figure .fig-light{display:none}:root:not([data-theme=light]) figure .fig-dark{opacity:1;display:block}}figcaption{color:var(--muted);margin-top:4px;font-size:.8125rem}.entries{margin:0;padding:0;list-style:none}.entries li{margin:0 0 10px}.cv-frame{border:1px solid var(--rule);width:100%;height:85vh;margin-top:12px;display:block}footer{border-top:1px solid var(--rule);color:var(--muted);flex-wrap:wrap;gap:8px 20px;margin-top:52px;padding-top:12px;font-size:.875rem;display:flex}footer .source{margin-left:auto}.visitors{color:var(--muted);margin-top:56px;font-size:.875rem}.visitors svg{stroke-width:3px;stroke-linecap:square;width:100%;max-width:480px;height:auto;display:block}.visitors .land{stroke:var(--rule)}.visitors .seen{stroke:var(--accent)}.visitors .l1{opacity:.4}.visitors .l2{opacity:.7}.visitors p{margin:0 0 12px}.visitors .where{margin:6px 0 0}@media (hover:none){footer .keys{display:none}}@media print{:root,:root[data-theme=dark],:root:not([data-theme=light]){--bg:#fff;--fg:#000;--muted:#444;--rule:#bbb;--accent:#000;--code-bg:#f4f4f4}html{font-size:11pt}.page{max-width:none;padding:0}.life,nav,footer .keys,.visitors{display:none}figure{break-inside:avoid}figure img{opacity:1!important}figure .fig-light{display:block!important}figure .fig-dark{display:none!important}}@media (min-width:760px){.page{padding:48px 32px 40px}}@media (max-width:640px){html{font-size:15px}.life{width:120px;height:29px}.intro{grid-template-columns:minmax(0,1fr) 88px;gap:16px}.photo{width:88px;height:110px}.dated li{grid-template-columns:8ch minmax(0,1fr);gap:10px}.project{grid-template-columns:1.5ch minmax(0,1fr);gap:0 8px}.project .dot{grid-area:1/1}.project .years{grid-area:1/2}.project>div{grid-area:2/2}}@media (min-width:1600px){html{font-size:17px}}@media (min-width:1900px){html{font-size:18px}}@media (min-width:2400px){html{font-size:19px}}
