:root{--bg: #000;--text: #fff;--body: #ccc;--dim: #8a8a8a;--soft: #555;--rule: #2a2a2a;--faint: #141414;--code-bg: #111;--mono: "IBM Plex Mono", ui-monospace, Menlo, monospace;--max-w: 640px}*,*:before,*:after{box-sizing:border-box}html{background:var(--bg);color-scheme:dark;-webkit-text-size-adjust:100%}body{margin:0 auto;max-width:calc(var(--max-w) + 48px);padding:0 24px;background:var(--bg);color:var(--text);font-family:var(--mono);font-size:14px;line-height:1.7;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline}a:focus-visible{outline:1px solid var(--text);outline-offset:3px}h1,h2,h3{font-size:14px;margin:0}p{margin:0 0 20px}ul{list-style:none;margin:0;padding:0}time,.dim{color:var(--dim);font-variant-numeric:tabular-nums}::selection{background:var(--text);color:var(--bg)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.ext:after{content:"";display:inline-block;width:.9em;height:.9em;margin-left:.5em;vertical-align:-.08em;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='square'%3E%3Cpath d='M7 3H3v10h10V9M9 2h5v5M14 2L7.5 8.5'/%3E%3C/svg%3E") center / contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='square'%3E%3Cpath d='M7 3H3v10h10V9M9 2h5v5M14 2L7.5 8.5'/%3E%3C/svg%3E") center / contain no-repeat}.bar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px 20px;padding-top:28px;margin-bottom:48px}.brand{display:block;line-height:0}.links{display:flex;gap:20px;flex-wrap:wrap}.links a{border-bottom:1px solid var(--soft)}.links a:hover{text-decoration:none;border-color:var(--text)}.links a[aria-current]{font-weight:600;border-color:var(--text)}footer{display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:56px;padding:12px 0 40px;border-top:1px solid var(--rule);color:var(--dim);font-size:13px}.page-title{font-weight:600;margin-bottom:6px}.page-sub{color:var(--dim);margin-bottom:36px}section+section{margin-top:48px}.label{display:flex;justify-content:space-between;gap:16px;color:var(--dim);font-size:12px;font-weight:400;text-transform:uppercase;letter-spacing:.1em;padding-bottom:8px;border-bottom:1px solid var(--rule)}.label a:hover{color:var(--text);text-decoration:none}.record{display:block;padding:14px 0;border-bottom:1px solid var(--faint)}a.record:hover{text-decoration:none}a.record:hover .record-title{text-decoration:underline;text-underline-offset:3px}.record-head{display:flex;justify-content:space-between;gap:16px}.record-title{font-weight:500}.record-head time,.record-head .aside{color:var(--dim);font-size:13px;white-space:nowrap}.record-desc{display:block;color:var(--body);font-size:13px;margin-top:2px}.record-meta{display:block;color:var(--dim);font-size:12px;margin-top:4px}.record-meta a{border-bottom:1px solid var(--soft)}.record-meta a:hover{text-decoration:none;color:var(--text);border-color:var(--text)}.record-kicker{display:block;color:var(--dim);font-size:12px;text-transform:uppercase;letter-spacing:.1em}.empty{color:var(--dim);padding:14px 0;border-bottom:1px solid var(--faint)}.sev{font-size:11px;padding:0 5px;margin-right:8px;border:1px solid var(--soft);color:var(--body);vertical-align:1px}.sev-critical,.sev-high{background:var(--text);border-color:var(--text);color:var(--bg)}.post-title{font-size:20px;line-height:1.35;font-weight:600;margin-bottom:20px;text-wrap:balance}.spec{display:grid;grid-template-columns:9ch 1fr;gap:2px 2ch;margin:0 0 32px;padding:12px 0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);font-size:13px}.spec dt{color:var(--dim);font-size:11px;text-transform:uppercase;letter-spacing:.1em;padding-top:2px}.spec dd{margin:0}.toc{margin-bottom:36px}.toc ol{list-style:none;margin:0;padding:10px 0 0;counter-reset:toc;font-size:13px}.toc li{counter-increment:toc;display:grid;grid-template-columns:4ch 1fr;padding:2px 0}.toc li:before{content:counter(toc,decimal-leading-zero);color:var(--dim)}.prose{color:var(--body);line-height:1.8;counter-reset:section}.prose h2,.prose h3{color:var(--text);font-weight:600;text-wrap:balance}.prose h2{font-size:15px;margin:40px 0 12px}.prose h3{margin:28px 0 10px}.prose h2{counter-increment:section}.prose h2:before{content:counter(section,decimal-leading-zero);color:var(--dim);font-weight:400;margin-right:1ch}.prose strong{color:var(--text);font-weight:600}.prose a{color:var(--text);border-bottom:1px solid var(--soft)}.prose a:hover{text-decoration:none;border-color:var(--text)}.prose ul,.prose ol{margin:0 0 20px;padding-left:2ch}.prose ul{list-style:"- "}.prose li{margin-bottom:4px}.prose code{background:var(--code-bg);color:var(--text);padding:1px 5px;font-size:.92em;word-break:break-word}.prose pre{background:var(--code-bg);border:1px solid var(--rule);padding:14px 16px;margin:0 0 20px;overflow-x:auto;font-size:13px;line-height:1.6}.prose pre code{padding:0;word-break:normal}.prose blockquote{margin:0 0 20px;padding-left:16px;border-left:1px solid var(--soft);color:var(--dim)}.prose img{display:block;max-width:100%;height:auto;border:1px solid var(--rule);margin:8px 0}.prose p>img+em,.prose p>em:only-child{display:block;color:var(--dim);font-size:12px;line-height:1.6}.prose hr{border:0;border-top:1px solid var(--rule);margin:32px 0}.prose table{display:block;overflow-x:auto;border-collapse:collapse;margin:0 0 20px;font-size:13px}.prose th,.prose td{border:1px solid var(--rule);padding:4px 10px;text-align:left}.bio p+p{margin-top:14px}.bio{color:var(--body);padding-top:14px}@media(max-width:600px){body{padding:0 16px}.record-head{flex-direction:column;gap:0}.spec{grid-template-columns:1fr}}.ascii-name[data-astro-cid-jlbki6pd]{display:block;max-width:100%}.ascii-name-lg[data-astro-cid-jlbki6pd]{width:260px;height:60px}.ascii-name-sm[data-astro-cid-jlbki6pd]{width:220px;height:48px}.social[data-astro-cid-yxtifmrq]{display:inline-flex;gap:16px}.social[data-astro-cid-yxtifmrq] a[data-astro-cid-yxtifmrq]{display:inline-flex;align-items:center;gap:6px;color:var(--dim)}.social[data-astro-cid-yxtifmrq] a[data-astro-cid-yxtifmrq]:hover{color:var(--text);text-decoration:none}.social[data-astro-cid-yxtifmrq] svg[data-astro-cid-yxtifmrq]{width:1.05em;height:1.05em;fill:currentColor}
