@font-face{font-family:Instrument Serif;src:url(/fonts/instrument-serif-regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Instrument Serif;src:url(/fonts/instrument-serif-italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}:root{color-scheme:light;--paper:#e9ece3;--paper-raised:#f3f5ee;--ink:#17201b;--ink-soft:#4c5a51;--ink-faint:#5e6c62;--line:#c7cebf;--line-strong:#a9b2a4;--seal:#b23a2a;--seal-ink:#f6f1e6;--selection:#d9c3a5;--code-bg:#e2e7db;--font-display:"Songti SC", "Noto Serif CJK SC", "Source Han Serif SC", "SimSun", serif;--font-body:"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", sans-serif;--font-mono:ui-monospace, "SFMono-Regular", "Cascadia Mono", "Roboto Mono", Consolas, monospace;--max:1180px;--gutter:clamp(20px, 5vw, 64px);--ease:cubic-bezier(.2, .7, .2, 1);--shiki-color-text:#17201b;--shiki-color-background:#e2e7db;--shiki-token-constant:#9a3d2c;--shiki-token-string:#3f6b4f;--shiki-token-comment:#7b877d;--shiki-token-keyword:#8a4b2f;--shiki-token-parameter:#4c5a51;--shiki-token-function:#2f5d50;--shiki-token-string-expression:#3f6b4f;--shiki-token-punctuation:#4c5a51;--shiki-token-link:#b23a2a}:root[data-theme=dark]{color-scheme:dark;--paper:#0a0b0c;--paper-raised:#141618;--ink:#f1f2ee;--ink-soft:#a9ada7;--ink-faint:#7e837d;--line:#24272a;--line-strong:#383c40;--seal:#e05a45;--seal-ink:#0a0b0c;--selection:#2e3338;--code-bg:#141618;--shiki-color-text:#f1f2ee;--shiki-color-background:#141618;--shiki-token-constant:#e6a08a;--shiki-token-string:#a8c7a8;--shiki-token-comment:#7e837d;--shiki-token-keyword:#e0b07a;--shiki-token-parameter:#a9ada7;--shiki-token-function:#93c2b4;--shiki-token-string-expression:#a8c7a8;--shiki-token-punctuation:#a9ada7;--shiki-token-link:#e05a45}*,:before,:after{box-sizing:border-box}html{background:var(--paper);scroll-behavior:smooth}@view-transition{navigation:auto}@media (prefers-reduced-motion:reduce){@view-transition{navigation:none}}body{background:var(--paper);color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.85}::selection{background:var(--selection);color:var(--ink)}a{color:inherit;text-decoration:none}img{max-width:100%;height:auto;display:block}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--seal);outline-offset:3px;border-radius:1px}.skip-link{z-index:10;background:var(--ink);color:var(--paper);padding:10px 16px;font-size:14px;position:absolute;top:-100px;left:16px}.skip-link:focus{top:16px}.shell{width:min(100% - 2 * var(--gutter), var(--max));margin-inline:auto}.layout{grid-template-columns:280px minmax(0,1fr);gap:clamp(40px,6vw,96px);padding-block:clamp(36px,6vw,72px) 0;display:grid}.content{min-width:0}.masthead{align-self:start;padding-bottom:40px;position:sticky;top:clamp(24px,5vh,56px)}.brand{align-items:center;gap:14px;width:fit-content;display:inline-flex}.wordmark{letter-spacing:-.02em;align-items:baseline;font-size:clamp(38px,3.4vw,46px);line-height:1;display:inline-flex}.wordmark-cn{font-family:var(--font-display);letter-spacing:-.03em;font-weight:600}.wordmark-en{letter-spacing:-.02em;margin-left:.03em;font-family:Instrument Serif,Georgia,serif;font-size:1.06em;font-style:italic;font-weight:400}.seal{background:var(--seal);width:34px;height:34px;color:var(--seal-ink);animation:stamp .52s var(--ease) .12s both;border-radius:3px 2px 4px;flex:none;place-items:center;font-family:Songti SC,SimSun,serif;font-size:20px;line-height:1;display:inline-grid;transform:rotate(-4deg);box-shadow:inset 0 0 0 1px #f6f1e647}.seal--sm{width:26px;height:26px;font-size:15px}@keyframes stamp{0%{opacity:0;transform:rotate(-9deg)scale(1.35)}to{opacity:1;transform:rotate(-4deg)scale(1)}}.nav{border-top:1px solid var(--line);flex-direction:column;gap:6px;margin-top:40px;padding-top:18px;display:flex}.nav a{width:fit-content;color:var(--ink-soft);font-size:15px;transition:color .16s}.nav a:hover,.nav a[aria-current=page]{color:var(--seal)}.nav a[aria-current=page]:before{content:"";background:var(--seal);vertical-align:middle;width:14px;height:1px;margin-right:8px;display:inline-block}.now{border-top:1px solid var(--line);margin-top:48px;padding-top:18px}.now-label{color:var(--ink-faint);font-family:var(--font-mono);letter-spacing:.08em;margin:0 0 6px;font-size:11px}.now-text{max-width:24em;color:var(--ink-soft);margin:0;font-size:13px;line-height:1.8}.social{align-items:center;gap:18px;margin-top:36px;display:flex}.social a{border-bottom:1px solid var(--line-strong);color:var(--ink-soft);padding-bottom:2px;font-size:13px}.social a:hover{color:var(--seal);border-color:var(--seal)}.theme-toggle{border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:50%;place-items:center;width:32px;height:32px;padding:0;transition:border-color .16s,color .16s;display:inline-grid}.theme-toggle:hover{border-color:var(--seal);color:var(--seal)}.theme-toggle svg{width:15px;height:15px}.theme-toggle .icon-moon,:root[data-theme=dark] .theme-toggle .icon-sun{display:none}:root[data-theme=dark] .theme-toggle .icon-moon{display:block}.hero{padding-bottom:clamp(48px,7vw,88px)}.hero-kicker{color:var(--ink-soft);margin:0 0 18px;font-size:15px}.hero-title{max-width:12em;font-family:var(--font-display);letter-spacing:-.015em;text-wrap:balance;margin:0;font-size:clamp(36px,5vw,56px);font-weight:600;line-height:1.35}.hero-body{max-width:34em;color:var(--ink-soft);text-wrap:pretty;margin:28px 0 0;font-size:17px;line-height:1.9}.section{padding-top:clamp(36px,5vw,64px)}.section-head{border-top:1px solid var(--line-strong);align-items:baseline;gap:16px;margin-bottom:26px;padding-top:18px;display:flex}.section-head h2{font-family:var(--font-display);letter-spacing:-.01em;margin:0;font-size:clamp(22px,2.4vw,28px);font-weight:600;line-height:1.3}.section-head .count{color:var(--ink-faint);font-family:var(--font-mono);font-size:12px}.section-head .more{border-bottom:1px solid var(--line-strong);color:var(--ink-soft);margin-left:auto;padding-bottom:2px;font-size:13px}.section-head .more:hover{color:var(--seal);border-color:var(--seal)}.project-list{flex-direction:column;display:flex}.project-row{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) auto;gap:4px 24px;padding:20px 0;transition:background-color .16s;display:grid}a.project-row:hover{background:var(--paper-raised)}.project-name{grid-area:1/1;font-family:Instrument Serif,Georgia,serif;font-size:22px;line-height:1.35;transition:color .16s}a.project-row:hover .project-name{color:var(--seal)}.project-meta{color:var(--ink-faint);font-family:var(--font-mono);white-space:nowrap;grid-area:1/2;font-size:11px;line-height:1.8}.project-summary{max-width:40em;color:var(--ink-soft);grid-area:2/1/auto/-1;font-size:14px;line-height:1.75}.post-list{flex-direction:column;display:flex}.post-row{border-bottom:1px solid var(--line);grid-template-columns:86px minmax(0,1fr) auto;align-items:baseline;gap:20px;padding:16px 0;display:grid}.post-row time{color:var(--ink-faint);font-family:var(--font-mono);font-size:12px}.post-title{text-wrap:pretty;font-size:16px;line-height:1.7;transition:color .16s}.post-row:hover .post-title{color:var(--seal)}.post-tags{color:var(--ink-faint);font-family:var(--font-mono);white-space:nowrap;font-size:11px}.empty{color:var(--ink-faint);padding:24px 0;font-size:14px}.about-text{max-width:34em;color:var(--ink-soft);text-wrap:pretty;margin:0;font-size:17px;line-height:1.9}.about-links{flex-wrap:wrap;gap:20px;margin-top:20px;font-size:14px;display:flex}.about-links a{border-bottom:1px solid var(--line-strong);color:var(--ink-soft);padding-bottom:2px}.about-links a:hover{color:var(--seal);border-color:var(--seal)}.footer{border-top:1px solid var(--line);color:var(--ink-faint);font-family:var(--font-mono);flex-wrap:wrap;gap:10px 24px;margin-top:clamp(64px,9vw,112px);padding:24px 0 40px;font-size:11px;display:flex}.footer a:hover{color:var(--seal)}.footer .colophon{margin-left:auto}.page-head{border-bottom:1px solid var(--line-strong);padding-bottom:32px}.page-kicker{color:var(--ink-faint);font-family:var(--font-mono);letter-spacing:.08em;margin:0 0 10px;font-size:11px}.page-head h1{font-family:var(--font-display);letter-spacing:-.015em;margin:0;font-size:clamp(32px,4vw,44px);font-weight:600;line-height:1.35}.page-head>p{color:var(--ink-soft);margin:12px 0 0;font-size:15px}.tag-index{flex-wrap:wrap;gap:8px 14px;margin-top:24px;display:flex}.tag-index a{border-bottom:1px solid var(--line);color:var(--ink-soft);font-family:var(--font-mono);padding-bottom:2px;font-size:12px}.tag-index a:hover{color:var(--seal);border-color:var(--seal)}.year-group{margin-top:44px}.year-label{color:var(--ink-faint);margin:0 0 6px;font-family:Instrument Serif,Georgia,serif;font-size:28px;font-weight:400}.tag-posts,.page-list{margin-top:40px}.page-note{color:var(--ink-faint);margin-top:28px;font-size:13px}.page-note a{border-bottom:1px solid var(--line-strong);color:var(--ink-soft);padding-bottom:2px}.page-note a:hover{color:var(--seal);border-color:var(--seal)}.about-page{max-width:760px}.about-block{margin-top:48px}.about-block h2{font-family:var(--font-display);letter-spacing:-.01em;margin:0 0 12px;font-size:24px;font-weight:600;line-height:1.4}.about-block p{max-width:34em;color:var(--ink-soft);text-wrap:pretty;margin:0 0 1em;font-size:16px;line-height:1.9}.about-block p:last-child{margin-bottom:0}.about-list{color:var(--ink-soft);margin:0;padding-left:1.2em;font-size:16px;line-height:1.9}.about-list li{margin:.3em 0}.about-intro{align-items:flex-start;gap:24px;display:flex}.about-intro>div{min-width:0}.about-intro h2{margin-top:0}.about-avatar{border:1px solid var(--line);object-fit:cover;border-radius:50%;flex:none;width:96px;height:96px}.project-links{flex-wrap:wrap;gap:18px;margin-top:20px;font-size:14px;display:flex}.project-links a{border-bottom:1px solid var(--line-strong);color:var(--ink-soft);padding-bottom:2px}.project-links a:hover{color:var(--seal);border-color:var(--seal)}.life-list{margin-top:40px}.life-entry{border-bottom:1px solid var(--line);grid-template-columns:86px minmax(0,1fr);gap:20px;padding:28px 0;display:grid}.life-entry>time{color:var(--ink-faint);font-family:var(--font-mono);font-size:12px;line-height:1.9}.life-body h2{font-family:var(--font-display);letter-spacing:-.01em;margin:0 0 8px;font-size:24px;font-weight:600;line-height:1.4}.life-text{color:var(--ink-soft)}.life-text.prose{font-size:16px}.life-text.prose p{margin-bottom:.9em}.life-text.prose>:last-child{margin-bottom:0}.life-text.prose h2{margin-top:1.4em;font-size:22px}.life-text.prose h3{margin-top:1.2em;font-size:18px}.life-images{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:18px;display:grid}.life-images figure{margin:0}.life-images img{border:1px solid var(--line);width:100%;height:auto}.life-images figcaption{color:var(--ink-faint);font-family:var(--font-mono);margin-top:6px;font-size:11px}.life-preview{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;display:grid}.life-preview-item{border-bottom:1px solid var(--line);align-items:center;gap:14px;padding:12px 0;display:flex}.life-preview-image{object-fit:cover;border:1px solid var(--line);flex:none;width:120px;height:80px}.life-preview-meta{flex-direction:column;gap:2px;min-width:0;display:flex}.life-preview-meta time{color:var(--ink-faint);font-family:var(--font-mono);font-size:11px}.life-preview-title{font-size:15px;line-height:1.5;transition:color .16s}.life-preview-item:hover .life-preview-title{color:var(--seal)}.article-shell{width:min(100% - 2 * var(--gutter), 900px);margin-inline:auto}.article-top{border-bottom:1px solid var(--line);align-items:center;gap:18px;padding:24px 0;display:flex}.brand--sm .wordmark{font-size:26px}.brand--sm .seal{width:26px;height:26px;font-size:15px}.article-top .back{color:var(--ink-soft);margin-left:auto;font-size:13px}.article-top .back:hover{color:var(--seal)}.article{max-width:760px;padding-top:clamp(44px,7vw,80px)}.article-meta{color:var(--ink-faint);font-family:var(--font-mono);flex-wrap:wrap;gap:6px 18px;font-size:12px;display:flex}.article h1{max-width:18em;font-family:var(--font-display);letter-spacing:-.015em;text-wrap:balance;margin:18px 0 0;font-size:clamp(32px,4.6vw,46px);font-weight:600;line-height:1.4}.article-desc{max-width:34em;color:var(--ink-soft);text-wrap:pretty;margin:20px 0 0;font-size:17px;line-height:1.85}.article .prose{border-top:1px solid var(--line);max-width:680px;margin-top:44px;padding-top:30px}.prev-next{border-top:1px solid var(--line);grid-template-columns:1fr 1fr;gap:24px;margin-top:64px;padding-top:24px;display:grid}.prev-next a{flex-direction:column;gap:4px;display:flex}.prev-next .label{color:var(--ink-faint);font-family:var(--font-mono);font-size:11px}.prev-next .title{font-size:15px;line-height:1.6}.prev-next a:hover .title{color:var(--seal)}.prev-next .next{text-align:right}.prose{color:var(--ink);font-size:17px;line-height:1.9}.prose>:first-child{margin-top:0}.prose p{text-wrap:pretty;margin:0 0 1.25em}.prose h2,.prose h3{font-family:var(--font-display);letter-spacing:-.01em;text-wrap:balance;font-weight:600;line-height:1.45}.prose h2{margin:2.2em 0 .7em;font-size:28px}.prose h3{margin:1.8em 0 .6em;font-size:22px}.prose a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--seal);text-underline-offset:4px;text-decoration-thickness:1px}.prose a:hover{color:var(--seal)}.prose strong{font-weight:600}.prose ul,.prose ol{margin:0 0 1.25em;padding-left:1.4em}.prose li{margin:.3em 0}.prose blockquote{border-left:2px solid var(--seal);color:var(--ink-soft);margin:1.6em 0;padding:4px 0 4px 22px}.prose blockquote p:last-child{margin-bottom:0}.prose code{background:var(--code-bg);font-family:var(--font-mono);border-radius:2px;padding:2px 6px;font-size:.88em}.prose pre{border:1px solid var(--line);margin:1.6em 0;padding:20px 22px;font-size:13px;line-height:1.75;overflow-x:auto;background:var(--code-bg)!important}.prose pre code{font-size:inherit;background:0 0;padding:0}.prose hr{border:0;border-top:1px solid var(--line);margin:2.4em 0}.prose img{border:1px solid var(--line);margin:1.8em 0}.prose table{border-collapse:collapse;width:100%;margin:1.6em 0;font-size:14px}.prose th,.prose td{border-bottom:1px solid var(--line);text-align:left;padding:10px 12px}.notfound{text-align:center;place-content:center;gap:14px;min-height:74vh;display:grid}.notfound .code{color:var(--seal);margin:0;font-family:Instrument Serif,Georgia,serif;font-size:clamp(96px,18vw,180px);line-height:.8}.notfound h1{font-family:var(--font-display);margin:8px 0 0;font-size:clamp(24px,3vw,32px);font-weight:600}.notfound p{color:var(--ink-soft);margin:0}.home-link{border-bottom:1px solid var(--seal);color:var(--seal);justify-self:center;margin-top:10px;padding-bottom:3px;font-size:14px}@media (width<=920px){.layout{grid-template-columns:1fr;gap:36px;padding-top:32px}.masthead{padding-bottom:0;position:static}.nav{flex-flow:wrap;gap:18px;margin-top:28px}.now{margin-top:32px}.social{margin-top:24px}.hero{padding-bottom:48px}.project-row{grid-template-columns:1fr}.project-meta{white-space:normal;grid-area:3/1}.project-summary{grid-row:2}}@media (width<=640px){.hero-title{font-size:34px}.post-row{grid-template-columns:1fr;gap:2px}.post-row time{font-size:11px}.post-title{font-size:15px}.post-tags{display:none}.life-entry{grid-template-columns:1fr;gap:4px}.life-preview{grid-template-columns:1fr}.about-intro{gap:16px}.about-avatar{width:72px;height:72px}.section-head{flex-wrap:wrap}.section-head .more{margin-left:auto}.footer .colophon{width:100%;margin-left:0}.prev-next{grid-template-columns:1fr}.prev-next .next{text-align:left}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
