@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-A.woff2)format("woff2");unicode-range:U+41}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-B.woff2)format("woff2");unicode-range:U+42}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-C.woff2)format("woff2");unicode-range:U+43}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-D.woff2)format("woff2");unicode-range:U+44}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-E.woff2)format("woff2");unicode-range:U+45}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-F.woff2)format("woff2");unicode-range:U+46}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-G.woff2)format("woff2");unicode-range:U+47}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-H.woff2)format("woff2");unicode-range:U+48}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-I.woff2)format("woff2");unicode-range:U+49}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-J.woff2)format("woff2");unicode-range:U+4A}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-K.woff2)format("woff2");unicode-range:U+4B}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-L.woff2)format("woff2");unicode-range:U+4C}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-M.woff2)format("woff2");unicode-range:U+4D}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-N.woff2)format("woff2");unicode-range:U+4E}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-O.woff2)format("woff2");unicode-range:U+4F}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-P.woff2)format("woff2");unicode-range:U+50}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-Q.woff2)format("woff2");unicode-range:U+51}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-R.woff2)format("woff2");unicode-range:U+52}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-S.woff2)format("woff2");unicode-range:U+53}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-T.woff2)format("woff2");unicode-range:U+54}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-U.woff2)format("woff2");unicode-range:U+55}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-V.woff2)format("woff2");unicode-range:U+56}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-W.woff2)format("woff2");unicode-range:U+57}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-X.woff2)format("woff2");unicode-range:U+58}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-Y.woff2)format("woff2");unicode-range:U+59}@font-face{font-family:Goudy Initialen;font-display:block;src:url(/font/goudy-initialen/GoudyInitialen-Z.woff2)format("woff2");unicode-range:U+5A}@font-face{font-family:Coelacanth Regular;font-style:normal;font-display:swap;font-weight:400;src:url(/font/CoelacanthRegular-Regular.woff2)format("woff2")}@font-face{font-family:Coelacanth Regular;font-style:italic;font-display:swap;font-weight:400;src:url(/font/CoelacanthRegular-Italic.woff2)format("woff2")}@font-face{font-family:Coelacanth Regular;font-style:normal;font-display:swap;font-weight:600;src:url(/font/CoelacanthRegular-SemiBold.woff2)format("woff2")}@font-face{font-family:Coelacanth Subheading;font-style:normal;font-display:swap;font-weight:400;src:url(/font/CoelacanthSubheading-Regular.woff2)format("woff2")}@font-face{font-family:Coelacanth Subheading;font-style:italic;font-display:swap;font-weight:400;src:url(/font/CoelacanthSubheading-Italic.woff2)format("woff2")}@font-face{font-family:Coelacanth Subheading;font-style:normal;font-display:swap;font-weight:600;src:url(/font/CoelacanthSubheading-SemiBold.woff2)format("woff2")}@font-face{font-family:Berkeley Mono;font-style:normal;font-weight:400;font-display:optional;src:url(/font/BerkeleyMono-Regular.woff2)format("woff2")}@font-face{font-family:Berkeley Mono;font-style:normal;font-weight:600;font-display:optional;src:url(/font/BerkeleyMono-Bold.woff2)format("woff2")}@font-face{font-family:Berkeley Mono;font-style:italic;font-weight:400;font-display:optional;src:url(/font/BerkeleyMono-Italic.woff2)format("woff2")}@font-face{font-family:Berkeley Mono;font-style:italic;font-weight:600;font-display:optional;src:url(/font/BerkeleyMono-BoldItalic.woff2)format("woff2")}:root{--bg:#fbf3db;--fg:#53676d;--muted:#909995;--border:#d5cdb6;--surface:#ece3cc;--sel:#d5cdb6;--accent:#0072d4;--red:#d2212d;--green:#489100;--yellow:#ad8900;--magenta:#ca4898;--cyan:#009c8f;--add-bg:#4891001f;--del-bg:#d2212d1f;--dropcap:#84362f;--dropcap-bg:transparent;--term-chrome:var(--surface);--mono:"Berkeley Mono", ui-monospace, "SF Mono", "Menlo", "Cascadia Mono", monospace;--body-size:18px;--serif-fallback:Garamond, "Iowan Old Style", "Hoefler Text", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, "Times New Roman", serif;--serif:"Coelacanth Regular", var(--serif-fallback);--serif-heading:"Coelacanth Regular", var(--serif-fallback);--serif-h1:"Coelacanth Subheading", var(--serif-fallback)}@media (prefers-color-scheme:dark){:root{--bg:#181818;--fg:#b9b9b9;--muted:#777;--border:#3b3b3b;--surface:#252525;--sel:#3b3b3b;--accent:#368aeb;--red:#ed4a46;--green:#70b433;--yellow:#dbb32d;--magenta:#eb6eb7;--cyan:#3fc5b7;--add-bg:#70b4331f;--del-bg:#ed4a461f;--dropcap:#fff;--dropcap-bg:#84362f;--term-chrome:#121212}}*{box-sizing:border-box}html{color-scheme:light dark;text-size-adjust:100%}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{background:var(--bg);color:var(--fg);font-family:var(--serif);font-optical-sizing:auto;font-size:var(--body-size);font-kerning:normal;margin:0;line-height:1.5}.container{max-width:41rem;margin:0 auto;padding:0 1.25rem}a{color:var(--fg);text-decoration-skip-ink:auto;text-decoration-color:var(--muted);text-underline-offset:.1em;text-decoration-thickness:.125em}a:hover{color:var(--accent);text-decoration-color:var(--accent)}.skip-link{position:absolute;left:-9999px}.skip-link:focus{z-index:1;background:var(--bg);border:1px solid var(--border);border-radius:4px;padding:.4rem .8rem;top:.5rem;left:1.25rem}main{padding:1.5rem 0 4rem}h1,h2,h3{font-family:var(--serif-heading);text-wrap:balance;text-align:left;font-weight:600;line-height:1.25}h1{font-family:var(--serif-h1);margin:0 0 .5rem;font-size:2rem}h2{margin:2.6rem 0 .75rem;font-size:1.4rem}h3{margin:1.8rem 0 .5rem;font-size:1.15rem}h4,h5,h6{font-family:var(--serif-heading);text-wrap:balance;text-align:left;margin:1.4rem 0 .4rem;font-weight:600;line-height:1.25}h4{font-size:1.05rem}h5,h6{font-size:1rem}h6{color:var(--muted)}p,ul,ol{margin:.75rem 0}code,kbd,pre{font-family:var(--mono)}code{background:var(--surface);border-radius:4px;padding:.1em .2em;font-size:.74em}.smallcaps{text-transform:none;font-variant-caps:all-small-caps}.no-smallcaps{text-transform:none;font-variant-caps:normal}kbd{background:var(--surface);border:1px solid var(--muted);white-space:nowrap;border-bottom-width:2px;border-radius:4px;padding:.05em .4em;font-size:.8rem}pre{background:var(--surface);border:1px solid var(--border);border-radius:6px;padding:.75rem 1rem;font-size:.85rem;line-height:1.5;overflow-x:auto}pre code{background:0 0;padding:0;font-size:1em}pre.astro-code{background:var(--surface);color:color-mix(in srgb, var(--shiki-light) 55%, var(--fg))}pre.astro-code span{color:color-mix(in srgb, var(--shiki-light) 55%, var(--fg))}@media (prefers-color-scheme:dark){pre.astro-code,pre.astro-code span{color:color-mix(in srgb, var(--shiki-dark) 55%, var(--fg))}}pre[data-language=sh] code:before,pre[data-language=shell] code:before,pre[data-language=shellscript] code:before{content:"$ ";color:var(--muted);user-select:none}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;margin:1rem 0;font-size:1rem}th,td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:.35rem .75rem .35rem 0}th{font-weight:600}blockquote{border-left:3px solid var(--border);color:var(--muted);margin:1rem 0;padding:0 0 0 1rem}.pull-quote{text-align:center;hyphens:none;hanging-punctuation:none;margin:1.4rem 1rem 1.75rem}.pull-quote blockquote{color:var(--fg);border:0;margin:0;padding:0}.pull-quote blockquote p{text-align:center;text-wrap:balance;margin:0;font-size:1.25rem;font-style:italic;line-height:1.35}.pull-quote figcaption{color:var(--muted);text-align:center;margin-top:.4rem;font-size:.85em;line-height:1.35}.pull-quote figcaption p{text-align:center;margin:0}.pull-quote figcaption:before{content:"— "}hr{border:none;border-top:1px solid var(--border);margin:2rem 0}article{text-align:justify;text-wrap:pretty;hyphens:auto;hyphenate-limit-chars:7 4 3;-webkit-hyphenate-limit-before:4;-webkit-hyphenate-limit-after:3;-webkit-hyphenate-limit-lines:2;hanging-punctuation:first last}p.has-dropcap{display:flow-root}.dropcap-group{float:left;color:var(--fg);font-family:"Goudy Initialen", var(--serif-h1);text-transform:uppercase;margin:.14em .02em -.17em 0;font-size:7em;font-style:normal;font-weight:400;line-height:.85;position:relative}.dropcap-group:before{content:"";background:var(--dropcap-bg);width:.8em;height:.78em;position:absolute;top:-.08em;left:0}.dropcap{color:var(--dropcap);display:block;position:relative}.dropcap-quote{font-family:var(--serif);text-transform:none;font-size:.33em;line-height:1;position:absolute;top:-.275em;right:104%}li{text-align:left}article ul>li::marker{content:"⁃ "}.term{border:1px solid var(--border);border-radius:14px;margin:.5rem 0 0;overflow:hidden;box-shadow:0 16px 40px -12px #00000047}.term-bar{background:var(--term-chrome);height:38px;display:flex}.term-body{display:grid}.term-body>.term-panel{grid-area:1/1;min-width:0}.term-body>.term-panel--inactive{visibility:hidden;pointer-events:none}.term-lights{border-bottom:1px solid var(--border);border-right:1px solid var(--border);align-items:center;gap:9px;padding:0 6px 0 8px;display:flex}.term-tab{border-bottom:1px solid var(--border);flex:1;align-items:center;min-width:0;padding:0 8px;display:flex}.term-tab+.term-tab{border-left:1px solid var(--border)}.term-tab--on{background:var(--bg);border-bottom-color:#0000}.term-tab-link{text-decoration:none;transition:background-color .12s}.term-tab-link:hover{background:var(--sel)}.term-tab-link:hover .term-tab-name{color:var(--fg)}.term-dot{border-radius:50%;width:14px;height:14px}.term-close{background:#ec6a5e}.term-min{background:#f4bf4f}.term-zoom{background:#61c554}.term-tab-name{text-align:center;min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;flex:1;font-family:system-ui,-apple-system,sans-serif;font-size:13px;overflow:hidden}.term-tab--on .term-tab-name{color:var(--fg)}.term-tab-title-link{color:inherit;text-decoration:none}.term-tab-title-link:hover{color:var(--accent)}.term-new{color:var(--muted);border-left:1px solid var(--border);border-bottom:1px solid var(--border);align-items:center;padding:0 11px;font-family:system-ui,-apple-system,sans-serif;font-size:16px;line-height:1;display:flex}.term .tree{margin:0;padding:.7rem 1rem .85rem}.post-panel{margin:0;padding:1.35rem 1.25rem 1.75rem}.post-cmd{color:var(--muted);font-family:var(--mono);text-align:start;margin:0 0 .4rem;font-size:.85em;line-height:1.35}.post-cmd:before{content:"$ ";user-select:none}.not-found-panel{font-family:var(--mono);text-align:start;font-size:.85em}.not-found-panel .post-cmd,.not-found-panel .not-found-error{font-size:inherit}.not-found-error{margin:0 0 1rem;font-size:.85em;line-height:1.35}.not-found-status{color:var(--red)}.tree{text-align:left;text-wrap:pretty;font-family:var(--mono);--row-pad:.05em;--row-line:calc(var(--body-size) * 1.35);max-width:calc(60ch + 2rem);font-size:.85em;line-height:var(--row-line);margin:.5rem 0 0}.tree-cmd,.tree-root{padding:var(--row-pad) 0;color:var(--muted);margin:0;line-height:1.35}.tree-cmd:before{content:"$ ";color:var(--muted);user-select:none}.tree a{font-family:var(--mono);overflow-wrap:anywhere;font-size:1em;text-decoration:none}.tree a code{font-size:inherit;background:var(--surface);padding:.1em .2em}.tree ul{margin:0;padding:0;list-style:none}.tree li{padding:var(--row-pad) 0 var(--row-pad) 4ch;margin:0;position:relative}.tree-year{color:var(--muted)}.tree li:before{content:"";border-left:1px solid var(--muted);position:absolute;top:0;bottom:0;left:calc(.5ch - .5px)}.tree li:last-child:before{height:calc(var(--row-pad) + var(--row-line) / 2);bottom:auto}.tree li:after{content:"";left:calc(.5ch - .5px);top:calc(var(--row-pad) + var(--row-line) / 2);border-top:1px solid var(--muted);width:calc(2.5ch + .5px);position:absolute}.tree-count{color:var(--muted);margin:.8rem 0 0}.about{font-family:var(--mono);text-wrap:pretty;margin:0;padding:.7rem 1rem .85rem;font-size:.85em;line-height:1.35}.about-cmd{color:var(--muted);margin:0;padding:.05em 0;line-height:1.35}.about-cmd:before{content:"$ ";user-select:none}.about-table-wrap{max-width:60ch;margin-top:.35rem;overflow-x:auto}.about-table{--about-cell-pad-inline:calc(1ch - 1px);border:1px solid var(--muted);border-collapse:collapse;table-layout:auto;width:100%;min-width:0;font:inherit;margin:0;line-height:1.35}.about-table+.about-table,.about-projects-table .about-table-heading,.about-projects-table .about-table-heading th{border-top:0}.about-table th,.about-table td{padding:.45em var(--about-cell-pad-inline);border:1px solid var(--muted);text-align:left;vertical-align:top;overflow-wrap:anywhere}.about-table th{width:auto;font-weight:600}.about-table-label{transform:translateY(var(--about-label-offset,0px));display:block}.about-table .about-table-heading th{text-align:center}.about-table-heading-label{transform:translateX(var(--about-heading-snap,0px));display:inline-block}.about-table th[scope=row]{white-space:nowrap;text-align:right;width:auto}.about-info-table th[scope=row]{width:7ch}.about-projects-table th[scope=row]{width:10ch}.about-table a{color:inherit;text-decoration:none}.about-table a:hover{color:var(--accent)}.about-project-row{cursor:pointer}.about-project-row:hover .about-table-label a,.about-project-row:has(a:focus-visible) .about-table-label a{color:var(--accent)}.about-project-row:has(a:focus-visible){outline:2px solid var(--accent);outline-offset:-2px}.about-project-row:has(a:focus-visible) a:focus-visible{outline:none}.post-date{color:var(--muted);margin-top:2.5rem;font-size:1rem}.footnotes{font-size:.85em}sup:has(>a[data-footnote-ref]){vertical-align:super;line-height:0}.footnotes:before{content:"";background:var(--border);height:1px;margin:2.5rem 0 1.5rem;display:block}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}article picture{display:block}article img{border-radius:6px;max-width:100%;height:auto;margin:1.5rem auto 0;display:block}article img+em,article picture+em,article picture+p>em{text-align:center;color:var(--muted);margin-top:.6rem;font-size:.95rem;font-style:italic;display:block}.callout{background:var(--surface);border-left:3px solid var(--accent);border-radius:0 6px 6px 0;margin:1.25rem 0;padding:.6rem 1rem}.smallout{border-left:3px solid var(--border);color:var(--muted);margin:1.25rem 0;padding:.1rem 1rem;font-size:.85em}.callout>:first-child,.smallout>:first-child{margin-top:0}.callout>:last-child,.smallout>:last-child{margin-bottom:0}.callout code,.callout kbd{background:var(--border)}.callout a code,a code{background:unset;padding:0}@media (width<=40rem){article table{display:block;overflow-x:auto}}
