@font-face{font-family:Fira Code;src:url(/fonts/fira-code/FiraCode-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap;size-adjust:97.5%}@font-face{font-family:Fira Code;src:url(/fonts/fira-code/FiraCode-SemiBold.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap;size-adjust:97.5%}:root{--bg: #f2ecbc;--ink: #1f1f28;--soft: #545464;--accent: #b0301f;--rule: #d5cea3;--code-bg: #f7f2cf;--key: #fbf7dc;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #181616;--ink: #c5c9c5;--soft: #a6a69c;--accent: #e8826b;--rule: #2d2a2a;--code-bg: #1f1d1c;--key: #201e1d;color-scheme:dark}}:root[data-theme=dark]{--bg: #181616;--ink: #c5c9c5;--soft: #a6a69c;--accent: #e8826b;--rule: #2d2a2a;--code-bg: #1f1d1c;--key: #201e1d;color-scheme:dark}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}[hidden]{display:none!important}html{-webkit-font-smoothing:antialiased}body{background:var(--bg);color:var(--ink);font:400 15px/1.7 Fira Code,ui-monospace,Menlo,monospace}.page{max-width:820px;margin:0 auto;padding:56px 24px 40px}a{color:var(--ink);text-decoration:none;border-bottom:1px solid var(--accent)}a:hover{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:1px}ul{list-style:none}li{padding-left:2ch;text-indent:-2ch}li:before{content:"- ";color:var(--soft)}.soft{color:var(--soft)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.skip{position:absolute;left:-999px;top:8px;z-index:3;background:var(--bg);padding:2px 1ch}.skip:focus{left:16px}.bar{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px 24px;padding-bottom:14px;border-bottom:1px solid var(--rule)}.brand{font-size:18px;font-weight:600;line-height:1.3}.brand a,a.brand{color:var(--ink);border:0}.prompt,.dot{color:var(--accent)}.cursor{display:inline-block;width:.6em;height:1.05em;margin-left:.2em;vertical-align:text-bottom;background:var(--accent)}.site-nav{display:flex;flex-wrap:wrap;gap:6px 22px}.site-nav a{color:var(--soft);border:0}.nl{border-bottom:1px solid transparent}.nk{color:var(--soft)}.site-nav a:hover,.site-nav a[aria-current]{color:var(--ink)}:is(.site-nav a:hover,.site-nav a[aria-current]) .nl{border-bottom-color:var(--accent)}h1{font-size:24px;font-weight:600;line-height:1.3}.titleblock{margin-top:48px}.byline{margin-top:10px;color:var(--soft);font-variant-numeric:tabular-nums}h2,.callout-label,.sheet-t,.prose th{font-size:13px;font-weight:600;letter-spacing:.12em;text-transform:uppercase}h2{margin:44px 0 18px;padding-bottom:6px;border-bottom:2px solid var(--ink)}h3{font-size:16.5px;font-weight:600;line-height:1.4}h2.year{margin:56px 0 16px;padding:0;border:0;font-size:18px;letter-spacing:0;text-transform:none;line-height:1.2}h2.year:after{content:"/";margin-left:.1ch;color:var(--soft);font-weight:400}.yr:not(:has(.row:not([hidden]))){display:none}.row{position:relative;display:grid;grid-template-columns:5ch 14px 1fr;column-gap:1.5ch}.md{padding-top:3px;color:var(--soft);font-variant-numeric:tabular-nums;white-space:nowrap}.node{position:relative}.node:before{content:"";position:absolute;left:50%;top:0;bottom:0;border-left:1px solid var(--soft)}.node:after{content:"";position:absolute;left:calc(50% - 4px);top:8px;width:9px;height:9px;background:var(--bg);border:1px solid var(--accent)}.row:nth-child(1 of.row:not([hidden])) .node:before{top:12px}.row:nth-last-child(1 of.row:not([hidden])) .node:before{bottom:auto;height:13px}.row:nth-child(1 of.row:not([hidden])):nth-last-child(1 of.row:not([hidden])) .node:before{display:none}.row.latest .node:after,.row:hover .node:after{background:var(--accent)}.entry{min-width:0;padding-bottom:30px}.row:nth-last-child(1 of.row:not([hidden])) .entry{padding-bottom:6px}.entry h3 a{color:var(--ink);border-bottom-color:transparent}.entry h3 a:hover{color:var(--accent);border-bottom-color:var(--accent)}.entry h3 a:focus-visible{outline-offset:4px}.meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 2ch;margin-top:6px;font-size:13px}[data-keys] .row.latest .node:after,[data-keys] .row:hover .node:after{background:var(--bg)}[data-keys] .row.sel .node:after{background:var(--accent)}.row.sel:before{content:"";position:absolute;left:-14px;top:3px;bottom:27px;width:2px;background:var(--accent)}.row.sel:nth-last-child(1 of.row:not([hidden])):before{bottom:3px}.row.sel .entry h3 a{border-bottom-color:var(--accent)}.tags{display:flex;flex-wrap:wrap;gap:6px}.post .tags{margin-top:18px}.tags li,.pagefind-ui__result{text-indent:0}.tags li{padding:0;border:1px solid var(--rule);font-size:12.5px;line-height:1}.tags li:before,.pagefind-ui__result:before{content:none}.tags a{display:block;padding:4px 7px;color:var(--soft);border:0}.tags a:hover{color:var(--ink)}dl{display:grid;grid-template-columns:20ch 1fr;gap:6px 2ch}.tag-dl{grid-template-columns:24ch 1fr}dt{color:var(--soft)}.count{margin-left:.5ch;padding:1px 5px;border:1px solid var(--rule);color:var(--soft);font-size:12.5px;font-variant-numeric:tabular-nums}.prose{max-width:70ch;margin-top:40px;font-size:16px;line-height:1.7}.prose>*+*{margin-top:1.1em}.prose a{overflow-wrap:anywhere}.prose h2{margin:2.4em 0 .7em;padding:0;border:0;font-size:18px;letter-spacing:0;text-transform:none;line-height:1.4}.prose h2:before,.prose h3:before,.callout-label:before,.sheet-t:before{content:"";display:inline-block;width:7px;height:7px;margin-right:1ch;vertical-align:1px;background:var(--accent)}.prose h2:before{width:8px;height:8px;vertical-align:3px}.prose h3:before,.callout-label:before{background:none;border:1px solid var(--accent)}.prose h3{margin:2em 0 .5em;font-size:16px}.prose :is(h2,h3){scroll-margin-top:56px}.prose :is(h2,h3) a{color:inherit;border:0}.prose :is(h2,h3)+*{margin-top:0}.prose strong{font-weight:600}.prose li+li{margin-top:.35em}.prose ol{list-style:none;counter-reset:n}.prose ol>li{counter-increment:n;padding-left:3ch;text-indent:-3ch}.prose ol>li:before{content:counter(n) ". ";color:var(--soft);font-variant-numeric:tabular-nums}.prose li>p{display:inline}.prose blockquote{margin-left:calc(8px + 1ch);padding-left:2ch;border-left:1px solid var(--soft)}.prose blockquote>*+*{margin-top:1.1em}.prose code{padding:1px .4ch;background:var(--code-bg);font-size:.9em}.prose hr{border:0;border-top:1px solid var(--rule)}.prose img{max-width:100%;height:auto}.prose table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:14px;font-variant-numeric:tabular-nums}.prose th{padding:4px 2ch 4px 0;border-bottom:2px solid var(--ink);text-align:left;font-size:12.5px}.prose td{padding:6px 2ch 6px 0;border-bottom:1px solid var(--rule);vertical-align:top}.astro-code{--code-foreground: var(--ink);--code-background: var(--code-bg);--code-token-comment: var(--soft);--code-token-constant: var(--accent);--code-token-string: var(--accent);--code-token-string-expression: var(--accent);padding:14px 2ch;overflow-x:auto;border:1px solid var(--rule);font-size:14px;line-height:1.6}.prose pre code{padding:0;background:none;font-size:inherit}.callout{padding:14px 2ch;border:1px solid var(--rule)}.callout>*+*{margin-top:.7em}sup{line-height:0}sup a{padding:0 .2ch;border:0}.footnotes{font-size:14px}.footnotes ol>li{padding-left:0;text-indent:0}.data-footnote-backref{border:0}.crumb{position:fixed;top:0;left:0;right:0;z-index:2;display:flex;gap:1.2ch;padding:9px max(24px,calc((100% - 772px)/2)) 8px;background:var(--bg);border-bottom:1px solid var(--rule);color:var(--soft);font-size:12.5px;white-space:nowrap;opacity:0;transform:translateY(-100%);pointer-events:none}.crumb.on{opacity:1;transform:none;pointer-events:auto}.crumb a{color:var(--soft);border:0}.crumb a:hover{color:var(--ink)}.crumb-t,.crumb-s{overflow:hidden;text-overflow:ellipsis}.crumb-t{flex:0 1 auto;min-width:6ch}.crumb-s{flex:0 2 auto;color:var(--ink)}.crumb-s:empty{display:none}.crumb>*+*:before{content:"/";margin-right:1.2ch;color:var(--rule)}.pn{display:grid;grid-template-columns:1fr 1fr;gap:16px 4ch;margin-top:56px;padding-top:16px;border-top:1px solid var(--rule)}.pn a{display:block;border:0;font-weight:600;line-height:1.45}.pn a[rel=next]{grid-column:2;text-align:right}.pn-l{display:block;margin-bottom:4px;font-size:13px;font-weight:400}.pn kbd{display:none}[data-keys] .pn kbd{display:inline-block;margin-left:.6ch}.comments{margin-top:56px}.comments-status,.search-status,.pagefind-ui__message,.pagefind-ui__result-excerpt{color:var(--soft);font-size:13px}.comments[data-comments-state=delayed] .comments-status{color:var(--ink)}.foot{display:flex;flex-wrap:wrap;align-items:center;gap:6px 22px;margin-top:64px;padding-top:12px;border-top:1px solid var(--rule);color:var(--soft);font-size:13px}.say{color:var(--accent)}.say:empty{display:none}.foot-tools{display:flex;gap:6px 22px;margin-left:auto}.foot button,.search-host button{padding:0;border:0;background:none;color:var(--soft);font:inherit;cursor:pointer}.search-host button{font-size:13px}:is(.foot,.search-host) button:hover{color:var(--ink)}.hint kbd{margin-right:.6ch}.eof{display:flex;align-items:center;gap:1.5ch;margin-top:3rem;color:var(--accent);font-size:.76rem;letter-spacing:.08em}.eof:before,.eof:after{content:"";flex:1;border-top:1px dashed var(--soft);opacity:.6}kbd{display:inline-block;min-width:2.1em;padding:2px 5px 1px;border:1px solid var(--rule);border-bottom-width:2px;border-radius:2px;background:var(--key);color:var(--ink);font:400 11.5px/1.35 Fira Code,ui-monospace,monospace;text-align:center;vertical-align:1px}kbd+kbd{margin-left:3px}.cli{margin-top:40px}.cli-line{display:flex;align-items:baseline;gap:1ch;padding-bottom:4px;border-bottom:1px solid var(--rule)}.cli-line:focus-within{border-bottom-color:var(--accent)}.ps1{color:var(--soft);white-space:nowrap}.gt{color:var(--accent)}.cli input,.pagefind-ui__search-input{flex:1;min-width:0;padding:2px 0;border:0;background:transparent;color:var(--ink);font:inherit;caret-color:var(--accent)}.cli input{font-size:16px}:is(.cli input,.pagefind-ui__search-input):focus{outline:0}:is(.cli input,.pagefind-ui__search-input)::placeholder{color:var(--soft);opacity:1}.flt-count{font-size:13px;font-variant-numeric:tabular-nums;white-space:nowrap}.out{display:grid;grid-template-columns:max-content 1fr;gap:2px 2.5ch;margin-top:10px;font-size:13.5px}.out:empty{display:none}.out .wide{grid-column:1 / -1;color:var(--soft)}.yr:first-child .year{margin-top:32px}dialog{width:100%;max-width:min(30rem,calc(100% - 32px));margin:auto;padding:0;border:1px solid var(--rule);background:var(--bg);color:var(--ink)}dialog:focus-visible{outline:0}dialog::backdrop{background:color-mix(in srgb,var(--bg) 72%,transparent)}.sheet{padding:20px 3ch 18px;font-size:14px}.sheet-t{margin-bottom:16px}.keymap{grid-template-columns:max-content 1fr;gap:9px 2.5ch;align-items:baseline}.keymap dt{text-align:right;white-space:nowrap}.keymap dd{color:var(--ink)}.sheet-f{margin-top:16px;padding-top:10px;border-top:1px solid var(--rule);font-size:12.5px}@media(prefers-reduced-motion:no-preference){.cursor{animation:blink 1.1s steps(1) infinite}.node:after{transition:background .1s}.crumb{transition:opacity .18s,transform .18s}dialog[open]{animation:sheet .14s ease-out}}@keyframes blink{50%{opacity:0}}@keyframes sheet{0%{opacity:0;transform:translateY(4px)}}@media(pointer:coarse){[data-keys] .pn kbd,.hint{display:none}}@media(max-width:640px),(hover:none){.nk{display:none}}.search-host{margin-top:40px}.pagefind-ui__form{display:flex;flex-wrap:wrap}.pagefind-ui__form>:not(.pagefind-ui__drawer){padding:2px 0 6px;border-bottom:1px solid var(--soft)}.pagefind-ui__form:focus-within>*{border-bottom-color:var(--accent)}.pagefind-ui__drawer{flex-basis:100%}.pagefind-ui__hidden{display:none}.search-host .pagefind-ui__suppressed{color:transparent;pointer-events:none}.pagefind-ui__results{list-style:none}.pagefind-ui__message,.search-status{margin:16px 0}.pagefind-ui__result{padding:14px 0;border-top:1px solid var(--rule)}.pagefind-ui__result-link{border:0;font-weight:600}.pagefind-ui__result-excerpt{margin-top:4px}.pagefind-ui__result-excerpt mark{background:none;color:var(--accent)}@media(max-width:640px){body{font-size:14px}.page{padding:32px 16px}.site-nav{gap:6px 16px}dl,.tag-dl{grid-template-columns:1fr;gap:0}dd{margin-bottom:10px}.prose{margin-top:28px}.astro-code{padding:12px 1.5ch;font-size:13px}.prose blockquote{margin-left:0}.row.sel:before{left:-10px}.crumb{padding:8px 16px 7px}.crumb-t{display:none}.pn{grid-template-columns:1fr}.pn a[rel=next]{grid-column:1;text-align:left}}
