:root{color-scheme:dark;--background:oklch(16.037% 0.005 196.68);--surface:oklch(18.694% 0.00625 196.63);--text:oklch(95.775% 0.00617 137.77);--muted:oklch(72.827% 0.01414 159.78);--subtle:oklch(64.399% 0.01821 162.46);--accent:oklch(87.489% 0.06777 157.98);--line:oklch(30.044% 0.01229 170.84);--color-focus:var(--accent);--color-accent-ink:var(--background);--color-selection:oklch(32% 0.035 158);--syntax-keyword:oklch(78% 0.12 305);--syntax-entity:oklch(84% 0.11 85);--syntax-constant:oklch(80% 0.09 230);--syntax-deletion:oklch(78% 0.12 25);--admonition-note:oklch(78% 0.045 285);--admonition-info:oklch(80% 0.09 230);--admonition-tip:oklch(82% 0.085 185);--admonition-warning:oklch(84% 0.13 85);--admonition-error:oklch(72% 0.16 25);--admonition-success:var(--accent);--admonition-qa:oklch(78% 0.12 305);--font-body:"Geist Variable",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;--font-display:"Geist Mono Variable",monospace;--mono:var(--font-display);--weight-body:400;--weight-heading:700;--text-sm:0.875rem;--text-base:1rem;--text-reading:1.125rem;--text-md:1.25rem;--text-lg:1.5625rem;--text-xl:1.953125rem;--tracking-heading:-0.04em;--leading-body:1.65;--leading-heading:1.3;--underline-offset:2px;--space-2xs:0.25rem;--space-xs:0.5rem;--space-sm:0.75rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--space-3xl:4rem;--space-4xl:6rem;--page-gutter:clamp(1.25rem,5vw,3rem);--page-width:64rem;--reading-width:42rem;--touch-target:2.75rem;--rule-hair:1px;--rule-focus:2px;--radius-sm:2px;--z-skip-link:100;--ease-out:cubic-bezier(0.16,1,0.3,1);--ease-in:cubic-bezier(0.7,0,0.84,0);--ease-in-out:cubic-bezier(0.65,0,0.35,1);--dur-micro:120ms}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
/* ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
 */*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.table{display:table}.hidden{display:none}.resize{resize:both}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}html{scroll-padding-block-start:var(--space-lg)}body,html{overflow-x:clip}body{margin:0;background:var(--background);color:var(--text);font-family:var(--font-body);font-size:var(--text-base);font-weight:var(--weight-body);line-height:var(--leading-body);-webkit-font-smoothing:antialiased}::-moz-selection{background:var(--color-selection);color:var(--text)}::selection{background:var(--color-selection);color:var(--text)}h1,h2,h3,h4,h5,h6{min-width:0;overflow-wrap:anywhere;font-family:var(--font-display);font-style:normal;font-weight:var(--weight-heading);line-height:var(--leading-heading);letter-spacing:var(--tracking-heading)}h1{font-size:var(--text-xl)}h2{font-size:var(--text-md)}h3{font-size:var(--text-base)}a{color:inherit;text-underline-offset:var(--underline-offset);text-decoration-thickness:var(--rule-hair)}:where(a,summary):active{color:var(--accent)}:where(a,summary):focus-visible{outline:var(--rule-focus) solid var(--color-focus);outline-offset:var(--space-2xs);border-radius:var(--radius-sm)}.site-container{width:min(var(--page-width),calc(100% - var(--page-gutter) * 2));margin-inline:auto;min-width:0}.site-shell{display:flex;flex-direction:column;min-height:100svh;isolation:isolate}.pixel-field{--particle-gutter:max(var(--page-gutter),calc((100% - var(--page-width)) / 2));position:fixed;inset:0;z-index:-1;width:100%;height:100%;color:var(--accent);pointer-events:none;image-rendering:pixelated;-webkit-mask-image:linear-gradient(to right,#000,transparent var(--particle-gutter),transparent calc(100% - var(--particle-gutter)),#000);mask-image:linear-gradient(to right,#000,transparent var(--particle-gutter),transparent calc(100% - var(--particle-gutter)),#000)}main{flex:1}.skip-link{position:fixed;inset-block-start:var(--space-md);inset-inline-start:var(--space-md);z-index:var(--z-skip-link);padding:var(--space-sm) var(--space-lg);background:var(--accent);color:var(--color-accent-ink);transform:translateY(-200%);white-space:nowrap}.skip-link:focus{transform:none}.site-header{padding-block-start:var(--space-xl)}.masthead{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);padding-block-end:var(--space-lg)}.site-name{display:inline-flex;align-items:center;min-height:var(--touch-target);font-family:var(--font-display);font-size:var(--text-md);font-weight:var(--weight-heading);letter-spacing:var(--tracking-heading);white-space:nowrap}.site-address{color:var(--subtle);font-family:var(--mono);font-size:var(--text-sm)}.navigation-row,.resource-links,.site-tabs{display:flex;align-items:center}.navigation-row{justify-content:space-between;gap:var(--space-md);border-bottom:var(--rule-hair) solid var(--line)}.site-tabs{gap:var(--space-lg)}.resource-links{gap:var(--space-md)}.resource-links a,.site-tabs a{display:inline-flex;align-items:center;min-height:var(--touch-target);min-width:var(--touch-target);color:var(--muted);white-space:nowrap;line-height:1}.site-tabs a{position:relative}.site-tabs a[aria-current=page]{color:var(--text);font-weight:var(--weight-heading)}.site-tabs a[aria-current=page]:after{content:"";position:absolute;inset-inline:0;inset-block-end:calc(-1 * var(--rule-hair));height:var(--rule-focus);background:var(--accent)}.resource-links{font-size:var(--text-sm)}.page-intro{max-width:65ch;padding-block:var(--space-2xl);color:var(--muted)}.work-section>h1{margin-block-end:var(--space-lg)}.archive-entry,.project-entry{display:grid;gap:var(--space-md);padding-block:var(--space-lg) var(--space-xl);border-top:var(--rule-hair) solid var(--line);min-width:0}.archive-identity h3 a,.project-identity h2 a{display:inline-flex;align-items:center;min-height:var(--touch-target);text-decoration-line:underline;text-decoration-color:var(--subtle);white-space:nowrap}.project-meta{color:var(--subtle);font-size:var(--text-sm)}.project-details{display:grid;align-content:start;gap:var(--space-sm);max-width:65ch;color:var(--muted)}.project-details .project-description{color:var(--text)}.project-archive{margin-block-start:var(--space-xl);border-block:var(--rule-hair) solid var(--line)}.project-archive summary{display:flex;align-items:center;justify-content:space-between;gap:var(--space-lg);min-height:var(--touch-target);padding-block:var(--space-lg);list-style:none;cursor:pointer}.project-archive summary::-webkit-details-marker{display:none}.disclosure-marker{font-family:var(--mono);font-size:var(--text-lg);color:var(--muted);flex-shrink:0}.project-archive[open] .disclosure-marker{transform:rotate(45deg)}.archive-entry>p{max-width:65ch;color:var(--muted)}.private-label{margin-inline-start:var(--space-xs);color:var(--subtle);font-family:var(--font-body);font-size:var(--text-sm);font-weight:var(--weight-body);letter-spacing:normal;white-space:nowrap}.about-section{display:grid;gap:var(--space-lg);max-width:65ch;padding-block:var(--space-3xl) var(--space-2xl)}.about-section p{color:var(--muted)}.footer-contact a,.post-back-link,.standalone-link{display:inline-flex;align-items:center;min-height:var(--touch-target);width:-moz-fit-content;width:fit-content;text-decoration-line:underline;text-decoration-color:var(--subtle);white-space:nowrap;line-height:1}.site-footer{display:grid;gap:var(--space-xs);padding-block:var(--space-xl) var(--space-2xl);border-top:var(--rule-hair) solid var(--line);font-family:var(--mono)}.site-footer,.site-footer h2{font-size:var(--text-sm)}.site-footer>p{color:var(--subtle)}.footer-contact{display:flex;flex-wrap:wrap;gap:0 var(--space-lg)}.blog-empty{display:grid;gap:var(--space-md);padding-block:var(--space-lg) var(--space-3xl)}.blog-empty p{color:var(--muted)}.post-list{margin:0;padding:0 0 var(--space-3xl);list-style:none}.post-list-item{margin:0}.post-list-item+.post-list-item{border-top:var(--rule-hair) solid var(--line)}.post-list-entry{display:grid;gap:var(--space-md);padding-block:var(--space-lg) var(--space-xl)}.post-list-entry[data-coming-soon]{color:var(--muted)}.post-list-entry[data-coming-soon] :is(.post-number,.post-subject,.post-summary){color:var(--subtle)}.post-list-entry[data-coming-soon] .post-preview{filter:grayscale(1);opacity:.5}.post-coming-soon{width:-moz-fit-content;width:fit-content;padding:var(--space-2xs) var(--space-xs);border:var(--rule-hair) dashed var(--line);border-radius:var(--radius-sm);color:var(--muted);font-family:var(--mono);font-size:var(--text-sm);line-height:var(--leading-heading);white-space:nowrap}.post-preview{display:none}.post-list-meta{display:flex;align-items:baseline;gap:var(--space-md)}.post-number{color:var(--accent);font-family:var(--mono);font-size:var(--text-md);font-variant-numeric:tabular-nums;font-weight:var(--weight-heading);line-height:var(--leading-heading)}.post-list-content{display:grid;align-content:start;gap:var(--space-sm);min-width:0}.post-title-line{display:grid;max-width:65ch}.post-subject-group{display:flex;align-items:center;gap:var(--space-sm);white-space:nowrap}.post-subject-connector{align-self:flex-start;flex:0 0 var(--space-lg);width:var(--space-lg);height:calc(.5em + var(--space-xs));margin-block-start:calc(-1 * var(--space-2xs));border-block-end:var(--rule-hair) dotted var(--subtle);border-inline-start:var(--rule-hair) dotted var(--subtle)}.post-subject{color:var(--accent);font-family:var(--mono);font-size:var(--text-sm)}.post-summary{max-width:65ch;color:var(--muted)}.read-more-link{gap:var(--space-xs)}.read-more-arrow{color:var(--accent);font-family:var(--mono);transition:transform var(--dur-micro) var(--ease-out)}.post-date{color:var(--subtle);font-family:var(--mono);font-size:var(--text-sm);font-variant-numeric:tabular-nums;white-space:nowrap}.post-page{width:100%;max-width:var(--reading-width);padding-block:var(--space-xl) var(--space-3xl)}.post-back-link{margin-block-end:var(--space-xl);font-size:var(--text-sm)}.post-heading{display:grid;gap:var(--space-md);padding-block-end:var(--space-xl);border-bottom:var(--rule-hair) solid var(--line)}.post-heading>p{color:var(--muted)}.post-heading>p,.prose{font-size:var(--text-reading)}.prose{padding-block-start:var(--space-xl);overflow-wrap:anywhere}.prose>*+*{margin-block-start:var(--space-lg)}.prose h2{font-size:var(--text-lg)}.prose h3{font-size:var(--text-md)}.prose :is(h4,h5,h6){font-size:var(--text-reading)}.prose :is(h2,h3){margin-block-start:var(--space-2xl)}.prose ul{list-style:disc}.prose ol,.prose ul{padding-inline-start:var(--space-lg)}.prose ol{list-style:decimal}.prose li+li{margin-block-start:var(--space-xs)}.prose li>:is(ul,ol){margin-block-start:var(--space-xs)}.prose ul.contains-task-list{list-style:none;padding-inline-start:0}.prose .task-list-item{--task-marker-size:1rem;position:relative;padding-inline-start:calc(var(--task-marker-size) + var(--space-sm))}.prose .task-list-item input[type=checkbox]{-webkit-appearance:none;-moz-appearance:none;appearance:none;position:absolute;inset-block-start:.35em;inset-inline-start:0;display:grid;place-content:center;box-sizing:border-box;inline-size:var(--task-marker-size);block-size:var(--task-marker-size);margin:0;border:var(--rule-hair) solid var(--line);border-radius:var(--radius-sm);background:var(--surface);color:var(--accent);opacity:1}.prose .task-list-item input[type=checkbox]:checked{border-color:color-mix(in oklch,var(--line) 45%,var(--accent));background:color-mix(in oklch,var(--surface) 86%,var(--accent))}.prose .task-list-item input[type=checkbox]:checked:after{inline-size:.45rem;block-size:.225rem;border-block-end:var(--rule-focus) solid currentColor;border-inline-start:var(--rule-focus) solid currentColor;content:"";transform:translateY(-.05rem) rotate(-45deg)}.prose a{text-decoration-line:underline;text-decoration-color:var(--accent)}.prose sup:has(>[data-footnote-ref]){margin-inline-start:.125em;font-size:.7em}.prose :is([data-footnote-ref],[data-footnote-backref]){display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);color:var(--accent);font-family:var(--mono);font-weight:500;text-decoration:none;scroll-margin-block:var(--space-4xl);transition:background-color var(--dur-micro) var(--ease-out)}.prose [data-footnote-ref]{min-inline-size:1.5em;padding:.2em .25em;line-height:1}.prose [data-footnote-backref]{min-inline-size:var(--space-lg);min-block-size:var(--space-lg);margin-inline-start:var(--space-2xs);vertical-align:baseline}.prose :is([data-footnote-ref],[data-footnote-backref]):is(:focus-visible,:target){background:var(--color-selection)}.prose .footnotes{display:grid;gap:var(--space-lg);margin-block-start:var(--space-3xl);padding-block-start:var(--space-xl);border-block-start:var(--rule-hair) solid var(--line);color:var(--muted);font-size:var(--text-base)}.prose .footnotes>h2{margin:0;color:var(--subtle);font-size:var(--text-sm);font-weight:500;line-height:var(--leading-body);letter-spacing:0}.prose .footnotes>ol{margin:0;padding-inline-start:var(--space-xl)}.prose .footnotes>ol>li{padding-inline-start:var(--space-xs);scroll-margin-block:var(--space-2xl)}.prose .footnotes>ol>li+li{margin-block-start:var(--space-lg)}.prose .footnotes>ol>li::marker{color:var(--accent);font-family:var(--mono);font-size:var(--text-sm);font-variant-numeric:tabular-nums}.prose .footnotes>ol>li>*+*{margin-block-start:var(--space-sm)}.prose .footnotes>ol>li:target{background:var(--surface);outline:var(--space-xs) solid var(--surface)}.prose .footnotes>ol>li:focus-visible{outline:var(--rule-focus) solid var(--color-focus);outline-offset:var(--space-xs)}.prose code{font-family:var(--mono);font-size:var(--text-sm)}.prose :not(pre)>code{padding:var(--space-2xs) var(--space-xs);background:var(--surface);color:var(--accent);border-radius:var(--radius-sm)}.prose pre{max-width:100%;overflow-x:auto;padding:var(--space-lg);background:var(--surface);color:var(--text);border:var(--rule-hair) solid var(--line);border-radius:var(--radius-sm);font-family:var(--mono);font-size:var(--text-sm);white-space:pre}.prose pre :is(.hljs-comment,.hljs-code,.hljs-formula,.hljs-quote){color:var(--muted)}.prose pre :is(.hljs-keyword,.hljs-doctag,.hljs-template-tag){color:var(--syntax-keyword)}.prose pre :is(.hljs-attr,.hljs-attribute,.hljs-built_in,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-type,.hljs-variable,.hljs-template-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id){color:var(--syntax-constant)}.prose pre :is(.hljs-title,.hljs-section,.hljs-bullet){color:var(--syntax-entity)}.prose pre :is(.hljs-string,.hljs-regexp,.hljs-symbol,.hljs-name,.hljs-selector-tag,.hljs-selector-pseudo,.hljs-addition){color:var(--accent)}.prose pre .hljs-addition{background:color-mix(in oklch,var(--surface) 90%,var(--accent))}.prose pre .hljs-deletion{color:var(--syntax-deletion);background:color-mix(in oklch,var(--surface) 90%,var(--syntax-deletion))}.prose pre .hljs-subst{color:var(--text)}.prose pre .hljs-emphasis{font-style:italic}.prose pre :is(.hljs-strong,.hljs-section){font-weight:var(--weight-heading)}.prose .mermaid-diagram{max-width:100%;margin-inline:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-inline:contain;padding-block:clamp(var(--space-md),3vw,var(--space-lg));padding-inline:var(--space-xs);background:var(--surface);border:var(--rule-hair) solid var(--line);border-radius:var(--radius-sm)}.prose .mermaid-diagram:focus-visible{outline:var(--rule-focus) solid var(--color-focus);outline-offset:var(--space-2xs)}.prose .mermaid-diagram>svg{display:block;max-width:none;height:auto;margin-inline:auto}.prose .mermaid-pair{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-md);min-width:0}.prose .mermaid-pair>:nth-child(3){margin-block-start:var(--space-lg)}.prose .mermaid-pair>.mermaid-diagram{min-width:0}.prose blockquote{padding-inline-start:var(--space-lg);border-inline-start:var(--rule-focus) solid var(--line);color:var(--muted)}.prose blockquote>*+*{margin-block-start:var(--space-md)}.prose hr{border-color:var(--line)}.prose img{max-width:100%;height:auto}.prose table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-variant-numeric:tabular-nums}.prose :is(th,td){padding:var(--space-sm) var(--space-md);border-bottom:var(--rule-hair) solid var(--line);text-align:start}.prose th{font-weight:var(--weight-heading)}.prose .admonition{--admonition-color:var(--admonition-note);position:relative;display:grid;gap:var(--space-md);min-width:0;padding:clamp(var(--space-md),3vw,var(--space-lg));background-color:var(--surface);background-image:linear-gradient(90deg,color-mix(in oklch,var(--admonition-color) 8%,transparent),transparent 38%);border:var(--rule-hair) solid var(--line);border-color:color-mix(in oklch,var(--line) 82%,var(--admonition-color));border-radius:var(--radius-sm)}.prose .admonition:after,.prose .admonition:before{position:absolute;background:var(--admonition-color);content:""}.prose .admonition:before{inset-block:calc(var(--rule-hair) * -1);inset-inline-start:calc(var(--rule-hair) * -1);width:var(--rule-focus);transform-origin:top}.prose .admonition:after{inset-block-start:var(--space-lg);inset-inline-start:0;width:.4rem;height:.4rem;box-shadow:0 0 0 var(--space-2xs) var(--surface);transform:translate(-50%,-50%)}.prose .admonition__heading{min-width:0;color:var(--text);font-family:var(--font-display);font-weight:var(--weight-heading);line-height:var(--leading-heading);overflow-wrap:anywhere}.prose .admonition__answer-label,.prose .admonition__kind{display:block;color:var(--admonition-color);font-family:var(--mono);font-size:var(--text-sm);font-weight:var(--weight-heading);letter-spacing:.1em;line-height:var(--leading-heading);text-transform:uppercase}.prose .admonition__kind{margin-block-end:var(--space-xs)}.prose .admonition__kind:only-child{margin-block-end:0}.prose .admonition__body{min-width:0}.prose .admonition__body>*+*{margin-block-start:var(--space-md)}.prose .admonition__answer{padding-block-start:var(--space-md);border-block-start:var(--rule-hair) solid var(--line);border-block-start-color:color-mix(in oklch,var(--line) 75%,var(--admonition-color))}.prose .admonition__answer>.admonition__answer-label+*{margin-block-start:var(--space-sm)}.prose .admonition--info{--admonition-color:var(--admonition-info)}.prose .admonition--tip{--admonition-color:var(--admonition-tip)}.prose .admonition--warning{--admonition-color:var(--admonition-warning)}.prose .admonition--error{--admonition-color:var(--admonition-error)}.prose .admonition--success{--admonition-color:var(--admonition-success)}.prose .admonition--qa{--admonition-color:var(--admonition-qa)}.prose :is(.admonition--qa,.admonition--success,.admonition--error,.admonition--warning)>.admonition__heading{display:grid;grid-template-columns:minmax(0,1fr) clamp(3.5rem,14vw,5.5rem);gap:var(--space-md);align-items:center}.prose .admonition__prompt{min-width:0}.prose .admonition__particles{display:block;width:100%;height:auto;overflow:visible;color:var(--admonition-color);fill:currentColor;shape-rendering:crispEdges;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (prefers-reduced-motion:no-preference){.prose .admonition__particle-layer{animation:admonition-particle-drift 7s var(--ease-in-out) infinite;animation-play-state:paused}.prose .admonition__particle-layer:nth-child(2){animation-duration:8.5s;animation-delay:-2s;animation-direction:reverse}.prose .admonition__particle-layer:nth-child(3){animation-duration:6.5s;animation-delay:-4s}.prose .admonition__particle-layer:nth-child(4){animation-duration:9s;animation-delay:-1s;animation-direction:reverse}.prose .admonition__particle-layer:nth-child(5){animation-duration:7.5s;animation-delay:-5s}.prose .admonition__particle-layer:nth-child(6){animation-duration:8s;animation-delay:-3s;animation-direction:reverse}.prose[data-particles-running] .admonition[data-particles-visible] .admonition__particle-layer{animation-play-state:running}}@keyframes admonition-particle-drift{0%,to{opacity:.8;transform:translate(-.8px,.5px)}35%{opacity:1;transform:translate(.6px,-1px)}70%{opacity:.7;transform:translate(1px,.8px)}}.prose[data-admonitions-enhanced] .admonition:before{transform:scaleY(0);transition:transform .28s var(--ease-out)}.prose[data-admonitions-enhanced] .admonition:after{opacity:.35;transform:translate(-50%,-50%) scale(.55)}.prose[data-admonitions-enhanced] .admonition[data-admonition-visible]:before{transform:scaleY(1)}.prose[data-admonitions-enhanced] .admonition[data-admonition-visible]:after{animation:admonition-marker-pulse .42s var(--ease-out) .14s both}@keyframes admonition-marker-pulse{0%{opacity:.35;transform:translate(-50%,-50%) scale(.55)}55%{opacity:1;transform:translate(-50%,-50%) scale(1.55)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}@media (hover:hover) and (pointer:fine){a:hover{color:var(--accent)}.prose :is([data-footnote-ref],[data-footnote-backref]):hover{background:var(--color-selection)}.project-archive summary:hover{color:var(--accent)}.read-more-link:hover .read-more-arrow{transform:translateX(var(--space-2xs))}.prose .admonition{transition:border-color var(--dur-micro) var(--ease-out)}.prose .admonition:hover{border-color:color-mix(in oklch,var(--line) 38%,var(--admonition-color))}}@media (min-width:40rem){.site-header{padding-block-start:var(--space-2xl)}.site-name{font-size:var(--text-lg)}.site-tabs{gap:var(--space-xl)}.resource-links{gap:var(--space-lg)}.post-list-entry,.project-entry{padding-block:var(--space-xl)}.post-list-entry{grid-template-columns:10rem minmax(0,1fr);gap:var(--space-xl)}.post-list-meta{flex-direction:column;align-items:flex-start;gap:var(--space-xs)}}@media (min-width:60rem){.archive-entry,.project-entry{grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:var(--space-2xl)}.archive-entry>p,.project-details{padding-block-start:var(--space-xs)}.post-list-entry:has(.post-preview){grid-template-columns:10rem minmax(0,1fr) 12rem}.post-preview{display:block;align-self:center;width:100%;height:auto}.post-page{max-width:none}.prose .footnotes{grid-template-columns:8rem minmax(0,1fr);gap:var(--space-xl)}.prose .mermaid-pair{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:auto 1fr;grid-auto-flow:column}.prose .mermaid-pair>:nth-child(3){margin-block-start:0}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.read-more-arrow{transition:none}.prose :is([data-footnote-ref],[data-footnote-backref]){transition:none}.prose[data-admonitions-enhanced] .admonition:before{transform:none;transition:none}.prose[data-admonitions-enhanced] .admonition:after{opacity:1;transform:translate(-50%,-50%);animation:none}}@media print{.pixel-field{display:none}.prose .footnotes{color:inherit;border-color:currentColor}.prose .footnotes>h2{-moz-column-break-after:avoid;break-after:avoid}.prose .footnotes>ol>li{-moz-column-break-inside:avoid;break-inside:avoid}.prose .footnotes>ol>li:target{background:none;outline:none}.prose .footnotes>ol>li::marker,.prose [data-footnote-ref]{color:inherit}.prose [data-footnote-backref]{display:none}.prose pre .hljs span{color:inherit;background:none}.prose .mermaid-diagram{overflow:visible;background:none;border-color:currentColor;-moz-column-break-inside:avoid;break-inside:avoid}.prose .mermaid-diagram>svg{max-width:100%}.prose .admonition{background:none;border-color:currentColor;-moz-column-break-inside:avoid;break-inside:avoid}.prose .admonition:after,.prose .admonition:before{display:none}.prose .admonition__answer,.prose .admonition__answer-label,.prose .admonition__kind{color:currentColor;border-color:currentColor}.prose .admonition__particles{display:none}.prose .admonition__particle-layer{animation:none}.prose :is(.admonition--qa,.admonition--success,.admonition--error,.admonition--warning)>.admonition__heading{grid-template-columns:minmax(0,1fr)}}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-cyrillic-ext-wght-normal.8bbfa6e0.woff2) format("woff2-variations");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-cyrillic-wght-normal.12b57c6b.woff2) format("woff2-variations");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-vietnamese-wght-normal.c6a3f4e5.woff2) format("woff2-variations");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-latin-ext-wght-normal.b921df26.woff2) format("woff2-variations");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-latin-wght-normal.9ff55a8a.woff2) format("woff2-variations");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-mono-cyrillic-ext-wght-normal.85d55428.woff2) format("woff2-variations");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-mono-cyrillic-wght-normal.33900800.woff2) format("woff2-variations");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-mono-symbols2-wght-normal.b6529aae.woff2) format("woff2-variations");unicode-range:u+2000-2001,u+2004-2008,u+200a,u+23b8-23bd,u+2500-259f}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-mono-vietnamese-wght-normal.55bad67b.woff2) format("woff2-variations");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-mono-latin-ext-wght-normal.3d379059.woff2) format("woff2-variations");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_next/static/media/geist-mono-latin-wght-normal.125b055e.woff2) format("woff2-variations");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}