@font-face{font-family:"Source Serif 4";src:url(/fonts/source-serif-4-latin.woff2)format("woff2");font-weight:400 700;font-style:normal;font-display:swap;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}:root{--paper:#eff1ee;--paper-raised:#f7f8f4;--ink:#161a18;--ink-soft:#4a524d;--ink-faint:#626a63;--rule:#c6cdc5;--rule-strong:#9aa39a;--accent:#1f3fa8;--accent-ink:#f2f4fb;--accent-wash:#e2e7f4;--font-sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;--font-serif:"Source Serif 4", "Iowan Old Style", "Times New Roman", serif;--font-mono:ui-monospace, "SFMono-Regular", "Cascadia Mono", Consolas, "Liberation Mono", monospace;--step--1:.8125rem;--step-0:1.0625rem;--step-1:1.1875rem;--step-2:clamp(1.5rem, 2.4vw, 1.875rem);--step-3:clamp(2rem, 3.6vw, 2.75rem);--step-4:clamp(2rem, 5.4vw, 4.35rem);--measure:64ch;--gutter:clamp(1.25rem, 5vw, 3rem);--container:1160px;--section-space:clamp(4rem, 9vw, 8rem);--ease-out:cubic-bezier(.16, 1, .3, 1)}*,:before,:after{box-sizing:border-box}html{background:var(--paper);color:var(--ink);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:#1f3fa81f;scroll-behavior:smooth}a,button{touch-action:manipulation}[id]{scroll-margin-top:1.5rem}body{min-height:100vh;font-family:var(--font-sans);font-size:var(--step-0);font-feature-settings:"kern" 1;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;flex-direction:column;margin:0;line-height:1.75;display:flex}::selection{background:var(--accent);color:var(--accent-ink)}html{scrollbar-color:var(--rule-strong) transparent;scrollbar-width:thin;caret-color:var(--accent)}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-thumb{background:var(--rule-strong);border:3px solid var(--paper)}::-webkit-scrollbar-track{background:0 0}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:1px}a{color:var(--accent);text-underline-offset:.22em;text-decoration-thickness:1px;transition:text-decoration-thickness .12s linear}a:hover{text-decoration-thickness:2px}h1,h2,h3,h4,p,ul,ol,dl,figure,blockquote{margin:0}ul,ol{padding:0}img,svg{max-width:100%;display:block}time,.num{font-variant-numeric:tabular-nums}.wrap{width:min(100% - var(--gutter) * 2, var(--container));margin-inline:auto}main{flex:1 0 auto}.skip-link{left:var(--gutter);z-index:10;background:var(--ink);color:var(--paper);transition:top .16s var(--ease-out);padding:.75rem 1rem;text-decoration:none;position:absolute;top:-4rem}.skip-link:focus-visible{top:1rem}.masthead{padding-block:clamp(1.25rem,2.4vw,1.9rem)}.masthead__inner{justify-content:space-between;align-items:baseline;gap:1.5rem;display:flex}.wordmark{color:var(--ink);font-family:var(--font-serif);letter-spacing:.01em;align-items:baseline;gap:.6rem;font-size:1.35rem;font-weight:600;text-decoration:none;display:inline-flex}.wordmark small{font-family:var(--font-sans);font-size:var(--step--1);letter-spacing:.02em;color:var(--ink-soft);font-weight:500}.nav{align-items:baseline;gap:clamp(1rem,2.6vw,2rem);font-size:.9375rem;display:flex}.nav a{color:var(--ink);border-bottom:1px solid #0000;padding-bottom:.15rem;text-decoration:none}.nav a:hover{border-bottom-color:var(--ink)}.nav a[aria-current=page]{border-bottom-color:var(--accent);color:var(--accent)}.masthead__github{align-items:center;gap:.4rem;display:inline-flex}.masthead__github svg{fill:currentColor;width:1.05rem;height:1.05rem}.hero{padding-block:clamp(3.5rem,8vw,7rem) clamp(3rem,7vw,6rem)}.hero__grid{grid-template-columns:minmax(0,1.5fr) minmax(16rem,.75fr);align-items:end;gap:clamp(2.5rem,6vw,5rem);display:grid}.hero h1{font-size:var(--step-4);letter-spacing:-.035em;text-wrap:balance;font-weight:700;line-height:1.08}.hero__intro{max-width:46ch;color:var(--ink-soft);font-size:var(--step-1);margin-top:clamp(1.5rem,3vw,2.25rem);line-height:1.8}.hero__actions{flex-wrap:wrap;align-items:center;gap:1.5rem 2rem;margin-top:clamp(1.75rem,3.5vw,2.75rem);font-size:.9375rem;display:flex}.hero__actions a{color:var(--ink);border-bottom:1px solid var(--rule-strong);padding-bottom:.2rem;text-decoration:none}.hero__actions a:first-child{color:var(--accent);border-bottom:1px solid var(--accent)}.hero__actions a:hover{border-bottom-color:var(--ink);color:var(--ink)}.record{border-top:1px solid var(--ink);padding-top:1rem}.record__title{font-size:var(--step--1);letter-spacing:.02em;color:var(--ink);font-weight:600}.record__list{margin-top:.9rem;list-style:none}.record__list li{border-bottom:1px solid var(--rule);grid-template-columns:4.9rem minmax(0,1fr);gap:.75rem;padding-block:.7rem;font-size:.875rem;line-height:1.55;display:grid}.record__list time{font-family:var(--font-mono);color:var(--ink-faint);padding-top:.18rem;font-size:.75rem}.record__item strong{font-weight:600;display:block}.record__item span{color:var(--ink-soft)}.record__foot{font-size:var(--step--1);color:var(--ink-soft);margin-top:.9rem}.section{padding-block:var(--section-space);border-top:1px solid var(--rule-strong)}.section__head{justify-content:space-between;align-items:baseline;gap:2rem;margin-bottom:clamp(2rem,4vw,3.25rem);display:flex}.section__title{font-size:var(--step-2);letter-spacing:-.02em;font-weight:700}.section__note{font-size:var(--step--1);color:var(--ink-soft);text-align:right}.entry{border-top:1px solid var(--rule);grid-template-columns:minmax(0,1fr) 13.5rem;gap:clamp(2rem,5vw,4rem);padding-block:clamp(2.25rem,4.5vw,3.5rem);display:grid}.entry:first-of-type{border-top:0;padding-top:0}.entry__title{letter-spacing:-.02em;font-size:clamp(1.5rem,2.6vw,1.9rem);font-weight:700;line-height:1.3}.entry__title a{color:var(--ink);text-decoration:none}.entry__title a:hover{color:var(--accent)}.entry__lede{max-width:var(--measure);color:var(--ink-soft);margin-top:.9rem}.entry__body p+p{margin-top:.75rem}.entry__meta{gap:.5rem;margin-top:1.6rem;font-size:.875rem;line-height:1.6;display:grid}.entry__meta>div{grid-template-columns:4.25rem minmax(0,1fr);gap:.75rem;display:grid}.entry__meta dt{color:var(--ink-faint)}.entry__meta dd{color:var(--ink);margin:0}.entry__more{color:var(--accent);margin-top:1.5rem;font-size:.9375rem;display:inline-block}.sources{font-size:var(--step--1);color:var(--ink-soft);border-top:1px solid var(--rule);align-self:start;padding-top:.85rem;line-height:1.6}.sources__label{letter-spacing:.03em;color:var(--ink-faint);margin-bottom:.55rem;font-size:.75rem;display:block}.sources__item{color:var(--ink);border-bottom:1px solid var(--rule);padding-block:.35rem;text-decoration:none;display:block}a.sources__item:hover{color:var(--accent);border-bottom-color:var(--accent)}.sources__item--closed{color:var(--ink-soft)}.sources__note{color:var(--ink-faint);margin-top:.7rem;font-size:.75rem}.flow{color:var(--ink);flex-wrap:wrap;gap:.4rem .65rem;margin-top:1.4rem;font-size:.9375rem;list-style:none;display:flex}.flow li{align-items:baseline;display:inline-flex}.flow li+li:before{content:"→";color:var(--ink-faint);margin-right:.65rem}.table-scroll{margin-top:2rem}.prose .table-scroll{width:min(52rem, calc(100vw - var(--gutter) * 2))}.data{border-collapse:collapse;text-align:left;width:100%;font-size:.9375rem;line-height:1.55}.data caption{text-align:left;font-size:var(--step--1);color:var(--ink-soft);padding-bottom:.85rem}.data th,.data td{border-bottom:1px solid var(--rule);vertical-align:baseline;padding:.7rem .75rem .7rem 0}.data thead th{color:var(--ink-soft);border-bottom-color:var(--rule-strong);font-size:.8125rem;font-weight:600}.data tbody th{white-space:nowrap;font-weight:600}.data .num{font-family:var(--font-serif);letter-spacing:.01em;font-size:1.0625rem}.data td:last-child,.data th:last-child{padding-right:0}.post-list{list-style:none}.post-list li{border-top:1px solid var(--rule)}.post-list li:first-child{border-top:0}.post-item{color:var(--ink);grid-template-columns:7.5rem minmax(0,1fr);gap:clamp(1rem,3vw,2.5rem);padding-block:1.6rem;text-decoration:none;display:grid}.post-list li:first-child .post-item{padding-top:0}.post-item time{font-family:var(--font-mono);color:var(--ink-faint);padding-top:.4rem;font-size:.75rem}.post-item h3{font-size:1.125rem;font-weight:600;line-height:1.5}.post-item p{color:var(--ink-soft);max-width:60ch;margin-top:.35rem;font-size:.9375rem}.post-item:hover h3{color:var(--accent)}.close-band{border-top:1px solid var(--rule-strong);padding-block:clamp(3.5rem,7vw,6rem)}.close-band__grid{grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:2rem;display:grid}.close-band h2{font-size:var(--step-3);letter-spacing:-.025em;line-height:1.2}.close-band p{color:var(--ink-soft);max-width:48ch;margin-top:1rem}.footer{border-top:1px solid var(--rule);font-size:var(--step--1);color:var(--ink-soft);padding-block:2.25rem 3rem}.footer__grid{flex-wrap:wrap;justify-content:space-between;gap:1rem 2rem;display:flex}.footer a{color:var(--ink)}.page-head{padding-block:clamp(3rem,7vw,5rem) clamp(2rem,4vw,3rem)}.page-head h1{font-size:var(--step-3);letter-spacing:-.03em;text-wrap:balance;max-width:30ch;line-height:1.2}.page-head__lede{max-width:var(--measure);color:var(--ink-soft);font-size:var(--step-1);margin-top:1.25rem}.page-head__meta{font-size:var(--step--1);color:var(--ink-soft);flex-wrap:wrap;gap:.5rem 2rem;margin-top:2rem;display:flex}.page-head__meta span{gap:.45rem;display:inline-flex}.page-head__meta b{color:var(--ink);white-space:nowrap;font-weight:600}.prose{max-width:var(--measure);padding-bottom:clamp(3rem,6vw,5rem)}.prose>*+*{margin-top:1.25rem}.prose h2{font-size:var(--step-2);letter-spacing:-.02em;margin-top:2.75rem;line-height:1.35}.prose h3{margin-top:2rem;font-size:1.1875rem;line-height:1.45}.prose p,.prose li{color:var(--ink-soft)}.prose ul,.prose ol{padding-left:1.25rem}.prose li+li{margin-top:.4rem}.prose strong{color:var(--ink);font-weight:600}.prose blockquote{border-left:2px solid var(--rule-strong);color:var(--ink-soft);padding-left:1.25rem}.prose code{font-family:var(--font-mono);background:var(--paper-raised);border:1px solid var(--rule);padding:.1em .35em;font-size:.875em}.prose pre{background:var(--paper-raised);border:1px solid var(--rule);padding:1rem 1.25rem;font-size:.875rem;line-height:1.65;overflow-x:auto}.prose pre code{background:0 0;border:0;padding:0}.prose table{border-collapse:collapse;width:100%;font-size:.9375rem}.prose th,.prose td{text-align:left;border-bottom:1px solid var(--rule);vertical-align:baseline;padding:.55rem .75rem .55rem 0}.prose th:first-child,.prose td:first-child{white-space:nowrap}.prose a{text-underline-offset:.2em}.article-footer{border-top:1px solid var(--rule);font-size:var(--step--1);color:var(--ink-soft);flex-wrap:wrap;justify-content:space-between;gap:1rem;padding-block:1.5rem;display:flex}.resume-section{border-top:1px solid var(--rule);padding-block:clamp(2.5rem,5vw,3.5rem)}.resume-section h2{letter-spacing:-.01em;margin-bottom:1.5rem;font-size:1.25rem}.resume-role{border-top:1px solid var(--rule);padding-block:1.5rem}.resume-role:first-of-type{border-top:0;padding-top:0}.resume-role__head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.5rem 1.5rem;display:flex}.resume-role h3{font-size:1.125rem;font-weight:600}.resume-role__when{font-family:var(--font-mono);color:var(--ink-faint);font-size:.75rem}.resume-role p{color:var(--ink-soft);max-width:var(--measure);margin-top:.6rem}.resume-role ul{max-width:var(--measure);color:var(--ink-soft);margin-top:.8rem;padding-left:1.2rem}.resume-role li+li{margin-top:.35rem}.skill-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem 3rem;display:grid}.skill-grid h3{margin-bottom:.5rem;font-size:.9375rem;font-weight:600}.skill-grid p{color:var(--ink-soft);max-width:42ch}.plain-list{max-width:var(--measure);color:var(--ink-soft);padding:0;list-style:none}.plain-list li+li{margin-top:.4rem}.resume-note{font-size:var(--step--1);color:var(--ink-faint);max-width:var(--measure);margin-top:1.5rem}.not-found{max-width:46ch;padding-block:clamp(5rem,12vw,9rem)}.not-found h1{font-size:var(--step-3);letter-spacing:-.03em}.not-found p{color:var(--ink-soft);margin-top:1rem}@media (prefers-reduced-motion:no-preference){.hero h1,.hero__intro,.hero__actions{animation:rise .72s var(--ease-out) both}.hero__intro{animation-delay:80ms}.hero__actions{animation-delay:.16s}.record__list li{animation:rule-in .64s var(--ease-out) both}.record__list li:nth-child(2){animation-delay:90ms}.record__list li:nth-child(3){animation-delay:.18s}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes rule-in{0%{opacity:0;clip-path:inset(0 0 100%)}to{opacity:1;clip-path:inset(0)}}@media (width<=960px){.hero__grid{grid-template-columns:minmax(0,1fr);align-items:start}.record{max-width:34rem}.entry{grid-template-columns:minmax(0,1fr);gap:1.5rem}.sources{border-top:1px solid var(--rule);flex-wrap:wrap;align-items:baseline;gap:.4rem 1.25rem;display:flex}.sources__label{margin:0}.sources__item{border-bottom:0;padding:0}.sources__note{flex-basis:100%;margin:0}}@media (width<=720px){.masthead__inner{flex-direction:column;align-items:start;gap:.9rem}.nav{flex-wrap:wrap;gap:.75rem 1.25rem}.section__head{flex-direction:column;gap:.5rem}.section__note{text-align:left}.post-item{grid-template-columns:minmax(0,1fr);gap:.4rem}.post-item time{padding-top:0}.close-band__grid{grid-template-columns:minmax(0,1fr);align-items:start}.skill-grid{grid-template-columns:minmax(0,1fr)}.data thead{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.data caption,.data,.data tbody,.data tr,.data th,.data td{width:100%;display:block}.data tr{border-bottom:1px solid var(--rule);padding-block:.9rem}.data tbody th,.data td{border-bottom:0;grid-template-columns:7rem minmax(0,1fr);gap:.75rem;padding:.15rem 0;display:grid}.data tbody th{white-space:normal}.data td:before{content:attr(data-label);color:var(--ink-faint);font-size:.8125rem}.data tbody th:before{content:"轮次";color:var(--ink-faint);font-size:.8125rem;font-weight:400}}@media print{.masthead,.footer,.hero__actions,.skip-link{display:none}body{font-size:11pt}.prose,.page-head,.wrap{max-width:none}}
