.reading-page{background:radial-gradient(ellipse at 92% 0%, #b7c7f11c, transparent 650px), var(--paper)}.site-header{z-index:20;height:100px;transition:height .3s var(--ease), border-color .3s;background:light-dark(#f0f1f4e6,#0c111beb);border-bottom:1px solid #0000;justify-content:space-between;align-items:center;padding:0 44px;display:flex;position:fixed;inset:0 0 auto}.site-header.is-scrolled{border-color:var(--rule);backdrop-filter:blur(18px);height:76px}.reading-signature img{width:44px;height:44px}.site-header nav{gap:42px;display:flex}.site-header nav a{align-items:baseline;gap:12px;font-size:15px;display:flex}.site-header nav a>.nav-number{color:var(--muted);font-size:12px}.site-header nav a[aria-current],.site-header nav a:hover,.site-header nav a[aria-current]>.nav-number{color:var(--blue)}.github-link{align-items:center;gap:12px;font-size:14px;display:flex}.github-link svg{width:17px;height:17px}.inner-page,.article-shell{width:100%;max-width:1440px;margin:0 auto;padding:170px 8% 0}.section-kicker,.article-kicker{letter-spacing:.04em;color:var(--muted);font-size:14px}.archive-header{grid-template-columns:1.3fr 1fr;align-items:end;gap:12%;padding-bottom:65px;display:grid}.archive-header h1{letter-spacing:-.095em;margin-top:34px;font-size:clamp(110px,16vw,230px);font-weight:500;line-height:.9}.archive-header h1>span{color:var(--blue)}.archive-intro>p{color:var(--muted);font-size:16px;line-height:2}.archive-search{color:var(--muted);margin-top:32px;font-size:13px;display:block}.archive-search input{width:100%;color:var(--ink);background:0 0;border:0;border-bottom:1px solid light-dark(#a8b1c0,#53617a);border-radius:0;margin-top:6px;padding:13px 0;font-size:17px}.archive-search input:focus-visible{outline-offset:6px}.archive-tools{border-top:1px solid var(--rule);color:var(--muted);justify-content:space-between;padding:22px 0;font-size:14px;display:flex}.archive-content{padding:26px 0 85px}.archive-year{grid-template-columns:24% minmax(0,1fr);gap:40px;margin-bottom:52px;display:grid}.archive-year>h2{letter-spacing:-.07em;align-self:start;padding-top:19px;font-size:clamp(34px,4vw,58px);font-weight:500;position:sticky;top:112px}.archive-row{border-top:1px solid var(--rule);grid-template-columns:50px minmax(0,1fr) 70px 18px;align-items:center;gap:24px;padding:28px 0;display:grid}.archive-row time,.archive-category{color:var(--muted);font-size:13px}.archive-category{text-align:right}.archive-row h3{letter-spacing:-.025em;transition:transform .35s var(--ease), color .2s;font-size:18px;font-weight:500;line-height:1.7}.archive-row svg{width:18px;height:18px;transition:transform .35s var(--ease)}.archive-row:hover h3{color:var(--blue);transform:translate(5px)}.archive-row:hover svg{transform:translate(3px,-3px)}.empty-search{text-align:center;color:var(--muted);padding:90px 0 140px;font-size:17px}.article-shell{max-width:1400px;padding-top:154px}.article-back{color:var(--muted);align-items:center;gap:12px;font-size:14px;display:inline-flex}.article-back:hover{color:var(--blue)}.article-back svg{width:16px;height:16px;transform:rotate(180deg)}.article-header{border-bottom:1px solid var(--rule);margin-top:52px;padding-bottom:42px}.article-kicker{color:var(--blue);margin-bottom:22px}.article-header h1{letter-spacing:-.055em;text-wrap:balance;max-width:960px;font-size:clamp(36px,5vw,72px);font-weight:500;line-height:1.3}.article-meta{color:var(--muted);align-items:center;gap:26px;margin-top:32px;font-size:14px;display:flex}.article-author{color:var(--ink);align-items:center;gap:8px;margin-right:16px;display:inline-flex}.article-author img{border-radius:50%}.article-author>span{color:var(--muted);margin-left:3px;font-size:13px}.article-layout{grid-template-columns:minmax(0,760px) minmax(160px,210px);grid-template-areas:"body rail";gap:8%;margin-top:48px;display:grid}.article-body{grid-area:body;min-width:0}.archive-notice{color:var(--muted);border-left:2px solid #9cafe1;margin:0 0 40px;padding-left:13px;font-size:14px;line-height:1.9}.reading-rail{grid-area:rail;align-self:start;position:sticky;top:118px}.article-toc summary{color:var(--muted);cursor:pointer;justify-content:space-between;align-items:center;font-size:14px;list-style:none;display:flex}.article-toc summary::-webkit-details-marker{display:none}.article-toc summary>.toc-count{color:var(--muted);font-size:13px}.article-toc nav{border-left:1px solid var(--line);flex-direction:column;gap:3px;max-height:calc(100svh - 260px);margin-top:22px;display:flex;overflow-y:auto}.article-toc nav a{color:var(--muted);overflow-wrap:anywhere;border-left:2px solid #0000;margin-left:-1px;padding:8px 0 8px 16px;font-size:14px;line-height:1.7;display:block}.article-toc nav a.toc-nested{padding-left:28px;font-size:13px}.article-toc nav a:hover,.article-toc nav a[aria-current]{color:var(--blue);border-left-color:var(--blue)}.rail-top{color:var(--muted);align-items:center;gap:18px;margin-top:30px;font-size:13px;display:inline-flex}.rail-top svg{width:13px;height:13px;transform:rotate(-90deg)}.reading-progress{z-index:30;pointer-events:none;width:100%;height:2px;position:fixed;top:0;left:0}.reading-progress>span{background:var(--blue);transform-origin:0;width:100%;height:100%;display:block;transform:scaleX(0)}.prose{color:var(--soft-ink);overflow-wrap:anywhere;font-size:18px;line-height:2}.prose>:first-child{margin-top:0}.prose p{margin:1.35em 0}.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{color:var(--ink);scroll-margin-top:24px;font-weight:550;line-height:1.5}.prose h2{letter-spacing:-.035em;margin:2.5em 0 .9em;font-size:29px}.prose h3{letter-spacing:-.025em;margin:2em 0 .8em;font-size:22px}.prose h4,.prose h5,.prose h6{margin:1.7em 0 .7em;font-size:18px}.prose strong{color:var(--ink);font-weight:650}.prose a:not(.heading-anchor){color:var(--blue);text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--blue) 35%, transparent);text-underline-offset:4px;text-decoration-thickness:1px}.prose a:hover{text-decoration-color:currentColor}.heading-anchor{color:var(--blue);opacity:0;margin-left:10px;font-size:.65em;transition:opacity .2s}.prose :is(h2,h3,h4,h5,h6):hover .heading-anchor,.heading-anchor:focus-visible{opacity:1}.prose ul,.prose ol{margin:1.4em 0;padding-left:1.4em}.prose li{padding-left:5px}.prose li+li{margin-top:8px}.prose li::marker{color:#6a7ba2}.prose blockquote{color:var(--muted);border-left:2px solid #a6b8e8;margin:32px 0;padding:2px 0 2px 24px;font-size:.95em}.prose blockquote>:first-child{margin-top:0}.prose blockquote>:last-child{margin-bottom:0}.prose code{font-variant-ligatures:none;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}.prose :not(pre)>code{color:light-dark(#394666,#c1d3f5);background:light-dark(#e3e8f1,#202c40);border-radius:4px;padding:3px 6px;font-size:.86em}.code-block{background:#0d1117;border:1px solid #243049;border-radius:10px;margin:32px 0;overflow:hidden}.code-bar{color:#b6c3dc;min-height:45px;font:13px var(--font);letter-spacing:.025em;background:#101727;border-bottom:1px solid #859ac91a;justify-content:space-between;align-items:center;padding:0 22px;display:flex}.code-bar>span{align-items:center;gap:16px;display:flex}.code-lines{color:#7f8da6;font-size:12px}.copy-code{color:#b8c7e1;background:0 0;align-items:center;gap:7px;padding:8px 0 8px 10px;font-size:13px;display:flex}.copy-code:hover{color:#fff}.copy-code:focus-visible{outline-offset:2px;outline-color:#a4b9ff}.prose pre{tab-size:4;scrollbar-color:#53617b transparent;max-height:38rem;margin:0;padding:24px;font-size:16px;line-height:1.85;overflow:auto}.prose pre:focus-visible{outline-offset:-3px;outline-color:#a4b9ff}.prose pre code{width:max-content;min-width:100%;font-size:inherit;display:block}.table-scroll{margin:30px 0;overflow-x:auto}.prose table{border-collapse:collapse;width:100%;min-width:560px;font-size:16px;line-height:1.8}.prose th{color:var(--ink);background:light-dark(#e5eaf3,#1c2739);font-weight:550}.prose th,.prose td{text-align:left;border:1px solid var(--line);min-width:110px;padding:14px 18px}.prose td{background:light-dark(#f6f8fb55,#15203355)}.prose img{border-radius:7px;max-width:100%;height:auto;margin:32px auto}.prose hr{background:var(--line);border:0;height:1px;margin:52px 0}.article-footer{border-top:1px solid var(--rule);justify-content:space-between;align-items:start;gap:50px;margin:85px 0 100px;padding-top:35px;display:flex}.article-next{grid-template-columns:minmax(0,1fr) 22px;gap:10px 28px;max-width:70%;display:grid}.article-next>span{color:var(--muted);grid-column:1/-1;font-size:13px}.article-next strong{letter-spacing:-.035em;font-size:clamp(20px,2.2vw,32px);font-weight:500;line-height:1.6}.article-next svg{align-self:center;width:22px;height:22px}.article-next:hover{color:var(--blue)}.site-footer{border-top:1px solid var(--rule);padding:50px 8% calc(14vw + 40px);position:relative;overflow:hidden}.footer-bottom{justify-content:space-between;align-items:center;gap:35px;max-width:1220px;margin:0 auto;display:flex}.footer-identity{align-items:center;gap:12px;display:flex}.footer-identity>span{letter-spacing:-.04em;font-size:18px}.footer-identity>span>span{color:var(--muted);letter-spacing:0;margin-top:4px;font-size:12px;display:block}.footer-bottom>p{color:var(--muted);font-size:13px}.footer-bottom>div{align-items:center;gap:26px;font-size:13px;display:flex}.footer-bottom>div>a:last-child{align-items:center;gap:9px;display:flex}.footer-bottom svg{width:13px;height:13px}.footer-bottom a:hover{color:var(--blue)}.footer-wordmark{letter-spacing:-.075em;text-align:center;white-space:nowrap;height:.68em;color:var(--wordmark);pointer-events:none;user-select:none;font-size:clamp(64px,20vw,420px);font-weight:750;line-height:.9;position:absolute;inset:auto 0 0;overflow:hidden}.footer-invitation{justify-content:space-between;align-items:end;margin-bottom:60px;display:flex}.footer-invitation p{color:var(--muted);margin-bottom:12px;font-size:15px}.say-hello{letter-spacing:-.065em;align-items:center;gap:30px;font-size:8vw;display:flex}.say-hello svg{width:60px;height:60px}.email-link{font-size:16px}.error-page{grid-template-columns:1.1fr 1fr;align-items:center;gap:10%;max-width:1440px;min-height:80svh;margin:0 auto;padding:170px 8% 110px;display:grid}.error-page h1{letter-spacing:-.09em;color:var(--blue);font-size:clamp(140px,25vw,360px);font-weight:500;line-height:.9}.error-message h2{letter-spacing:-.04em;font-size:clamp(26px,3.2vw,45px);font-weight:500;line-height:1.4}.error-message p{color:var(--muted);margin:22px 0 28px;font-size:16px;line-height:1.9}.text-link{border-bottom:1px solid var(--rule);align-items:center;gap:25px;width:fit-content;margin-top:10px;padding:12px 0;font-size:15px;display:flex}.text-link svg{width:17px;height:17px}.text-link:hover{color:var(--blue);border-color:var(--blue)}@media (width<=1099px){.article-layout{grid-template-columns:minmax(0,1fr);grid-template-areas:"rail""body";gap:32px;max-width:760px}.reading-rail{position:static}.article-toc{border-block:1px solid var(--rule);padding:17px 0}.article-toc summary{color:var(--ink)}.article-toc summary>.toc-count:after{content:"+";color:var(--blue);margin-left:18px;font-size:18px}.article-toc[open] summary>span:after{content:"−"}.article-toc nav{max-height:300px}.rail-top{display:none}.article-layout{margin-top:34px}.archive-year{grid-template-columns:18% minmax(0,1fr);gap:32px}.archive-category{display:none}.archive-row{grid-template-columns:45px minmax(0,1fr) 18px;gap:18px}.footer-bottom>p{display:none}}@media (width<=760px){.site-header,.site-header.is-scrolled{height:80px;padding:0 23px}.reading-signature img{width:36px;height:36px}.site-header nav{gap:24px}.site-header nav a{gap:0;font-size:14px}.site-header nav a>.nav-number{display:none}.github-link{gap:0;font-size:0}.github-link svg{width:19px;height:19px}.inner-page,.article-shell{padding:126px 8% 0}.archive-header{grid-template-columns:minmax(0,1fr);gap:30px;padding-bottom:34px}.archive-header h1{margin-top:28px;font-size:31vw}.archive-intro>p{font-size:15px}.archive-search{margin-top:25px}.archive-search input{font-size:16px}.archive-tools{padding-block:20px;font-size:13px}.archive-content{padding-top:15px;padding-bottom:40px}.archive-year{grid-template-columns:minmax(0,1fr);gap:18px;margin-bottom:42px}.archive-year>h2{padding-top:0;font-size:38px;position:static}.archive-row{grid-template-columns:34px minmax(0,1fr) 16px;gap:14px;padding-block:22px}.archive-row h3{font-size:17px}.archive-row time{font-size:12px}.archive-row svg{width:16px;height:16px}.article-header{margin-top:38px;padding-bottom:27px}.article-kicker{margin-bottom:17px;font-size:13px}.article-header h1{letter-spacing:-.055em;font-size:34px;line-height:1.45}.article-meta{flex-wrap:wrap;gap:13px 18px;margin-top:24px;font-size:13px}.article-author{width:100%;margin:0 0 5px}.article-author img{width:24px;height:24px}.article-layout{gap:25px;margin-top:25px}.archive-notice{margin-bottom:30px;font-size:13px}.prose{font-size:17px;line-height:1.95}.prose h2{font-size:24px}.prose h3{font-size:20px}.prose blockquote{padding-left:16px}.heading-anchor{opacity:.45}.code-block{border-radius:7px;margin-block:26px}.code-bar{min-height:42px;padding-inline:16px}.prose pre{max-height:32rem;padding:18px 16px;font-size:15px}.article-footer{flex-direction:column;gap:30px;margin:60px 0 70px;padding-top:27px}.article-next{width:100%;max-width:100%}.article-next strong{font-size:23px}.site-footer{padding:36px 8% 90px}.footer-bottom{flex-direction:column;align-items:flex-start;gap:28px}.footer-bottom>div{flex-wrap:wrap;justify-content:space-between;gap:16px;width:100%;font-size:12px}.footer-identity>span{font-size:17px}.error-page{grid-template-columns:minmax(0,1fr);gap:40px;padding-top:150px;padding-bottom:80px}.error-page h1{font-size:42vw}.error-message h2{font-size:30px}}@media print{.site-header,.site-footer,.reading-rail,.reading-progress,.copy-code,.article-back,.heading-anchor{display:none!important}.article-shell{max-width:none;padding:0}.article-layout{display:block}.prose pre{white-space:pre-wrap;max-height:none;overflow:visible}.prose pre code{white-space:pre-wrap;width:auto}}.header-actions{align-items:center;gap:26px;display:flex}:root[data-theme=dark] :is(.reading-signature,.footer-identity) img{filter:brightness(0)invert()}@media (prefers-color-scheme:dark){:root:not([data-theme]) :is(.reading-signature,.footer-identity) img{filter:brightness(0)invert()}}@media (width<=900px){.header-actions .github-link{display:none}}@media (width<=760px){.site-header{gap:12px}.site-header nav{gap:16px}.header-actions{gap:0}}@media (width<=360px){.site-header,.site-header.is-scrolled{gap:10px;padding-inline:18px}.reading-signature img{width:30px;height:30px}.site-header nav{gap:12px}.site-header nav a{font-size:13px}}
