@font-face{font-family:"CMU Serif";font-style:normal;font-weight:400 700;font-display:swap;src:local("Georgia"),local("Times New Roman"),local("serif");unicode-range:U+007E}@font-face{font-family:"CMU Serif";font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/cmu-serif-500-roman.woff2) format("woff2")}@font-face{font-family:"CMU Serif";font-style:italic;font-weight:500;font-display:swap;src:url(/fonts/cmu-serif-500-italic.woff2) format("woff2")}@font-face{font-family:"CMU Serif";font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/cmu-serif-700-roman.woff2) format("woff2")}@font-face{font-family:"CMU Serif";font-style:italic;font-weight:700;font-display:swap;src:url(/fonts/cmu-serif-700-italic.woff2) format("woff2")}.prose *{margin:0;padding:0}.prose{font-size:1.0625rem}.prose{margin-bottom:8rem;max-width:100%;overflow-x:hidden}.prose .title{margin-bottom:1.5em}.prose .title h1{margin:0 0 .25rem}.prose h1{font-size:1.85rem;font-weight:var(--font-weight-bold);line-height:1.15;margin:1.5em 0 .4em;letter-spacing:-.03em;font-stretch:condensed}.prose h1:first-child{margin-top:0}.prose h2{font-size:1.5rem;font-weight:var(--font-weight-bold);line-height:1.2;margin:1.25em 0 .35em;padding-bottom:.3em;border-bottom:2px solid var(--border);letter-spacing:-.025em;font-stretch:condensed}.prose h3{font-size:1.25rem;font-weight:var(--font-weight-bold);line-height:1.25;margin:1em 0 .3em;padding-left:.5em;border-left:3px solid var(--text-tertiary);letter-spacing:-.02em}.prose h4{font-size:1.125rem;font-weight:var(--font-weight-bold);line-height:1.3;margin:.85em 0 .25em;color:var(--text-secondary);letter-spacing:-.02em}.prose h5{font-size:1.0625rem;font-weight:var(--font-weight-bold);line-height:1.35;margin:.75em 0 .25em;font-style:italic;letter-spacing:-.015em}.prose strong,.prose b{font-weight:var(--font-weight-bold)}.prose em{font-family:var(--serif);font-style:italic;letter-spacing:0}.prose a{color:var(--primary);text-decoration:underline;text-decoration-color:var(--text-tertiary);transition:text-decoration-color .2s ease-out}.prose a:hover{color:var(--primary);text-decoration-color:var(--text-primary)}.prose p{line-height:1.55;margin:.5em 0}.prose table{table-layout:fixed;width:100%;border-collapse:separate;border-spacing:0;margin:1.25em 0;font-size:.95em;border:1px solid var(--border);border-radius:6px;overflow:hidden}.prose th,.prose td{border:none;border-right:1px solid var(--border);border-bottom:1px solid var(--border);padding:.4em .75em;text-align:left}.prose th:last-child,.prose td:last-child{border-right:none}.prose tr:last-child td{border-bottom:none}.prose th{background:var(--astro-code-background);font-weight:var(--font-weight-bold)}.prose img{width:100%;height:auto;display:block;margin:1.25em 0;box-sizing:border-box;background:linear-gradient(90deg,var(--code-bg) 25%,var(--border) 50%,var(--code-bg) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite;min-height:200px;color:transparent;overflow:hidden;object-fit:cover}.prose img[src]{background:none;animation:none;color:inherit}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.prose p:has(>img){display:grid;grid-template-columns:repeat(2,1fr);gap:1rem;margin:2em 0}.prose p:has(>img) img{margin:0!important;width:100%;height:100%;object-fit:cover;position:static!important}.prose p:has(>img) img:after{display:none!important}@media(min-width:768px){.prose p:has(>img){grid-template-columns:repeat(4,1fr)}}.img-placeholder{background:var(--code-bg);display:block}.prose img[loading=lazy]{opacity:0;animation:fadeIn .3s ease-out forwards}.prose figure{margin-bottom:2em;text-align:center}.prose figure img{margin-bottom:1em}.prose figure figcaption{color:var(--text-secondary);font-size:var(--font-size-s);text-align:center}.prose p>img{position:relative;margin-bottom:2em}.prose p>img:after{content:attr(alt);display:block;position:absolute;left:0;width:100%;text-align:center;color:var(--text-secondary);font-size:var(--font-size-s);margin-top:.75em}.prose .img-caption{display:block;text-align:center;color:var(--text-secondary);font-size:var(--font-size-s);margin-bottom:2em}.prose code{padding:2.5px 3.5px;border-radius:5px;background-color:var(--code-bg);border:.5px solid var(--border);font-family:var(--mono);font-size:.9em;font-feature-settings:"liga" 0,"calt" 0;-webkit-font-feature-settings:"liga" 0,"calt" 0}.prose blockquote{background:var(--code-bg);border-left:3px solid var(--text-tertiary);margin:1em 0;padding:.75em 1em;border-radius:6px;text-align:left}.prose blockquote p{margin:.35em 0}.prose blockquote p:first-child{margin-top:0}.prose blockquote p:last-child{margin-bottom:0}.prose blockquote[data-callout=info],.prose blockquote[data-callout=note]{background:#3b82f61a;border-left-color:#3b82f6}.prose blockquote[data-callout=warning],.prose blockquote[data-callout=caution]{background:#fbbf241a;border-left-color:#fbbf24}.prose blockquote[data-callout=success],.prose blockquote[data-callout=tip]{background:#22c55e1a;border-left-color:#22c55e}.prose blockquote[data-callout=error],.prose blockquote[data-callout=danger]{background:#ef44441a;border-left-color:#ef4444}.prose blockquote[data-callout=question]{background:#a855f71a;border-left-color:#a855f7}.prose blockquote[data-callout=quote]{background:#64748b1a;border-left-color:#64748b}.prose blockquote cite{display:inline-block;margin-top:.5em}.prose ul{list-style-type:none;padding-left:0;margin-left:1rem;margin-bottom:.5em;line-height:1.5}.prose ul ul{margin-left:.625rem;margin-top:.5em;margin-bottom:.5em}.prose ul li{position:relative;padding-left:.5rem;margin-bottom:.25em}.prose ul li:last-child{margin-bottom:0}.prose ul li>ul{margin-top:.5em;margin-bottom:.5em}.prose ul li:before{content:"•";position:absolute;left:-1.25rem;top:-.05em;width:1.5rem;text-align:center;color:var(--text-tertiary)}.prose ol{list-style-position:outside;padding-left:0;margin-left:1.25rem;margin-bottom:.5em;counter-reset:item}.prose ol li{display:block;position:relative;padding-left:.25rem;margin-bottom:.25em}.prose ol li:last-child{margin-bottom:0}.prose ol li:before{content:counter(item) ".";counter-increment:item;position:absolute;left:-1.15rem;width:1.5rem;text-align:left;color:var(--text-secondary);opacity:.75;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1,"zero" 0,"cv01" 1,"cv02" 1,"calt" 1,"ss03" 1,"liga" 1,"ordn" 1}.prose ul.contains-task-list{list-style:none;margin-left:0;white-space:nowrap}.prose ul.contains-task-list li:before{content:none}.prose ul.contains-task-list li.task-list-item{padding-left:.125em;margin-bottom:.5em}.prose ul.contains-task-list li.task-list-item:last-child{margin-bottom:0}.prose ul.contains-task-list li.task-list-item input[type=checkbox]{margin-right:.5em;position:relative;top:.175em;width:1em;height:1em;border:1.35px solid var(--text-tertiary);border-radius:4px;background:transparent;appearance:none;-webkit-appearance:none}.prose ul.contains-task-list li.task-list-item input[type=checkbox]:checked{position:relative;background:var(--code-bg);font-family:var(--sans);border:1.35px solid var(--text-tertiary);opacity:.75}.prose ul.contains-task-list li.task-list-item input[type=checkbox]:checked:after{content:"✓";position:absolute;top:50%;left:50%;transform:translate(-45%,-55%);font-family:var(--sans);font-size:10px;font-weight:650;color:var(--text-primary);opacity:.55}.prose ul.contains-task-list li.task-list-item input[type=checkbox]+*{display:inline;margin-left:0;line-height:1.75;white-space:nowrap}.prose sup,.prose sub,.prose sup a{margin:0 .125em;font-size:.875em;line-height:1}.prose hr{margin:2em 0;height:1px;border:none;background:linear-gradient(to right,transparent,var(--text-tertiary) 20%,var(--text-tertiary) 80%,transparent);opacity:.4}.prose kbd{font-family:var(--mono);font-size:var(--font-size-s);border:1px solid var(--text-tertiary);padding:1px 4px;border-radius:5px;min-width:1.75em;display:inline-block;text-align:center}.prose mark{background-color:var(--mark);color:var(--text-primary);padding:3px 1px}.prose .footnotes{margin-top:2.5rem;padding-top:1.25rem;position:relative}.prose .footnotes:before{content:"";position:absolute;top:0;left:0;width:4rem;height:1px;background-color:var(--border)}.prose cite{font-style:normal}.prose [data-footnote-backref]{position:relative;font-family:var(--mono);font-size:var(--font-size-l);top:-.05em}.prose [data-footnote-ref]{font-size:1em;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1,"zero" 0,"cv01" 1,"cv02" 1,"calt" 1,"ss03" 1,"liga" 1,"ordn" 1}.prose [data-footnote-ref],.prose [data-footnote-backref]{color:var(--text-secondary);opacity:.875;text-decoration:none;transition:color .2s ease-out;padding-right:.5em}.prose [data-footnote-ref]:hover,.prose [data-footnote-backref]:hover{color:var(--text-primary)}.prose pre{border-radius:6px;padding:1em 1.25em;margin:1.25em 0;overflow-x:auto}@media(max-width:768px){.prose pre{padding:1em 1.25em}}.prose pre>code{font-family:var(--mono);font-size:.65em;font-feature-settings:"liga" 0,"calt" 0;display:block;white-space:pre;word-break:normal;overflow-wrap:normal;padding:0;margin:0;background:none;border:none;line-height:1.5;border-radius:0}.prose pre>code,.prose pre>code *{font-size:.875rem}.astro-code,.astro-code span{color:var(--shiki-light, inherit)}html.dark .astro-code,html.dark .astro-code span{color:var(--shiki-dark, inherit)!important}html.light .astro-code{background-color:#f6f8fa!important}html.dark .astro-code{background-color:#24292e!important}.katex-mathml{display:none!important}.katex-display{text-align:center;margin:1em 0}.katex *{box-sizing:content-box}.katex,.katex *{color:inherit}.katex .base,.katex .strut,.katex .mathit,.katex .mathrm,.katex .mathbf,.katex .mathsf,.katex .mathtt{line-height:initial;vertical-align:baseline}@media(prefers-color-scheme:dark){.katex,.katex *{color:inherit}}.reading-time{color:var(--text-secondary);letter-spacing:-.025em}.reading-time .separator{margin:0 .25em}.prose iframe{width:100%;aspect-ratio:16/9;border:none;border-radius:6px;margin:.25em 0 0}.prose iframe[src*="spotify.com"]{aspect-ratio:auto}:root{--content-width: 25rem;--sans: "CMU Serif", serif;--serif: "CMU Serif", serif;--mono: "CMU Typewriter Text", monospace;--font-size-xs: 1rem;--font-size-s: 1.125rem;--font-size-m: 1.25rem;--font-size-l: 1.625rem;--font-weight-light: 350;--font-weight-regular: 400;--font-weight-bold: 700;--spacing-s: -.08em;--spacing-m: -.02em;--bg: #ffffff;--text-primary: rgba(0, 0, 0, .85);--text-secondary: rgba(0, 0, 0, .4);--text-tertiary: rgba(0, 0, 0, .24);--border: rgba(0, 0, 0, .1);--selection: rgba(0, 0, 0, .08);--code-bg: rgba(0, 0, 0, .04);--mark: #f3ffc4;--astro-code-foreground: rgba(0, 0, 0, .85);--astro-code-background: rgba(0, 0, 0, .03);--astro-code-token-constant: rgba(0, 0, 0, .85);--astro-code-token-string: rgba(0, 0, 0, .85);--astro-code-token-comment: rgba(0, 0, 0, .35);--astro-code-token-keyword: rgba(0, 0, 0, .55);--astro-code-token-parameter: rgba(0, 0, 0, .85);--astro-code-token-function: rgba(0, 0, 0, .85);--astro-code-token-string-expression: rgba(0, 0, 0, .55);--astro-code-token-punctuation: rgba(0, 0, 0, .55);--astro-code-token-link: rgba(0, 0, 0, .55)}html.light{--bg: #ffffff;--text-primary: rgba(0, 0, 0, .85);--text-secondary: rgba(0, 0, 0, .4);--text-tertiary: rgba(0, 0, 0, .24);--border: rgba(0, 0, 0, .1);--selection: rgba(0, 0, 0, .08);--code-bg: rgba(0, 0, 0, .04);--mark: #f3ffc4;--astro-code-foreground: rgba(0, 0, 0, .85);--astro-code-background: rgba(0, 0, 0, .03);--astro-code-token-constant: rgba(0, 0, 0, .85);--astro-code-token-string: rgba(0, 0, 0, .85);--astro-code-token-comment: rgba(0, 0, 0, .35);--astro-code-token-keyword: rgba(0, 0, 0, .5);--astro-code-token-parameter: rgba(0, 0, 0, .85);--astro-code-token-function: rgba(0, 0, 0, .85);--astro-code-token-string-expression: rgba(0, 0, 0, .55);--astro-code-token-punctuation: rgba(0, 0, 0, .55);--astro-code-token-link: rgba(0, 0, 0, .55)}html.dark{--bg: #0d1117;--text-primary: rgba(255, 255, 255, .9);--text-secondary: rgba(255, 255, 255, .4);--text-tertiary: rgba(255, 255, 255, .24);--border: rgba(255, 255, 255, .1);--selection: rgba(255, 255, 255, .08);--code-bg: rgba(255, 255, 255, .04);--mark: #545b37;--astro-code-foreground: rgba(255, 255, 255, .9);--astro-code-background: rgba(255, 255, 255, .03);--astro-code-token-constant: rgba(255, 255, 255, .9);--astro-code-token-string: rgba(255, 255, 255, .9);--astro-code-token-comment: rgba(255, 255, 255, .35);--astro-code-token-keyword: rgba(255, 255, 255, .55);--astro-code-token-parameter: rgba(255, 255, 255, .9);--astro-code-token-function: rgba(255, 255, 255, .9);--astro-code-token-string-expression: rgba(255, 255, 255, .55);--astro-code-token-punctuation: rgba(255, 255, 255, .55);--astro-code-token-link: rgba(255, 255, 255, .55)}html{background-color:var(--bg);scrollbar-gutter:stable;overscroll-behavior:none;overflow:hidden;height:100%;overflow-x:clip}body{font-family:var(--sans);font-size:1.0625rem;text-rendering:optimizeLegibility;line-height:1.5;color:var(--text-primary);font-display:swap;word-wrap:break-word;overflow-wrap:break-word;margin:0;height:100%;display:flex;flex-direction:column;box-sizing:border-box;letter-spacing:-.025em;padding:0;overscroll-behavior:none;transition:background-color .2s ease-out;overflow:hidden;width:100%}html[data-font=sans] body,html[data-font=sans] .prose,html[data-font=sans] .blog-tree,html[data-font=sans] *{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,sans-serif!important;letter-spacing:-.02em}html[data-font=sans] .katex,html[data-font=sans] .katex *,html[data-font=sans] .math,html[data-font=sans] .math-display,html[data-font=sans] .math-inline{font-family:inherit!important;letter-spacing:normal!important}html[data-font=sans] .katex .mord,html[data-font=sans] .katex .mop,html[data-font=sans] .katex .mbin,html[data-font=sans] .katex .mrel,html[data-font=sans] .katex .mopen,html[data-font=sans] .katex .mclose,html[data-font=sans] .katex .mpunct,html[data-font=sans] .katex .minner{font-family:inherit!important}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}::view-transition-old(root){animation:.15s ease-out both fadeOut}::view-transition-new(root){animation:.15s ease-out both fadeIn}@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;transition-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}::view-transition-old(root),::view-transition-new(root){animation:none!important}}::selection{background-color:var(--selection)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-tertiary)}*{scrollbar-width:thin;scrollbar-color:var(--border) transparent}:focus{outline:2px solid var(--text-tertiary);outline-offset:2px}:focus:not(:focus-visible){outline:none}:focus-visible{outline:2px solid var(--text-tertiary);outline-offset:2px}body[data-width]{max-width:var(--content-width)}body[data-centered=true]{margin:0 auto}main{flex:1;display:flex;flex-direction:column;box-sizing:border-box}.date{margin:0;font-weight:var(--font-weight-light);color:var(--text-secondary);opacity:.75;flex-shrink:0;letter-spacing:var(--spacing-s);font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1,"zero" 0,"cv01" 1,"cv02" 1,"calt" 1,"ss03" 1,"ordn" 1}.date .month{letter-spacing:var(--spacing-m)}.sr-only{border:0;padding:0;margin:0;position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap}
