:root{--nav-offset:72px;--blog-maxw:880px;--blog-measure:66ch;--post-code-size:13px}.blog-hero,.post-hero{width:100%;max-width:var(--blog-maxw);margin:0 auto;padding:calc(var(--nav-offset) + clamp(40px,7vh,68px)) var(--gutter) 0}.blog-title{font-family:var(--sans);font-weight:500;font-size:clamp(30px,3.8vw,48px);line-height:1.15;letter-spacing:-.02em;margin:0;text-wrap:balance}.blog-list{width:100%;max-width:var(--blog-maxw);margin:0 auto;padding:clamp(24px,3.5vh,36px) var(--gutter) clamp(80px,12vh,110px);display:grid}.blog-card{display:grid;grid-gap:8px;gap:8px;padding:clamp(22px,3vh,30px) 0;border-bottom:1px solid var(--line-strong);color:inherit;transition:border-color .25s var(--ease)}.blog-card:hover{border-bottom-color:var(--ink)}.blog-card-date{font-size:14px;line-height:1.5;color:var(--muted)}.blog-card-title{margin:0;font-family:var(--sans);font-weight:500;font-size:clamp(20px,2vw,22px);line-height:1.3;letter-spacing:-.01em;color:var(--text-primary);text-wrap:balance}.blog-card:hover .blog-card-title{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;-webkit-text-decoration-color:var(--border-strong);text-decoration-color:var(--border-strong)}.blog-card-desc{margin:0;max-width:60ch;font-size:15.5px;line-height:1.6;color:var(--ink-soft);text-wrap:pretty}.blog-empty{padding:clamp(30px,5vh,44px) 0;font-size:16px;line-height:1.6}.blog-empty,.post-meta{margin:0;color:var(--muted)}.post-meta{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase}.post-meta>span:before{content:"·";color:var(--ink-300);margin-inline:10px;font-weight:700}.post-title{font-family:var(--sans);font-weight:500;font-size:clamp(30px,3.8vw,48px);line-height:1.15;letter-spacing:-.02em;margin:18px 0 0;text-wrap:balance}.post{width:100%;max-width:var(--blog-maxw);margin:0 auto;padding:clamp(30px,4vh,40px) var(--gutter) clamp(80px,12vh,110px)}.post-body{font-size:16px;line-height:1.65;color:var(--ink-soft);text-wrap:pretty}.post-body :is(p,ul,ol,dl,blockquote,figcaption,.footnotes){max-width:var(--blog-measure)}.post-body>:first-child{margin-top:0}.post-body>:last-child{margin-bottom:0}.post-body p{margin:0 0 1.3em}.post-body em{color:var(--ink)}.post-body :is(strong,b){color:var(--ink);font-weight:500}.post-body a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;-webkit-text-decoration-color:var(--sky-300);text-decoration-color:var(--sky-300);transition:color .2s var(--ease),-webkit-text-decoration-color .2s var(--ease);transition:color .2s var(--ease),text-decoration-color .2s var(--ease);transition:color .2s var(--ease),text-decoration-color .2s var(--ease),-webkit-text-decoration-color .2s var(--ease)}.post-body a:hover{color:var(--accent-hover);-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}.post-body :is(h2,h3,h4){font-family:var(--sans);font-weight:500;color:var(--ink);text-wrap:balance}.post-body h2{font-size:clamp(24px,2.4vw,28px);line-height:1.3;letter-spacing:-.02em;margin:2.2em 0 .7em}.post-body h3{font-size:20px;line-height:1.3;letter-spacing:-.01em;margin:1.9em 0 .6em}.post-body h4{font-family:var(--mono);font-size:12px;line-height:1.5;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);margin:1.8em 0 .6em}.post-body [id]{scroll-margin-top:calc(var(--nav-offset) + 24px)}.post-body :is(h2,h3,h4)>a[href^="#"]{color:var(--text-muted);font-weight:400;text-decoration:none;margin-left:.4em;opacity:0;transition:opacity .2s var(--ease),color .2s var(--ease)}.post-body :is(h2,h3,h4)>a[href^="#"] .icon-link{display:none}.post-body :is(h2,h3,h4)>a[href^="#"]:after{content:"#"}.post-body :is(h2,h3,h4):hover>a[href^="#"],.post-body :is(h2,h3,h4)>a[href^="#"]:focus-visible{opacity:1}.post-body :is(h2,h3,h4)>a[href^="#"]:hover{color:var(--ink)}.post-body :is(ul,ol){margin:0 0 1.3em;padding:0;list-style:none}.post-body li{position:relative;padding-left:26px;margin-bottom:.5em}.post-body li:last-child{margin-bottom:0}.post-body li>:is(ul,ol){margin:.5em 0 0}.post-body li>p{margin:0 0 .5em}.post-body li>p:last-child{margin-bottom:0}.post-body ul>li:before{content:"";position:absolute;left:2px;top:.72em;width:10px;height:1.5px;background:var(--border-strong)}.post-body ul ul>li:before{width:6px;background:var(--border-default)}.post-body ol{counter-reset:post-item}.post-body ol>li{counter-increment:post-item}.post-body ol>li:before{content:counter(post-item) ".";position:absolute;left:0;top:0;font-family:var(--mono);font-size:12px;line-height:2.2;color:var(--text-secondary);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.post-body li.task-list-item{padding-left:0}.post-body li.task-list-item:before{display:none}.post-body li.task-list-item input{margin-right:.5em}.post-body blockquote{margin:1.8em 0;padding:.1em 0 .1em 22px;border-left:2px solid var(--border-strong);color:var(--ink-soft);max-width:58ch}.post-body blockquote>:last-child{margin-bottom:0}.post-body :not(pre)>code{font-size:.86em;border:1px solid var(--border-subtle);border-radius:5px;padding:.12em .34em;color:var(--ink);overflow-wrap:break-word}.post-body :not(pre)>code,.post-body pre{font-family:var(--mono);background:var(--surface-subtle)}.post-body pre{margin:1.8em 0;padding:16px 18px;border:1px solid var(--border-subtle);border-radius:12px;max-width:none;overflow-x:auto;-webkit-overflow-scrolling:touch;font-size:var(--post-code-size);line-height:1.65;color:var(--ink-800)}.post-body pre>code{display:block;font:inherit;border:0;border-radius:0;padding:0;white-space:pre}.post-body .hljs,.post-body pre>code{color:inherit;background:none}.post-body :is(.hljs-comment,.hljs-quote){color:var(--text-secondary);font-style:italic}.post-body :is(.hljs-keyword,.hljs-selector-tag,.hljs-literal,.hljs-doctag){color:var(--ink-900);font-weight:500}.post-body :is(.hljs-string,.hljs-regexp,.hljs-template-tag){color:var(--ink-600)}.post-body :is(.hljs-number,.hljs-symbol,.hljs-bullet){color:var(--ink-600);font-weight:500}.post-body :is(.hljs-title,.hljs-section,.hljs-name){color:var(--ink-800);font-weight:500}.post-body :is(.hljs-type,.hljs-built_in,.hljs-attr,.hljs-attribute,.hljs-variable){color:var(--ink-700)}.post-body :is(.hljs-meta,.hljs-punctuation,.hljs-operator,.hljs-params){color:var(--ink-500)}.post-body table{display:block;width:max-content;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;border-collapse:collapse;margin:1.9em 0;font-size:15px;line-height:1.5}.post-body th{font-family:var(--mono);font-weight:500;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);text-align:left;white-space:nowrap;padding:0 18px 10px 0;border-bottom:2px solid var(--ink)}.post-body td{padding:11px 18px 11px 0;border-bottom:1px solid var(--line);color:var(--ink-soft);vertical-align:baseline}.post-body :is(th,td):last-child{padding-right:0}.post-body :is(th,td)[align=right]{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.post-body :is(th,td)[align=center]{text-align:center}.post-body figure{margin:2.2em 0;max-width:none}.post-body p:has(>img:only-child){max-width:none;margin-block:2.2em}.post-body img{display:block;max-width:100%;height:auto;border:1px solid var(--border-subtle);border-radius:12px;background:var(--surface-subtle);box-shadow:0 1px 2px rgba(22,24,30,.05)}.post-body figcaption{margin-top:12px;font-family:var(--mono);font-size:11.5px;line-height:1.5;letter-spacing:.02em;color:var(--muted)}.post-body sup{line-height:0;font-size:.72em}.post-body sup>a{text-decoration:none;padding-inline:.1em}.post-body sup>a:hover{text-decoration:underline}.post-body .footnotes{margin-top:3em;padding-top:1.4em;border-top:1px solid var(--line-strong);font-size:15px;line-height:1.6;color:var(--muted)}.post-body .footnotes>h2{font-family:var(--mono);font-weight:500;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary);margin:0 0 1em}.post-body .footnotes p{margin:0 0 .5em}.post-body a.data-footnote-backref{color:var(--text-muted);text-decoration:none;margin-left:.4em;transition:color .2s var(--ease)}.post-body a.data-footnote-backref:hover{color:var(--ink)}.post-body .footnotes li:target,.post-body sup>a:target{background:var(--surface-selected);border-radius:5px;box-shadow:0 0 0 4px var(--surface-selected)}.post-body .katex{color:var(--ink)}.post-body .katex-display{margin:1.8em 0;max-width:none;padding-block:.4em;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch}.post-body hr{border:0;border-top:1px solid var(--line-strong);margin:2.6em 0;max-width:none}.post-body mark{background:var(--surface-selected);color:var(--ink);padding:.06em .2em;border-radius:5px}.post-body abbr[title]{-webkit-text-decoration:underline dotted var(--border-strong);text-decoration:underline dotted var(--border-strong);text-underline-offset:3px;cursor:help}.post-body del{color:var(--muted);-webkit-text-decoration-color:var(--border-strong);text-decoration-color:var(--border-strong)}.post-body kbd{font-family:var(--mono);font-size:.82em;padding:.14em .42em;border:solid var(--border-default);border-width:1px 1px 2px;border-radius:5px;background:var(--surface-card);color:var(--ink)}.post .back{display:inline-flex;margin-top:clamp(48px,7vh,72px);background:var(--ink);color:var(--white);border-color:var(--ink)}.post .back:hover{background:var(--ink-700);border-color:var(--ink-700)}@media(max-width:760px){:root{--nav-offset:74px}}@media(prefers-reduced-motion:reduce){.blog-card,.post-body :is(h2,h3,h4)>a[href^="#"],.post-body a,.post-body a.data-footnote-backref{transition:none}}