@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}@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-space-y-reverse:0;--tw-border-style:solid;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Atkinson Hyperlegible", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--color-neutral-100:oklch(97% 0 none);--color-neutral-200:oklch(92.2% 0 none);--color-neutral-400:oklch(70.8% 0 none);--color-neutral-500:oklch(55.6% 0 none);--color-neutral-700:oklch(37.1% 0 none);--color-neutral-800:oklch(26.9% 0 none);--color-neutral-900:oklch(20.5% 0 none);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-sm:40rem;--breakpoint-md:48rem;--breakpoint-lg:64rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--radius-sm:.25rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@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}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.static{position:static}.inset-0{inset:0}.left-full{left:100%}.z-40{z-index:40}.mx-auto{margin-inline:auto}.mt-5{margin-top:calc(var(--spacing) * 5)}.block{display:block}.flex{display:flex}.hidden{display:none}.table{display:table}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-full{width:100%;height:100%}.h-0{height:0}.h-full{height:100%}.w-fit{width:fit-content}.w-full{width:100%}.max-w-screen-2xl{max-width:var(--breakpoint-2xl)}.max-w-screen-lg{max-width:var(--breakpoint-lg)}.max-w-screen-md{max-width:var(--breakpoint-md)}.max-w-screen-sm{max-width:var(--breakpoint-sm)}.max-w-screen-xl{max-width:var(--breakpoint-xl)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:2147483647px}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-black\/10{border-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.border-black\/10{border-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}.border-neutral-200{border-color:var(--color-neutral-200)}.bg-black{background-color:var(--color-black)}.bg-neutral-100{background-color:var(--color-neutral-100)}.bg-transparent{background-color:#0000}.stroke-current{stroke:currentColor}.p-2{padding:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-current{color:currentColor}.text-neutral-500{color:var(--color-neutral-500)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.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,-webkit-backdrop-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))}.transition-\[height\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}@media (hover:hover){.group-hover\:text-black:is(:where(.group):hover *){color:var(--color-black)}.hover\:bg-black\/5:hover{background-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-black\/5:hover{background-color:color-mix(in oklab, var(--color-black) 5%, transparent)}}.hover\:bg-neutral-100:hover{background-color:var(--color-neutral-100)}.hover\:stroke-black:hover{stroke:var(--color-black)}.hover\:text-black:hover{color:var(--color-black)}}@media (width>=48rem){.md\:hidden{display:none}}.dark\:block:where(.dark,.dark *){display:block}.dark\:hidden:where(.dark,.dark *){display:none}.dark\:border-neutral-700:where(.dark,.dark *){border-color:var(--color-neutral-700)}.dark\:border-white\/25:where(.dark,.dark *){border-color:#ffffff40}@supports (color:color-mix(in lab, red, red)){.dark\:border-white\/25:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-white) 25%, transparent)}}.dark\:bg-neutral-900:where(.dark,.dark *){background-color:var(--color-neutral-900)}.dark\:bg-white:where(.dark,.dark *){background-color:var(--color-white)}.dark\:text-black:where(.dark,.dark *){color:var(--color-black)}.dark\:text-neutral-400:where(.dark,.dark *){color:var(--color-neutral-400)}@media (hover:hover){.group-hover\:dark\:text-white:is(:where(.group):hover *):where(.dark,.dark *){color:var(--color-white)}.dark\:hover\:bg-white\/20:where(.dark,.dark *):hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-white\/20:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.hover\:dark\:bg-neutral-800:hover:where(.dark,.dark *){background-color:var(--color-neutral-800)}.hover\:dark\:stroke-white:hover:where(.dark,.dark *){stroke:var(--color-white)}.dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--color-white)}}}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/atkinson-regular.woff2)format("woff2")}@font-face{font-family:Atkinson Hyperlegible;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/atkinson-bold.woff2)format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-regular.woff2)format("woff2")}:root{--background:#fff;--text:#24292f;--muted:#59636e;--link:#1558a6;--border:#d8dee4;--subtle:#f5f7f9;--page-width:960px;color-scheme:light;background:var(--background);color:var(--text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;scroll-padding-top:24px;font-size:16px;line-height:1.65}html.dark{--background:#17191d;--text:#dde2e8;--muted:#a4aeb9;--link:#8cbdff;--border:#383e47;--subtle:#23272e;color-scheme:dark}body{flex-direction:column;min-width:320px;min-height:100svh;margin:0;display:flex}main{outline:none;min-width:0}main:focus-visible{outline:none}a{color:var(--link);text-underline-offset:3px;text-decoration:underline}a:hover{text-decoration-thickness:2px}button{cursor:pointer}button,input{font:inherit}::selection{background:var(--link);color:var(--background)}:focus-visible{outline:2px solid var(--link);outline-offset:4px}[id]{scroll-margin-top:24px}.site-header,.site-frame,.site-footer{width:min(var(--page-width), calc(100% - 48px));margin-inline:auto}.site-header{border-bottom:1px solid var(--border);white-space:nowrap;align-items:center;gap:28px;padding-block:22px 18px;font-size:14px;display:flex}.site-signature{width:32px;height:32px;color:var(--muted);flex-shrink:0;justify-content:center;align-items:center;margin-block:-4px;text-decoration:none;display:inline-flex}.site-signature:hover .site-icon{color:var(--text)}.site-icon{color:var(--muted);flex-shrink:0;display:block}.header-primary{flex-shrink:0;align-items:center;gap:12px;display:flex}.primary-nav{gap:20px;display:flex}.primary-nav a,.header-tools a,.theme-button{align-items:center;min-width:24px;min-height:32px;margin-block:-4px;display:inline-flex}.primary-nav a,.header-tools a{color:var(--muted);text-decoration:none}.primary-nav a:hover,.header-tools a:hover{color:var(--link);text-decoration:underline}.primary-nav a[aria-current=page],.header-tools a[aria-current=page]{color:var(--text);font-weight:600;text-decoration:underline}.header-tools{flex-shrink:0;align-items:center;gap:18px;margin-left:auto;display:flex}.header-tool-icon,.theme-button svg{width:18px;height:18px}.header-tool-icon{display:none}.theme-button{width:32px;color:var(--muted);justify-content:center;padding:0}.theme-button:hover{color:var(--link)}.theme-dark-icon,.dark .theme-light-icon{display:none}.dark .theme-dark-icon{display:block}.site-frame{flex:1;padding-top:34px}h1{font-size:28px;font-weight:600;line-height:1.3}h2{font-size:17px;font-weight:600;line-height:1.5}.home-layout{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:52px;display:grid}.hello{color:var(--muted);margin-bottom:4px;font-size:14px}.home-tagline{color:var(--muted);margin-top:8px;font-size:14px}.about-copy{margin-top:25px}.about-copy p+p{margin-top:18px}.about-copy strong{font-weight:600}.intro-links{flex-wrap:wrap;gap:24px;margin-top:22px;font-size:14px;display:flex}.home-updates{border-left:1px solid var(--border);padding-left:28px}.home-updates>section+section{margin-top:30px}.section-heading{justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:12px;display:flex}.section-heading>a{white-space:nowrap;font-size:12px}.entry-list{padding:0;list-style:none}.entry-list>li+li{margin-top:22px}.entry-title{overflow-wrap:anywhere;font-size:16px;font-weight:500;line-height:1.5}.entry-link{text-decoration:none}.entry-link:hover{text-decoration:underline}.entry-meta{color:var(--muted);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:12px;margin-top:3px;font-size:12px;display:flex}.entry-summary{margin-top:5px;font-size:14px;line-height:1.6}.entry-tags{color:var(--muted);flex-wrap:wrap;gap:3px 6px;margin-top:5px;font-size:12px;line-height:1.6;display:flex}.entry-tags li:not(:last-child):after{content:","}.home-updates .entry-title{font-size:16px}.home-updates .entry-summary{font-size:14px}.home-details{border-top:1px solid var(--border);grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:52px;margin-top:36px;padding-top:24px;font-size:14px;display:grid}.home-details h2{margin-bottom:8px;font-size:15px}.contact-list{margin-top:14px}.contact-list>div{grid-template-columns:64px minmax(0,1fr);gap:16px;margin-top:5px;display:grid}.contact-list dt{color:var(--muted)}.contact-list dd{overflow-wrap:anywhere}.stack-list{flex-wrap:wrap;gap:4px 14px;margin-bottom:12px;display:flex}.site-stack{padding-left:29px}.page-top{border-bottom:1px solid var(--border);padding-bottom:22px}.page-heading{font-size:28px;font-weight:600;line-height:1.3}.page-intro{color:var(--muted);margin-top:8px}.page-bottom{padding-top:26px}.archive-layout{grid-template-columns:160px minmax(0,1fr);gap:36px;display:grid}.archive-filters{align-self:start;position:sticky;top:24px}.filter-heading{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;display:flex}.filter-heading h2{font-size:13px}.filter-clear{color:var(--link);text-underline-offset:3px;font-size:12px;text-decoration:underline}.filter-clear:disabled{color:var(--muted);cursor:default;text-decoration:none}.filter-tags{flex-direction:column;display:flex}.filter-tag{text-align:left;min-height:32px;color:var(--muted);align-items:center;gap:9px;font-size:13px;display:flex}.filter-tag:hover{color:var(--text)}.tag-check{border:1px solid var(--muted);flex-shrink:0;width:12px;height:12px}.filter-tag[aria-pressed=true]{color:var(--text)}.filter-tag[aria-pressed=true] .tag-check{border-color:var(--link);background:var(--link);box-shadow:inset 0 0 0 2px var(--background)}.results-count{color:var(--muted);margin-bottom:20px;font-size:13px}.archive-layout .entry-list>li+li{border-top:1px solid var(--border);margin-top:18px;padding-top:18px}.empty-state{color:var(--muted);padding-block:18px}.empty-state button{color:var(--link);text-underline-offset:3px;margin-top:10px;font-size:14px;text-decoration:underline}.search-label{margin-bottom:8px;font-size:14px;display:block}.search-field{border:1px solid var(--border);align-items:center;gap:12px;max-width:600px;padding:10px 12px;display:flex}.search-field:focus-within{border-color:var(--link)}.search-field svg{color:var(--muted);flex-shrink:0}.search-field input{background:0 0;border-radius:0;outline:none;width:100%;min-width:0;font-size:16px}.search-field input::placeholder{color:var(--muted);opacity:1}.search-field input::-webkit-search-cancel-button{appearance:none}.search-clear{color:var(--link);text-underline-offset:3px;flex-shrink:0;font-size:13px;text-decoration:underline}.search-hint{color:var(--muted);margin-top:8px;font-size:13px}.search-results{max-width:760px;margin-top:28px}.search-results .results-count:empty{display:none}.work-list>li{border-bottom:1px solid var(--border);grid-template-columns:150px minmax(0,1fr);gap:36px;padding-block:28px;display:grid}.work-list>li:first-child{padding-top:0}.work-date{color:var(--muted);padding-top:2px;font-size:13px}.work-date span{display:block}.work-company{font-size:20px;font-weight:600;line-height:1.5}.work-role{color:var(--muted);margin-top:4px;margin-bottom:20px;font-size:14px}.article-heading,.article-content{max-width:760px}.blog-post .article-heading,.blog-post .article-content,.project-page .article-heading,.project-page .article-content{margin-inline:auto}.blog-post .page-top,.project-page .page-top{width:760px;max-width:100%;margin-inline:auto}.back-link{margin-bottom:24px;font-size:14px;display:inline-block}.blog-post .back-link,.project-page .back-link{align-items:center;gap:4px;display:inline-flex}.article-meta{color:var(--muted);flex-wrap:wrap;gap:18px;margin-bottom:10px;font-size:13px;display:flex}.article-title{text-wrap:balance;overflow-wrap:anywhere;font-size:30px;font-weight:600;line-height:1.35}.article-summary{color:var(--muted);margin-top:12px}.article-links{flex-wrap:wrap;gap:24px;margin-top:16px;font-size:14px;display:flex}article{color:var(--tw-prose-body);max-width:65ch}article :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}article :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}article :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}article :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}article :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),article :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),article :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}article :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}article :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}article :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}article :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}article :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}article :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}article :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}article :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}article :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}article :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}article :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}article :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}article :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}article :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}article :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}article :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}article :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}article :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}article :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}article :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}article :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}article :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}article :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}article :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}article :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}article :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}article :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}article :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}article :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}article :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}article :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}article :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,article :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}article :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),article :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}article :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}article :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}article :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),article :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),article :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}article :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}article :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}article :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,article :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}article :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}article :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}article :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}article :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}article :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}article :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}article :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}article :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}article :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}article :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}article :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}article{--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:1.75}article :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}article :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}article :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),article :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}article :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}article :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}article :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}article :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}article :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}article :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}article :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}article :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}article :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),article :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),article :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),article :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}article :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}article :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}article :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}article :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}article :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}article :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}article :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}article :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}article{--tw-prose-body:var(--text);--tw-prose-headings:var(--text);--tw-prose-lead:var(--muted);--tw-prose-links:var(--link);--tw-prose-bold:var(--text);--tw-prose-counters:var(--muted);--tw-prose-bullets:var(--muted);--tw-prose-hr:var(--border);--tw-prose-quotes:var(--text);--tw-prose-quote-borders:var(--border);--tw-prose-captions:var(--muted);--tw-prose-code:var(--text);--tw-prose-th-borders:var(--border);--tw-prose-td-borders:var(--border);overflow-wrap:break-word;max-width:100%;font-size:16px;line-height:1.8}article :where(h1,h2,h3,h4),article :where(strong,b){font-weight:600}article code{font-family:var(--font-mono);font-variant-ligatures:none;font-size:.85em;font-weight:400}article :not(pre)>code{background:var(--subtle);padding:.15em .3em}article code:before,article code:after{content:none}article pre{border-radius:0;padding:18px;font-size:13px;line-height:1.7;position:relative}.code-block{margin-block:1.5em;position:relative}.code-block pre{margin:0;padding-right:56px}.code-copy-status{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}article pre code{font-size:inherit}article pre span[style*="color:#6A737D"],article pre span[style*="color:#6a737d"]{color:#a5adb7!important}article img,article video{max-width:100%;height:auto;margin-inline:auto}article blockquote{font-weight:400}article table{display:block;overflow-x:auto}.work-description>:first-child{margin-top:0}.work-description>:last-child{margin-bottom:0}.article-pagination{border-top:1px solid var(--border);grid-template-columns:1fr 1fr;gap:32px;margin-top:36px;padding-top:20px;display:grid}.article-pagination a{flex-direction:column;gap:6px;display:flex}.article-pagination .pagination-prev{grid-column:1}.article-pagination .pagination-next{text-align:right;grid-column:2}.pagination-label{color:var(--muted);font-size:12px}.pagination-title{font-size:14px}.copy-btn{color:#fff;background:#24292f;border:1px solid #ffffff40;place-items:center;width:30px;height:30px;display:grid;position:absolute;top:8px;right:8px}.copy-btn svg{fill:none;width:15px;height:15px}.copy-btn:hover{background:#39424b}.site-footer{border-top:1px solid var(--border);color:var(--muted);margin-top:48px;padding-block:20px 24px;font-size:12px}.footer-top,.footer-bottom{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px 24px;display:flex}.footer-bottom{justify-content:start;margin-top:12px}.footer-bottom nav{gap:16px;display:flex}.site-footer a{color:var(--muted)}.skip-link{z-index:100;background:var(--text);color:var(--background);padding:8px 12px;position:fixed;top:8px;left:8px;transform:translateY(-200%)}.skip-link:focus{transform:translateY(0)}@media (width<=800px){.home-layout,.home-details{grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:28px}.home-updates{padding-left:20px}.site-stack{padding-left:21px}.archive-layout{gap:28px}}@media (width<=700px){.home-layout,.home-details{grid-template-columns:1fr;gap:30px}.home-updates{border-left:0;border-top:1px solid var(--border);padding-top:24px;padding-left:0}.site-stack{padding-left:0}}@media (width<=600px){.site-header,.site-frame,.site-footer{width:calc(100% - 32px)}.site-header{gap:12px;padding-block:16px;font-size:13px}.header-primary{gap:8px}.primary-nav,.header-tools{gap:12px}.site-frame{padding-top:26px}.home-details{margin-top:30px}.archive-layout{grid-template-columns:1fr;gap:24px}.archive-filters{position:static}.filter-tags{flex-flow:wrap;gap:0 18px}.filter-tag{min-height:34px;font-size:12px}.work-list>li{grid-template-columns:1fr;gap:10px}.work-date{gap:8px;display:flex}.article-title{font-size:26px}article pre{padding:16px;font-size:12px}.article-pagination{gap:20px}.site-footer{margin-top:36px}}@media (width<=400px){.site-header{gap:8px}.site-signature{width:28px}.site-icon{width:28px;height:28px}.header-primary,.primary-nav{gap:6px}.header-tools{gap:4px}.header-tools a,.theme-button{justify-content:center;width:24px}.header-tool-label{display:none}.header-tool-icon{display:block}}@media print{:root,html.dark{--background:#fff;--text:#000;--muted:#444;--link:#000;--border:#ccc;--subtle:#eee}body{min-height:0}.site-header,.site-footer,.copy-btn,.article-pagination,.intro-links{display:none}.site-frame{width:100%;padding:0}.home-layout,.home-details{display:block}.home-updates{border:0;margin-top:24px;padding:0}.site-stack{padding:0}}@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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
