:root{--bg:rgb(0, 0, 0);--fg:rgb(160, 160, 160);--dim:rgb(120, 120, 120);--quote:rgb(104, 128, 112);--rule:rgb(38, 38, 38);--panel:rgb(12, 12, 12);--green:rgb(0, 255, 136);--cyan:rgb(0, 214, 255);--amber:rgb(255, 184, 0);--magenta:rgb(255, 64, 160);--red:rgb(255, 72, 72);--blue:rgb(90, 140, 255);--title:var(--green);--link:var(--cyan);--cat:var(--amber);--mono:ui-monospace, "Cascadia Mono", "JetBrains Mono", "Fira Code",
	        Consolas, "DejaVu Sans Mono", monospace;--measure:82ch;color-scheme:dark;accent-color:var(--green)}::selection{background:var(--green);color:var(--bg);text-shadow:none}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;padding:0 1.25rem 4rem;background:var(--bg);color:var(--fg);font-family:var(--mono);font-size:15px;line-height:1.65;font-variant-ligatures:none}a{color:var(--link);text-decoration:none}a:hover,a:focus-visible{color:var(--magenta)}:focus-visible{outline:2px solid var(--magenta);outline-offset:2px}.skip{position:absolute;left:-9999px}.skip:focus{left:1.25rem;top:.5rem;z-index:2;background:var(--panel);padding:.4rem .75rem;border:1px solid var(--green)}.vh{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.punct{color:var(--dim)}.marker{color:var(--green);margin-right:.4rem;user-select:none}.masthead{max-width:var(--measure);margin:0 auto;padding:2rem 0 1rem;border-bottom:1px solid var(--rule)}.prompt{font-size:1.05rem;white-space:nowrap;overflow-x:auto;padding:1.5rem 1rem;margin:-1.5rem -1rem}.prompt .host{color:var(--green)}.prompt .path{color:var(--cyan)}.prompt .cmd{color:var(--fg);margin-left:.55rem}.prompt .cmd:hover{color:var(--magenta);text-decoration:none}.cursor{display:inline-block;width:.6em;height:1.05em;margin-left:.15rem;vertical-align:text-bottom;background:var(--green);animation:blink 1.15s steps(1)infinite}@keyframes blink{50%{opacity:0}}@media(prefers-reduced-motion:reduce){.cursor{animation:none}}.nav{margin-top:.85rem;display:flex;flex-wrap:wrap;gap:1.1rem;font-size:.9rem}.nav a{color:var(--dim)}.nav a::before{content:"[";color:var(--rule)}.nav a::after{content:"]";color:var(--rule)}.nav a:hover,.nav a:focus-visible{color:var(--amber);text-decoration:none}main{max-width:var(--measure);margin:0 auto;padding-top:2rem}.page-title{font-size:1.15rem;font-weight:700;color:var(--fg);margin:0 0 .35rem}.meta{margin:.2rem 0 .9rem;font-size:.85rem;color:var(--dim)}.meta time{color:var(--dim)}.cat{color:var(--cat)}.cat:hover{color:var(--magenta)}.flag{color:var(--bg);background:var(--red);padding:0 .4em;margin-left:.4rem;font-size:.78rem;text-transform:uppercase;letter-spacing:.06em}.feed,.index,.results{list-style:none;margin:0;padding:0}.entry{padding:0 0 2rem;margin:0 0 2rem;border-bottom:1px solid var(--rule)}.entry:last-child{border-bottom:0}.entry-title{font-size:1.1rem;font-weight:700;margin:0;line-height:1.4}.entry-title a{color:var(--title)}.entry-title a:hover,.entry-title a:focus-visible{color:var(--magenta)}.excerpt{color:var(--fg)}.excerpt.prose{margin-top:.9rem}.excerpt>:first-child{margin-top:0}.excerpt>:last-child{margin-bottom:0}.more{margin:.9rem 0 0;font-size:.9rem;text-align:right}.more a{color:var(--dim)}.more a:hover{color:var(--magenta)}.index li,.results li{line-height:1.5;padding:.3rem 0;border-bottom:1px solid var(--panel)}.index li,.results .line{display:flex;gap:1rem;align-items:center}.index li[hidden]{display:none}.index time,.results time{color:var(--dim);font-size:.85rem;flex:none}.index li>a:not(.cat-tag),.results .line>a:not(.cat-tag){flex:initial;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cats li{justify-content:flex-start}.cats .count{color:var(--dim);font-size:.85rem}.post-title{font-size:1.45rem;line-height:1.35;font-weight:700;color:var(--title);margin:0 0 .3rem}.prose{margin-top:1.6rem}.prose h1,.prose h2,.prose h3,.prose h4{color:var(--cyan);line-height:1.35;margin:2rem 0 .6rem}.prose h1{font-size:1.3rem}.prose h2{font-size:1.15rem}.prose h3{font-size:1.05rem}.prose h4{font-size:.98rem;color:var(--fg)}.prose p,.prose ul,.prose ol{margin:0 0 1.1rem}.prose li{margin:.25rem 0}.prose strong{color:#d7d7d7}.prose em{color:var(--fg)}.prose del{color:var(--dim);opacity:.75}.prose u{text-decoration-color:var(--amber)}.prose abbr[title]{text-decoration:underline dotted var(--amber);cursor:help}.prose kbd{font:inherit;font-size:.85em;color:var(--fg);background:var(--panel);border:1px solid var(--rule);border-bottom-width:2px;border-radius:3px;padding:.05em .4em}.prose blockquote{margin:1.2rem 0;padding:.2rem 0 .2rem 1rem;border-left:2px solid var(--green);color:var(--dim)}.prose hr{border:0;border-top:1px solid var(--rule);margin:2rem 0}.prose img{max-width:100%;height:auto;border:1px solid var(--rule)}.prose a{text-decoration:underline;text-underline-offset:2px}.prose code{font-family:var(--mono);font-size:.9em;color:var(--amber);background:var(--panel);padding:.05em .35em;border:1px solid var(--rule)}.prose pre{background:var(--panel);border:1px solid var(--rule);border-left:2px solid var(--cyan);padding:.9rem 1rem;margin:1.2rem 0;overflow-x:auto;line-height:1.5}.prose pre code{color:var(--fg);background:0 0;border:0;padding:0;font-size:.88em}.prose table{border-collapse:collapse;margin:1.2rem 0;font-size:.92em;min-width:100%;width:max-content;max-width:none}.prose th,.prose td{border:1px solid var(--rule);padding:.35rem .6rem;text-align:left}.prose th{color:var(--cyan);background:var(--panel)}.pager,.postnav{display:flex;gap:1rem;align-items:baseline;margin-top:2.5rem;padding-top:1.2rem;border-top:1px solid var(--rule);font-size:.9rem}.pager{justify-content:space-between}.pager .pages{display:flex;gap:.6rem;flex-wrap:wrap}.pager .here{color:var(--green);font-weight:700}.pager .off{color:#404040}.postnav{justify-content:space-between}.postnav .next{margin-left:auto;text-align:right}.footer{max-width:var(--measure);margin:4rem auto 0;padding-top:1.2rem;border-top:1px solid var(--rule);font-size:.82rem;color:var(--dim)}.error{color:var(--red)}@media(max-width:40rem){body{font-size:14px;padding:0 1rem 3rem}.post-title{font-size:1.2rem}.pager{flex-wrap:wrap;gap:.75rem}}.crt{position:fixed;inset:0;z-index:9999;pointer-events:none;contain:layout style paint}.crt::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 50% 22% at 32% 4%,rgba(255,255,255,5%) 0%,rgba(255,255,255,0) 100%)0 0/100% 100% no-repeat,radial-gradient(ellipse min(62vw,calc(var(--measure) * .62)) 62% at 50% 50%,rgba(0,255,136,9%) 0%,transparent 18%,rgba(0,0,0,.18) 58%,rgba(0,0,0,.33) 82%,rgba(0,0,0,.585) 100%)0 0/100% 100% no-repeat,linear-gradient(rgba(0,0,0,.14),rgba(0,0,0,.14))0 33%/100% 1px no-repeat,linear-gradient(rgba(0,0,0,.14),rgba(0,0,0,.14))0 67%/100% 1px no-repeat,repeating-linear-gradient( to right,rgba(255,0,0,.0454) 0,rgba(255,0,0,.0454) .667px,rgba(0,255,0,.0318) 1.333px,rgba(0,255,0,.0318) 2px,rgba(0,0,255,.0545) 2.667px,rgba(0,0,255,.0545) 3.333px,rgba(255,0,0,.0454) 4px );transform:translateZ(0)}.crt-hum{position:fixed;left:0;right:0;top:0;height:55vh;z-index:9995;pointer-events:none;background:linear-gradient(to bottom,rgba(198,255,230,0) 0%,rgba(198,255,230,.015) 18%,rgba(198,255,230,4%) 34%,rgba(198,255,230,.055) 50%,rgba(198,255,230,4%) 66%,rgba(198,255,230,.015) 82%,rgba(198,255,230,0) 100%);transform:translate3d(0,100vh,0);will-change:transform;animation:crt-hum 19s linear infinite}@keyframes crt-hum{from{transform:translate3d(0,100vh,0)}to{transform:translate3d(0,-55vh,0)}}.crt-phosphor{position:fixed;inset:0;z-index:9996;pointer-events:none}@supports(mix-blend-mode:multiply){.crt-phosphor{background:repeating-linear-gradient( to right,#ffe4e4 0,#ffe4e4 .667px,#ecffec 1.333px,#ecffec 2px,#e0e0ff 2.667px,#e0e0ff 3.333px,#ffe4e4 4px),repeating-linear-gradient( to bottom,#fff 0,#fff 1.4px,#cecece 2.2px,#cecece 3.2px,#fff 4px);background-blend-mode:multiply;mix-blend-mode:multiply}}.crt-lag{position:fixed;left:0;right:0;top:0;height:22vh;z-index:9997;pointer-events:none;transform:translate3d(0,-22vh,0);will-change:transform;animation:crt-sweep 9s linear infinite}@supports(mix-blend-mode:color-dodge){.crt-lag{background:linear-gradient(to top,#000 0%,#0c0904 4%,#261b0b 9%,#1b1408 16%,#0c0904 23%,#030201 30%,#000 100%);mix-blend-mode:color-dodge}}.crt::after{content:"";position:absolute;inset:0;background:#000;opacity:0;transform:translateZ(0);will-change:opacity;animation:crt-flicker 6.5s steps(1,end)infinite}.crt-sweep{position:fixed;left:0;right:0;top:0;height:22vh;z-index:9998;pointer-events:none;transform:translate3d(0,-22vh,0);will-change:transform;animation:crt-sweep 9s linear infinite;background:linear-gradient(to top,#000 0%,#595959 1.5%,#797979 4%,#6f6f6f 20%,#545454 38%,#333 58%,#151515 78%,#000 100%);mix-blend-mode:color-dodge}@supports((backdrop-filter:brightness(1.3)) or (-webkit-backdrop-filter:brightness(1.3))){.crt-sweep{background:0 0;mix-blend-mode:normal;-webkit-backdrop-filter:brightness(1.9)saturate(.86)blur(1.3px);backdrop-filter:brightness(1.9)saturate(.86)blur(1.3px);background:rgba(196,255,228,.085);-webkit-mask-image:linear-gradient(to top,transparent 0%,rgba(0,0,0,.6) 1.5%,#000 4%,rgba(0,0,0,.85) 20%,rgba(0,0,0,.55) 38%,rgba(0,0,0,.28) 58%,rgba(0,0,0,.1) 78%,transparent 100%);mask-image:linear-gradient(to top,transparent 0%,rgba(0,0,0,.6) 1.5%,#000 4%,rgba(0,0,0,.85) 20%,rgba(0,0,0,.55) 38%,rgba(0,0,0,.28) 58%,rgba(0,0,0,.1) 78%,transparent 100%)}}@keyframes crt-sweep{from{transform:translate3d(0,-22vh,0)}to{transform:translate3d(0,100vh,0)}}@keyframes crt-flicker{0%,96%{opacity:0}97%{opacity:.065}98%{opacity:0}99%{opacity:.04}100%{opacity:0}}html:not(.crt-off) .prompt .host,html:not(.crt-off) .prompt .path{text-shadow:0 0 4px currentColor,-1px 0 1px rgba(255,0,0,.35),1px 0 1px rgba(0,80,255,.35),0 0 18px currentColor,-8px 0 16px currentColor,8px 0 16px currentColor}html:not(.crt-off) .year span{text-shadow:0 0 1.06px currentColor,-1px 0 1px rgba(255,0,0,.35),1px 0 1px rgba(0,80,255,.35),0 0 4.65px currentColor}html:not(.crt-off) .page-title{text-shadow:0 0 4px currentColor,-1px 0 1px rgba(255,0,0,.35),1px 0 1px rgba(0,80,255,.35),0 0 18px currentColor}html:not(.crt-off) .cat{text-shadow:0 0 4px currentColor,-1px 0 1px rgba(255,0,0,.35),1px 0 1px rgba(0,80,255,.35),0 0 18px currentColor,-5px 0 10px currentColor,5px 0 10px currentColor}html:not(.crt-off) .entry-title .marker{text-shadow:0 0 1.06px currentColor,0 0 4.65px currentColor}html:not(.crt-off) .cursor{box-shadow:0 0 6px var(--green),0 0 22px var(--green),-6px 0 14px var(--green),6px 0 14px var(--green)}html:not(.crt-off) .post-title{text-shadow:0 0 1.95px currentColor,-1px 0 1px rgba(255,0,0,.3),1px 0 1px rgba(0,80,255,.3),0 0 8.45px currentColor,-6px 0 8.45px currentColor,6px 0 8.45px currentColor}html:not(.crt-off) .entry-title a{text-shadow:0 0 1.06px currentColor,0 0 4.65px currentColor}.prompt .host:hover,.prompt .host:focus-visible{color:var(--green)}html:not(.crt-off) .prompt .host:hover,html:not(.crt-off) .prompt .host:focus-visible{text-shadow:0 0 6px currentColor,-1px 0 1px rgba(255,0,0,.35),1px 0 1px rgba(0,80,255,.35),0 0 25px currentColor,-8px 0 16px currentColor,8px 0 16px currentColor}html:not(.crt-off) a:hover,html:not(.crt-off) a:focus-visible{text-shadow:0 0 3px currentColor,-1px 0 1px rgba(255,0,0,.35),1px 0 1px rgba(0,80,255,.35),0 0 12px currentColor,0 0 34px currentColor,-8px 0 16px currentColor,8px 0 16px currentColor}html:not(.crt-off) .entry-title a:hover,html:not(.crt-off) .entry-title a:focus-visible,html:not(.crt-off) .entry-title:hover .marker,html:not(.crt-off) .entry-title:focus-within .marker{text-shadow:0 0 1.27px currentColor,0 0 5.07px currentColor,0 0 14.37px currentColor}html.crt-off .crt,html.crt-off .crt-hum,html.crt-off .crt-phosphor,html.crt-off .crt-lag,html.crt-off .crt-sweep{display:none}@media(prefers-contrast:more){.crt,.crt-hum,.crt-phosphor,.crt-lag,.crt-sweep{display:none}}@media(prefers-reduced-motion:reduce){.crt::after,.crt-hum,.crt-lag,.crt-sweep{display:none;animation:none;will-change:auto}}@media print{.crt,.crt-hum,.crt-phosphor,.crt-lag,.crt-sweep,.crt-btn,.copy-btn,.filter-holder,.cursor,.anchor{display:none}.search-dlg{display:none}.results mark{background:0 0;color:#000;font-weight:700}.results .snip{color:#444}html,body{background:#fff;color:#000}*{text-shadow:none!important;box-shadow:none!important}a{color:#000}.entry-title a,.post-title,.page-title{color:#000}.meta,.quote,.footer{color:#444}.prose pre,.prose code,.prose th{background:#f4f4f4;border-color:#bbb}.prose .text-info{color:#036}.prose .text-success{color:#060}.prose .text-danger{color:#a00}.prose .text-primary{color:#00a}.prose .badge{color:#000;background:#ddd}.prose a[href^=http]::after{content:" (" attr(href)")";font-size:.85em}.entry{page-break-inside:avoid}}.quote{margin:.5rem 0 0;font-size:.9rem;color:var(--quote);font-style:italic}.quote .q{display:none}.quote .q.on{display:inline}.crt-btn{font:inherit;font-size:.9rem;color:var(--dim);background:0 0;border:0;padding:0;cursor:pointer;margin-left:auto}.crt-btn::before{content:"[";color:var(--rule)}.crt-btn::after{content:"]";color:var(--rule)}.crt-btn:hover,.crt-btn:focus-visible{color:var(--amber)}.crt-btn[aria-pressed=true]{color:var(--green)}.year{margin:0 0 1.6rem;text-align:right;font-size:.85rem;letter-spacing:.35em;color:var(--green);border-bottom:1px solid var(--rule);padding-bottom:.3rem}.entry+.year{margin-top:1rem}.codewrap{position:relative}.copy-btn{position:absolute;top:.45rem;right:.45rem;font:inherit;font-size:.75rem;color:var(--dim);background:var(--bg);border:1px solid var(--rule);padding:.05rem .45rem;cursor:pointer;opacity:0;transition:opacity 120ms linear}.codewrap:hover .copy-btn,.copy-btn:focus-visible{opacity:1}.copy-btn:hover{color:var(--amber);border-color:var(--amber)}.copy-btn.done{color:var(--green);border-color:var(--green)}@media(hover:none){.copy-btn{opacity:1}}.filter-holder{margin:0 0 1rem}.filter{font:inherit;font-size:.9rem;width:100%;max-width:24rem;color:var(--fg);background:var(--panel);border:1px solid var(--rule);padding:.3rem .6rem}.filter:focus{border-color:var(--green);outline:none}.filter::placeholder{color:#7e7e7e}.filter-count{margin-left:.6rem;color:var(--dim)}.filter-right{text-align:right}.nav a.busy{color:var(--amber)}.nav a.busy::after{content:"\2026" "]";color:var(--rule)}.results .line{margin:0}.results .cat-tag{flex:none}.results .snip{margin:.2rem 0 0;font-size:.85rem;line-height:1.5;color:var(--dim)}.results mark{background:var(--green);color:var(--bg);text-shadow:none}.search-dlg{width:min(46rem,calc(100vw - 2.5rem));max-height:min(80vh,44rem);margin:3rem auto auto;padding:1.25rem 1.5rem 1.5rem;background:var(--bg);color:var(--fg);font:inherit;border:1px solid var(--green);overflow-y:auto;overscroll-behavior:contain}.search-dlg::backdrop{background:rgb(0 0 0/78%)}.search-dlg .page-title{margin-top:0}.search-dismiss{float:right;margin:0 0 .5rem 1rem}.paypal-btn{font:inherit;color:var(--bg);background:var(--green);border:0;padding:.4rem 1rem;cursor:pointer}.paypal-btn:hover{background:var(--amber)}.highlight{margin:1.2rem 0}.highlight pre{margin:0}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:#7d7d7d;font-style:italic}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .kt{color:var(--magenta)}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .s2,.chroma .s1,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .ss{color:var(--amber)}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:var(--green)}.chroma .n,.chroma .nx,.chroma .py{color:var(--fg)}.chroma .na,.chroma .nt{color:var(--cyan)}.chroma .nb,.chroma .bp,.chroma .nc,.chroma .nn,.chroma .ne{color:var(--cyan)}.chroma .nf,.chroma .fm{color:#d7d7d7}.chroma .nd,.chroma .nl,.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi{color:var(--fg)}.chroma .o,.chroma .ow,.chroma .p{color:#828282}.chroma .err{color:var(--red)}.chroma .gd{color:var(--red)}.chroma .gi{color:var(--green)}.prose h1,.prose h2,.prose h3,.prose h4{position:relative;scroll-margin-top:1.5rem}.anchor{position:absolute;left:-1.25rem;color:var(--dim);text-decoration:none;opacity:0;transition:opacity 120ms linear}.prose h1:hover .anchor,.prose h2:hover .anchor,.prose h3:hover .anchor,.prose h4:hover .anchor,.anchor:focus-visible{opacity:1}.anchor:hover{color:var(--amber);text-decoration:none}@media(max-width:46rem){.anchor{position:static;margin-right:.4rem;opacity:1}}.table-wrap{overflow-x:auto;margin:1.2rem 0}.table-wrap table{margin:0}.prose hr{border:0;border-top:1px dashed var(--rule)}#missing-path{color:var(--amber)}.cat-tag{margin-left:auto;padding-left:1rem;color:var(--cat);font-size:.82rem;white-space:nowrap}.prose .text-info{color:var(--cyan)}.prose .text-success{color:var(--green)}.prose .text-danger{color:var(--red)}.prose .text-primary{color:var(--blue)}.prose .badge{font-size:.82em;color:var(--bg);background:var(--dim);border-radius:.8em;padding:.05em .55em;white-space:nowrap}.prose .center{display:block;text-align:center}