:root{--max-width:1100px;--border-radius:12px;--font-mono:ui-monospace,Menlo,Monaco,"Cascadia Mono","Segoe UI Mono","Roboto Mono","Oxygen Mono","Ubuntu Monospace","Source Code Pro","Fira Mono","Droid Sans Mono","Courier New",monospace;--foreground-rgb:0,0,0;--background-start-rgb:214,219,220;--background-end-rgb:255,255,255;--primary-glow:conic-gradient(from 180deg at 50% 50%,#16abff33 0deg,#0885ff33 55deg,#54d6ff33 120deg,#0071ff33 160deg,transparent 360deg);--secondary-glow:radial-gradient(#fff,hsla(0,0%,100%,0));--tile-start-rgb:239,245,249;--tile-end-rgb:228,232,233;--tile-border:conic-gradient(#00000080,#00000040,#00000030,#00000020,#00000010,#00000010,#00000080);--callout-rgb:238,240,241;--callout-border-rgb:172,175,176;--card-rgb:180,185,188;--card-border-rgb:131,134,135;--text-color:#4f4f4f}@media (prefers-color-scheme:dark){:root{--foreground-rgb:255,255,255;--background-start-rgb:0,0,0;--background-end-rgb:0,0,0;--primary-glow:radial-gradient(rgba(1,65,255,.4),rgba(1,65,255,0));--secondary-glow:linear-gradient(to bottom right,rgba(1,65,255,0),rgba(1,65,255,0),rgba(1,65,255,.3));--tile-start-rgb:2,13,46;--tile-end-rgb:2,5,19;--tile-border:conic-gradient(#ffffff80,#ffffff40,#ffffff30,#ffffff20,#ffffff10,#ffffff10,#ffffff80);--callout-rgb:20,20,20;--callout-border-rgb:108,108,108;--card-rgb:100,100,100;--card-border-rgb:200,200,200}}*{box-sizing:border-box;padding:0;margin:0}body,html{max-width:100vw;overflow-x:hidden}:root{--noodle-purple:#662d91}:root[data-mantine-color-scheme=dark]{--noodle-purple:#b68ad8}@media (prefers-color-scheme:dark){html{color-scheme:dark}:root:not([data-mantine-color-scheme=light]){--noodle-purple:#b68ad8}}body{color:rgb(var(--foreground-rgb))}a,a:active,a:hover,a:link,a:visited{color:var(--noodle-purple);text-decoration:none}p a:any-link{text-decoration:underline;text-underline-offset:2px}:root{--mantine-color-text:#4f4f4f;--mantine-color-body:#fff;--mantine-color-default:#fff;--mantine-color-default-hover:#f8f9fa}@media (prefers-color-scheme:dark){:root{--mantine-color-text:#e9ecef;--mantine-color-body:#1a1b1e;--mantine-color-default:#25262b;--mantine-color-default-hover:#2c2e33}}[data-mantine-color-scheme=dark]{--mantine-color-text:#e9ecef;--mantine-color-body:#1a1b1e;--mantine-color-default:#25262b;--mantine-color-default-hover:#2c2e33}.mantine-Checkbox-label,.mantine-Combobox-label,.mantine-Combobox-option,.mantine-DateInput-label,.mantine-InputBase-label,.mantine-Modal-body,.mantine-Modal-title,.mantine-NavLink-label,.mantine-NavLink-root,.mantine-NumberInput-label,.mantine-Select-label,.mantine-Select-option,.mantine-Switch-description,.mantine-Switch-label,.mantine-Table-td,.mantine-Table-th,.mantine-Tabs-tab,.mantine-Tabs-tabLabel,.mantine-TagsInput-label,.mantine-TagsInput-option,.mantine-TagsInput-pill,.mantine-TextInput-label,.mantine-Textarea-label{color:var(--mantine-color-text)!important}.mantine-Combobox-dropdown,.mantine-Select-dropdown,.mantine-TagsInput-dropdown{background-color:var(--mantine-color-body)!important}.mantine-Select-input,.mantine-TagsInput-input{color:var(--mantine-color-text)!important}.mantine-Tabs-tab[data-active]{color:var(--mantine-primary-color-filled)!important}.mantine-Button-root[data-variant=light],.mantine-Tabs-tab:not([data-active]){color:var(--mantine-color-text)!important}.mantine-Button-root[data-variant=subtle]{color:inherit}.mantine-Button-root[data-variant=filled]{color:#fff!important}.mantine-Button-root[data-variant=default]{color:var(--mantine-color-text)!important}.mantine-Button-root[data-variant=outline]{color:inherit}.mantine-Button-root[data-variant=outline] .mantine-Button-label{display:flex;align-items:center;line-height:1}.mantine-Button-root:not([data-variant]),.mantine-Button-root[data-loading=false]:not([data-variant]),.mantine-Button-root[data-loading=true]:not([data-variant]),.mantine-Modal-body .mantine-Button-root:not([data-variant=light]):not([data-variant=subtle]):not([data-variant=outline]),button[type=submit].mantine-Button-root{color:#fff!important}.mantine-Select-description,.mantine-Switch-description,.mantine-TextInput-description,.mantine-Textarea-description{color:var(--mantine-color-dimmed)!important}.mantine-Modal-title{color:var(--mantine-color-text)!important}.mantine-Modal-body *{color:inherit}.mantine-Select-input::placeholder,.mantine-TextInput-input::placeholder,.mantine-Textarea-input::placeholder{color:var(--mantine-color-dimmed)!important}.mantine-RichTextEditor-content,.mantine-RichTextEditor-root{color:#6c757d!important;border:none!important}.blog-editor-content.ProseMirror,.mantine-RichTextEditor-content .ProseMirror,.mantine-RichTextEditor-content .ProseMirror blockquote,.mantine-RichTextEditor-content .ProseMirror code,.mantine-RichTextEditor-content .ProseMirror h1,.mantine-RichTextEditor-content .ProseMirror h2,.mantine-RichTextEditor-content .ProseMirror h3,.mantine-RichTextEditor-content .ProseMirror h4,.mantine-RichTextEditor-content .ProseMirror h5,.mantine-RichTextEditor-content .ProseMirror h6,.mantine-RichTextEditor-content .ProseMirror li,.mantine-RichTextEditor-content .ProseMirror p,.mantine-RichTextEditor-content .ProseMirror pre{color:#6c757d!important}.blog-editor-content.ProseMirror *{color:inherit!important}.mantine-RichTextEditor-content .ProseMirror p.is-editor-empty:first-child:before{color:#adb5bd!important}@media (prefers-color-scheme:dark){.mantine-RichTextEditor-content .ProseMirror p.is-editor-empty:first-child:before{color:#6c757d!important}}[data-mantine-color-scheme=dark] .mantine-RichTextEditor-content .ProseMirror p.is-editor-empty:first-child:before{color:#6c757d!important}.slash-cmd-menu{background-color:var(--mantine-color-body)!important;border:1px solid var(--mantine-color-gray-3)!important}.slash-cmd-menu,.slash-cmd-menu .slash-cmd-item{color:var(--mantine-color-text)!important}.slash-cmd-menu .slash-cmd-item:hover{background-color:var(--mantine-color-gray-1)!important}.mantine-RichTextEditor-content{background-color:transparent!important}.ProseMirror.blog-editor-content{background-color:transparent!important;border:none!important;border-radius:0!important;padding:1rem!important}.mantine-RichTextEditor-control,.mantine-RichTextEditor-toolbar{border:none!important;background-color:transparent!important}.mantine-RichTextEditor-control:hover{background-color:var(--mantine-color-gray-1)!important}@media (prefers-color-scheme:dark){.ProseMirror.blog-editor-content,.mantine-RichTextEditor-content .ProseMirror{background-color:transparent!important;color:#9ca3af!important}.blog-editor-content.ProseMirror{color:#9ca3af!important}.blog-editor-content.ProseMirror *{color:inherit!important}.mantine-RichTextEditor-control:hover{background-color:var(--mantine-color-gray-8)!important}}[data-mantine-color-scheme=dark] .ProseMirror.blog-editor-content,[data-mantine-color-scheme=dark] .mantine-RichTextEditor-content .ProseMirror{background-color:transparent!important;color:#9ca3af!important}[data-mantine-color-scheme=dark] .blog-editor-content.ProseMirror{color:#9ca3af!important}[data-mantine-color-scheme=dark] .blog-editor-content.ProseMirror *{color:inherit!important}[data-mantine-color-scheme=dark] .mantine-RichTextEditor-control:hover{background-color:var(--mantine-color-gray-8)!important}.mantine-Breadcrumbs-root .mantine-Anchor-root,.mantine-Breadcrumbs-root .mantine-Text-root{color:var(--mantine-color-gray-6)!important}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.katex{font-size:1em}.katex-display{display:block;margin:1.5em 0;text-align:center}.katex-error{color:#c00!important;font-size:.9em;font-style:italic}.mantine-AppShell-navbar{z-index:100!important;border-right:1px solid var(--mantine-color-gray-3)}[data-mantine-color-scheme=dark] .mantine-AppShell-navbar{border-right:1px solid var(--mantine-color-dark-4)}.mantine-AppShell-navbar{transition:all .2s ease}.mantine-AppShell-navbar[data-collapsed=false]{display:block!important}.mantine-AppShell-navbar[data-collapsed=true]{display:none!important;width:0!important;overflow:hidden!important}.mantine-AppShell-main{transition:margin-left .2s ease}[data-mantine-color-scheme=dark] .mantine-Grid-root,[data-mantine-color-scheme=dark] .mantine-Group-root,[data-mantine-color-scheme=dark] .mantine-Paper-root,[data-mantine-color-scheme=dark] .mantine-Stack-root,[data-mantine-color-scheme=dark] .mantine-Text-root,[data-mantine-color-scheme=dark] .mantine-Title-root{color:var(--mantine-color-text)}[data-mantine-color-scheme=dark] .mantine-Paper-root{background-color:#25262b;border-color:#373a40}[data-mantine-color-scheme=dark] .mantine-Table-table{background-color:transparent}[data-mantine-color-scheme=dark] .mantine-Table-td,[data-mantine-color-scheme=dark] .mantine-Table-th{color:var(--mantine-color-text)!important;border-color:#373a40!important}[data-mantine-color-scheme=dark] .mantine-Badge-root:not([data-variant=filled]){color:var(--mantine-color-text)}[data-mantine-color-scheme=dark] .mantine-Button-root[data-variant=light]{background-color:#373a40;color:var(--mantine-color-text)!important}[data-mantine-color-scheme=dark] .mantine-Button-root[data-variant=light]:hover{background-color:#424549}[data-mantine-color-scheme=dark] .mantine-ActionIcon-root[data-variant=light]{background-color:#373a40;color:var(--mantine-color-text)!important}[data-mantine-color-scheme=dark] .mantine-ActionIcon-root[data-variant=light]:hover{background-color:#424549}[data-mantine-color-scheme=dark] .mantine-AppShell-header{background-color:#25262b;border-bottom:1px solid #373a40}[data-mantine-color-scheme=dark] .mantine-AppShell-navbar{background-color:#25262b;border-right:1px solid #373a40!important}[data-mantine-color-scheme=dark] .mantine-AppShell-main{background-color:var(--mantine-color-body)}.blog-post-body{color:var(--mantine-color-text)}.blog-post-body a{color:var(--noodle-purple);text-decoration:underline;text-underline-offset:2px}.blog-post-body h1,.blog-post-body h2,.blog-post-body h3,.blog-post-body h4,.blog-post-body h5,.blog-post-body h6{font-weight:700;line-height:1.25;color:var(--mantine-color-text);margin-top:1.4em;margin-bottom:.4em}.blog-post-body h1{font-size:2.25rem;line-height:1.2;margin-top:.8em}.blog-post-body h2{font-size:1.75rem}.blog-post-body h3{font-size:1.375rem}.blog-post-body h4{font-size:1.2rem}.blog-post-body h5{font-size:1.05rem}.blog-post-body h5,.blog-post-body h6{text-transform:uppercase;letter-spacing:.04em}.blog-post-body h6{font-size:.95rem;color:var(--mantine-color-dimmed)}.blog-post-body p{margin:0 0 1em}.blog-post-body p:empty{min-height:1.8em}.blog-post-body ol,.blog-post-body ul{padding-left:2.5em;margin-left:0}.blog-post-body li{margin:.25em 0}.blog-post-body li>p{margin:0}.blog-post-body figure{margin:1.25em auto;max-width:100%;text-align:center}.blog-post-body img{display:block;margin:1em auto;max-width:100%;height:auto;border-radius:8px}.blog-post-body figure img{margin:0 auto}.blog-post-body figcaption{display:block;margin-top:.5em;font-size:.8125rem;line-height:1.45;color:var(--mantine-color-dimmed);font-style:italic;text-align:center;max-width:36em;margin-left:auto;margin-right:auto}.blog-post-body pre{background:var(--mantine-color-default-hover);border-radius:6px;padding:.75em 1em;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-size:.875rem;line-height:1.5;overflow-x:auto;color:var(--mantine-color-text)}.blog-post-body pre code{background:transparent;padding:0;color:inherit;font-family:inherit;font-size:inherit}.blog-post-body code{background:var(--mantine-color-default-hover);border-radius:4px;padding:.1em .4em;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,monospace;font-size:.9em}.blog-post-body pre .hljs-comment,.blog-post-body pre .hljs-quote{color:#a0a1a7;font-style:italic}.blog-post-body pre .hljs-doctag,.blog-post-body pre .hljs-keyword,.blog-post-body pre .hljs-name,.blog-post-body pre .hljs-section,.blog-post-body pre .hljs-selector-tag,.blog-post-body pre .hljs-tag{color:#a626a4}.blog-post-body pre .hljs-attr,.blog-post-body pre .hljs-meta-string,.blog-post-body pre .hljs-regexp,.blog-post-body pre .hljs-string{color:#50a14f}.blog-post-body pre .hljs-link,.blog-post-body pre .hljs-literal,.blog-post-body pre .hljs-number,.blog-post-body pre .hljs-template-variable,.blog-post-body pre .hljs-variable{color:#986801}.blog-post-body pre .hljs-attribute,.blog-post-body pre .hljs-function,.blog-post-body pre .hljs-symbol,.blog-post-body pre .hljs-title,.blog-post-body pre .hljs-title.function_{color:#4078f2}.blog-post-body pre .hljs-built_in,.blog-post-body pre .hljs-class .hljs-title,.blog-post-body pre .hljs-params,.blog-post-body pre .hljs-type{color:#c18401}.blog-post-body pre .hljs-meta,.blog-post-body pre .hljs-meta-keyword,.blog-post-body pre .hljs-selector-attr,.blog-post-body pre .hljs-selector-class,.blog-post-body pre .hljs-selector-id,.blog-post-body pre .hljs-selector-pseudo{color:#e45649}.blog-post-body pre .hljs-deletion{background:#ffeef0;color:#b31d28}.blog-post-body pre .hljs-addition{background:#f0fff4;color:#22863a}.blog-post-body pre .hljs-emphasis{font-style:italic}.blog-post-body pre .hljs-strong{font-weight:700}@media (prefers-color-scheme:dark){.blog-post-body pre .hljs-comment,.blog-post-body pre .hljs-quote{color:#5c6370}.blog-post-body pre .hljs-doctag,.blog-post-body pre .hljs-keyword,.blog-post-body pre .hljs-name,.blog-post-body pre .hljs-section,.blog-post-body pre .hljs-selector-tag,.blog-post-body pre .hljs-tag{color:#c678dd}.blog-post-body pre .hljs-attr,.blog-post-body pre .hljs-meta-string,.blog-post-body pre .hljs-regexp,.blog-post-body pre .hljs-string{color:#98c379}.blog-post-body pre .hljs-link,.blog-post-body pre .hljs-literal,.blog-post-body pre .hljs-number,.blog-post-body pre .hljs-template-variable,.blog-post-body pre .hljs-variable{color:#d19a66}.blog-post-body pre .hljs-attribute,.blog-post-body pre .hljs-function,.blog-post-body pre .hljs-symbol,.blog-post-body pre .hljs-title,.blog-post-body pre .hljs-title.function_{color:#61afef}.blog-post-body pre .hljs-built_in,.blog-post-body pre .hljs-class .hljs-title,.blog-post-body pre .hljs-params,.blog-post-body pre .hljs-type{color:#e5c07b}.blog-post-body pre .hljs-meta,.blog-post-body pre .hljs-meta-keyword,.blog-post-body pre .hljs-selector-attr,.blog-post-body pre .hljs-selector-class,.blog-post-body pre .hljs-selector-id,.blog-post-body pre .hljs-selector-pseudo{color:#e06c75}.blog-post-body pre .hljs-deletion{background:#3b1d1d;color:#e06c75}.blog-post-body pre .hljs-addition{background:#1d3a23;color:#98c379}}.blog-post-body table{border-collapse:collapse;margin:1em 0;width:100%;table-layout:fixed}.blog-post-body table td,.blog-post-body table th{border:1px solid var(--mantine-color-default-border);padding:.5em .75em;vertical-align:top}.blog-post-body table th{background:var(--mantine-color-default-hover);font-weight:600;text-align:left}.blog-post-body div[data-toc]{margin:1.5em 0;padding:1em 1.25em;border:1px solid;border-radius:6px}.blog-post-body .blog-toc-list{list-style:none;padding:0;margin:0}.blog-post-body .blog-toc-list li{margin:.25em 0}.blog-post-body .blog-toc-list li[data-level="1"]{padding-left:1.25em}.blog-post-body .blog-toc-list li[data-level="2"]{padding-left:2.5em}.blog-post-body .blog-toc-list li[data-level="3"]{padding-left:3.75em}.blog-post-body .blog-toc-list li[data-level="4"]{padding-left:5em}.blog-post-body .blog-toc-list li[data-level="5"]{padding-left:6.25em}.blog-post-body .blog-toc-list a{color:var(--mantine-color-text);text-decoration:none;border-bottom:1px dotted var(--mantine-color-dimmed)}.blog-post-body .blog-toc-list a:hover{color:var(--noodle-purple);border-bottom-color:var(--noodle-purple)}.blog-post-body h1,.blog-post-body h2,.blog-post-body h3,.blog-post-body h4,.blog-post-body h5,.blog-post-body h6{scroll-margin-top:80px}.blog-post-body sup[data-footnote]{font-weight:600;line-height:1}.blog-post-body sup[data-footnote] .blog-footnote-ref{color:var(--noodle-purple);text-decoration:none}.blog-post-body sup[data-footnote] .blog-footnote-ref:hover{text-decoration:underline}.blog-post-body .blog-footnotes{margin-top:2.5em;padding-top:1em;border-top:1px solid var(--mantine-color-default-border);font-size:.9rem;line-height:1.55;color:var(--mantine-color-dimmed)}.blog-post-body .blog-footnotes-heading{font-size:.85rem!important;text-transform:uppercase;letter-spacing:.06em;font-weight:700;margin:0 0 .5em;color:var(--mantine-color-dimmed)}.blog-post-body .blog-footnotes-list{padding-left:1.5em}.blog-post-body .blog-footnotes-list li{margin:.4em 0}.blog-post-body .blog-footnote-body{white-space:pre-wrap}.blog-post-body .blog-footnote-back{color:var(--noodle-purple);text-decoration:none;margin-left:.25em}.blog-post-body .blog-footnote-back:hover{text-decoration:underline}