.prose{font-family:var(--font-serif), Georgia, serif;color:var(--muted);font-size:17px;line-height:1.72}.prose h2,.prose h3,.prose h4{font-family:var(--font-sans), system-ui, sans-serif}.prose>*+*{margin-top:1.15em}.prose h2,.prose h3,.prose h4{color:var(--ink);letter-spacing:-.01em;font-weight:600;line-height:1.3}.prose h2{margin-top:2.2em;font-size:1.4em}.prose h3{margin-top:1.8em;font-size:1.15em}.prose a{color:var(--link-web);border-bottom:1px solid var(--line);text-decoration:none;transition:border-color .2s,opacity .2s}.prose a[href^=\/]{color:var(--link-blog)}.prose a[href^=mailto\:]{color:var(--link-email)}.prose a[href*=github\.com]{color:var(--link-github)}.prose a[href*=pypi\.org]{color:var(--link-pypi)}.prose a[href*="archive.shivmehta.com"]{color:var(--link-archive)}.prose a:hover{opacity:.75;border-color:currentColor}.prose strong{color:var(--ink);font-weight:600}.prose ul,.prose ol{padding-left:1.3em}.prose ul{list-style:none}.prose ul>li{position:relative}.prose ul>li:before{content:"";background:var(--line);border-radius:9999px;width:5px;height:5px;position:absolute;top:.72em;left:-1.1em}.prose ol{list-style:decimal}.prose li+li{margin-top:.4em}.prose table{border-collapse:collapse;width:auto;margin:1.6em 0;font-size:14px}.prose thead th{border-bottom:1px solid var(--ink);color:var(--ink);font-weight:600}.prose th,.prose td{text-align:left;border-bottom:1px solid var(--line);padding:.45em 1.6em .45em 0}.prose tbody tr:last-child td{border-bottom:0}.prose img{border:1px solid var(--line);border-radius:8px;max-width:100%;height:auto;margin:1.6em auto .4em;display:block}.prose p:has(>img)+p>em{color:var(--faint);font-size:.86em}.prose blockquote{border-left:2px solid var(--accent);color:var(--faint);padding-left:1em;font-style:italic}.prose hr{border:0;border-top:1px solid var(--line);margin:2.5em 0}.prose :not(pre)>code{font-family:var(--font-mono), monospace;background:color-mix(in srgb, var(--line) 55%, transparent);color:var(--ink);border-radius:4px;padding:.15em .4em;font-size:.86em}.prose pre{border:1px solid var(--line);background:color-mix(in srgb, var(--line) 22%, var(--paper));border-radius:8px;padding:1em 1.1em;font-size:13.5px;line-height:1.6;overflow-x:auto}.prose pre code{font-family:var(--font-mono), monospace;display:grid}.prose [data-rehype-pretty-code-figure]{margin:1.5em 0}.prose pre code span{color:var(--shiki-light)}.dark .prose pre code span{color:var(--shiki-dark)}.prose .katex-display{padding:.3em 0;overflow:auto hidden}
