.article-view{--reading-ink:#30372f;--reading-text:#444b42;--reading-muted:#737b6d;--reading-accent:#526c4d;--reading-line:#e0e3d9;--reading-fill:#eff1ea}.article-layout{width:100%;max-width:820px;margin:36px auto 64px}.article-layout.with-toc{grid-template-columns:minmax(0,1fr) 180px;align-items:start;gap:44px;max-width:1080px;display:grid}.article-page{background:var(--surface);min-width:0;padding:46px 52px 44px}.article-header{padding-bottom:36px}.article-header .post-category{margin-bottom:18px;font-size:12px}.article-header h1{color:var(--reading-ink);font-family:var(--serif);letter-spacing:-.045em;text-wrap:balance;margin:0;font-size:clamp(36px,4.5vw,52px);font-weight:600;line-height:1.3}.article-deck{color:var(--reading-muted);margin:19px 0 0;font-size:14px;line-height:1.9}.article-meta{color:var(--reading-muted);flex-wrap:wrap;align-items:center;gap:8px 15px;margin-top:22px;font-size:11px;line-height:1.8;display:flex}.article-meta time{font-family:var(--mono);font-size:10px}.article-meta a:hover{color:var(--reading-accent)}.article-body{color:var(--reading-text);font-family:var(--sans);overflow-wrap:anywhere;padding:0 0 28px;font-size:16px;line-height:1.95}.article-body>:first-child{margin-top:0}.article-body p{margin:0 0 1.4em}.article-body :is(h1,h2,h3,h4,h5,h6){color:var(--reading-ink);text-wrap:pretty;scroll-margin-top:32px;font-weight:600;line-height:1.5;position:relative}.article-body h1{font-family:var(--serif);margin:1.8em 0 .75em;font-size:34px}.article-body h2{font-family:var(--serif);letter-spacing:-.025em;margin:1.9em 0 .8em;font-size:29px}.article-body h3{letter-spacing:-.02em;margin:1.8em 0 .75em;font-size:21px}.article-body h4{margin:1.8em 0 .65em;font-size:17px}.article-body :is(h5,h6){margin:1.6em 0 .6em;font-size:15px}.article-body :is(h2,h3,h4)+:is(h3,h4,h5){margin-top:1em}.article-body strong{color:var(--reading-ink);font-weight:600}.article-body a{color:var(--reading-accent);text-underline-offset:4px;text-decoration:underline 1px #b4c1ac}.article-body a:hover{color:#344e30;text-decoration-color:currentColor}.article-body :is(ul,ol){margin:0 0 1.5em;padding-left:1.5em}.article-body li{margin:.45em 0;padding-left:.25em}.article-body li::marker{color:#829174;font-size:.85em}.article-body li>:is(ul,ol){margin-top:.45em;margin-bottom:.5em}.article-body li>p{margin-bottom:.55em}.article-body .contains-task-list{padding-left:0;list-style:none}.article-body .task-list-item input{accent-color:var(--reading-accent);margin-right:.65em}.article-body blockquote{color:#677160;font-family:var(--serif);border-left:2px solid #aebba4;margin:1.7em 0;padding:2px 0 2px 22px;font-size:17px;line-height:1.85}.article-body blockquote>:last-child{margin-bottom:0}.article-body blockquote blockquote{margin:1em 0}.article-body blockquote:has(>p:first-child>strong:only-child){background:var(--reading-fill);font-family:var(--sans);border:0;border-radius:5px;padding:18px 22px;font-size:14px;line-height:1.9}.article-body blockquote:has(>p:first-child>strong:only-child)>p:first-child{color:var(--reading-accent);letter-spacing:.04em;margin-bottom:7px;font-size:12px}.article-body blockquote:has(>p:first-child>strong:only-child)>p:first-child strong{color:inherit}.article-body :not(pre)>code{color:#476044;font-family:var(--mono);-webkit-box-decoration-break:clone;box-decoration-break:clone;background:#edf0e6;border-radius:3px;padding:.16em .38em;font-size:.84em}.article-body kbd{border:1px solid var(--reading-line);font-family:var(--mono);border-bottom-width:2px;border-radius:4px;padding:2px 6px;font-size:.8em}.article-body mark{color:inherit;background:#ece9c9}.article-body pre{border:1px solid var(--reading-line);max-width:100%;font-family:var(--mono);tab-size:2;scrollbar-width:thin;scrollbar-color:#c4cbbc transparent;border-radius:6px;margin:1.7em 0;padding:20px;font-size:12.5px;line-height:1.8;overflow-x:auto}.article-body pre.astro-code{background-color:#f5f6f1!important}.article-body pre code{width:max-content;min-width:100%;color:inherit;font-family:inherit;font-size:inherit;line-height:inherit;background:0 0;padding:0;display:block}.code-block{border:1px solid var(--reading-line);background:#f5f6f1;border-radius:6px;min-width:0;margin:1.7em 0;overflow:hidden}.code-block-toolbar{background:#edf0e7;justify-content:space-between;align-items:center;gap:18px;min-height:40px;padding:0 15px 0 20px;display:flex}.code-language{color:var(--reading-muted);font-family:var(--mono);letter-spacing:.07em;font-size:10px}.article-body .code-block pre{border:0;border-radius:0;margin:0}.code-copy-button{min-height:32px;color:var(--reading-muted);font-family:var(--sans);cursor:pointer;background:0 0;border:0;border-radius:3px;align-items:center;gap:5px;padding:0 5px;font-size:10px;display:inline-flex}.code-copy-button:hover,.code-copy-button[data-copied=true]{color:var(--reading-accent)}.heading-tools{opacity:0;font-family:var(--sans);vertical-align:middle;align-items:center;gap:3px;margin-left:10px;transition:opacity .14s;display:inline-flex}.article-body :is(h2,h3,h4):hover .heading-tools,.heading-tools:focus-within{opacity:1}.heading-anchor,.heading-copy-button{min-height:26px;color:var(--reading-muted);font-family:var(--sans);cursor:pointer;background:0 0;border:0;border-radius:3px;justify-content:center;align-items:center;padding:0 5px;font-size:10px;font-weight:400;line-height:1;display:inline-flex;text-decoration:none!important}.article-body .heading-anchor{color:#86947b;min-width:23px;font-family:var(--mono);font-size:15px}.heading-copy-button:hover,.heading-copy-button[data-copied=true]{color:var(--reading-accent)}.article-view :is(button,[tabindex="0"]):focus-visible{outline:2px solid var(--reading-accent);outline-offset:3px}.article-body img{border:0;border-radius:4px;width:auto;max-width:100%;height:auto;margin:2em auto;display:block}.article-body figure{margin:2em 0}.article-body figure img{margin:0 auto}.article-body figcaption{color:var(--reading-muted);text-align:center;margin-top:12px;font-size:12px}.article-body table{border-collapse:collapse;width:100%;max-width:100%;margin:1.8em 0;font-size:13px;line-height:1.75;display:block;overflow-x:auto}.table-scroll{border:1px solid var(--reading-line);scrollbar-width:thin;scrollbar-color:#c4cbbc transparent;border-radius:6px;margin:1.8em 0;overflow-x:auto}.article-body .table-scroll table{min-width:520px;margin:0;display:table}.article-body th,.article-body td{text-align:left;vertical-align:top;border:0;padding:11px 15px}.article-body th{color:#53624b;white-space:nowrap;background:#edf0e7;font-size:12px;font-weight:600}.article-body td{border-top:1px solid #e7e9e2}.article-body tbody tr:nth-child(2n){background:#f4f5ef}.article-body tbody tr:hover{background:#eef1e7}.article-body hr{border:0;border-top:2px solid #c2cbb8;width:48px;margin:44px auto}.article-body .footnotes{border-top:1px solid var(--reading-line);color:var(--reading-muted);margin-top:40px;padding-top:22px;font-size:12px}.article-body sup{font-size:.72em}.article-body details{border:1px solid var(--reading-line);border-radius:5px;margin:1.6em 0;padding:15px 19px}.article-body summary{color:var(--reading-ink);cursor:pointer;font-size:14px}.article-body details[open]>summary{margin-bottom:12px}.article-body details>:last-child{margin-bottom:0}.article-toc-desktop{scrollbar-width:thin;max-height:calc(100vh - 64px);padding-top:12px;position:sticky;top:32px;overflow-y:auto}.article-toc nav>p{color:var(--reading-muted);letter-spacing:.07em;margin:0 0 15px 12px;font-size:11px}.article-toc ol{margin:0;padding:0;list-style:none}.article-toc li{margin:0}.article-toc li+li{margin-top:3px}.article-toc a{color:var(--reading-muted);border-left:2px solid #0000;padding:6px 10px;font-size:12px;line-height:1.6;display:block}.article-toc li.depth-3 a{padding-left:23px;font-size:11px}.article-toc a:hover{color:var(--reading-accent)}.article-toc a[aria-current=location]{color:#4d6646;background:#e9eee1;border-left-color:#819575;border-radius:0 3px 3px 0}.article-toc-mobile{display:none}.article-end{border-top:1px solid var(--reading-line);color:var(--reading-muted);justify-content:space-between;gap:24px;padding-top:22px;font-size:11px;display:flex}.article-end a{color:var(--reading-accent)}.related{max-width:820px;margin:0 auto;padding:0 0 64px}@media (width<=960px){.article-layout.with-toc{max-width:820px;display:block}.article-page{padding:40px 44px}.article-header{padding-bottom:24px}.article-toc-desktop{display:none}.article-toc-mobile{border:1px solid var(--reading-line);border-radius:5px;margin:0 0 28px;padding:0 14px;display:block}.article-toc-mobile summary{min-height:44px;color:var(--reading-muted);cursor:pointer;justify-content:space-between;align-items:center;gap:20px;font-size:12px;list-style:none;display:flex}.article-toc-mobile summary::-webkit-details-marker{display:none}.article-toc-mobile nav{padding:0 0 12px}.article-toc-chevron{transition:transform .15s}.article-toc-mobile[open] .article-toc-chevron{transform:rotate(180deg)}}@media (width<=600px){.article-view .page{width:calc(100% - 40px)}.article-view .site-header{flex-direction:row;align-items:center;gap:16px;padding:21px 0}.article-view .brand{white-space:nowrap;gap:9px;font-size:18px}.article-view .brand-mark{width:31px;height:36px;font-size:27px}.article-view .brand-caption{font-size:6px}.article-view .site-nav{flex-wrap:nowrap;gap:18px;font-size:11px}.article-layout,.article-layout.with-toc{margin:24px auto 40px}.article-page{background:0 0;padding:20px 0 30px}.article-header h1{font-size:clamp(30px,8.5vw,37px)}.article-deck{font-size:13px}.article-body{font-size:15px;line-height:1.95}.article-body h2{font-size:26px}.article-body h3{font-size:20px}.article-body h4{font-size:16px}.article-body blockquote{padding-left:16px;font-size:16px}.article-body blockquote:has(>p:first-child>strong:only-child){padding:16px 18px;font-size:13px}.article-body pre{padding:16px;font-size:12px}.code-block-toolbar{padding-left:16px;padding-right:11px}.heading-tools{opacity:1}.heading-copy-button{min-height:28px}.article-end{flex-direction:column;gap:13px}}@media (width<=359px){.article-view .site-nav{gap:12px}.article-view .brand{font-size:17px}.article-view .page{width:calc(100% - 32px)}}@media (prefers-reduced-motion:reduce){.heading-tools,.article-toc-chevron{transition:none}}
