*,:before,:after{box-sizing:border-box}*{margin:0;padding:0}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}img,svg,video,picture{max-width:100%;display:block}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:0}a{color:inherit;text-decoration:none}ul,ol{list-style:none}table{border-collapse:collapse}:root{--bg:#fff;--bg-subtle:#f9fafb;--bg-raised:#fff;--bg-inset:#f1f3f5;--ink-1:#1b1b1c;--ink-2:#43454a;--ink-3:#61666b;--ink-4:#979da6;--line-1:#0000000a;--line-2:#0000001a;--line-3:#00000029;--hover:#2631480f;--accent:#4176e6;--accent-ink:#3466d6;--accent-soft:#edf3fe;--ok:#3fa563;--r-xs:4px;--r-sm:8px;--r-md:12px;--r-lg:16px;--r-xl:20px;--r-panel:28px;--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--font-serif:"Songti SC", "STSong", "Source Han Serif SC", "Noto Serif SC", ui-serif, Georgia, serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--font-display:var(--font-serif);--wrap:1080px;--measure:40rem;--air:1;--dur:.18s;--ease:cubic-bezier(.32, .72, 0, 1)}[data-theme=dark]{--bg:#151517;--bg-subtle:#1b1b1c;--bg-raised:#232324;--bg-inset:#2c2c2e;--ink-1:#f1f3f5;--ink-2:#e1e5ee;--ink-3:#adb2b8;--ink-4:#81858c;--line-1:#ffffff0f;--line-2:#ffffff1f;--line-3:#ffffff29;--hover:#ffffff14;--accent:#7aaaff;--accent-ink:#7aaaff;--accent-soft:#7aaaff21;--ok:#5bc47f}body{background:var(--bg);color:var(--ink-2);font:400 16px/1.7 var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;transition:background var(--dur) var(--ease), color var(--dur) var(--ease)}h1,h2,h3,h4{color:var(--ink-1);font-family:var(--font-display);letter-spacing:-.01em;text-wrap:balance;font-weight:600;line-height:1.3}p{text-wrap:pretty}strong{color:var(--ink-1);font-weight:600}em{font-style:italic}::selection{background:var(--accent-soft);color:var(--ink-1)}a.link{color:var(--accent-ink);text-underline-offset:.22em;text-decoration:underline 1px;text-decoration-color:color-mix(in srgb, var(--accent-ink) 35%, transparent);transition:text-decoration-color var(--dur) var(--ease)}a.link:hover{text-decoration-color:var(--accent-ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-xs)}.mono{font-family:var(--font-mono)}.tnum{font-variant-numeric:tabular-nums}.muted{color:var(--ink-4)}.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:24px}@media (width<=640px){.wrap{padding-inline:18px}}.section{padding-block:calc(72px * var(--air))}.section-tight{padding-block:calc(48px * var(--air))}.sec-head{border-bottom:1px solid var(--line-2);align-items:baseline;gap:16px;margin-bottom:8px;padding-bottom:20px;display:flex}.sec-head h2{font-family:var(--font-sans);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);font-size:13px;font-weight:600}.sec-head .sec-more{color:var(--ink-4);transition:color var(--dur) var(--ease);margin-left:auto;font-size:13px}.sec-head .sec-more:hover{color:var(--accent-ink)}.site-header{z-index:40;background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:saturate(180%)blur(14px);border-bottom:1px solid var(--line-1);position:sticky;top:0}.site-header .bar{align-items:center;gap:28px;height:58px;display:flex}.wordmark{color:var(--ink-1);letter-spacing:-.01em;white-space:nowrap;flex:none;align-items:center;gap:9px;font-size:15px;font-weight:600;display:flex}.wordmark .glyph{border:1.5px solid var(--ink-1);border-radius:50%;flex:none;place-items:center;width:20px;height:20px;display:grid}.wordmark .glyph:after{content:"";background:var(--ink-1);border-radius:50%;width:6px;height:6px}.site-nav{scrollbar-width:none;align-items:center;gap:4px;margin-left:auto;display:flex;overflow-x:auto}.site-nav::-webkit-scrollbar{display:none}.site-nav a{border-radius:var(--r-sm);color:var(--ink-3);white-space:nowrap;transition:color var(--dur) var(--ease), background var(--dur) var(--ease);padding:6px 10px;font-size:13.5px}.site-nav a:hover{color:var(--ink-1);background:var(--hover)}.site-nav a[aria-current=page]{color:var(--ink-1);font-weight:600}.icon-btn{border-radius:var(--r-sm);width:32px;height:32px;color:var(--ink-3);transition:color var(--dur) var(--ease), background var(--dur) var(--ease), border-color var(--dur) var(--ease);border:1px solid #0000;flex:none;place-items:center;display:grid}.icon-btn:hover{color:var(--ink-1);background:var(--hover);border-color:var(--line-2)}.icon-btn svg{width:16px;height:16px}[data-theme=light] .i-moon,[data-theme=dark] .i-sun{display:none}@media (width<=720px){.site-header .bar{gap:10px}.site-nav{gap:0}.site-nav a{padding:6px 7px;font-size:13px}}.hero{padding-block:calc(84px * var(--air)) calc(52px * var(--air))}.hero .eyebrow{color:var(--ink-4);letter-spacing:.04em;align-items:center;gap:8px;margin-bottom:22px;font-size:12.5px;display:inline-flex}.hero .dot{background:var(--ok);width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb, var(--ok) 18%, transparent);border-radius:50%;flex:none}.hero h1{letter-spacing:-.02em;max-width:22ch;font-size:clamp(30px,5.2vw,46px);line-height:1.28}.hero .lede{max-width:52ch;color:var(--ink-3);margin-top:22px;font-size:16.5px;line-height:1.8}.hero .meta-row{color:var(--ink-4);flex-wrap:wrap;gap:8px 22px;margin-top:32px;font-size:13.5px;display:flex}.hero .meta-row a{transition:color var(--dur) var(--ease);align-items:center;gap:6px;display:inline-flex}.hero .meta-row a:hover{color:var(--accent-ink)}.stats{flex-wrap:wrap;gap:40px;margin-top:44px;display:flex}.stats .stat .n{font-family:var(--font-display);color:var(--ink-1);letter-spacing:-.01em;font-variant-numeric:tabular-nums;font-size:26px;font-weight:600;line-height:1.1}.stats .stat .k{color:var(--ink-4);letter-spacing:.03em;margin-top:5px;font-size:12.5px}.entries{flex-direction:column;display:flex}.entry{padding-block:calc(26px * var(--air));border-bottom:1px solid var(--line-1);grid-template-columns:96px 1fr;gap:24px;display:grid;position:relative}.entry:first-child{border-top:1px solid var(--line-1)}.entry .date{color:var(--ink-4);font-variant-numeric:tabular-nums;letter-spacing:.01em;padding-top:4px;font-size:13px}.entry .body h3{transition:color var(--dur) var(--ease);font-size:19.5px;font-weight:600}.entry:hover .body h3{color:var(--accent-ink)}.entry .sum{color:var(--ink-3);max-width:60ch;margin-top:8px;font-size:14.5px;line-height:1.72}.entry .tags{flex-wrap:wrap;gap:6px;margin-top:12px;display:flex}.entry .arrow{right:0;top:calc(26px * var(--air) + 3px);color:var(--ink-4);opacity:0;transition:opacity var(--dur) var(--ease), transform var(--dur) var(--ease), color var(--dur) var(--ease);position:absolute;transform:translate(-4px)}.entry:hover .arrow{opacity:1;color:var(--accent-ink);transform:translate(0)}@media (width<=640px){.entry{grid-template-columns:1fr;gap:10px}.entry .date{padding-top:0}.entry .arrow{display:none}}.tag{color:var(--ink-3);border:1px solid var(--line-2);transition:color var(--dur) var(--ease), border-color var(--dur) var(--ease), background var(--dur) var(--ease);border-radius:100px;padding:2.5px 9px;font-size:12px;line-height:1.5;display:inline-block}a.tag:hover,button.tag:hover{color:var(--ink-1);border-color:var(--line-3);background:var(--hover)}button.tag[aria-pressed=true]{color:var(--accent-ink);border-color:color-mix(in srgb, var(--accent) 40%, transparent);background:var(--accent-soft)}.filter-bar{flex-wrap:wrap;align-items:center;gap:8px;padding-block:28px;display:flex}.filter-bar .label{color:var(--ink-4);letter-spacing:.04em;margin-right:4px;font-size:12.5px}.filter-bar .count{color:var(--ink-4);font-variant-numeric:tabular-nums;margin-left:auto;font-size:12.5px}.year-block{margin-bottom:calc(44px * var(--air))}.year-label{border-bottom:1px solid var(--line-3);align-items:baseline;gap:14px;padding-bottom:14px;display:flex}.year-label .y{font-family:var(--font-mono);letter-spacing:.1em;color:var(--ink-1);font-size:13px;font-weight:600}.year-label .c{color:var(--ink-4);font-size:12.5px}.page-head{padding-block:calc(60px * var(--air)) calc(34px * var(--air))}.page-head h1{font-size:clamp(25px,3.6vw,33px)}.page-head p{max-width:56ch;color:var(--ink-3);margin-top:14px;font-size:15.5px;line-height:1.78}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}@media (width<=860px){.grid-2{grid-template-columns:minmax(0,1fr)}}.card{border:1px solid var(--line-1);border-radius:var(--r-lg);background:var(--bg-raised);transition:border-color var(--dur) var(--ease), background var(--dur) var(--ease);flex-direction:column;gap:12px;padding:22px;display:flex}.card:hover{border-color:var(--line-3);background:var(--bg-subtle)}.card-top{align-items:baseline;gap:12px;display:flex}.card-title{font-family:var(--font-display);color:var(--ink-1);font-size:17.5px;font-weight:600}.card-year{color:var(--ink-4);font-variant-numeric:tabular-nums;flex:none;margin-left:auto;font-size:12px}.card p{color:var(--ink-3);font-size:14.5px;line-height:1.72}.card .stack{font-family:var(--font-mono);color:var(--ink-4);letter-spacing:.01em;font-size:11.5px}.card .tags{flex-wrap:wrap;gap:6px;margin-top:auto;padding-top:6px;display:flex}.notes{columns:3;column-gap:18px}@media (width<=1000px){.notes{columns:2}}@media (width<=620px){.notes{columns:1}}.notes.uniform{columns:auto;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:18px;display:grid}.notes.uniform .note{flex-direction:column;margin-bottom:0;display:flex}.notes.uniform .note .txt{flex:1}.notes.uniform .note .shot img{aspect-ratio:4/3;object-fit:cover}.note{break-inside:avoid;border:1px solid var(--line-1);border-radius:var(--r-lg);background:var(--bg-raised);transition:border-color var(--dur) var(--ease);margin-bottom:18px;overflow:hidden}.note:hover{border-color:var(--line-3)}.note .shot{cursor:zoom-in;background:var(--bg-inset);width:100%}.note .shot img{width:100%;height:auto}.note .txt{padding:15px 17px 17px}.note .txt .when{color:var(--ink-4);font-variant-numeric:tabular-nums;letter-spacing:.02em;margin-bottom:7px;font-size:12px}.note .txt p{color:var(--ink-2);font-size:14.5px;line-height:1.74}.note .txt .where{color:var(--ink-4);margin-top:9px;font-size:12px}.note.text-only{background:var(--bg-subtle)}.note.text-only .txt{padding:22px}.note.text-only .txt p{color:var(--ink-1);font-size:15.5px}.prose{color:var(--ink-2);font-size:16.5px;line-height:1.85}.prose>*+*{margin-top:1.15em}.prose h2{margin-top:2.4em;margin-bottom:.2em;scroll-margin-top:84px;font-size:22px}.prose h3{margin-top:1.9em;scroll-margin-top:84px;font-size:18px}.prose ul,.prose ol{padding-left:1.35em}.prose ul{list-style:none}.prose ul li{position:relative}.prose ul li:before{content:"";background:var(--ink-4);width:5px;height:1px;position:absolute;top:.78em;left:-1.1em}.prose ol{list-style:decimal}.prose ol li::marker{color:var(--ink-4);font-variant-numeric:tabular-nums}.prose li+li,.prose li>ul,.prose li>ol{margin-top:.4em}.prose blockquote{border-left:2px solid var(--accent);font-family:var(--font-serif);color:var(--ink-1);margin-block:1.8em;padding:2px 0 2px 22px;font-size:18px;font-style:italic;line-height:1.8}.prose code{font-family:var(--font-mono);background:var(--bg-inset);border-radius:var(--r-xs);color:var(--ink-1);padding:.16em .42em;font-size:.86em}.prose pre{background:var(--bg-subtle);border:1px solid var(--line-1);border-radius:var(--r-md);padding:18px 20px;font-size:13px;line-height:1.75;overflow-x:auto}.prose pre code{font-size:inherit;background:0 0;padding:0}.astro-code{background:var(--bg-subtle)!important}[data-theme=light] .astro-code span{color:var(--shiki-light)}[data-theme=dark] .astro-code span{color:var(--shiki-dark)}.prose table{border-collapse:collapse;border-top:1px solid var(--line-3);border-bottom:1px solid var(--line-2);width:100%;margin-block:1.7em;font-size:14.5px;line-height:1.62}.prose thead{background:var(--bg-subtle)}.prose th{text-align:left;color:var(--ink-1);border-bottom:1px solid var(--line-2);padding:11px 14px;font-weight:600}.prose td{color:var(--ink-2);vertical-align:top;border-top:1px solid var(--line-1);padding:11px 14px}.prose th+th,.prose td+td{border-left:1px solid var(--line-1)}@media (width<=700px){.prose table{white-space:nowrap;display:block;overflow-x:auto}}.prose mark{background:color-mix(in srgb, var(--accent) 22%, transparent);color:var(--ink-1);border-radius:2px;padding:.08em .22em}.prose hr{background:var(--line-2);border:0;height:1px;margin-block:2.6em}.prose hr.dots{text-align:center;height:auto;color:var(--ink-4);letter-spacing:.8em;background:0 0;font-size:13px}.prose hr.dots:after{content:"···"}.prose figure{margin-block:2em}.prose figure img{border-radius:var(--r-md);border:1px solid var(--line-1);cursor:zoom-in;background:var(--bg-inset);width:100%;height:auto}.prose figcaption{color:var(--ink-4);text-align:center;text-wrap:pretty;margin-top:11px;font-size:13px;line-height:1.65}.prose .callout{border:1px solid var(--line-2);border-left:2px solid var(--accent);border-radius:var(--r-sm);background:var(--bg-subtle);padding:15px 18px;font-size:15px;line-height:1.75}.prose img[data-zoom]{cursor:zoom-in}.post-head{padding-block:calc(56px * var(--air)) calc(30px * var(--air))}.post-head .kicker{font-family:var(--font-sans);color:var(--ink-4);letter-spacing:.06em;margin-bottom:16px;font-size:12.5px}.post-head h1{font-size:clamp(26px,4.2vw,37px)}.post-head .post-meta{color:var(--ink-4);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:8px 18px;margin-top:20px;font-size:13px;display:flex}.post-head .post-meta .sep{color:var(--line-3)}.post-layout{grid-template-columns:minmax(0,1fr) 200px;align-items:start;gap:0 56px;max-width:960px;display:grid}.post-layout>*{grid-column:1}.post-layout .post-head{max-width:var(--measure);grid-column:1/-1}.post-layout .toc{grid-column:2}.post-layout .prose,.post-layout .post-nav,.post-layout .post-cta{max-width:var(--measure)}.post-layout.no-toc{grid-template-columns:minmax(0,1fr)}.post-layout.no-toc .post-head,.post-layout.no-toc .prose,.post-layout.no-toc .post-nav,.post-layout.no-toc .post-cta{margin-inline:auto}@media (width<=940px){.post-layout{grid-template-columns:minmax(0,1fr);gap:0;max-width:100%}.post-layout .post-head,.post-layout .toc,.post-layout .prose,.post-layout .post-nav,.post-layout .post-cta{grid-column:1;max-width:100%}}.toc{position:sticky;top:88px}.toc .t{font-family:var(--font-sans);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);margin-bottom:14px;font-size:12px}.toc ol{flex-direction:column;gap:2px;display:flex}.toc a{color:var(--ink-4);border-left:1px solid var(--line-2);transition:color var(--dur) var(--ease), border-color var(--dur) var(--ease);padding:5px 0 5px 14px;font-size:13px;line-height:1.55;display:block}.toc a:hover{color:var(--ink-1)}.toc a.is-current{color:var(--ink-1);border-left-color:var(--accent);font-weight:600}@media (width<=940px){.toc{border:1px solid var(--line-1);border-radius:var(--r-md);margin-bottom:32px;padding:16px 18px;position:static}.toc ol{gap:0}}.post-nav{grid-template-columns:1fr 1fr;gap:16px;padding-block:40px;display:grid}@media (width<=640px){.post-nav{grid-template-columns:1fr}}.post-nav a{border:1px solid var(--line-1);border-radius:var(--r-md);transition:border-color var(--dur) var(--ease), background var(--dur) var(--ease);flex-direction:column;gap:7px;padding:20px;display:flex}.post-nav a:hover{border-color:var(--line-3);background:var(--bg-subtle)}.post-nav .dir{color:var(--ink-4);letter-spacing:.06em;font-size:12px}.post-nav .ttl{font-family:var(--font-display);color:var(--ink-1);font-size:15.5px;font-weight:600}.post-nav .next{text-align:right;align-items:flex-end}.lightbox{z-index:100;background:color-mix(in srgb, var(--bg) 88%, transparent);-webkit-backdrop-filter:blur(20px)saturate(160%);place-items:center;padding:40px 24px;display:none;position:fixed;inset:0}.lightbox[data-open=true]{display:grid}.lightbox img{border-radius:var(--r-md);border:1px solid var(--line-2);width:auto;max-width:min(1100px,100%);height:auto;max-height:78vh;box-shadow:0 24px 60px -20px #00000059}.lightbox .cap{text-align:center;color:var(--ink-3);max-width:60ch;margin-top:18px;font-size:13px}.lightbox .close{border:1px solid var(--line-2);width:36px;height:36px;color:var(--ink-2);background:var(--bg);border-radius:50%;place-items:center;display:grid;position:absolute;top:22px;right:22px}.lightbox .close:hover{border-color:var(--line-3);color:var(--ink-1)}.about-grid{grid-template-columns:300px 1fr;align-items:start;gap:56px;display:grid}@media (width<=860px){.about-grid{grid-template-columns:1fr;gap:32px}}.about-aside{flex-direction:column;gap:22px;display:flex;position:sticky;top:88px}@media (width<=860px){.about-aside{position:static}}.portrait{aspect-ratio:4/5;border-radius:var(--r-lg);border:1px solid var(--line-1);background:var(--bg-inset);overflow:hidden}.portrait img{object-fit:cover;width:100%;height:100%}.kv{flex-direction:column;gap:11px;display:flex}.kv .row{gap:12px;font-size:13.5px;display:flex}.kv .row .k{color:var(--ink-4);flex:none;width:62px}.kv .row .v{color:var(--ink-2)}.timeline{flex-direction:column;display:flex}.timeline .item{border-bottom:1px solid var(--line-1);grid-template-columns:88px 1fr;gap:22px;padding-block:18px;display:grid}.timeline .item:first-child{border-top:1px solid var(--line-1)}.timeline .yr{font-family:var(--font-mono);color:var(--ink-4);padding-top:4px;font-size:12.5px}.timeline .what{font-family:var(--font-display);color:var(--ink-1);font-size:15.5px;font-weight:600}.timeline .note{color:var(--ink-4);margin-top:5px;font-size:13.5px;line-height:1.68}@media (width<=640px){.timeline .item{grid-template-columns:1fr;gap:6px}}.subscribe{border:1px solid var(--line-1);border-radius:var(--r-lg);background:var(--bg-subtle);grid-template-columns:1fr auto;align-items:center;gap:24px;padding:28px 30px;display:grid}@media (width<=700px){.subscribe{grid-template-columns:1fr}}.subscribe h3{font-size:17.5px}.subscribe p{color:var(--ink-3);max-width:46ch;margin-top:7px;font-size:14px}.btn{white-space:nowrap;border:1px solid var(--line-3);border-radius:var(--r-sm);color:var(--ink-1);transition:background var(--dur) var(--ease), color var(--dur) var(--ease), border-color var(--dur) var(--ease);align-items:center;gap:8px;padding:9px 16px;font-size:13.5px;font-weight:500;display:inline-flex}.btn:hover{background:var(--ink-1);color:var(--bg);border-color:var(--ink-1)}.btn.solid{background:var(--accent);color:#fff;border-color:var(--accent)}.btn.solid:hover{background:var(--accent-ink);border-color:var(--accent-ink);color:#fff}.site-footer{margin-top:calc(88px * var(--air));border-top:1px solid var(--line-1);color:var(--ink-4);padding-block:44px 56px;font-size:13px}.footer-grid{grid-template-columns:1.6fr 1fr 1fr;gap:32px;display:grid}@media (width<=700px){.footer-grid{grid-template-columns:1fr;gap:26px}}.site-footer .about-line{max-width:34ch;line-height:1.78}.site-footer .col-t{letter-spacing:.1em;text-transform:uppercase;color:var(--ink-4);margin-bottom:13px;font-size:12px}.site-footer .col a{color:var(--ink-3);transition:color var(--dur) var(--ease);padding-block:4px;display:block}.site-footer .col a:hover{color:var(--accent-ink)}.site-footer .baseline{border-top:1px solid var(--line-1);flex-wrap:wrap;justify-content:space-between;gap:8px 20px;margin-top:40px;padding-top:20px;display:flex}.empty{text-align:center;color:var(--ink-4);padding:64px 0;font-size:14px}.sr{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip{z-index:200;background:var(--ink-1);color:var(--bg);border-radius:var(--r-sm);transition:top var(--dur) var(--ease);padding:9px 14px;font-size:13px;position:absolute;top:-60px;left:12px}.skip:focus{top:12px}.center-page{text-align:center;place-items:center;min-height:60vh;padding-block:80px;display:grid}.center-page .big{font-family:var(--font-display);color:var(--ink-1);font-size:64px;line-height:1}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}html{scroll-behavior:auto}}
