/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:"Work Sans", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "Twemoji Country Flags";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--container-3xl:48rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-display:"Poppins", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", "Twemoji Country Flags"}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}body{font-family:var(--font-sans);line-height:1.65}h1,h2,h3,h4{font-family:var(--font-display);text-wrap:balance;line-height:1.15}p{text-wrap:pretty}}@layer components;@layer utilities{.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.top-full{top:100%}.right-0{right:0}.bottom-full{bottom:100%}.z-10{z-index:10}.row-start-3{grid-row-start:3}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.grid{display:grid}.inline{display:inline}.w-72{width:calc(var(--spacing) * 72)}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-full{max-width:100%}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.items-center{align-items:center}.justify-items-center{justify-items:center}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[var\(--rule\)\]{border-color:var(--rule)}.bg-\[var\(--surface-bg\)\]{background-color:var(--surface-bg)}.p-3{padding:calc(var(--spacing) * 3)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.font-display{font-family:var(--font-display)}.text-\[var\(--ink\)\]{color:var(--ink)}.text-\[var\(--link-ink\)\]{color:var(--link-ink)}.lowercase{text-transform:lowercase}.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,)}.group-focus-within\:visible:is(:where(.group):focus-within *){visibility:visible}@media (hover:hover){.group-hover\:visible:is(:where(.group):hover *){visibility:visible}}@media (width>=550px){.min-\[550px\]\:col-span-2{grid-column:span 2/span 2}.min-\[550px\]\:col-start-2{grid-column-start:2}.min-\[550px\]\:row-start-1{grid-row-start:1}.min-\[550px\]\:row-start-2{grid-row-start:2}.min-\[550px\]\:grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.min-\[550px\]\:justify-self-end{justify-self:flex-end}.min-\[550px\]\:justify-self-start{justify-self:flex-start}}@media (width>=800px){.min-\[800px\]\:col-span-1{grid-column:span 1/span 1}.min-\[800px\]\:col-start-2{grid-column-start:2}.min-\[800px\]\:col-start-3{grid-column-start:3}.min-\[800px\]\:row-start-1{grid-row-start:1}.min-\[800px\]\:grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}:root{color-scheme:light dark;--page-bg:light-dark(#f5f1e8,#161819);--sheet-bg:light-dark(#f5f1e8f5,#161819f2);--surface-bg:light-dark(#ebe5d8,#1d2021);--ink:light-dark(#3c3836,#ebdbb2);--muted-ink:light-dark(#655b50,#bdae93);--comment-ink:light-dark(#766958,#a89984);--rule:light-dark(#c9c0b0,#3c3836);--subtle-rule:light-dark(#d9d1c4,#3c383680);--accent-ink:light-dark(#526617,#b8bb26);--link-ink:light-dark(#386961,#83a598);--metric-ink:light-dark(#885e0c,#fabd2f);--selection-bg:light-dark(#cedbb3,#3c503b);--circuit:url(/images/background-light.svg);--source-font:"Cascadia Code", "SFMono-Regular", Consolas, "Liberation Mono", monospace}@media (prefers-color-scheme:dark){:root{--circuit:url(/images/background-dark.svg)}}:root[data-theme=light],:root:has(#theme-light:checked){color-scheme:light;--circuit:url(/images/background-light.svg)}:root[data-theme=dark],:root:has(#theme-dark:checked){color-scheme:dark;--circuit:url(/images/background-dark.svg)}:root.light{color-scheme:light;background:#fff}.site-document{background:var(--page-bg) var(--circuit);color:var(--ink);font-family:var(--source-font);margin:0;font-size:15px;line-height:1.75}.site-document ::selection{color:var(--ink);background:var(--selection-bg)}.site-document :where(h1,h2,h3,h4,h5,h6){text-wrap:pretty;margin:0;font-family:inherit;font-weight:500;line-height:1.5}.site-document :where(h1){font-size:26px}.site-document :where(h2){color:var(--accent-ink);font-size:17px}.site-document :where(h3){font-size:15px}.site-document :where(p){margin:0}.site-document :where(a){color:var(--link-ink);text-underline-offset:4px;text-decoration:underline 1px}.site-document :where(a:hover){color:var(--ink)}.site-document :where(a:focus-visible,summary:focus-visible,pre:focus-visible){outline:2px solid var(--accent-ink);outline-offset:5px}.site-document :where(section,h2,h3){scroll-margin-top:24px}.site-document :where(code,pre,kbd){font-family:var(--source-font)}.skip-link{z-index:10;background:var(--surface-bg);padding:8px;position:absolute;top:-100px;left:16px}.skip-link:focus{top:8px}.site-shell{background:var(--sheet-bg);flex-direction:column;max-width:920px;min-height:100vh;margin-inline:auto;padding:0 32px 16px;display:flex}.site-main{flex:1;min-width:0}.site-header{border-bottom:1px dashed var(--rule);margin-left:24px;padding:22px 0}.site-header-row{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px 24px;display:flex}.site-name{color:var(--ink);text-decoration:none}.site-name span{color:var(--comment-ink)}.site-nav{text-transform:lowercase;gap:24px;margin-left:auto;font-size:13px;display:flex}.site-nav a{padding-block:5px;text-decoration:none}.site-nav a[aria-current=page]{color:var(--accent-ink);text-decoration:underline}.theme-switch{color:var(--comment-ink);white-space:nowrap;border:0;flex-shrink:0;justify-content:flex-end;align-items:center;gap:14px;margin:0;padding:0;font-size:11px;display:flex}.theme-switch label{cursor:pointer;padding-block:0;position:relative}.theme-switch input{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.theme-switch label:has(input:checked){color:var(--accent-ink);text-underline-offset:4px;text-decoration:underline}.theme-switch label:has(input:focus-visible){outline:2px solid var(--accent-ink);outline-offset:3px}.source-body{padding:32px 0 0 24px;position:relative}.source-body:before{content:"";background:var(--rule);width:1px;position:absolute;top:24px;bottom:0;left:0}.source-block{min-width:0;margin-bottom:30px;position:relative}.source-comment{color:var(--comment-ink);font-size:13px}.accent{color:var(--accent-ink)}.source-intro h1{color:var(--accent-ink);margin:7px 0 12px}.source-intro p{max-width:72ch;font-size:14px}.source-intro :where(p)+p{margin-top:16px}.text-links{flex-wrap:wrap;gap:8px 24px;font-size:13px;display:flex}.text-links a{color:var(--accent-ink);text-decoration:none}.text-links a:hover{text-decoration:underline}.social-link{text-transform:lowercase}.section-heading{align-items:baseline;gap:20px;margin-bottom:20px;display:flex}.section-heading h2{flex:1}.section-heading>a{white-space:nowrap;font-size:12px}.project-list,.post-list{margin:0;padding:0;list-style:none}.project-list>li+li,.post-list>li+li{border-top:1px solid var(--subtle-rule)}.project-totals{color:var(--muted-ink);flex-wrap:wrap;gap:6px 24px;margin-bottom:12px;font-size:12px;display:flex}.project-totals strong{color:var(--metric-ink);font-weight:500}.project-row{grid-template-columns:minmax(0,1fr) auto;gap:16px;padding:14px 0;display:grid}.project-description :where(h3) a{text-decoration:none}.project-description :where(h3) a:hover{text-decoration:underline}.project-description p{color:var(--muted-ink);margin-top:4px;font-size:13px}.project-metrics{color:var(--muted-ink);white-space:nowrap;flex-direction:column;align-items:flex-end;gap:4px;font-size:11px;display:flex}.project-metrics strong{color:var(--metric-ink);font-weight:500}.post-row{grid-template-columns:100px minmax(0,1fr);gap:18px;padding:18px 0;display:grid}.post-date{color:var(--muted-ink);padding-top:2px;font-size:12px}.post-row h3{font-size:16px}.post-row :where(h3) a{text-decoration:none}.post-row :where(h3) a:hover{text-decoration:underline}.post-row p{color:var(--muted-ink);margin:6px 0;font-size:13px}.post-meta{color:var(--muted-ink);flex-wrap:wrap;align-items:baseline;gap:8px 20px;font-size:12px;display:flex}.post-meta b{font-weight:inherit}.post-status{color:var(--metric-ink);font-size:12px}.archive-meta{color:var(--muted-ink)}.history-note{max-width:76ch;color:var(--muted-ink);font-size:14px}.archive-meta a{color:var(--accent-ink)}.empty-note{color:var(--muted-ink);font-size:14px}.site-footer{border-top:1px dashed var(--rule);color:var(--muted-ink);margin:10px 0 0 24px;padding:20px 0;font-size:12px}.site-footer .text-links{font-size:inherit}.article-header{border-bottom:1px dashed var(--rule);padding-bottom:24px}.back-link{font-size:12px}.article-header h1{color:var(--accent-ink);margin:18px 0 14px;font-size:28px;line-height:1.45}.article-description{color:var(--muted-ink);font-size:14px}.article-header .post-meta{margin-top:18px}.article-image{width:100%;height:auto;margin-top:24px}.article-contents{margin-bottom:28px;font-size:13px}.article-contents summary{color:var(--accent-ink);cursor:pointer;width:fit-content}.article-contents ul{border-left:1px solid var(--rule);margin:14px 0;padding-left:20px;list-style:none}.article-contents li+li{margin-top:8px}.article-copy{overflow-wrap:anywhere;max-width:76ch;font-size:15px;line-height:1.9}.article-copy :where(h2){margin:36px 0 16px;font-size:19px}.article-copy :where(h3,h4){margin:28px 0 14px;font-size:17px}.article-copy :where(h2,h3,h4) a{color:var(--accent-ink);text-decoration:none}.article-copy :where(h2,h3,h4) a:hover{text-decoration:underline}.article-copy :where(p){margin:18px 0}.article-copy :where(ul,ol){list-style:revert;margin:20px 0;padding-left:24px}.article-copy :where(li){margin:10px 0;padding-left:6px}.article-copy :where(li)::marker{color:var(--comment-ink)}.article-copy :where(blockquote){border-left:2px solid var(--accent-ink);color:var(--muted-ink);margin:28px 0;padding:0 0 0 20px}.article-copy :where(img){max-width:100%;height:auto;margin:24px auto;display:block}.article-copy :where(hr){border:0;border-top:1px dashed var(--rule);margin:28px 0}.article-copy :where(details){border-left:1px solid var(--rule);margin:20px 0;padding-left:16px}.article-copy :where(summary){color:var(--accent-ink);cursor:pointer}.article-copy :where(:not(pre)>code,kbd){color:var(--accent-ink);background:var(--surface-bg);padding:2px 4px;font-size:.9em}.article-copy :where(pre){border:1px solid var(--rule);background:var(--surface-bg);tab-size:2;counter-reset:code-line;margin:24px 0;padding:16px 18px;font-size:13px;line-height:1.8;overflow-x:auto}.article-copy :where(.astro-code,.astro-code span){color:light-dark(var(--shiki-light),var(--shiki-dark))}.article-copy :where(.line){counter-increment:code-line;min-width:100%;padding-left:4ch;display:inline-block;position:relative}.article-copy :where(.line):before{content:counter(code-line) / "";text-align:right;width:2ch;color:var(--comment-ink);user-select:none;position:absolute;left:0}.article-discussion{border-top:1px dashed var(--rule);margin:36px 0;padding-top:28px;font-size:13px}@media (width<=650px){.site-document{font-size:14px}.site-shell{padding-inline:18px}.site-header,.site-footer{margin-left:0}.site-header{padding-top:18px}.site-nav{gap:20px;font-size:12px}.theme-switch{justify-content:flex-start}.source-body{padding-top:25px;padding-left:18px}.source-intro h1{font-size:23px}.section-heading{gap:12px}.project-row,.post-row{grid-template-columns:minmax(0,1fr);gap:6px}.project-metrics{flex-flow:wrap;gap:6px 16px}.article-header h1{font-size:23px}.article-copy{font-size:14px}.article-copy :where(pre){padding-inline:10px;font-size:12px}}.footer-note[data-astro-cid-ddhozxeg]>a[data-astro-cid-ddhozxeg]{color:var(--comment-ink);text-decoration:none}.footer-note[data-astro-cid-ddhozxeg]>a[data-astro-cid-ddhozxeg]:hover{color:var(--ink);text-decoration:underline}@font-face{font-family:Twemoji Country Flags;unicode-range:U+1F1E6-1F1FF,U+1F3F4,U+E0062-E0063,U+E0065,U+E0067,U+E006C,U+E006E,U+E0073-E0074,U+E0077,U+E007F;src:url(https://cdn.jsdelivr.net/npm/country-flag-emoji-polyfill/dist/TwemojiCountryFlags.woff2)format("woff2");font-display:swap}
