@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*),[data-astro-transition-scope]{animation:none!important}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}.sun[data-astro-cid-rknshgfe]{fill:currentColor}.moon[data-astro-cid-rknshgfe],[data-theme=dark] .sun[data-astro-cid-rknshgfe]{fill:#0000}[data-theme=dark] .moon[data-astro-cid-rknshgfe]{fill:currentColor}.site-header[data-astro-cid-nen7h5rs]{user-select:none;background-color:var(--paper);border-bottom:1px solid var(--rule);--reading-progress:0;padding-block:2px}.reading-progress[data-astro-cid-nen7h5rs]{z-index:1;pointer-events:none;height:2px;position:absolute;bottom:0;left:0;right:0;overflow:hidden}.reading-progress__fill[data-astro-cid-nen7h5rs]{width:100%;height:100%;transform:scaleX(var(--reading-progress,0));transform-origin:0;background:var(--accent-pop);will-change:transform}.site-header__inner[data-astro-cid-nen7h5rs]{justify-content:space-between;align-items:center;gap:var(--sp-4);min-height:3.25rem;display:flex;position:relative}.site-header__brand[data-astro-cid-nen7h5rs]{min-width:0;font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);box-shadow:none;transition:color var(--dur-fast) var(--ease);background:0 0;flex-direction:column;justify-content:center;align-items:flex-start;gap:.125rem;font-size:1.125rem;font-weight:700;line-height:1.1;text-decoration:none;display:flex}.site-header__brand[data-astro-cid-nen7h5rs]:hover{color:var(--ink);box-shadow:none;background:0 0;text-decoration:none}.site-header__word[data-astro-cid-nen7h5rs]{align-items:baseline;display:inline-flex}.site-header__dot[data-astro-cid-nen7h5rs]{color:var(--accent-dot)}.site-header__tagline[data-astro-cid-nen7h5rs]{font-family:var(--font-sans);letter-spacing:.01em;color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;max-width:100%;height:1.25em;font-size:11px;font-weight:400;line-height:1.25em;display:block;overflow:hidden}.site-header__nav[data-astro-cid-nen7h5rs]{font-family:var(--font-sans);font-size:14px;line-height:1}.site-header__nav[data-astro-cid-nen7h5rs].desktop{align-items:center;margin-left:auto;display:none}.site-header__nav--mobile[data-astro-cid-nen7h5rs]{flex-shrink:0;margin-left:auto;display:none}@media (width>=768px){.site-header__nav[data-astro-cid-nen7h5rs].desktop{display:flex}}@media (width<=767px){.site-header__nav[data-astro-cid-nen7h5rs].desktop{display:none}.site-header__nav--mobile[data-astro-cid-nen7h5rs]{display:block}}.site-header__links[data-astro-cid-nen7h5rs]{align-items:center;gap:1.25rem;display:flex}.site-header__actions[data-astro-cid-nen7h5rs]{align-items:center;gap:var(--sp-1);margin-left:var(--sp-4);padding-left:var(--sp-4);border-left:1px solid var(--rule);display:flex}.site-header__mobile-bar[data-astro-cid-nen7h5rs]{justify-content:flex-end;align-items:center;gap:var(--sp-1);display:flex}nav[data-astro-cid-nen7h5rs] .nav-link{height:2rem;color:var(--ink-3);box-shadow:none;white-space:nowrap;cursor:pointer;background:0 0;align-items:center;padding:0;text-decoration:none;display:inline-flex}nav[data-astro-cid-nen7h5rs] .nav-link:hover{color:var(--ink);box-shadow:none;background:0 0;text-decoration:none}nav[data-astro-cid-nen7h5rs] .nav-link.active{color:var(--ink);text-decoration:underline;text-decoration-color:var(--accent-pop);text-underline-offset:.45em;font-weight:600;text-decoration-thickness:2px}.site-header[data-astro-cid-nen7h5rs] .nav-action{border-radius:var(--r-sm);width:2rem;height:2rem;color:var(--ink-3);cursor:pointer;transition:background-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease);background:0 0;border:0;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.site-header[data-astro-cid-nen7h5rs] .nav-action:hover,.site-header[data-astro-cid-nen7h5rs] .nav-action:focus-visible{background:var(--tint);color:var(--ink);outline:none}.site-header[data-astro-cid-nen7h5rs] .nav-action svg{width:1.125rem;height:1.125rem}.menu-toggle__icon--close[data-astro-cid-nen7h5rs],.menu-toggle[data-astro-cid-nen7h5rs][aria-expanded=true] .menu-toggle__icon--open[data-astro-cid-nen7h5rs]{display:none}.menu-toggle[data-astro-cid-nen7h5rs][aria-expanded=true] .menu-toggle__icon--close[data-astro-cid-nen7h5rs]{display:block}.site-footer[data-astro-cid-jo6i4kqk]{background:var(--footer-bg);color:var(--footer-fg);border-top:1px solid var(--rule);margin-top:var(--sp-9);padding:var(--sp-5) 0;font-family:var(--font-sans);letter-spacing:0}.footer-inner[data-astro-cid-jo6i4kqk]{align-items:center;gap:var(--sp-1);text-align:center;flex-direction:column;display:flex}@media (width>=640px){.footer-inner[data-astro-cid-jo6i4kqk]{justify-content:space-between;align-items:center;gap:var(--sp-5);text-align:left;flex-direction:row}}.footer-links[data-astro-cid-jo6i4kqk]{justify-content:center;align-items:center;column-gap:var(--sp-2);font-size:var(--fs-xs);flex-wrap:nowrap;line-height:1;display:flex}.footer-link[data-astro-cid-jo6i4kqk]{color:var(--footer-link);box-shadow:none;transition:color var(--dur-fast) var(--ease);background:0 0;align-items:center;gap:.35rem;text-decoration:none;display:inline-flex}.footer-link[data-astro-cid-jo6i4kqk]:hover,.footer-link[data-astro-cid-jo6i4kqk]:focus-visible{color:var(--ink);box-shadow:none;background:0 0;text-decoration:none}.footer-link__icon{color:currentColor;flex-shrink:0;align-self:center;width:.85em;height:.85em;display:block}.footer-link[data-astro-cid-jo6i4kqk]:hover .footer-link__icon,.footer-link[data-astro-cid-jo6i4kqk]:focus-visible .footer-link__icon{color:currentColor}@media (width>=640px){.footer-links[data-astro-cid-jo6i4kqk]{justify-content:flex-start}}.footer-meta[data-astro-cid-jo6i4kqk]{font-size:var(--fs-xs);line-height:var(--lh-loose);color:var(--footer-muted);text-wrap:wrap;margin:0}@media (width>=640px){.footer-meta[data-astro-cid-jo6i4kqk]{text-align:right;text-wrap:pretty}}.sep[data-astro-cid-jo6i4kqk]{color:var(--footer-muted);user-select:none}a[data-astro-cid-jo6i4kqk]{color:var(--footer-link);box-shadow:none;transition:color var(--dur-fast) var(--ease);background:0 0;text-decoration:none}a[data-astro-cid-jo6i4kqk]:hover{color:var(--ink);box-shadow:none;background:0 0;text-decoration:none}.gpg[data-astro-cid-jo6i4kqk]{color:var(--footer-muted)}html{--rgb-a:#ff0080;--rgb-b:#00e5ff;--rgb-a2:#f39;--rgb-b2:#3ef;--rgb-tx-1:-18px;--rgb-sx-1:18px;--rgb-sx-2:-18px;--rgb-tx-2:15px;--rgb-sx-3:-15px;--rgb-sx-4:15px;--rgb-tx-3:-12px;--rgb-sx-5:12px;--rgb-sx-6:-12px;--rgb-in-tx-0:20px;--rgb-in-sx-0:-20px;--rgb-in-sx-1:20px;--rgb-in-tx-1:-14px;--rgb-in-sx-2:14px;--rgb-in-sx-3:-14px}@keyframes page-rgb-out{0%{filter:none;opacity:1;transform:translate(0)}20%{transform:translate(var(--rgb-tx-1), var(--rgb-ty-1,0));filter:drop-shadow(var(--rgb-sx-1) var(--rgb-sy-1,0) var(--rgb-a)) drop-shadow(var(--rgb-sx-2) var(--rgb-sy-2,0) var(--rgb-b))}45%{transform:translate(var(--rgb-tx-2), var(--rgb-ty-2,0));filter:drop-shadow(var(--rgb-sx-3) var(--rgb-sy-3,0) var(--rgb-a2)) drop-shadow(var(--rgb-sx-4) var(--rgb-sy-4,0) var(--rgb-b2))}70%{transform:translate(var(--rgb-tx-3), var(--rgb-ty-3,0));filter:drop-shadow(var(--rgb-sx-5) var(--rgb-sy-5,2px) var(--rgb-a)) drop-shadow(var(--rgb-sx-6) var(--rgb-sy-6,-2px) var(--rgb-b))}to{filter:none;opacity:0;transform:translate(0)}}@keyframes page-rgb-in{0%{transform:translate(var(--rgb-in-tx-0), var(--rgb-in-ty-0,0));filter:drop-shadow(var(--rgb-in-sx-0) var(--rgb-in-sy-0,0) var(--rgb-a)) drop-shadow(var(--rgb-in-sx-1) var(--rgb-in-sy-1,0) var(--rgb-b));opacity:0}35%{transform:translate(var(--rgb-in-tx-1), var(--rgb-in-ty-1,0));filter:drop-shadow(var(--rgb-in-sx-2) var(--rgb-in-sy-2,0) var(--rgb-a2)) drop-shadow(var(--rgb-in-sx-3) var(--rgb-in-sy-3,0) var(--rgb-b2))}65%{transform:translate(var(--rgb-in-tx-2,4px), var(--rgb-in-ty-2,0));filter:drop-shadow(var(--rgb-in-sx-4,-4px) var(--rgb-in-sy-4,0) var(--rgb-a)) drop-shadow(var(--rgb-in-sx-5,4px) var(--rgb-in-sy-5,0) var(--rgb-b))}to{filter:none;opacity:1;transform:translate(0)}}html::view-transition-old(page-main){animation:.28s steps(8,end) both page-rgb-out!important}html::view-transition-new(page-main){animation:.28s steps(8,end) both page-rgb-in!important}@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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-outline-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;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--color-white:#fff;--spacing:.25rem;--font-weight-medium:500;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@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;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Helvetica,Arial,sans-serif;line-height:1.5}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-feature-settings:normal;font-variation-settings:normal;font-family:JetBrains Mono,ui-monospace,SF Mono,Menlo,Consolas,monospace;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{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}}@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}.fixed{position:fixed}.sticky{position:sticky}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.z-50{z-index:50}.col-1{grid-column:1}.col-2{grid-column:2}.col-3{grid-column:3}.col-4{grid-column:4}.col-5{grid-column:5}.col-6{grid-column:6}.col-7{grid-column:7}.col-8{grid-column:8}.col-9{grid-column:9}.col-10{grid-column:10}.col-11{grid-column:11}.col-12{grid-column:12}.float-left{float:left}.float-none{float:none}.float-right{float:right}.container{width:100%}@media (width>=450px){.container{max-width:450px}}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.m-1{margin:var(--spacing)}.m-2{margin:calc(var(--spacing) * 2)}.m-3{margin:calc(var(--spacing) * 3)}.m-4{margin:calc(var(--spacing) * 4)}.m-5{margin:calc(var(--spacing) * 5)}.m-6{margin:calc(var(--spacing) * 6)}.m-18{margin:calc(var(--spacing) * 18)}.m-1031{margin:calc(var(--spacing) * 1031)}.m-1615{margin:calc(var(--spacing) * 1615)}.mx-0{margin-inline:0}.mx-1{margin-inline:var(--spacing)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-5{margin-inline:calc(var(--spacing) * 5)}.mx-6{margin-inline:calc(var(--spacing) * 6)}.mx-auto{margin-inline:auto}.my-0{margin-block:0}.my-1{margin-block:var(--spacing)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.my-4{margin-block:calc(var(--spacing) * 4)}.my-5{margin-block:calc(var(--spacing) * 5)}.my-6{margin-block:calc(var(--spacing) * 6)}.prose{color:var(--ink);max-width:min(100%, var(--measure))}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:var(--lh-loose);text-align:inherit;margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--ink);word-break:break-word;text-decoration:underline;-webkit-text-decoration-color:var(--ink-3);-webkit-text-decoration-color:var(--ink-3);text-decoration-color:var(--ink-3);font-weight:500}@supports (color:color-mix(in lab, red, red)){.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){-webkit-text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule));-webkit-text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule));text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule))}}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){text-underline-offset:.14em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:var(--ink);-webkit-text-decoration-color:var(--ink-2);-webkit-text-decoration-color:var(--ink-2);text-decoration-color:var(--ink-2)}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--ink);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--rule);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--ink-2);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";border-left-color:var(--ink-3);background:0 0;border-left-width:2px;border-radius:0;margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--ink);font-size:.88em;font-weight:500;font-family:var(--font-mono)}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:var(--lh-loose)}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--ink-3)}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose{font-family:var(--font-body)}.prose :where(:focus-visible):not(:where([class~=not-prose],[class~=not-prose] *)){outline:2px dashed var(--accent)}.prose :where(h1,h2,h3,h4,h5,h6):not(:where([class~=not-prose],[class~=not-prose] *)){line-height:var(--lh-snug);text-align:inherit;font-family:var(--font-display);letter-spacing:-.01em;color:var(--ink);text-wrap:balance;font-weight:600}.prose :where(em):not(:where([class~=not-prose],[class~=not-prose] *)){font-style:italic}.prose :where(a.heading-link):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;text-decoration:none}.prose :where(a.heading-link):not(:where([class~=not-prose],[class~=not-prose] *)):hover{color:inherit;text-decoration:underline;-webkit-text-decoration-color:var(--ink-3);-webkit-text-decoration-color:var(--ink-3);text-decoration-color:var(--ink-3)}@supports (color:color-mix(in lab, red, red)){.prose :where(a.heading-link):not(:where([class~=not-prose],[class~=not-prose] *)):hover{-webkit-text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule));-webkit-text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule));text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule))}}.prose :where(a.heading-link):not(:where([class~=not-prose],[class~=not-prose] *)):hover{text-underline-offset:.14em}.prose :where(blockquote p):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:inherit;font-weight:400}.mt-0{margin-top:0}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mr-0{margin-right:0}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mr-4{margin-right:calc(var(--spacing) * 4)}.mr-5{margin-right:calc(var(--spacing) * 5)}.mr-6{margin-right:calc(var(--spacing) * 6)}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-0{margin-left:0}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-5{margin-left:calc(var(--spacing) * 5)}.ml-6{margin-left:calc(var(--spacing) * 6)}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.table{display:table}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-full{width:100%}.min-w-0{min-width:0}.flex-1{flex:1}.flex-auto{flex:auto}.flex-shrink{flex-shrink:1}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.table-fixed{table-layout:fixed}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.items-stretch{align-items:stretch}.gap-6{gap:calc(var(--spacing) * 6)}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-blue{border-color:#0571ff}.border-purple{border-color:#925fd4}.bg-blue{background-color:#0571ff}.bg-purple{background-color:#925fd4}.bg-white{background-color:var(--color-white)}.mask-repeat{mask-repeat:repeat}.p-0{padding:0}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0{padding-block:0}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-0{padding-top:0}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pr-0{padding-right:0}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pb-0{padding-bottom:0}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-20{padding-bottom:calc(var(--spacing) * 20)}.pl-0{padding-left:0}.pl-1{padding-left:var(--spacing)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-2xl{font-size:1.35rem}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.text-wrap{text-wrap:wrap}.text-blue{color:#0571ff}.text-inherit{color:inherit}.text-purple{color:#925fd4}.text-white{color:var(--color-white)}.italic{font-style:italic}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.invert{--tw-invert:invert(100%);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,)}.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,)}.backdrop-filter{backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (width>=40rem){.sm\:gap-8{gap:calc(var(--spacing) * 8)}.sm\:py-10{padding-block:calc(var(--spacing) * 10)}}@media (width>=48rem){.md\:flex-row{flex-direction:row}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-outline-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}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}:root{font-feature-settings:"kern" 1, "liga" 1, "calt" 1;--fs-xs:clamp(.75rem, .74rem + .06vw, .7813rem);--fs-sm:clamp(.875rem, .866rem + .06vw, .9063rem);--fs-base:1.03125rem;--fs-md:clamp(1.2rem, 1.176rem + .107vw, 1.2563rem);--fs-lg:clamp(1.44rem, 1.411rem + .129vw, 1.5075rem);--fs-xl:clamp(1.728rem, 1.693rem + .154vw, 1.809rem);--fs-2xl:clamp(2.074rem, 2.032rem + .185vw, 2.171rem);--lh-tight:1.1;--lh-snug:1.25;--lh-loose:1.6;--sp-1:4px;--sp-1_5:6px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--sp-8:64px;--sp-9:96px;--r-sm:0;--r-md:0;--r-lg:2px;--measure:746px;--measure-wide:840px;--ease:cubic-bezier(.6, 0, .4, 1);--dur-fast:.1s;--dur:.25s;--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Helvetica, Arial, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SF Mono", "Menlo", "Consolas", monospace;--font-display:var(--font-sans);--font-body:var(--font-sans);--font-meta:var(--font-sans);--success:#586358;--danger:#735858;--info:#585f68;--scrollbar-size:8px;--code-block-pad-block:var(--sp-2);--article-toc-max-width:200px;--article-grid-gap:var(--sp-7);--article-toc-breakpoint:1024px;--article-reading-width:calc(var(--measure-wide) + var(--article-toc-max-width) + var(--article-grid-gap));--article-single-width:calc(var(--measure-wide) + 2 * var(--site-gutter-inline));--site-gutter-inline:var(--sp-4);--site-max-width:min(1200px, calc(var(--article-reading-width) + 2 * var(--site-gutter-inline)))}html{scrollbar-gutter:stable;background:var(--paper);width:100%;color:var(--ink);font-family:var(--font-body);font-optical-sizing:auto;font-size:100%;line-height:var(--lh-loose)}body{width:100%;min-height:100vh;font-size:var(--fs-base);background:var(--paper);color:var(--ink);text-rendering:optimizelegibility;transition:color var(--dur) var(--ease);flex-direction:column;display:flex}@media (hover:none){a,button,input:is([type=button],[type=submit],[type=reset]),[role=button],summary{-webkit-tap-highlight-color:transparent}}@supports not selector(::-webkit-scrollbar){*{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}}::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}::-webkit-scrollbar-track{background:var(--scrollbar-track)}::-webkit-scrollbar-thumb{cursor:pointer;background:var(--scrollbar-thumb);background-clip:padding-box;border:1px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:var(--scrollbar-thumb-hover);background-clip:padding-box}::-webkit-scrollbar-corner{background:0 0}::selection{background:var(--accent-selection);color:var(--ink)}html.overlay-open{overflow:hidden}.search-overlay{z-index:80;padding:clamp(4rem, 12vh, 6rem) var(--site-gutter-inline) var(--sp-6);pointer-events:none;place-items:start center;display:grid;position:fixed;inset:0}.search-overlay[hidden]{display:none}.search-overlay.is-open{pointer-events:auto}.search-overlay__backdrop{background:var(--overlay-backdrop);opacity:0;transition:opacity var(--dur) var(--ease);position:absolute;inset:0}.search-overlay.is-open .search-overlay__backdrop{opacity:1}.search-overlay__dialog{background:var(--paper);border:1px solid var(--rule);opacity:0;width:min(520px,100%);height:auto;max-height:min(70vh,28rem);transition:opacity var(--dur) var(--ease), transform var(--dur) var(--ease);flex-direction:column;display:flex;position:relative;transform:translateY(-4px)}.search-overlay.is-open .search-overlay__dialog{opacity:1;transform:translateY(0)}.search-overlay__input{width:100%;padding:var(--sp-3) var(--sp-4);border:0;border-bottom:1px solid var(--rule);color:var(--ink);font-family:var(--font-body);font-size:var(--fs-sm);outline-offset:0;box-shadow:none;appearance:none;background:0 0;border-radius:0;outline:none;flex:none;margin:0;line-height:1.4;display:block}.search-overlay__input:focus,.search-overlay__input:focus-visible{border:0;border-bottom:1px solid var(--rule);box-shadow:none;outline:none}.search-overlay__input::placeholder{color:var(--ink-3)}.search-overlay__empty{padding:var(--sp-4);font-family:var(--font-body);font-size:var(--fs-xs);color:var(--ink-3);text-align:center;margin:0}.search-overlay__results{flex:0 auto;min-height:0;max-height:min(50vh,20rem);margin:0;padding:0;list-style:none;overflow:auto}.search-overlay__results:empty{display:none}.search-overlay__item.is-active .search-hit{background:var(--tint)}.search-hit{padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--rule);color:inherit;box-shadow:none;transition:background-color var(--dur-fast) var(--ease);background:0 0;text-decoration:none;display:block}.search-hit:hover,.search-hit:focus-visible,.search-hit:visited,.search-hit:visited:hover{color:inherit;background:var(--tint);box-shadow:none;outline:none;text-decoration:none}.search-hit__title{font-family:var(--font-display);font-size:var(--fs-sm);font-weight:600;line-height:var(--lh-snug);letter-spacing:-.005em;color:var(--ink);display:block}.search-hit__meta{font-family:var(--font-meta);font-size:var(--fs-xs);color:var(--ink-3);margin-top:.2rem;line-height:1.2;display:block}.search-hit__desc{-webkit-line-clamp:2;font-family:var(--font-body);font-size:var(--fs-xs);color:var(--ink-2);text-wrap:pretty;-webkit-box-orient:vertical;margin-top:.35rem;line-height:1.5;display:-webkit-box;overflow:hidden}.nav-overlay{z-index:80;pointer-events:none;place-items:stretch end;padding:0;display:grid;position:fixed;inset:0}.nav-overlay[hidden]{display:none}.nav-overlay.is-open{pointer-events:auto}.nav-overlay__backdrop{background:var(--overlay-backdrop);opacity:0;transition:opacity var(--dur) var(--ease);position:absolute;inset:0}.nav-overlay.is-open .nav-overlay__backdrop{opacity:1}.nav-overlay__dialog{background:var(--surface-card);border:0;border-left:1px dashed var(--rule-dashed);width:min(20rem,92vw);height:100%;box-shadow:-10px 0 36px color-mix(in srgb, var(--ink) 10%, transparent);opacity:0;transition:opacity var(--dur) var(--ease), transform var(--dur) var(--ease);flex-direction:column;display:flex;position:relative;overflow:hidden;transform:translate(100%)}.nav-overlay.is-open .nav-overlay__dialog{opacity:1;transform:translate(0)}.nav-overlay__scroll{flex-direction:column;flex:auto;min-height:0;display:flex;overflow:auto}.nav-overlay__search{z-index:1;border-bottom:1px dashed var(--rule-dashed);background:color-mix(in srgb, black 3%, var(--surface-card));flex:none;position:sticky;top:0}.nav-overlay__search-field{position:relative}.nav-overlay__search-icon{top:50%;left:var(--sp-3);width:1rem;height:1rem;color:var(--ink-3);pointer-events:none;position:absolute;transform:translateY(-50%)}.nav-overlay__input{width:100%;padding:var(--sp-3) var(--sp-3) var(--sp-3) calc(var(--sp-3) + 1rem + var(--sp-2));color:var(--ink);font-family:var(--font-body);font-size:var(--fs-sm);box-shadow:none;appearance:none;background:0 0;border:0;border-radius:0;outline:none;margin:0;line-height:1.4;display:block}.nav-overlay__input::placeholder{color:var(--ink-3)}.nav-overlay__input:focus,.nav-overlay__input:focus-visible{box-shadow:none;outline:none}.nav-overlay__results-wrap{border-bottom:1px dashed var(--rule-dashed);flex:none}.nav-overlay__results-wrap[hidden]{display:none}.nav-overlay.is-searching .nav-overlay__results-wrap{border-bottom:0;flex-direction:column;flex:auto;min-height:0;display:flex}.nav-overlay.is-searching .nav-overlay__results{flex:auto;max-height:none}.nav-overlay__nav[hidden]{display:none}.nav-overlay__empty{padding:var(--sp-3) var(--sp-4);font-family:var(--font-body);font-size:var(--fs-xs);color:var(--ink-3);text-align:left;margin:0}.nav-overlay__empty[hidden]{display:none}.nav-overlay__results{max-height:min(40vh,16rem);margin:0;padding:0;list-style:none;overflow:auto}.nav-overlay__results:empty{display:none}.nav-overlay__results .search-overlay__item.is-active .search-hit{background:color-mix(in srgb, var(--accent) 7%, var(--surface-card))}.nav-overlay__results .search-overlay__item:first-child .search-hit{border-top:0}.nav-overlay__nav{padding:0 0 var(--sp-4);flex:1 0 auto}.nav-overlay__list{margin:0;padding:0;list-style:none}.nav-overlay__item.is-active .nav-overlay__link{background:color-mix(in srgb, var(--accent) 7%, var(--surface-card));color:var(--ink)}.nav-overlay__item:first-child .nav-overlay__link{border-top:0}.nav-overlay__link{padding:var(--sp-3) var(--sp-4);border-top:1px dashed var(--rule-dashed);color:var(--ink-2);box-shadow:none;transition:background-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);background:0 0;text-decoration:none;display:block}.nav-overlay__link:hover,.nav-overlay__link:focus-visible{color:var(--ink);background:color-mix(in srgb, var(--accent) 5%, var(--surface-card));outline:none;text-decoration:none}.nav-overlay__link-text{align-items:baseline;gap:var(--sp-1);font-family:var(--font-display);font-size:1rem;font-weight:500;line-height:var(--lh-snug);letter-spacing:-.005em;display:flex}.nav-overlay__link-text:before{font-family:var(--font-mono);letter-spacing:.04em;color:var(--ink-3);flex:0 0 1.5rem;font-size:11px}.nav-overlay__item:first-child .nav-overlay__link-text:before{content:"01"}.nav-overlay__item:nth-child(2) .nav-overlay__link-text:before{content:"02"}.nav-overlay__item:nth-child(3) .nav-overlay__link-text:before{content:"03"}.nav-overlay__item:nth-child(4) .nav-overlay__link-text:before{content:"04"}.nav-overlay__item:nth-child(5) .nav-overlay__link-text:before{content:"05"}.nav-overlay__item:nth-child(6) .nav-overlay__link-text:before{content:"06"}.nav-overlay__item.is-active .nav-overlay__link-text{color:var(--ink);font-weight:600}.nav-overlay__item.is-active .nav-overlay__link-text:before{color:var(--accent);font-weight:600}@media (width>=768px){.nav-overlay{display:none!important}}@media (width<=767px){.nav-overlay{inset:auto 0 0;top:var(--site-header-height,3.5rem);z-index:40}.nav-overlay__dialog{border-top:1px dashed var(--rule-dashed)}#cmdk.search-overlay{display:none!important}}.post-ledger{grid-template-columns:max-content 1fr;min-width:0;max-width:100%;display:grid}.post-ledger__row{grid-column:1/-1;grid-template-columns:subgrid;gap:var(--sp-4);margin-inline:calc(-1 * var(--sp-3));padding:var(--sp-3);border-bottom:1px solid var(--rule);color:inherit;align-items:start;min-width:0;max-width:100%;text-decoration:none;display:grid}.post-ledger__row:focus-visible{outline:2px solid var(--accent-pop);outline-offset:-2px}.post-ledger__when{flex-direction:column;gap:2px;padding-top:.25em;display:flex}.post-ledger__date{font-family:var(--font-meta);font-size:var(--fs-xs);color:var(--ink-3);letter-spacing:.01em;font-variant-numeric:tabular-nums;white-space:nowrap}.post-ledger__mins{font-family:var(--font-meta);font-size:var(--fs-xs);color:var(--ink-3);font-variant-numeric:tabular-nums;white-space:nowrap;opacity:.75}.post-ledger__main{flex-direction:column;min-width:0;display:flex}.post-ledger__title{font-family:var(--font-display);font-weight:600;font-size:var(--fs-base);line-height:var(--lh-snug);letter-spacing:-.005em;color:var(--ink);overflow-wrap:anywhere;transition:color var(--dur-fast) var(--ease);align-self:start;margin:0 0 .35em}.post-ledger__desc{font-family:var(--font-body);font-size:var(--fs-sm);color:var(--ink-2);text-wrap:pretty;margin:0;line-height:1.55}.post-ledger__row:hover .post-ledger__title,.post-ledger__row:focus-visible .post-ledger__title{color:var(--accent-pop-text)}@media (width<=640px){.post-ledger{grid-template-columns:1fr}.post-ledger__row{gap:var(--sp-1)}.post-ledger__when{align-items:baseline;gap:var(--sp-2);flex-direction:row;padding-top:0}}.projects-page,.project-grid{width:100%}.project-grid{gap:var(--sp-7);grid-template-columns:minmax(0,1fr);display:grid}.project-item{align-items:flex-start;gap:var(--sp-3);flex-direction:column;min-width:0;display:flex}.project-item__title{font-family:var(--font-display);font-size:var(--fs-md);font-weight:650;line-height:var(--lh-snug);letter-spacing:-.015em;color:var(--heading);margin:0}.project-item__desc{max-width:58ch;font-family:var(--font-body);font-size:var(--fs-sm);color:var(--ink-2);text-wrap:pretty;margin:0;line-height:1.55}.project-item__tags{gap:var(--sp-1) var(--sp-2);font-family:var(--font-meta);font-size:var(--fs-xs);color:var(--ink-3);flex-wrap:wrap;margin:0;padding:0;line-height:1.5;list-style:none;display:flex}.project-item__tags li{align-items:baseline;display:inline-flex}.project-item__tags li:not(:last-child):after{content:"·";color:var(--ink-3);opacity:.65;margin-inline-start:var(--sp-2)}.project-item__actions{align-items:center;gap:var(--sp-2);flex-wrap:wrap;display:flex}.project-item__action-icon{flex-shrink:0;width:1em;height:1em;display:block}@media (width>=768px){.project-grid{column-gap:var(--sp-8);row-gap:var(--sp-7);grid-template-columns:repeat(2,minmax(0,1fr))}}.contact-form{gap:var(--sp-4);width:100%;max-width:var(--measure);flex-direction:column;display:flex}.contact-form__fields{gap:var(--sp-4);grid-template-columns:minmax(0,1fr);display:grid}.contact-form__row{gap:var(--sp-2);flex-direction:column;min-width:0;display:flex}.contact-form__row input,.contact-form__row textarea{border-color:var(--rule);background:0 0;width:100%}.contact-form__row input{min-height:2.75rem}.contact-form__row textarea{resize:vertical;min-height:9rem}.contact-form__actions{align-items:center;gap:var(--sp-2);flex-wrap:wrap;display:flex}.contact-form__submit{align-self:flex-start}.contact-form__submit[disabled]{opacity:.6;cursor:default}.contact-success{align-items:flex-start;gap:var(--sp-4);width:100%;max-width:var(--measure);flex-direction:column;display:flex}.contact-success__message{font-family:var(--font-body);font-size:var(--fs-base);color:var(--ink-2);text-wrap:pretty;margin:0;line-height:1.55}@media (width>=640px){.contact-form__fields{grid-template-columns:repeat(2,minmax(0,1fr))}.contact-form__row--message{grid-column:1/-1}}.container{width:100%;max-width:var(--site-max-width);padding-inline:var(--site-gutter-inline);font-size:var(--fs-base);margin-inline:auto}.glass{background-color:var(--paper)}.card-surface{background:var(--paper-2);border:1px solid var(--rule);border-radius:var(--r-md);box-shadow:none}.card-surface:hover{border-color:color-mix(in srgb, var(--accent) 20%, var(--rule))}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:600;line-height:var(--lh-snug);letter-spacing:-.01em;text-wrap:balance;color:var(--heading);overflow-wrap:break-word;scroll-margin-top:88px}h1{letter-spacing:-.02em;font-weight:700}p{text-wrap:pretty;overflow-wrap:break-word}code{font-family:var(--font-mono);background:var(--code-inline-bg);border-radius:var(--r-sm);color:var(--ink);padding:.1em .35em;font-size:.88em;font-weight:500}mark{line-height:inherit;text-wrap:pretty;border-radius:var(--r-sm);color:var(--on-accent-pop);box-shadow:none;background:var(--accent-pop);box-decoration-break:clone;padding:.04em .12em;display:inline}mark.red{color:var(--danger);background:var(--mark-red)}del{text-decoration:line-through;text-decoration-color:color-mix(in srgb, var(--ink) 70%, var(--paper));text-decoration-skip-ink:auto;text-decoration-thickness:1.4px;display:inline}main{flex-direction:column;flex:1;width:100%;display:flex}main a{color:var(--link);text-decoration:none}main a:hover{color:var(--link-hover);text-decoration-color:currentColor}main a:active{color:var(--link-active);text-decoration-color:var(--link-active)}main a:visited{color:var(--link-visited);text-decoration-color:color-mix(in srgb, var(--link-visited) 50%, var(--paper) 50%)}main a:visited:hover{color:var(--link-hover);text-decoration-color:var(--link-hover)}main .prose a:not(.heading-link){color:var(--ink);text-decoration:underline;text-decoration-color:var(--ink);text-underline-offset:3px;text-decoration-thickness:1px}main .prose a:not(.heading-link):hover,main .prose a:not(.heading-link):focus-visible{color:var(--accent-pop-text);text-decoration-color:var(--accent-pop-text)}main .prose a:not(.heading-link):visited{color:var(--ink-2);text-decoration-color:var(--ink)}main .prose a:not(.heading-link):visited:hover,main .prose a:not(.heading-link):visited:focus-visible{color:var(--accent-pop-text);text-decoration-color:var(--accent-pop-text)}main .prose h1,main .prose h2,main .prose h3,main .prose h4{position:relative}main .prose a.heading-link,main .prose a.heading-link:visited{color:inherit;font-weight:inherit;box-shadow:none;background:0 0;text-decoration:none;display:inline-block;position:relative}main .prose a.heading-link:after,main .prose a.heading-link:visited:after{content:"#";opacity:0;color:color-mix(in srgb, var(--ink) 40%, var(--paper));font-weight:500;transition:opacity .15s;position:absolute;top:50%;left:-.9em;transform:translateY(-50%)}main .prose a.heading-link:focus-visible,main .prose a.heading-link:visited:focus-visible{color:inherit;text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule));text-underline-offset:.14em;box-shadow:none;background:0 0;text-decoration-thickness:1px}@media (hover:hover){main .prose a.heading-link:hover,main .prose a.heading-link:visited:hover{color:inherit;text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule));text-underline-offset:.14em;box-shadow:none;background:0 0;text-decoration-thickness:1px}main .prose h1:hover .heading-link:after,main .prose h2:hover .heading-link:after,main .prose h3:hover .heading-link:after,main .prose h4:hover .heading-link:after{opacity:.9}}main .toc__list a,main a.post-row,main a.bare{box-shadow:none;background:0 0;text-decoration:none}.toc__list{font-size:inherit;margin:0;padding:0;line-height:1.4;list-style:none}.toc__list li{margin:.15rem 0;position:relative}.toc__list li.lvl1,.toc__list li.lvl2{padding-left:0}.toc__list li.lvl3{padding-left:.75rem}.toc__list li.lvl4{padding-left:1.5rem}main .toc__list a{color:var(--ink-3);box-shadow:none;background:0 0;padding:.15rem 0;text-decoration:none;display:block}main .toc__list a:hover,main .toc__list a:focus-visible,main .toc__list a:visited:hover,main .toc__list a:visited:focus-visible{color:var(--ink)}main .toc__list a:visited{color:var(--ink-3)}main .toc__list a.active{color:var(--ink);font-weight:600}input,textarea{border-radius:var(--r-md);outline-offset:2px;background:var(--paper);color:var(--ink);border:1px solid var(--rule);font-family:var(--font-sans);font-size:var(--fs-sm);outline:2px solid #0000;padding:.5rem .75rem}input:focus,textarea:focus{border-color:var(--accent-pop);box-shadow:none}.form-label{font-family:var(--font-sans);font-size:var(--fs-sm);color:var(--ink-2)}main .prose{--tw-prose-body:var(--ink);--tw-prose-links:var(--ink);max-width:var(--measure);font-family:var(--font-body);font-size:var(--fs-base);line-height:var(--lh-loose);color:var(--ink)}main .prose h1,main .prose h2{font-family:var(--font-display)}main .prose h1{font-size:var(--fs-xl);letter-spacing:-.02em;margin:1.6em 0 .8em;font-weight:700}main .prose h2{font-size:var(--fs-lg);letter-spacing:-.01em;margin:2em 0 .85em;font-weight:700}main .prose h3{font-size:var(--fs-md);margin:1.6em 0 .8em;font-weight:600}main .prose h4{font-family:var(--font-meta);font-size:var(--fs-base);margin:1.8em 0 .7em;font-weight:600}main .prose p{margin:0 0 1.25em}main .prose ul,main .prose ol{margin-top:0;margin-bottom:1em;padding-inline-start:1.625em}main .prose ul{list-style-type:disc}main .prose ol{list-style-type:decimal}main .prose li{margin-block:.125em;padding-inline-start:.375em}main .prose li::marker{color:var(--ink-3)}main .prose li p{margin-block:0}main .prose strong{color:var(--ink);font-weight:600}main .prose>:is(iframe,video,embed,figure,.expressive-code,.inset-surface,blockquote,table,hr,pre),main .prose>.flex{margin-block:var(--sp-5)}main .prose>iframe,main .prose>video,main .prose>embed{border:1px solid var(--rule);border-radius:var(--r-md);background:var(--tint);width:100%;max-width:100%;display:block}main .prose .flex{align-items:center;gap:var(--sp-4);flex-wrap:wrap;min-width:0;max-width:100%;display:flex}main .prose .flex>*{min-width:0}main .prose .flex>img,main .prose .flex>picture,main .prose .flex>svg{flex:0 auto;width:auto;max-width:min(100%,20rem);height:auto;margin:0}main .prose .flex>div,main .prose .flex>p{flex:14rem;margin:0}@media (width<=640px){main .prose .flex{flex-direction:column;align-items:stretch}main .prose .flex>img,main .prose .flex>picture,main .prose .flex>svg{max-width:100%}}main .prose hr{border:0;border-top:1px solid var(--rule);margin:var(--sp-7) 0}main .prose blockquote{margin:var(--sp-5) 0;padding:var(--sp-2) var(--sp-5);border-left:2px solid var(--ink-3);color:var(--ink-2);background:0 0;border-radius:0;font-style:italic}main .prose blockquote p{font-size:inherit;font-weight:inherit;margin:0 0 .6em}main .prose blockquote p:last-child{margin:0}main .prose img{border-radius:var(--r-md);border:1px solid var(--rule);max-width:100%;height:auto;display:block}main .prose a img{border:0}main .prose figure{margin:var(--sp-5) 0}main .prose figcaption{font-family:var(--font-meta);font-size:var(--fs-xs);color:var(--ink-2);text-align:center;margin-top:var(--sp-2);letter-spacing:.02em}main .prose table{border-collapse:collapse;width:100%;margin:var(--sp-5) 0;font-size:var(--fs-sm);background:0 0}main .prose th,main .prose td{text-align:left;padding:var(--sp-3);border-bottom:1px solid var(--rule)}main .prose th{font-family:var(--font-meta);color:var(--ink-2);font-weight:600;font-size:var(--fs-xs);border-bottom-width:2px;border-bottom-color:var(--ink-2)}main .prose :where(a):not(.heading-link){color:var(--ink);text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule))}main .prose :where(a):not(.heading-link):hover,main .prose :where(a):not(.heading-link):focus-visible{color:var(--ink);text-decoration-color:var(--ink-2)}main .prose :where(a):not(.heading-link):visited{color:var(--ink-2)}main .prose :where(a):not(.heading-link):visited:hover,main .prose :where(a):not(.heading-link):visited:focus-visible{color:var(--ink);text-decoration-color:var(--ink-2)}main .prose :where(a.heading-link){color:inherit;box-shadow:none;background:0 0;text-decoration:none}main .prose :where(a.heading-link):focus-visible,main .prose :where(a.heading-link):visited:focus-visible{color:inherit;text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule));text-underline-offset:.14em;box-shadow:none;background:0 0;text-decoration-thickness:1px}main .prose :where(a.heading-link):visited{color:inherit;text-decoration:none}@media (hover:hover){main .expressive-code :where(a.heading-link:hover),main .expressive-code :where(a.heading-link:visited:hover){color:inherit;text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule));text-underline-offset:.14em;box-shadow:none;background:0 0;text-decoration-thickness:1px}}main .expressive-code{box-shadow:none;background:0 0;border:0;border-radius:0;overflow:visible}main .expressive-code pre>code{padding-block:calc(var(--code-block-pad-block) + .04em) calc(var(--code-block-pad-block) - .04em);line-height:var(--ec-codeLineHt);position:relative}main .expressive-code pre>code:before{content:"";border-inline-start:1px dashed var(--rule-dashed);pointer-events:none;position-anchor:--ec-gutter;width:0;position:absolute;inset-block:0;inset-inline-start:anchor(end)}main .expressive-code :nth-child(1 of .ec-line) .gutter{anchor-name:--ec-gutter}main .expressive-code .ec-line{line-height:var(--ec-codeLineHt);align-items:start}main .expressive-code .ec-line .gutter{position:relative}main .expressive-code .ec-line .code,main .expressive-code .gutter .ln{line-height:var(--ec-codeLineHt);font-size:var(--ec-codeFontSize,.85rem);padding-block:0}main .expressive-code .gutter .ln{text-align:right;box-sizing:content-box;min-width:var(--lnWidth,2ch);color:color-mix(in srgb, var(--rule) 50%, var(--ink-3));padding-inline:1ch 1.25ch;display:block}main .expressive-code .ec-line .code{min-height:calc(var(--ec-codeFontSize,.85rem) * var(--ec-codeLineHt));position:relative;border-inline-start:none!important}main .expressive-code pre.wrap .ec-line .code{white-space:pre-wrap;overflow-wrap:break-word}main .expressive-code .ec-line div.code{padding-inline-start:.5em}main .expressive-code pre{box-shadow:none;background:0 0;border:0!important;border-radius:0!important}:root[data-theme] main .expressive-code:not([data-theme=dark]){--ec-codePadBlk:0;--ec-codePadInl:0;--ec-uiPadBlk:0;--ec-uiPadInl:.25rem;--ec-codeLineHt:1.4}:root[data-theme] main .expressive-code:not([data-theme=dark]) pre:is([data-language=plaintext],[data-language=text],[data-language=txt],[data-language=ansi]){--ec-codeLineHt:1.2}:root[data-theme] main .expressive-code:not([data-theme=dark]){--ec-gtrBrdWd:1px;--ec-frm-edTabsMargBlkStart:0;--ec-frm-edTabsMargInlStart:0;--ec-codeBg:transparent;--ec-frm-edBg:transparent;--ec-codeFg:var(--ink);--ec-brdCol:var(--rule);--ec-brdRad:var(--r-sm);--ec-frm-shdCol:transparent;--ec-codeFontFml:var(--font-mono);--ec-uiFontFml:var(--font-meta);--ec-uiFontSize:var(--fs-xs);--ec-codeSelBg:var(--accent-selection);--ec-uiSelBg:var(--accent-selection);--ec-uiSelFg:var(--ink);--ec-focusBrd:var(--accent-pop);--ec-gtrFg:var(--ink-3);--ec-gtrHlFg:var(--ink-2);--ec-gtrBrdCol:var(--rule);--ec-lineNumbers-fg:var(--ink-3);--ec-lineNumbers-hlFg:var(--ink-2);--ec-frm-edActTabFg:var(--ink-2);--ec-frm-edTabBarBrdCol:var(--rule);--ec-frm-trmBg:transparent;--ec-frm-trmTtbBg:transparent;--ec-frm-trmTtbFg:var(--ink-3);--ec-frm-trmTtbBrdBtmCol:var(--rule);--ec-frm-inlBtnFg:var(--ink-2);--ec-frm-inlBtnBrd:var(--rule);--ec-frm-inlBtnBrdOpa:1;--ec-frm-inlBtnBgIdleOpa:0;--ec-frm-inlBtnBgHoverOrFocusOpa:0;--ec-frm-inlBtnBgActOpa:0;--ec-frm-tooltipSuccessBg:var(--ink);--ec-frm-tooltipSuccessFg:var(--paper)}main .expressive-code pre::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);background-clip:padding-box;border:1px solid #0000}main .expressive-code pre::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover)}main .expressive-code .frame{border:1px dashed var(--rule-dashed);box-shadow:none;background:0 0;border-radius:0;overflow:hidden}main .expressive-code .frame pre{background:0 0}main .expressive-code .frame .copy{z-index:2}main .expressive-code .frame .copy button{width:1.25rem;height:1.25rem}main .expressive-code .frame .copy button:hover,main .expressive-code .frame .copy button:focus-visible{background:color-mix(in srgb, var(--ink) 26%, var(--paper))}main .expressive-code .frame .copy button:active{background:color-mix(in srgb, var(--ink) 34%, var(--paper))}main .expressive-code .frame .copy button:after{margin:.25rem}main .expressive-code .frame.has-title:not(.is-terminal),main .expressive-code .frame.is-terminal{--button-spacing:var(--sp-1)}main .expressive-code .frame .header{min-height:0;padding:var(--sp-2) var(--sp-3);border:none;border-bottom:1px dashed var(--rule-dashed);border-radius:0;align-items:center;margin:0;display:flex;background:no-repeat!important;padding-inline-start:var(--sp-3)!important}main .expressive-code .frame .header:before,main .expressive-code .frame .header:after{content:none!important;display:none!important}main .expressive-code .frame.has-title:not(.is-terminal) .header,main .expressive-code .frame.is-terminal .header{padding-inline-end:calc(2.5rem + var(--sp-2))}main .expressive-code .frame:not(.has-title):not(.is-terminal) .header{display:none!important}main .expressive-code .frame .title{box-shadow:none;font-family:var(--font-meta);font-size:var(--fs-xs);letter-spacing:.01em;border-radius:0;font-weight:600;line-height:1;overflow:visible;color:var(--ink-3)!important;background:0 0!important;border:none!important;margin:0!important;padding:0!important;position:static!important}main .expressive-code .frame .title:after{content:none!important;display:none!important}main.article-page.container{padding-top:var(--sp-4);padding-bottom:var(--sp-8);width:100%;max-width:min(var(--article-single-width), 100%)}@media (width<=639px){main.article-page.container{padding-bottom:0}main.article-page.container+.site-footer{margin-top:var(--sp-6)}}.article-content{width:100%;min-width:0}@media (width>=1024px){main.article-page.container{max-width:min(var(--site-max-width), 100%)}.article-body-grid{grid-template-columns:minmax(0, var(--measure-wide)) var(--article-toc-max-width);gap:var(--article-grid-gap);align-items:start;display:grid}}.article-body-grid .prose{max-width:var(--measure-wide);width:100%;padding-top:var(--sp-5)}.article-body-grid .prose>*{max-width:var(--measure)}.article-body-grid .prose p{text-align:justify;hyphens:auto}.article-body-grid .prose p.is-ragged{text-align:start}@media not all and (width>=640px){.article-body-grid .prose p{text-align:start}}html.justif-pending .article-body-grid .prose{visibility:hidden}.article-head{width:100%;max-width:var(--measure);padding-block:var(--sp-4) var(--sp-6);border-bottom:1px dashed var(--rule-dashed);flex-direction:column;margin:0;display:flex}.article-head__core{gap:var(--sp-4);flex-direction:column;min-width:0;display:flex;container-type:inline-size}.article-title{font-family:var(--font-display);letter-spacing:-.02em;font-weight:700;line-height:var(--lh-tight);text-wrap:balance;color:var(--heading);font-size:var(--fs-2xl)}.article-lede{font-size:var(--fs-md);color:var(--ink-2);max-width:var(--measure);text-wrap:pretty;line-height:1.45}.article-body-grid .prose>:first-child{margin-top:0}.cta-action{border:1px solid color-mix(in srgb, var(--ink) 25%, var(--rule));border-radius:var(--r-md);background:var(--paper);color:var(--ink);font-family:var(--font-meta);font-size:var(--fs-sm);white-space:nowrap;cursor:pointer;transition:border-color var(--dur-fast) var(--ease), background-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);align-items:center;padding:.45rem .9rem;font-weight:500;line-height:1.25;text-decoration:none;display:inline-flex}.cta-action:hover,.cta-action:focus-visible{color:var(--ink);border-color:var(--ink);background:var(--tint)}.cta-action:active{transform:translateY(1px)}.cta-action:visited{color:var(--ink)}.cta-action:visited:hover,.cta-action:visited:focus-visible{color:var(--ink);border-color:var(--ink);background:var(--tint)}.cta-action:focus-visible{outline:2px solid color-mix(in srgb, var(--ink) 25%, transparent);outline-offset:2px}.cta-action.project-item__action{border-radius:var(--r-lg);background:color-mix(in srgb, var(--ink) 12%, var(--paper));color:var(--ink);font-size:var(--fs-xs);border-color:#0000;gap:.45rem;padding:.5rem .75rem}.cta-action.project-item__action:hover,.cta-action.project-item__action:focus-visible,.cta-action.project-item__action:visited:hover,.cta-action.project-item__action:visited:focus-visible{background:color-mix(in srgb, var(--ink) 18%, var(--paper));color:var(--ink);border-color:#0000}.cta-action--primary,.cta-action--primary:visited{border-color:var(--ink);background:var(--ink);color:var(--paper)}.cta-action--primary:hover,.cta-action--primary:focus-visible,.cta-action--primary:visited:hover,.cta-action--primary:visited:focus-visible{border-color:var(--accent-pop);background:var(--accent-pop);color:var(--on-accent-pop)}.text-muted{color:var(--ink-2)}.badge{font-size:var(--fs-xs);border:1px solid var(--rule);border-radius:var(--r-sm);background:var(--tint);color:var(--ink-2);padding:2px 8px;display:inline-block}.badge-topic{background:color-mix(in srgb, var(--ink) 6%, var(--paper));border-color:var(--rule);color:var(--ink-2)}.badge-stack{background:color-mix(in srgb, var(--info) 12%, var(--paper));border-color:color-mix(in srgb, var(--info) 35%, var(--rule));color:var(--info)}.inset-surface{padding:var(--sp-5);background:var(--paper-2);border:1px solid var(--rule);border-radius:var(--r-md);margin-block:var(--sp-5)}.inset-surface+.inset-surface,.inset-surface.mt-4{margin-top:var(--sp-4)}.inset-surface>mark{margin:0 0 var(--sp-4);padding:0 0 var(--sp-4);box-shadow:none;border-bottom:1px solid var(--rule);color:var(--ink-2);background:0 0;border-radius:0;font-size:1.05rem;font-style:italic;line-height:1.5;display:block}.inset-surface table{table-layout:fixed;border-collapse:collapse;width:100%;font-size:var(--fs-sm);line-height:1.45}.inset-surface thead th{padding:0 0 var(--sp-3);border-bottom:1px solid var(--rule);font-family:var(--font-meta);font-size:var(--fs-xs);color:var(--ink-3);text-align:left;vertical-align:bottom;font-weight:600}.inset-surface th,.inset-surface td{padding:var(--sp-3) var(--sp-4) var(--sp-3) 0;border-bottom:1px solid color-mix(in srgb, var(--rule) 70%, transparent);vertical-align:middle}.inset-surface tbody td:first-child,.inset-surface thead th:first-child{width:38%;padding-right:var(--sp-5)}.inset-surface tbody td:nth-child(2),.inset-surface thead th:nth-child(2){white-space:nowrap;width:24%}.inset-surface tbody td:nth-child(3),.inset-surface thead th:nth-child(3){width:38%}.inset-surface tr:last-child td{border-bottom:0;padding-bottom:0}.inset-surface a{color:var(--ink);text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--ink-3) 55%, var(--rule));text-underline-offset:.12em}.inset-surface a:hover,.inset-surface a:focus-visible{color:var(--ink);text-decoration-color:var(--ink-2)}.inset-surface a:visited{color:var(--ink-2)}.mdx-model-name{color:var(--ink);font-family:var(--font-mono);font-size:var(--fs-xs);white-space:nowrap;padding-right:var(--sp-2)}main .post-row{gap:var(--sp-4);padding:var(--sp-3) 0;border-bottom:1px solid var(--rule);color:inherit;transition:background-color var(--dur-fast) var(--ease);grid-template-columns:max-content 1fr;text-decoration:none;display:grid}main .post-row:hover{background:var(--tint)}main .post-row .post-date{font-family:var(--font-meta);font-size:var(--fs-xs);color:var(--ink-3);letter-spacing:.01em;text-transform:none;white-space:nowrap;font-variant-numeric:tabular-nums;padding-top:.25em}main .post-row .post-date .dot{color:var(--ink-3);margin:0 .35em}main .post-row h2,main .post-row h3{font-family:var(--font-display);font-weight:600;font-size:var(--fs-base);line-height:var(--lh-snug);letter-spacing:-.005em;color:var(--ink);margin:0 0 .35em}main .post-row .post-lede{font-family:var(--font-body);font-size:var(--fs-sm);color:var(--ink-2);text-wrap:pretty;margin:0;line-height:1.55}@media (width<=640px){main .post-row{gap:var(--sp-1);grid-template-columns:1fr}main .post-row .post-date{padding-top:0}}main .blog-page,main .projects-page{width:100%}main .page-masthead{gap:var(--sp-3);flex-direction:column;width:100%;display:flex}main .page-masthead__title-row{justify-content:space-between;align-items:baseline;gap:var(--sp-4);width:100%;display:flex}main .page-masthead__meta{font-family:var(--font-meta);font-size:var(--fs-xs);color:var(--ink-3);flex-shrink:0;font-weight:400;line-height:1}main .page-masthead__title{font-family:var(--font-display);font-size:var(--fs-xl);font-weight:700;line-height:var(--lh-tight);letter-spacing:-.02em;color:var(--heading);text-wrap:balance;margin:0}main .page-masthead__deck{max-width:var(--measure);font-family:var(--font-body);font-size:var(--fs-base);color:var(--ink-2);text-wrap:pretty;margin:0;line-height:1.55}@media (width<=639px){main .page-masthead__title-row{align-items:flex-start}main .page-masthead__meta{padding-top:.55em}}
