@import "https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;450;500;550;600;650;700&family=Noto+Serif+SC:wght@500;600&display=swap";:root{color-scheme:light;--paper:#fbfcfa;--white:#fff;--ink:#243746;--muted:#63717b;--blue:#145dc5;--line:#dce2e5;--wash:#e9f1fc;--serif:"Noto Serif SC", "Songti SC", Georgia, serif;--sans:"DM Sans", -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;font-family:var(--sans);font-synthesis:none;color:var(--ink);background:var(--paper);font-size:16px}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:30px}body{-webkit-font-smoothing:antialiased;margin:0;line-height:1.7}::selection{color:#193f70;background:#d4e5ff}a{color:inherit;text-underline-offset:5px;text-decoration:none}a:hover{color:var(--blue)}button{font:inherit;cursor:pointer}button,a{-webkit-tap-highlight-color:transparent}:focus-visible{outline:3px solid var(--blue);outline-offset:5px;border-radius:3px}svg{max-width:100%;display:block}h1,h2,h3,p{margin:0}[hidden]{display:none!important}html:not([lang=en]) [data-i18n=en],html[lang=en] [data-i18n=zh-CN]{display:none}.localized-lines{white-space:pre-line}html[lang=en] .hero h1{letter-spacing:-.035em;font-family:Georgia,serif;font-size:clamp(30px,3.4vw,46px);line-height:1.4}html[lang=en] .hero-note .localized-lines{font-size:19px}.wrap{width:min(1120px,100% - 96px);margin-inline:auto}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:10;color:var(--blue);background:#fff;padding:10px 20px;position:absolute;top:-80px;left:20px}.skip-link:focus{top:10px}.site-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;height:104px;display:flex}.brand{color:var(--ink);letter-spacing:-1.3px;align-items:center;gap:8px;font-size:28px;font-weight:650;display:flex}.brand svg,.brand-period{color:var(--blue)}.site-header nav{gap:38px;font-size:14px;display:flex}.site-header nav a{color:var(--muted);padding:10px 0;position:relative}.site-header nav a:hover,.site-header nav a[aria-current=page]{color:var(--ink)}.site-header nav a[aria-current=page]:after{content:"";background:var(--blue);border-radius:50%;width:5px;height:5px;position:absolute;bottom:0;left:calc(50% - 2.5px)}.github-link{align-items:center;gap:8px;font-size:14px;display:flex}.header-actions{align-items:center;gap:23px;display:flex}.language-toggle{border:1px solid var(--line);min-height:38px;color:var(--ink);background:0 0;border-radius:5px;padding:5px 12px;font-size:12px}.language-toggle:hover{border-color:var(--blue);color:var(--blue);background:var(--wash)}.hero{grid-template-columns:1fr 240px;align-items:center;gap:70px;padding-block:84px 90px;display:grid}.hello{color:var(--blue);margin-bottom:22px;font-size:15px;font-weight:500}h1{font-family:var(--serif);letter-spacing:-.045em;font-size:clamp(32px,3.3vw,45px);font-weight:600;line-height:1.6}.hero-role{color:var(--muted);margin-top:25px;font-size:16px;line-height:1.8}.hero-personal{color:var(--muted);max-width:520px;margin-top:15px;font-size:14px}.hero-links{align-items:center;gap:28px;margin-top:32px;font-size:14px;display:flex}.button{background:var(--blue);color:#fff;border:1px solid var(--blue);border-radius:6px;justify-content:center;align-items:center;gap:26px;padding:11px 22px;font-weight:500;display:inline-flex}.button:hover{color:#fff;background:#104c9e}.quiet-link{border-bottom:1px solid #a9b5bc;padding-block:7px}.hero-note{background:#f0f4ed;border-radius:3px 3px 34px;margin-top:12px;padding:18px 22px 26px;transform:rotate(3deg)}.hero-note svg{margin-bottom:3px}.hero-note p{font-family:var(--serif);color:#49614f;padding-left:14px;font-size:22px;line-height:1.7}.hero-note>span{color:#647967;margin-top:15px;padding-left:14px;font-size:11px;display:block}.section-heading{justify-content:space-between;align-items:end;gap:24px;margin-bottom:28px;display:flex}.section-heading h2{font-family:var(--serif);letter-spacing:-.025em;font-size:25px;font-weight:500;line-height:1.6}.section-heading p{color:var(--muted);margin-top:8px;font-size:13px}.text-link{white-space:nowrap;align-items:center;gap:15px;padding-block:5px;font-size:13px;display:inline-flex}.projects-section{padding-bottom:76px}.project-grid{grid-template-columns:1fr 1fr;gap:30px;display:grid}.project-card{min-width:0}.project-cover{border-radius:9px;display:block;overflow:hidden}.project-art{justify-content:center;align-items:center;height:266px;display:flex;position:relative;overflow:hidden}.project-art.readmap{background:#edf3fa}.project-art.bookclub{background:#edf1e9}.project-art svg{width:100%;height:100%;transition:transform .3s}.project-cover:hover svg{transform:scale(1.025)}.art-caption{color:#4e7295;font-family:Georgia,serif;font-size:13px;position:absolute;top:18px;left:23px}.bookclub .art-caption{color:#657660}.project-copy{padding:23px 2px 0}.project-title-row{justify-content:space-between;align-items:center;display:flex}.project-title-row h3{letter-spacing:-.6px;font-size:25px;font-weight:600}.project-title-row h3 .project-subtitle{letter-spacing:0;color:var(--muted);margin-left:13px;font-size:15px;font-weight:400}.external-symbol{color:#63839c;padding-right:8px;font-size:23px}.project-copy>p{color:var(--muted);max-width:490px;margin-top:11px;font-size:14px;line-height:1.95}.project-tags{flex-wrap:wrap;gap:7px;margin:17px 0 13px;padding:0;list-style:none;display:flex}.project-tags li{color:#516672;background:#edf0f0;border-radius:4px;padding:2px 9px;font-size:11px}.domain-link{color:#596e7d;font-size:12px}.domain-link:hover{text-decoration:underline}.writing-section{border-top:1px solid var(--line);padding-top:47px}.post-list{width:100%}.post-row{border-top:1px solid var(--line);grid-template-columns:155px 1fr 30px;align-items:start;gap:26px;padding:28px 0;display:grid}.post-row>time{color:var(--muted);padding-top:6px;font-size:12px}.post-title{font-size:19px;font-weight:500}.post-row p{color:var(--muted);margin-top:8px;font-size:13px}.post-tags{color:#58736c;flex-wrap:wrap;gap:13px;margin-top:14px;font-size:11px;display:flex}.post-tags a:hover{text-decoration:underline}.read-post{text-align:right;font-size:23px}.closing-note{text-align:center;flex-direction:column;align-items:center;padding-block:55px 69px;display:flex}.note-line{background:#a7b8b1;width:1px;height:35px;margin-bottom:24px}.closing-note p{font-family:var(--serif);color:#597064;font-size:18px;line-height:1.9}.closing-note a{color:var(--muted);margin-top:17px;font-size:12px}.mobile-break{display:none}.site-footer{border-top:1px solid var(--line);justify-content:space-between;padding-block:33px;display:flex}.footer-brand{letter-spacing:-.5px;font-size:19px;font-weight:600}.site-footer p{color:var(--muted);margin-top:7px;font-size:11px}.footer-right{text-align:right}.footer-right>div{gap:25px;font-size:12px;display:flex}.footer-right p{margin-top:13px}.page-content{min-height:calc(100vh - 242px);padding-block:65px 95px}.page-heading{margin-bottom:44px}.page-heading h1{font-size:39px}.page-heading>p:last-child{color:var(--muted);margin-top:19px;font-size:15px;line-height:1.9}.page-heading .hello{margin-bottom:12px}.page-footnote{color:var(--muted);margin-top:45px;font-size:13px}.about-layout{grid-template-columns:340px 1fr;gap:75px;display:grid}.about-role{font-size:16px;line-height:1.9;margin:20px 0!important}.about-prose{padding-top:17px}.prose{overflow-wrap:anywhere;font-size:16px;line-height:2}.prose>*+*{margin-top:22px}.prose h2{font-family:var(--serif);letter-spacing:-.02em;margin-top:40px;font-size:24px;font-weight:500;line-height:1.7}.prose h2:first-child{margin-top:0}.prose h3{font-size:20px}.prose a{color:var(--blue);text-decoration:underline #9cb6db}.prose p,.prose li{color:#4d5f6b}.prose strong{color:var(--ink);font-weight:600}.prose img{border-radius:5px;max-width:100%;height:auto}.prose pre{border:1px solid var(--line);border-radius:6px;padding:20px;font-size:14px;overflow-x:auto}.prose :not(pre)>code{background:var(--wash);border-radius:3px;padding:2px 5px;font-size:.9em}.prose blockquote{border-left:3px solid #8ba6c2;margin-inline:0;padding-left:23px}.prose table{border-collapse:collapse;max-width:100%;font-size:14px;display:block;overflow-x:auto}.prose td,.prose th{text-align:left;border-bottom:1px solid var(--line);padding:10px 16px}.personal-note{border-top:1px solid var(--line);padding-top:20px;font-size:12px;margin-top:37px!important}.blog-toolbar{justify-content:space-between;align-items:center;gap:20px;margin-bottom:23px;display:flex}.blog-toolbar>div:last-child{gap:23px;font-size:13px;display:flex}.filter-list{flex-wrap:wrap;gap:8px;display:flex}.filter-button{color:var(--muted);background:0 0;border:1px solid #0000;border-radius:5px;padding:5px 14px;font-size:13px}.filter-button:hover{color:var(--blue)}.filter-button[aria-pressed=true]{color:var(--blue);background:var(--wash)}.back-link{color:var(--muted);margin-bottom:27px;font-size:13px;display:inline-block}.article-shell{max-width:780px;padding-block:48px 76px}.article-header{border-bottom:1px solid var(--line);margin-bottom:34px;padding-bottom:35px}.article-header h1{margin-top:17px;font-size:35px}.article-header .post-tags{margin-top:0}.article-description{color:var(--muted);margin-top:16px;font-size:16px}.article-meta{color:var(--muted);margin-top:23px;font-size:12px}.article-meta span{padding-inline:9px}.article-footer{border-top:1px solid var(--line);color:var(--muted);justify-content:space-between;margin-top:52px;padding-top:24px;font-size:13px;display:flex}.archive-year>h2{margin-bottom:20px;font-size:22px;font-weight:500}.archive-year+.archive-year{margin-top:50px}.not-found{text-align:center;padding-top:95px}.not-found>p:not(.hello){color:var(--muted);margin:25px 0}@media (width>=1500px){.hero{padding-block:100px}}@media (width<=1000px){.wrap{width:calc(100% - 64px)}.hero{grid-template-columns:1fr 190px;gap:28px;padding-block:65px}h1{font-size:34px}.hero-note{padding:12px 15px 23px}.hero-note p{font-size:19px}.hero-role{font-size:14px}.hero-personal{font-size:13px}.project-art{height:225px}.about-layout{grid-template-columns:260px 1fr;gap:40px}.post-row{grid-template-columns:125px 1fr 24px;gap:18px}}@media (width<=700px){.wrap{width:calc(100% - 40px)}.site-header{flex-wrap:wrap;justify-content:start;column-gap:20px;height:85px}.brand{gap:4px;font-size:23px}.brand svg{width:25px}.site-header nav{gap:21px;margin-left:auto;font-size:13px}.github-link{display:none}.bilingual-header{row-gap:8px;height:auto;min-height:91px;padding-block:15px 9px}.bilingual-header .brand{margin-right:auto}.bilingual-header .header-actions{order:1}.bilingual-header nav{order:2;justify-content:space-between;width:100%;margin:0}.bilingual-header nav a{padding-block:4px 8px}.bilingual-header .language-toggle{min-height:34px}html[lang=en] .hero h1{font-size:clamp(27px,5.7vw,38px)}.hero-role.localized-lines{white-space:normal}html[lang=en] .project-title-row h3 .project-subtitle{margin-left:9px;font-size:12px}.hero-note .localized-lines{white-space:normal}.hero{grid-template-columns:1fr;gap:30px;padding-block:48px 45px}.hello{margin-bottom:18px;font-size:13px}h1{font-size:clamp(27px,5.7vw,38px);line-height:1.7}.hero-role{margin-top:21px;font-size:13px}.hero-personal{max-width:390px;font-size:13px;line-height:1.9}.hero-links{gap:23px;margin-top:25px;font-size:13px}.hero-note{border-radius:6px;grid-template-columns:110px 1fr;align-items:center;column-gap:15px;margin-top:5px;padding:9px 18px;display:grid;transform:none}.hero-note svg{grid-row:1/3;width:110px;margin:0}.hero-note p{padding:0;text-wrap:balance;padding-top:9px;font-size:15px;line-height:1.9}.hero-note p br{display:none}.hero-note>span{margin:0 0 10px;padding:0;font-size:10px}.section-heading{gap:15px;margin-bottom:22px}.section-heading h2{font-size:20px;line-height:1.7}.section-heading p{margin-top:6px;font-size:12px}.text-link{gap:8px;font-size:11px}.project-grid{grid-template-columns:1fr;gap:36px}.project-art{aspect-ratio:2;height:auto}.project-copy{padding-top:18px}.project-title-row h3{font-size:24px}.project-copy>p{font-size:13px}.projects-section{padding-bottom:42px}.writing-section{padding-top:32px}.post-row{grid-template-columns:1fr 22px;gap:8px;padding:23px 0}.post-row>time{grid-column:1/-1;margin-bottom:4px;padding-top:0;font-size:11px}.post-title{font-size:17px}.post-row p{font-size:12px;line-height:1.9}.post-tags{margin-top:12px}.read-post{font-size:20px}.closing-note{padding-block:28px 42px}.closing-note p{font-size:16px}.mobile-break{display:block}.site-footer{padding-block:26px}.footer-right>div{gap:15px;font-size:11px}.site-footer p{font-size:10px}.footer-brand{font-size:17px}.page-content{padding-block:40px 60px}.page-heading{margin-bottom:30px}.page-heading h1{font-size:31px}.page-heading>p:last-child{font-size:13px}.about-layout{grid-template-columns:1fr;gap:0}.about-role{font-size:15px}.about-prose{padding-top:0}.prose{font-size:15px}.prose h2{font-size:22px}.blog-toolbar{align-items:start;gap:10px}.filter-list{gap:4px}.filter-button{padding:4px 10px;font-size:12px}.blog-toolbar>div:last-child{flex-shrink:0;gap:13px;padding-top:5px;font-size:12px}.article-shell{padding-block:33px 50px}.article-header h1{font-size:28px;line-height:1.6}.article-description{font-size:14px}.article-meta{font-size:10px}.article-meta span{padding-inline:5px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}}
