.chevron.astro-mcfugjgd{vertical-align:middle;fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;display:inline-block}.heading.astro-g5hxalog{justify-content:space-between;align-items:baseline;gap:var(--space-2) var(--space-6);margin-bottom:var(--space-8);flex-wrap:wrap;display:flex}.kicker.astro-g5hxalog{align-items:center;gap:var(--space-3);color:var(--color-accent);font-family:var(--font-family-mono);font-size:var(--font-size-sm);letter-spacing:var(--tracking-wide);text-transform:uppercase;display:flex}.kicker.astro-g5hxalog:before{content:"";width:var(--space-6);border-top:var(--line-thin) solid var(--color-accent)}.title.astro-g5hxalog{margin-top:var(--space-2);font-size:var(--font-size-xl);font-weight:600}.page.astro-g5hxalog .title.astro-g5hxalog{font-size:var(--font-size-2xl)}.more.astro-g5hxalog{gap:var(--space-1);min-height:var(--touch-target);font-family:var(--font-family-mono);font-size:var(--font-size-sm);align-items:center;display:inline-flex}.more.astro-g5hxalog:hover{text-decoration-thickness:var(--line-thick)}@media (width>=48rem){.title.astro-g5hxalog{font-size:var(--font-size-2xl)}.page.astro-g5hxalog .title.astro-g5hxalog{font-size:var(--font-size-display)}}@layer reset{*,:before,:after{box-sizing:border-box}*{margin:var(--space-0)}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{min-height:100dvh;line-height:var(--line-height-base);-webkit-font-smoothing:antialiased}img,picture,svg,video{max-width:100%;display:block}img,video{height:auto}input,button,textarea,select{font:inherit;color:inherit}button{cursor:pointer}p,h1,h2,h3{overflow-wrap:break-word}}@layer base{html{scrollbar-gutter:stable;font-family:var(--font-family-base);font-variant-numeric:tabular-nums;background:var(--color-bg);color:var(--color-text)}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{font-size:var(--font-size-md);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}h1,h2,h3{line-height:var(--line-height-tight);text-wrap:balance}a{color:var(--color-accent);text-underline-offset:.15em;text-decoration-thickness:var(--line-thin)}code,kbd,pre{font-family:var(--font-family-mono)}:focus-visible{outline:var(--line-thick) solid var(--color-focus-ring);outline-offset:2px}::selection{background:var(--color-accent);color:var(--color-accent-text)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.ghost{opacity:0;pointer-events:none;-webkit-user-select:none;user-select:none}[data-theme-set]{color:var(--color-text);background:0 0;border-color:#0000}[data-theme-set]:hover,:root:not([data-theme]) [data-theme-set=system],:root[data-theme=light] [data-theme-set=light],:root[data-theme=dark] [data-theme-set=dark]{color:var(--color-text)}:root:not([data-theme]) [data-theme-set=system],:root[data-theme=light] [data-theme-set=light],:root[data-theme=dark] [data-theme-set=dark]{background:var(--color-surface);border-color:var(--color-border)}@media (hover:hover) and (pointer:fine){::-webkit-scrollbar{width:var(--scrollbar-size);height:var(--scrollbar-size)}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-corner{background:0 0}::-webkit-scrollbar-thumb{border:var(--scrollbar-inset) solid transparent;border-radius:var(--radius-full);background:var(--color-scrollbar) padding-box}::-webkit-scrollbar-thumb:hover{border-width:var(--line-thick);background-color:var(--color-scrollbar-active)}::-webkit-scrollbar-thumb:active{border-width:var(--line-thick);background-color:var(--color-scrollbar-active)}@supports not selector(::-webkit-scrollbar){*{scrollbar-width:thin;scrollbar-color:var(--color-scrollbar) transparent}}}}@layer layout{.container{width:100%;max-width:var(--measure);padding-inline:var(--gutter);margin-inline:auto}.section{padding-block:var(--space-12)}.prose>:not(.chart,.diagram){max-width:var(--measure-prose)}.prose>*+*{margin-top:var(--space-4)}.prose h2{font-size:var(--font-size-xl);margin-top:var(--space-12)}.prose h3{font-size:var(--font-size-lg);margin-top:var(--space-8)}.prose ul,.prose ol{padding-inline-start:var(--space-6)}.prose li+li{margin-top:var(--space-2)}.prose blockquote{border-inline-start:var(--line-thin) solid var(--color-accent);color:var(--color-text);padding-inline-start:var(--space-4)}.prose pre{padding:var(--space-4);background:var(--color-surface);border:var(--line-thin) solid var(--color-border);font-size:var(--font-size-sm);overflow-x:auto}.prose code{font-size:var(--font-size-sm)}.prose hr{border:0;border-top:var(--line-thin) solid var(--color-border);margin-block:var(--space-8)}.prose img{border:var(--line-thin) solid var(--color-border)}.table-frame{border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-md);overflow-x:auto}.table-frame table{border-collapse:collapse;width:100%;font-size:var(--font-size-sm)}.table-frame caption{padding:var(--space-3) var(--space-4);border-bottom:var(--line-thin) solid var(--color-border);background:var(--color-surface);text-align:start}.table-frame th,.table-frame td{padding:var(--space-2) var(--space-4);border-bottom:var(--line-thin) solid var(--color-border);text-align:end;vertical-align:top}.table-frame th:first-child{text-align:start}.table-frame tbody tr:last-child>*{border-bottom:0}.table-frame thead th{padding-block:var(--space-3);vertical-align:bottom;background:linear-gradient(var(--color-border), var(--color-border)) no-repeat right 0 bottom var(--space-3) / var(--line-thin) 1lh;font-weight:600}.table-frame thead th:last-child{background:0 0}.table-frame tbody th{font-weight:400}.table-frame tbody tr:hover{background:var(--color-surface)}@media (width>=48rem){.section{padding-block:var(--space-16)}}.entry-layout{gap:var(--space-8);display:grid}.entry-side{align-content:start;gap:var(--space-6);display:grid}@media (width>=64rem){.entry-layout{column-gap:var(--space-16);grid-template-columns:minmax(0,1fr) minmax(14rem,18rem)}.entry-side{top:var(--space-8);grid-area:1/2;position:sticky}.entry-main{grid-area:1/1}.prose{column-gap:var(--space-8);grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;display:grid}.prose>*{grid-column:1/-1}.prose>.chart:has(+.chart),.prose>.chart+.chart{grid-column:auto}}.switch{gap:var(--space-1);width:fit-content;padding:var(--space-1);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-full);margin:0;display:inline-flex}.switch-option{padding:var(--space-1) var(--space-3);color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-xs);border:var(--line-thin) solid transparent;border-radius:var(--radius-full);cursor:pointer}.switch-option:has(:checked){background:var(--color-surface);border-color:var(--color-border)}.switch-option:has(:focus-visible){outline:var(--line-thick) solid var(--color-focus-ring);outline-offset:2px}}@layer chart{.chart{gap:var(--space-4);margin-block:var(--space-8);display:grid}.chart li{margin:0}.chart-title{font-weight:600}.chart-note{color:var(--color-text);font-size:var(--font-size-sm)}.chart-quiet{--series:var(--color-chart-quiet)}.chart-accent{--series:var(--color-accent)}.chart-legend{gap:var(--space-2) var(--space-6);color:var(--color-text);font-size:var(--font-size-sm);flex-wrap:wrap;padding:0;list-style:none;display:flex}.chart-legend li{align-items:center;gap:var(--space-2);display:flex}.chart-key{flex:none;width:1.5rem;height:.75rem;overflow:visible}.chart-key-bar,.chart-key-line,.chart-bar-line,.chart-path{fill:none;stroke:var(--series)}.chart-key-bar,.chart-bar-line{stroke-width:var(--chart-bar)}.chart-key-line,.chart-path{stroke-width:var(--chart-line);stroke-linecap:round;stroke-linejoin:round}.chart-marker{stroke:var(--series);stroke-width:var(--chart-marker);stroke-linecap:round}.chart-accent .chart-marker{stroke-linecap:square}.chart-grid{stroke:var(--color-border);stroke-width:var(--line-thin)}.chart-limit{stroke:var(--color-text);stroke-width:var(--line-thin)}.chart-band{fill:var(--color-surface)}.chart-rows{gap:var(--space-4);padding:0;list-style:none;display:grid}.chart-row{gap:var(--space-1);display:grid}.chart-label{font-size:var(--font-size-sm)}.chart-bar{width:calc(100% - var(--chart-label-room));height:var(--chart-bar);display:block;overflow:visible}.chart-value{fill:var(--color-text);font-size:var(--font-size-sm)}.chart-frame{grid-template:"y-label y-label" auto "y-ticks plot" var(--chart-plot-height) ". x-ticks" auto ". x-label" auto / auto 1fr;column-gap:var(--space-3);color:var(--color-text);font-size:var(--font-size-sm);display:grid}.chart-axis-y{margin-bottom:var(--space-3);grid-area:y-label}.chart-ticks-y{flex-direction:column;grid-area:y-ticks;justify-content:space-between;display:flex}.chart-ticks-y span{justify-content:flex-end;align-items:center;height:0;display:flex}.chart-plot{grid-area:plot;width:100%;height:100%;overflow:visible}.chart-ticks-x{margin-top:var(--space-2);grid-area:x-ticks;justify-content:space-between;display:flex}.chart-ticks-x span{white-space:nowrap;justify-content:center;width:0;display:flex}.chart-ticks-x span:last-child{justify-content:flex-end}.chart-axis-x{margin-top:var(--space-1);text-align:end;grid-area:x-label}.chart-graph{gap:var(--space-4);display:grid}.chart-tables{gap:var(--space-4);grid-template-columns:repeat(auto-fit,minmax(min(100%,18rem),1fr));align-items:start;display:grid}:where(.chart:has([value=data]:checked)) .chart-graph,:where(.chart:has([value=graph]:checked)) .chart-data{display:none}.chart-frame{position:relative}.chart-plot:focus-visible{outline:var(--line-thick) solid var(--color-focus-ring);outline-offset:2px}.chart-crosshair{background:var(--color-text);pointer-events:none;width:1px;position:absolute}.chart-readout{z-index:var(--z-base);gap:var(--space-1);padding:var(--space-2) var(--space-3);color:var(--color-text);font-size:var(--font-size-sm);white-space:nowrap;background:var(--color-surface-raised);border:var(--line-thin) solid var(--color-border);pointer-events:none;display:grid;position:absolute}.chart-crosshair[hidden],.chart-readout[hidden]{display:none}.diagram{gap:var(--space-4);margin-block:var(--space-8);display:grid}.diagram-map{--zoom:1;background:var(--color-surface);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-md);overflow:hidden}.diagram-bar{gap:var(--space-2);padding:var(--space-2);background:var(--color-bg);border-bottom:var(--line-thin) solid var(--color-border);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex}.diagram-zoom{gap:var(--space-1);margin-inline-start:auto;display:inline-flex}@media (scripting:none){.diagram-zoom{visibility:hidden}}.diagram-button{min-width:var(--touch-target-compact);height:var(--touch-target-compact);padding:0 var(--space-2);color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-xs);font-variant-numeric:tabular-nums;border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-full);cursor:pointer;background:0 0;place-items:center;display:inline-grid}.diagram-button:hover{color:var(--color-text)}.diagram-icon{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.diagram-level{min-width:4rem}.diagram-view{background-image:radial-gradient(circle, var(--color-border) 1px, transparent 1.5px);background-attachment:local;background-size:calc(1.5rem * var(--zoom)) calc(1.5rem * var(--zoom));max-height:min(70svh,40rem);display:grid;position:relative;overflow:auto}.diagram-view[data-pan]{cursor:grab;-webkit-user-select:none;user-select:none}.diagram-view[data-panning]{cursor:grabbing}.diagram-stack{margin:auto;display:grid}.diagram-world{max-width:none;font-family:var(--font-family-base);font-size:calc(1rem * var(--zoom));transition:opacity var(--duration-base) var(--ease-out), visibility var(--duration-base);grid-area:1/1;place-self:center}:where(.diagram-map:has([value="0"]:checked)) [data-panel="1"],:where(.diagram-map:has([value="1"]:checked)) [data-panel="0"]{visibility:hidden;opacity:0}.diagram-world :is(path,rect){vector-effect:non-scaling-stroke}.diagram-lines{fill:none;stroke:var(--color-chart-quiet);stroke-width:1.5px}.diagram-card{fill:var(--color-surface-raised)}.diagram-head{fill:var(--color-surface)}.diagram-table-added .diagram-head{fill:var(--color-accent-soft)}.diagram-rule{stroke:var(--color-border);stroke-width:1px}.diagram-outline{fill:none;stroke:var(--color-border);stroke-width:1px}.diagram-table-added .diagram-outline{stroke:var(--color-accent)}.diagram-world text{fill:var(--color-text)}.diagram-name{font-weight:600}.diagram-world .diagram-size,.diagram-world .diagram-type{fill:var(--color-text)}.diagram-size,.diagram-type,.diagram-tag{font-family:var(--font-family-mono)}.diagram-tag rect{fill:none;stroke:currentColor;stroke-width:1px}.diagram-world .diagram-tag text{fill:currentColor}.diagram-table{color:var(--color-text)}.diagram-table-added>.diagram-tag,.diagram-added,.diagram-changed{color:var(--color-accent)}.diagram-world :is(.diagram-added,.diagram-changed) text{fill:currentColor}}@layer motion{@keyframes reveal{0%{opacity:0;scale:.96}}@keyframes rise{0%{opacity:0;translate:0 .35em}}@keyframes draw{0%{stroke-dashoffset:1px}}@keyframes pulse-scroll{0%{opacity:0;scale:1}20%{opacity:.9;scale:1}to{opacity:0;scale:4}}@keyframes appear{0%{opacity:0}}@keyframes wipe{0%{clip-path:inset(-5% 100% -5% -5%)}to{clip-path:inset(-5%)}}@keyframes page-in{0%{opacity:0;translate:0 var(--space-2)}}@keyframes page-out{to{opacity:0}}.draw,.draw-on-load,.chart-bar-line{stroke-dasharray:1;stroke-dashoffset:0}.draw-on-load{animation:draw var(--duration-slow) var(--ease-out) both}.pulse-on-scroll{opacity:0;transform-box:fill-box;transform-origin:50%}.rise .word{animation:rise var(--duration-slow) var(--ease-out) both;display:inline-block}.rise .word:nth-child(2){animation-delay:var(--stagger)}.rise .word:nth-child(3){animation-delay:calc(var(--stagger) * 2)}.rise .word:nth-child(4){animation-delay:calc(var(--stagger) * 3)}.rise .word:nth-child(n+5){animation-delay:calc(var(--stagger) * 4)}@supports (animation-timeline:view()){.reveal{animation:reveal var(--ease-out) both;animation-timeline:view();animation-range:entry entry 35%}.draw{animation:draw var(--ease-out) both;animation-timeline:view();animation-range:entry 15% entry 85%}.pulse-on-scroll{animation:pulse-scroll var(--ease-linear) both;animation-timeline:view();animation-range:entry 80% cover 60%}.chart-row{view-timeline:--chart-row}.chart-bar-line{animation:draw var(--ease-out) both;animation-timeline:--chart-row;animation-range:entry cover 35%}.chart-value{animation:appear var(--ease-out) both;animation-timeline:--chart-row;animation-range:cover 30% cover 40%}.chart-plot{view-timeline:--chart-plot}.chart-draw{animation:wipe var(--ease-out) both;animation-timeline:--chart-plot;animation-range:entry 25% cover 60%}}@view-transition{navigation:auto}:root:not(.in-page-transition) [data-frame=header]{view-transition-name:header}:root:not(.in-page-transition) [data-frame=tab-bar]{view-transition-name:tab-bar}[data-morph]{view-transition-name:attr(data-morph type(<custom-ident>));view-transition-class:morph}:root.in-page-transition::view-transition-old(root),:root.in-page-transition::view-transition-new(root){mix-blend-mode:normal;animation:none}:root.theme-fade::view-transition-old(root){animation:page-out var(--duration-theme) var(--ease-in-out) both;mix-blend-mode:plus-lighter}:root.theme-fade::view-transition-new(root){animation:appear var(--duration-theme) var(--ease-in-out) both;mix-blend-mode:plus-lighter}::view-transition-group(photo),::view-transition-group(*.morph){animation-duration:var(--duration-slow);animation-timing-function:var(--ease-out)}::view-transition-old(root){animation:page-out var(--duration-fast) var(--ease-out) both}::view-transition-new(root){animation:page-in var(--duration-base) var(--ease-out) both}@media (prefers-reduced-motion:reduce){.reveal,.rise .word,::view-transition-new(root){animation-name:appear}.pulse-on-scroll{animation:none}[data-morph]:not([data-always]){view-transition-name:none}}}:root{color-scheme:light dark;--gray-0:#fff;--gray-50:#f6f8fa;--gray-200:#d1d9e0;--gray-400:#818b98;--night-950:#000;--night-900:#111;--night-800:#1c1c1c;--night-700:#333;--night-500:#737373;--blue-600:oklch(53% .16 255);--blue-400:oklch(71% .14 255);--sun-400:#ffbc18;--leaf-500:#1db173;--color-bg:light-dark(var(--gray-0),var(--night-950));--color-surface:light-dark(var(--gray-50),var(--night-900));--color-surface-raised:light-dark(var(--gray-0),var(--night-800));--color-text:light-dark(var(--night-950),var(--gray-0));--color-border:light-dark(var(--gray-200),var(--night-700));--color-line-strong:light-dark(#1f232852,#f5f5f547);--color-scrollbar:light-dark(#1f23284d,#f5f5f54d);--color-scrollbar-active:light-dark(#1f23288c,#f5f5f58c);--color-accent:light-dark(var(--blue-600),var(--blue-400));--color-accent-text:light-dark(var(--gray-0),var(--night-950));--color-accent-soft:light-dark(#186bc51f,#62a4f729);--color-focus-ring:light-dark(var(--blue-600),var(--blue-400));--color-chart-quiet:light-dark(var(--gray-400),var(--night-500));--color-backdrop:light-dark(#1f2328f5,#000000f5);--color-band-sun:light-dark(var(--sun-400),var(--sun-400));--color-band-leaf:light-dark(var(--leaf-500),var(--leaf-500));--color-band-text:light-dark(var(--night-950),var(--night-950));--logo:currentColor;--logo-on-sun:currentColor;--color-logo-ground:light-dark(var(--gray-0),var(--gray-0));--space-0:0;--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-6:1.5rem;--space-8:2rem;--space-12:3rem;--space-16:4rem;--space-24:6rem;--gutter:clamp(1rem, 4vw, 3rem);--measure:88rem;--measure-prose:44rem;--font-family-base:Inter, system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji";--font-family-mono:"Martian Mono", ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--font-size-xs:1rem;--font-size-sm:clamp(1rem, .95rem + .2vw, 1.125rem);--font-size-md:clamp(1.125rem, 1rem + .4vw, 1.25rem);--font-size-lg:clamp(1.3125rem, 1.125rem + .6vw, 1.5rem);--font-size-xl:clamp(1.5rem, 1.25rem + .8vw, 1.875rem);--font-size-2xl:clamp(1.875rem, 1.5rem + 1.2vw, 2.5rem);--font-size-display:clamp(2.5rem, 6vw + 1rem, 6rem);--line-height-tight:1.1;--line-height-base:1.6;--tracking-wide:.08em;--radius-sm:.375rem;--radius-md:.75rem;--radius-full:9999px;--line-thin:1px;--line-thick:2px;--scrollbar-size:12px;--scrollbar-inset:3px;--z-base:0;--z-sticky:100;--duration-fast:.12s;--duration-base:.2s;--duration-slow:.6s;--duration-theme:.7s;--stagger:70ms;--ease-out:cubic-bezier(.2, 0, 0, 1);--ease-linear:linear;--ease-in-out:cubic-bezier(.65, 0, .35, 1);--ease-overshoot:cubic-bezier(.34, 1.56, .64, 1);--ease-spring:linear(0, .04, .142, .281, .435, .589, .731, .853, .953, 1.028, 1.079, 1.111, 1.125, 1.125, 1.116, 1.101, 1.082, 1.062, 1.043, 1.027, 1.012, 1.001, .993, .988, .985, .984, .985, .986, .988, .991, .993, .996, .998, .999, 1, 1.001, 1.002, 1.002, 1.002, 1.002, 1);--ease-steps:steps(6, end);--duration-demo:.9s;--touch-target:44px;--touch-target-compact:2rem;--chart-line:2px;--chart-marker:8px;--chart-bar:.75rem;--chart-plot-height:clamp(12rem, 40vw, 18rem);--chart-label-room:6em;--progress-height:3px}[data-theme=light]{color-scheme:light}[data-theme=dark]{color-scheme:dark}.logo-ansible{--logo:#e00;--logo-on-sun:#dc0000}.logo-cloudflare{--logo:light-dark(#de7000,#f38020);--logo-on-sun:#ac5500}.logo-debian{--logo:light-dark(#a81d33,#bf3645);--logo-on-sun:#a81d33}.logo-docker{--logo:light-dark(#1f93ea,#2496ed);--logo-on-sun:#0071bb}.logo-dovecot{--logo:light-dark(#319e8e,#54bcab);--logo-on-sun:#007b6d}.logo-electron{--logo:#47848f;--logo-on-sun:#387580}.logo-eslint{--logo:light-dark(#4b32c3,#6151e2);--logo-on-sun:#4b32c3}.logo-express{--logo:var(--color-text);--logo-on-sun:var(--color-band-text)}.logo-figma{--logo:#f24e1e;--logo-on-sun:#c93600}.logo-git{--logo:#f03c2e;--logo-on-sun:#d61a12}.logo-githubactions{--logo:#2088ff;--logo-on-sun:#006bd5}.logo-hetzner{--logo:#d50c2d;--logo-on-sun:#d50c2d}.logo-javascript{--logo:light-dark(#a08f00,#f7df1e);--logo-on-sun:#7a6d00}.logo-jira{--logo:light-dark(#0052cc,#1762dd);--logo-on-sun:#0052cc}.logo-k6{--logo:#7d64ff;--logo-on-sun:#6e52ec}.logo-linux{--logo:light-dark(#b08800,#fcc624);--logo-on-sun:#886900}.logo-nginx{--logo:#009639;--logo-on-sun:#007e2f}.logo-nodedotjs{--logo:light-dark(#5c9d4b,#5fa04e);--logo-on-sun:#3b7b29}.logo-openid{--logo:light-dark(#da711e,#f78c40);--logo-on-sun:#ae5500}.logo-postgresql{--logo:#4169e1;--logo-on-sun:#3d64dc}.logo-prettier{--logo:light-dark(#ba8500,#f7b93e);--logo-on-sun:#8f6500}.logo-prometheus{--logo:#e6522c;--logo-on-sun:#c93606}.logo-python{--logo:#3776ab;--logo-on-sun:#3272a6}.logo-react{--logo:light-dark(#009bba,#61dafb);--logo-on-sun:#007790}.logo-redis{--logo:#ff4438;--logo-on-sun:#da1011}.logo-rust{--logo:var(--color-text);--logo-on-sun:var(--color-band-text)}.logo-terraform{--logo:#844fba;--logo-on-sun:#844fba}.logo-typescript{--logo:#3178c6;--logo-on-sun:#276fbc}.logo-vuedotjs{--logo:light-dark(#27a06f,#4fc08d);--logo-on-sun:#007c52}.logo-webgl{--logo:light-dark(#900,#bf362a);--logo-on-sun:#900}.logo-webgpu{--logo:light-dark(#005a9c,#1f6caf);--logo-on-sun:#005a9c}@font-face{font-family:Inter;src:url(/_astro/inter.BgEws6ZI.woff2)format("woff2");font-weight:400 700;font-display:optional;unicode-range:U+20-7E,U+A0-17F,U+2000-206F,U+2190-2193,U+2212,U+20AC,U+2122}@font-face{font-family:Martian Mono;src:url(/_astro/martian-mono.CJN2L1-_.woff2)format("woff2");font-weight:400 700;font-display:optional;unicode-range:U+20-7E,U+A0-17F,U+2000-206F,U+2190-2193,U+2212,U+20AC,U+2122}.mark.astro-dfyfgnym{fill:currentColor;fill-rule:evenodd}.footer.astro-k27j47ha{padding-block:var(--space-4);border-top:var(--line-thin) solid var(--color-border)}.row.astro-k27j47ha{gap:var(--space-4);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex}.places.astro-k27j47ha{gap:var(--space-2);padding:0;list-style:none;display:flex}.place.astro-k27j47ha{min-width:var(--touch-target);min-height:var(--touch-target);color:var(--color-text);justify-content:center;align-items:center;display:inline-flex}.place.astro-k27j47ha:hover{color:var(--color-accent)}.copyright.astro-k27j47ha{color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-sm)}.stable.astro-b4l5h2nq{display:inline-grid}.stable.astro-b4l5h2nq>span.astro-b4l5h2nq{white-space:nowrap;grid-area:1/1}.lang.astro-zdl7hozd{width:calc(var(--touch-target-compact) + 2 * var(--space-1) + 2 * var(--line-thin));height:calc(var(--touch-target-compact) + 2 * var(--space-1) + 2 * var(--line-thin));color:var(--color-text);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-full);background:0 0;place-items:center;padding:0;display:inline-grid}.lang.astro-zdl7hozd:hover{color:var(--color-text)}.icon.astro-zdl7hozd{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;flex:none}.menu.astro-zdl7hozd{inset:auto;top:calc(var(--touch-target) + var(--space-4));right:max(var(--gutter), calc((100% - var(--measure)) / 2 + var(--gutter)));min-width:12rem;padding:var(--space-1);color:var(--color-text);background:var(--color-surface-raised);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-sm);margin:0;position:absolute}.list.astro-zdl7hozd{padding:0;list-style:none}.item.astro-zdl7hozd{gap:var(--space-4);min-height:var(--touch-target);padding:var(--space-2) var(--space-3);color:var(--color-text);border-radius:var(--radius-sm);justify-content:space-between;align-items:center;font-weight:600;text-decoration:none;display:flex}.item.astro-zdl7hozd:hover{background:var(--color-surface)}.switch.astro-jr25hr3k{gap:var(--space-1);padding:var(--space-1);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-full);display:inline-flex}.option.astro-jr25hr3k{width:var(--touch-target-compact);height:var(--touch-target-compact);border-width:var(--line-thin);border-radius:var(--radius-full);border-style:solid;place-items:center;padding:0;display:inline-grid}.icon.astro-jr25hr3k{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.name.astro-jr25hr3k{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.wordmark.astro-fotqjsyv{font-size:var(--font-size-md);font-weight:600;line-height:var(--line-height-tight);white-space:nowrap}.header.astro-il3sf6tw{border-bottom:var(--line-thin) solid var(--color-border)}.row.astro-il3sf6tw{align-items:center;gap:var(--space-4);min-height:calc(var(--touch-target) + var(--space-4));display:flex}.brand.astro-il3sf6tw{min-height:var(--touch-target);color:var(--color-text);justify-self:start;align-items:center;text-decoration:none;display:inline-flex}.brand.astro-il3sf6tw:hover{color:var(--color-accent)}.nav.astro-il3sf6tw{display:none}.links.astro-il3sf6tw{gap:var(--space-6);padding:0;list-style:none;display:flex}.links.astro-il3sf6tw a.astro-il3sf6tw{padding-block:var(--space-2);color:var(--color-text);font-size:var(--font-size-sm);letter-spacing:var(--tracking-wide);text-transform:uppercase;border-bottom:var(--line-thin) solid transparent;text-decoration:none;display:inline-block}.links.astro-il3sf6tw a.astro-il3sf6tw:hover{color:var(--color-accent);border-bottom-color:var(--color-accent)}.links.astro-il3sf6tw a.astro-il3sf6tw[aria-current=page]{color:var(--color-text);border-bottom-color:var(--color-accent)}.end.astro-il3sf6tw{gap:var(--space-2);align-items:center;margin-inline-start:auto;display:flex}@media (width>=48rem){.row.astro-il3sf6tw{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);display:grid}.nav.astro-il3sf6tw{display:block}.end.astro-il3sf6tw{justify-self:end}}.skip.astro-il3jxevh{top:var(--space-2);left:var(--gutter);z-index:var(--z-sticky);padding:var(--space-2) var(--space-4);background:var(--color-bg);border:var(--line-thin) solid var(--color-accent);position:absolute;translate:0 -200%}.skip.astro-il3jxevh:focus-visible{translate:0}.icon.astro-bci56kgv{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.tabs.astro-y5kezpck{z-index:var(--z-sticky);padding-bottom:env(safe-area-inset-bottom);background:var(--color-bg);border-top:var(--line-thin) solid var(--color-border);inset-inline:0;position:fixed;bottom:0}.list.astro-y5kezpck{grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;padding:0;list-style:none;display:grid}.tab.astro-y5kezpck{justify-items:center;gap:var(--space-1);min-height:var(--touch-target);padding:var(--space-2) var(--space-0);color:var(--color-text);text-decoration:none;display:grid}.tab.astro-y5kezpck:active{background:var(--color-surface)}.tab.astro-y5kezpck[aria-current=page]{color:var(--color-accent)}.label.astro-y5kezpck{max-width:100%;font-size:var(--font-size-xs);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}@media (width>=48rem){.tabs.astro-y5kezpck{display:none}}.body.astro-ybatimd6{padding-bottom:calc(var(--touch-target) + var(--space-6) + env(safe-area-inset-bottom))}@media (width>=48rem){.body.astro-ybatimd6{padding-bottom:var(--space-0)}}.prose.astro-ibpinaeu+.prose.astro-ibpinaeu{margin-top:var(--space-4)}.contact.astro-zux6iybo{gap:var(--space-3);margin-top:var(--space-8);display:grid}.title.astro-zux6iybo{color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-sm);letter-spacing:var(--tracking-wide);text-transform:uppercase}.places.astro-zux6iybo{gap:var(--space-3);flex-wrap:wrap;padding:0;list-style:none;display:flex}.places.astro-zux6iybo li.astro-zux6iybo{margin:0}.place.astro-zux6iybo{gap:var(--space-2);min-height:var(--touch-target);padding-inline:var(--space-3) var(--space-4);color:var(--color-text);font-size:var(--font-size-sm);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-full);transition:background-color var(--duration-fast) var(--ease-out);align-items:center;font-weight:600;text-decoration:none;display:inline-flex}.place.astro-zux6iybo:hover{background:var(--color-surface)}.meta.astro-toawquqr{column-gap:var(--space-3);color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-sm);flex-wrap:wrap;display:flex}.item.astro-toawquqr:not(:last-child):after{content:"·";color:var(--color-line-strong);margin-inline-start:var(--space-3)}.entry.astro-lo624ptt{gap:var(--space-2);padding-bottom:var(--space-8);padding-left:var(--space-6);border-left:var(--line-thin) solid var(--color-border);display:grid;position:relative}.entry.astro-lo624ptt:before{content:"";background:var(--color-accent);border-radius:var(--radius-full);width:7px;height:7px;position:absolute;top:.65rem;left:-4px}.head.astro-lo624ptt{gap:var(--space-4);align-items:center;display:flex}.role.astro-lo624ptt{font-size:var(--font-size-lg)}.logo.astro-lo624ptt{background:var(--color-logo-ground);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-md);flex:none;place-items:center;width:7.5rem;height:3rem;display:grid}a.astro-lo624ptt.logo:hover{border-color:var(--color-line-strong)}.done.astro-lo624ptt{margin-top:var(--space-2)}.more.astro-lo624ptt{justify-self:start;gap:var(--space-1);min-height:var(--touch-target);font-family:var(--font-family-mono);font-size:var(--font-size-sm);align-items:center;display:inline-flex}.groups.astro-4rpflqyi{gap:var(--space-6);display:grid}.group.astro-4rpflqyi{gap:var(--space-3);display:grid}dt.astro-4rpflqyi{color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-sm)}dd.astro-4rpflqyi{margin:var(--space-0)}.items.astro-4rpflqyi{gap:var(--space-2);flex-wrap:wrap;padding:0;list-style:none;display:flex}.item.astro-4rpflqyi{gap:var(--space-2);padding:var(--space-1) var(--space-3);font-size:var(--font-size-sm);background:var(--color-surface);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-full);align-items:center;margin:0;font-weight:600;display:inline-flex}.mark.astro-4rpflqyi{color:var(--logo);fill:currentColor;flex:none}.portrait.astro-eisiezd6{aspect-ratio:4/5;object-fit:cover;border-radius:var(--radius-md);width:9rem;height:auto;display:block}@media (width>=48rem){.portrait.astro-eisiezd6{width:13rem}}.intro.astro-umycgke3{gap:var(--space-6);display:grid}@media (width>=48rem){.intro.astro-umycgke3{column-gap:var(--space-12);grid-template-columns:minmax(0,1fr) auto;align-items:start}}.part.astro-umycgke3{margin-top:var(--space-16)}.part-title.astro-umycgke3{margin-bottom:var(--space-6);color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-sm);letter-spacing:var(--tracking-wide);text-transform:uppercase}.facts.astro-umycgke3{gap:var(--space-8);display:grid}@media (width>=48rem){.facts.astro-umycgke3{grid-template-columns:1fr 1fr}}@media (width>=64rem){.cv.astro-umycgke3{column-gap:var(--space-16);grid-template-columns:minmax(0,3fr) minmax(0,2fr);display:grid}}.profile.astro-mfobpj7h{margin:var(--space-0)}.drawing.astro-mfobpj7h{border-bottom:var(--line-thin) solid var(--color-border);width:100%;height:auto}.area.astro-mfobpj7h{fill:var(--color-accent-soft)}.line.astro-mfobpj7h{fill:none;stroke:var(--color-accent);stroke-width:2px;stroke-linejoin:round}.ring.astro-mfobpj7h{fill:none;stroke:var(--color-accent);stroke-width:1.5px}.mark.astro-mfobpj7h{fill:var(--color-bg);stroke:var(--color-accent);stroke-width:2px}.caption.astro-mfobpj7h,.places.astro-mfobpj7h{color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-sm)}.caption.astro-mfobpj7h{margin-top:var(--space-2)}.places.astro-mfobpj7h{margin-top:var(--space-4);padding:0;list-style:none;display:grid}.place.astro-mfobpj7h{gap:var(--space-4);padding-block:var(--space-1);border-top:var(--line-thin) solid var(--color-border);grid-template-columns:1fr auto auto;display:grid}.name.astro-mfobpj7h{color:var(--color-text)}.source.astro-mfobpj7h{margin-top:var(--space-3);color:var(--color-text);font-size:var(--font-size-sm)}.contents.astro-i7uspzbo{display:none}.title.astro-i7uspzbo{margin-bottom:var(--space-3);color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-sm);letter-spacing:var(--tracking-wide);text-transform:uppercase}.list.astro-i7uspzbo{gap:var(--space-2);padding:0;list-style:none;display:grid}a.astro-i7uspzbo{color:var(--color-text);text-decoration:none}a.astro-i7uspzbo:hover{color:var(--color-text);text-decoration:underline}@media (width>=64rem){.contents.astro-i7uspzbo{display:block}}.photo.astro-dqyeit3h{margin:var(--space-0)}.frame.astro-dqyeit3h{border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);overflow:hidden}.frame.astro-dqyeit3h img.astro-dqyeit3h{border-radius:calc(var(--radius-md) - var(--line-thin))}button.astro-dqyeit3h.frame{cursor:zoom-in;width:100%;padding:0;display:block}.caption.astro-dqyeit3h{margin-top:var(--space-2);color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-sm)}.viewer.astro-rgzqszxq{width:100%;max-width:none;height:100%;max-height:none;padding:var(--space-4);background:0 0;border:0;margin:0}.viewer.astro-rgzqszxq[open]{place-items:center;display:grid}.viewer.astro-rgzqszxq::backdrop{background:var(--color-backdrop)}.viewer.astro-rgzqszxq img.astro-rgzqszxq{width:auto;max-width:100%;height:auto;max-height:calc(100dvh - 2 * var(--touch-target));border-radius:var(--radius-md);cursor:zoom-out;display:block}.close.astro-rgzqszxq{top:var(--space-4);right:var(--space-4);min-width:var(--touch-target);min-height:var(--touch-target);padding:var(--space-2) var(--space-4);color:var(--color-text);background:var(--color-surface-raised);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-sm);position:absolute}@media (prefers-reduced-motion:reduce){.viewer.astro-rgzqszxq:not([data-always])[open]{animation:appear var(--duration-base) var(--ease-out)}}.photos.astro-cwdhboae{gap:var(--space-6);padding:0;list-style:none;display:grid}@media (width>=48rem){.photos.astro-cwdhboae{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=64rem){.photos.astro-cwdhboae{grid-template-columns:repeat(3,minmax(0,1fr))}}.summary.astro-krra7mlq{max-width:var(--measure-prose);margin-bottom:var(--space-8);font-size:var(--font-size-lg)}.block.astro-krra7mlq{margin-bottom:var(--space-12)}.photos.astro-krra7mlq{margin-top:var(--space-12)}.stack.astro-z4a7w3gs{gap:var(--space-2) var(--space-6);flex-wrap:wrap;padding:0;list-style:none;display:flex}@media (width>=64rem){.stack.astro-z4a7w3gs:not(.compact){gap:var(--space-3);display:grid}}.compact.astro-z4a7w3gs{gap:var(--space-2) var(--space-4);flex-wrap:wrap;align-items:center;display:flex}.item.astro-z4a7w3gs{gap:var(--space-3);color:var(--color-text);align-items:center;display:inline-flex}.compact.astro-z4a7w3gs .item.astro-z4a7w3gs{font-family:var(--font-family-mono);font-size:var(--font-size-sm);position:relative}.tip.astro-z4a7w3gs{bottom:calc(100% + var(--space-1));z-index:var(--z-sticky);padding:var(--space-1) var(--space-2);color:var(--color-text);font-size:var(--font-size-xs);white-space:nowrap;background:var(--color-surface-raised);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-sm);pointer-events:none;position:absolute;left:50%;translate:-50%}.item.astro-z4a7w3gs:not(:hover) .tip.astro-z4a7w3gs{display:none}.mark.astro-z4a7w3gs{color:var(--logo);fill:currentColor;flex:none}.stack.astro-z4a7w3gs:not(.compact) .item.astro-z4a7w3gs{color:var(--color-text);font-weight:600}.card.astro-ktqdrldc{gap:var(--space-2);padding-block:var(--space-4) var(--space-6);border-top:var(--line-thin) solid var(--color-border);display:grid;position:relative}.title.astro-ktqdrldc{font-size:var(--font-size-lg)}.link.astro-ktqdrldc{color:var(--color-text);text-decoration:none}.link.astro-ktqdrldc:after{content:"";position:absolute;inset:0}.chevron.astro-ktqdrldc{vertical-align:middle;color:var(--color-text);fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round;transition:translate var(--duration-base) var(--ease-out);margin-inline-start:var(--space-1);display:inline-block}.morph.astro-ktqdrldc{display:inline-block}.card.astro-ktqdrldc:hover .link.astro-ktqdrldc{color:var(--color-accent)}.card.astro-ktqdrldc:hover .morph.astro-ktqdrldc{text-underline-offset:.2em;text-decoration:underline}.card.astro-ktqdrldc:hover .chevron.astro-ktqdrldc{color:var(--color-accent);translate:var(--space-1) 0}.badge.astro-ktqdrldc{color:var(--color-accent);font-family:var(--font-family-mono);font-size:var(--font-size-sm);text-transform:uppercase;letter-spacing:var(--tracking-wide);margin-inline-start:var(--space-2);font-weight:400}.summary.astro-ktqdrldc{color:var(--color-text)}.list.astro-5odkl6sm{padding:0;list-style:none;display:grid}.empty.astro-5odkl6sm{color:var(--color-text)}@media (width>=48rem){.two.astro-5odkl6sm{column-gap:var(--space-8);grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=64rem){.three.astro-5odkl6sm{grid-template-columns:repeat(3,minmax(0,1fr))}}.intro.astro-oh7jiwht{max-width:var(--measure-prose);margin-bottom:var(--space-8);color:var(--color-text)}.hero.astro-i3irphx7{padding-block:var(--space-12)}.kicker.astro-i3irphx7{color:var(--color-accent);font-family:var(--font-family-mono);font-size:var(--font-size-sm);letter-spacing:var(--tracking-wide);text-transform:uppercase}.row.astro-i3irphx7{gap:var(--space-6);justify-items:start;display:grid}.name.astro-i3irphx7{justify-self:stretch;container-type:inline-size}.title.astro-i3irphx7{margin-top:var(--space-2);font-size:min(var(--font-size-display), 100cqi / 8.7);letter-spacing:-.02em;white-space:nowrap;font-weight:600}@media (width>=48rem){.hero.astro-i3irphx7{padding-block:var(--space-24) var(--space-16)}.row.astro-i3irphx7{column-gap:var(--space-12);grid-template-columns:minmax(0,1fr) auto;align-items:center}}.band.astro-742lmi67{--color-focus-ring:var(--color-band-text);padding-block:var(--space-16);color:var(--color-band-text)}.quiet.astro-742lmi67{padding-block:var(--space-12)}.sun.astro-742lmi67{background:var(--color-band-sun)}.leaf.astro-742lmi67{background:var(--color-band-leaf)}.title.astro-742lmi67{margin-bottom:var(--space-12);font-size:var(--font-size-2xl);text-align:center;font-weight:600}@media (width>=48rem){.band.astro-742lmi67{padding-block:var(--space-24)}}.logos.astro-6g462ny2{gap:var(--space-8) var(--space-12);flex-wrap:wrap;justify-content:center;max-width:64rem;margin-inline:auto;padding:0;list-style:none;display:flex}.logo.astro-6g462ny2{gap:var(--space-3);white-space:nowrap;align-items:center;font-weight:600;display:inline-flex}.mark.astro-6g462ny2{color:var(--logo-on-sun);fill:currentColor;flex:none}.video.astro-zlwsufes{margin:var(--space-0)}video.astro-zlwsufes{background:var(--color-surface);border:var(--line-thin) solid var(--color-border);border-radius:var(--radius-md);width:100%;height:auto}.caption.astro-zlwsufes{margin-top:var(--space-2);color:var(--color-text);font-family:var(--font-family-mono);font-size:var(--font-size-sm)}.summary.astro-tppuoed2{max-width:var(--measure-prose);margin-bottom:var(--space-8);font-size:var(--font-size-lg)}.videos.astro-tppuoed2{gap:var(--space-8);margin-bottom:var(--space-12);padding:0;list-style:none;display:grid}.intro.astro-datccuuh{max-width:var(--measure-prose);margin-bottom:var(--space-8);color:var(--color-text)}.divider.astro-mmy3pdnc{width:calc(100% - 2 * var(--gutter));max-width:calc(var(--measure) - 2 * var(--gutter));border:0;border-top:var(--line-thin) solid var(--color-border);margin-inline:auto;position:relative}.divider.astro-mmy3pdnc:before{content:"";top:calc(-1 * var(--line-thin));width:var(--space-8);border-top:var(--line-thin) solid var(--color-accent);position:absolute;left:0}
