.post-hero{isolation:isolate;background:var(--cv-bg);color:var(--cv-ink);position:relative;overflow:hidden}.post-hero.is-light{border-bottom:1px solid var(--site-line)}.post-hero:after{content:"";z-index:1;background:var(--stage-grain);opacity:.14;mix-blend-mode:multiply;pointer-events:none;position:absolute;inset:0}.post-hero-in{grid-template-columns:minmax(0,1fr) 380px;align-items:center;gap:40px;width:min(1120px,100% - 40px);min-height:420px;margin:0 auto;display:grid}.post-back{color:inherit;opacity:.72;font-size:13px;text-decoration:none;transition:opacity .12s}.post-back:hover{opacity:1}.post-meta{opacity:.78;flex-wrap:wrap;gap:4px 12px;margin:28px 0 14px;font-size:13px;display:flex}.post-hero h1{font:650 44px/1.28 var(--sans);letter-spacing:-.012em;text-wrap:pretty;margin:0 0 16px}.post-desc{opacity:.82;max-width:34em;margin:0;font-size:18.5px;line-height:1.75}.post-hero-character{justify-self:end;width:420px;max-width:none;height:auto;margin:-20px -20px -20px 0;mask-image:radial-gradient(closest-side,#000 74%,#0000)}.post-body{width:min(720px,100% - 40px);margin:0 auto;padding:64px 0 160px}.md-m2{color:#45423c;overflow-wrap:anywhere;font-size:17px;line-height:1.85}.md-m2>:first-child{margin-top:0}.md-m2 p{margin:0 0 1.2em}.md-m2 h2{font:650 27px/1.35 var(--sans);letter-spacing:-.012em;color:var(--site-ink);margin:2.4em 0 .7em;scroll-margin-top:96px}.md-m2 h3{font:600 20px/1.45 var(--sans);color:var(--site-ink);margin:1.9em 0 .6em;scroll-margin-top:96px}.md-m2 .hn{color:var(--site-accent);margin-right:.1em}.md-m2 .hn-sep{display:none}.md-m2 .hn:after{content:"."}.md-m2 ul,.md-m2 ol{margin:0 0 1.3em;padding-left:0;list-style:none}.md-m2 ol{counter-reset:n}.md-m2 li{margin:.55em 0;padding-left:2em;position:relative}.md-m2 li>p{margin:0}.md-m2 ol>li{counter-increment:n}.md-m2 ol>li:before{content:counter(n, decimal-leading-zero);font:500 .8em/1.85 var(--mono);color:var(--site-accent);position:absolute;top:.12em;left:0}.md-m2 ul>li:before{content:"";background:var(--site-accent-line);border-radius:2px;width:6px;height:6px;position:absolute;top:.78em;left:.45em}.md-m2 strong{color:var(--site-ink);font-weight:600}.md-m2 a{color:var(--site-ink);text-decoration:underline;text-decoration-color:var(--site-accent-line);text-underline-offset:4px;transition:text-decoration-color .15s}.md-m2 a:hover{text-decoration-color:var(--site-accent)}.md-m2 :not(pre)>code{font:.84em var(--mono);background:var(--site-accent-soft);color:#5a3fae;border-radius:6px;padding:.2em .45em}.md-m2 blockquote{background:var(--site-paper);border:1px solid var(--site-line);box-shadow:inset 3px 0 0 var(--site-accent);color:var(--site-ink);border-radius:14px;margin:1.6em 0;padding:18px 22px 18px 24px}.md-m2 blockquote p{margin:0}.md-m2 blockquote p+p{margin-top:.8em}.md-m2 hr{border:0;border-top:1px solid var(--site-line);margin:2.4em 0}.md-m2 table{border-collapse:collapse;width:100%;margin:1.6em 0;font-size:15px;display:block;overflow:auto}.md-m2 th{text-align:left;font:600 13px var(--sans);color:var(--site-ink);border-bottom:1px solid var(--site-line-strong);padding:0 14px 10px 0}.md-m2 td{border-bottom:1px solid var(--site-line);padding:10px 14px 10px 0}.md-m2 figure{margin:2em 0}.md-m2 img{border:1px solid var(--site-line);background:#fff;border-radius:14px;max-width:100%;height:auto;display:block}.md-m2 .prose-image-frame{box-shadow:0 0 0 1px var(--site-line);background:#fff;border-radius:14px;margin-inline:auto}.md-m2 .prose-image-frame img{border:0}.md-m2 figcaption{text-align:center;color:var(--site-muted);margin-top:10px;font-size:13px;line-height:1.6}.md-m2 .callout{background:var(--site-accent-soft);color:var(--site-ink);border-radius:12px;gap:12px;margin:1.6em 0;padding:14px 18px;display:flex}.md-m2 .callout .ico{flex:none}.md-m2 .code{border:1px solid var(--site-line);background:#fff;border-radius:14px;margin:1.6em 0;overflow:hidden;box-shadow:0 1px 2px #1d1c1a0a,0 14px 32px -24px #1d1c1a4d}.md-m2 .code-bar{border-bottom:1px solid var(--site-line);background:var(--site-paper);align-items:center;gap:10px;padding:8px 10px 8px 14px;display:flex}.md-m2 .code-lang{font:500 11px var(--mono);color:var(--site-accent);background:var(--site-accent-soft);border-radius:999px;padding:3px 9px}.md-m2 .code-lines{font:11.5px var(--mono);color:var(--site-muted);margin-right:auto}.md-m2 .code-copy{font:12px var(--sans);color:var(--site-body);border:1px solid var(--site-line);cursor:pointer;background:#fff;border-radius:6px;padding:3px 9px;transition:color .12s,border-color .12s}.md-m2 .code-copy:hover{color:var(--site-ink);border-color:var(--site-line-strong)}.md-m2 .code-body{display:flex}.md-m2 .code-gutter{text-align:right;white-space:pre;user-select:none;font:12.5px/23.5px var(--mono);color:#c9c5bc;flex:none;padding:16px 0 16px 16px}.md-m2 pre{min-width:0;font:13.5px/23.5px var(--mono);color:#2f2d29;background:0 0;flex:1;margin:0;padding:16px 18px 16px 16px;overflow:auto}.md-m2 pre code{font:inherit}.post-next{border-top:1px solid var(--site-line);grid-template-columns:1fr 1fr;gap:14px;margin-top:72px;padding-top:32px;display:grid}.post-next-card{border:1px solid var(--site-line);background:var(--site-paper);color:var(--site-ink);border-radius:14px;align-items:center;gap:14px;padding:12px;text-decoration:none;transition:border-color .15s;display:flex}.post-next-card:last-child{text-align:right;flex-direction:row-reverse}.post-next-card:hover{border-color:var(--site-line-strong)}.post-next-cover{border-radius:10px;flex:none;width:56px;height:56px;overflow:hidden}.post-next-cover img{object-fit:cover;width:100%;height:100%;display:block}.post-next-card small{color:var(--site-muted);margin-bottom:2px;font-size:12px;display:block}.post-next-card b{font:500 14.5px/1.5 var(--sans);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}@media (width<=900px){.post-hero-in{grid-template-columns:1fr;gap:0;min-height:0;padding-top:32px}.post-hero h1{font-size:31px}.post-desc{font-size:17px}.post-hero-character{justify-self:center;width:240px;margin:8px auto -28px}}@media (width<=640px){.post-body{padding-top:48px}.md-m2{font-size:16.5px}.md-m2 h2{font-size:23px}.post-next{grid-template-columns:1fr}.post-next-card:last-child{text-align:left;flex-direction:row}}
