@font-face{font-family:Inter;font-style:normal;font-weight:300 700;font-display:swap;src:url(/fonts/Inter-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:300 700;font-display:swap;src:url(/fonts/Inter-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:300 700;font-display:swap;src:url(/fonts/Inter-Italic-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:300 700;font-display:swap;src:url(/fonts/Inter-Italic-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Berkeley Mono;src:url("/fonts/Berkeley Mono Variable.woff2") format("woff2");font-stretch:60% 100%;font-weight:100 900;font-style:oblique 0deg 16deg;font-feature-settings:"calt";font-display:swap}.chroma{color:#f8f8f2;-webkit-text-size-adjust:none}.chroma .x,.chroma .err{color:#f8f8f2}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#ffff801f}.chroma .lnt,.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7970a9}.chroma .line{display:flex}.chroma .k,.chroma .kc{color:#ff80bf}.chroma .kd{color:#80ffea;font-style:italic}.chroma .kn,.chroma .kp,.chroma .kr{color:#ff80bf}.chroma .kt{color:#80ffea}.chroma .na,.chroma .nc{color:#8aff80}.chroma .no,.chroma .nd,.chroma .ni,.chroma .ne{color:#f8f8f2}.chroma .nl{color:#80ffea;font-style:italic}.chroma .nn,.chroma .nx{color:#f8f8f2}.chroma .nt{color:#ff80bf}.chroma .nb{color:#80ffea;font-style:italic}.chroma .bp{font-style:italic}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:#80ffea;font-style:italic}.chroma .nf,.chroma .fm{color:#8aff80}.chroma .ld{color:#f8f8f2}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .s1,.chroma .ss{color:#ffff80}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:#9580ff}.chroma .o,.chroma .ow,.chroma .or{color:#ff80bf}.chroma .p{color:#f8f8f2}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs{color:#7970a9}.chroma .cp,.chroma .cpf{color:#ff80bf}.chroma .gd{color:#ff9580}.chroma .ge{text-decoration:underline}.chroma .gr{color:#f8f8f2}.chroma .gh{font-weight:700}.chroma .gi{color:#8aff80;font-weight:700}.chroma .go{color:#c6c6c2}.chroma .gp,.chroma .gs{color:#f8f8f2}.chroma .gu{font-weight:700}.chroma .gt{color:#f8f8f2}.chroma .gl{text-decoration:underline}.chroma .w{color:#f8f8f2}:root{--background: #22212c;--foreground: #f8f8f2;--accent: #aa99ff;--secondary: #ff80bf;--cyan: #80ffea;--green: #8aff80;--yellow: #ffff80;--orange: #ffca80;--red: #ff9580;--comment: #7970a9;--muted-1: #70a99f;--muted-2: #cc7766;--muted-3: #a97079;--muted-4: #a99f70;--selection: #454158;--border: #504c67;--code-border: color-mix(in srgb, var(--foreground) 10%, transparent);--code-text: color-mix(in srgb, var(--foreground) 5%, var(--accent));--muted: color-mix(in srgb, var(--foreground) 50%, transparent);--tint-code: color-mix(in srgb, var(--accent) 10%, var(--background));--tint-box: color-mix(in srgb, var(--accent) 5%, var(--background));--tint-hover: color-mix(in srgb, var(--accent) 15%, transparent);--rule: linear-gradient( to right, color-mix(in srgb, var(--border) 70%, transparent), color-mix(in srgb, var(--border) 10%, transparent) 85%, transparent );--font-size: 1rem;--line-height: 1.54;--font-sans: "Inter", system-ui, sans-serif;--font-mono: "Berkeley Mono", ui-monospace, monospace;--radius: 6px;--icon-size: 24px;--logo-size: 32px}:root{--list-indent: 20px;--list-inset: 20px;--bullet: "\25cf";--bullet-size: .5em;--header-height: 73px;--scroll-offset: calc(var(--header-height) + 20px)}html{box-sizing:border-box;scrollbar-gutter:stable}*,*:before,*:after{box-sizing:inherit;margin:0;padding:0}body{min-height:100dvh;display:flex;flex-direction:column;font-family:var(--font-sans);font-size:var(--font-size);font-weight:300;line-height:var(--line-height);background-color:var(--background);color:var(--foreground);text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;overflow-wrap:break-word;padding:0 40px}h1{font-size:calc(var(--font-size) * 1.45)}h2{font-size:calc(var(--font-size) * 1.35)}h3{font-size:calc(var(--font-size) * 1.15)}h4,h5,h6{font-size:var(--font-size)}h1,h2,h3,h4,h5,h6,b,strong,th{font-weight:700}h1,h2,h3,h4,h5,h6,p,ul,ol,img,figure,video,table{margin:25px 0}::selection{background:var(--selection)}:is(pre,.table-wrap)::selection{background:transparent}a{color:var(--accent);text-decoration:none;&:hover,&:focus,&:active{color:var(--secondary)}}a:focus-visible,button:focus-visible{outline:1px solid var(--accent);outline-offset:2px}button{font:inherit;color:var(--accent);background:transparent;border:0;cursor:pointer}img{display:block;max-width:100%;border:8px solid var(--border);padding:8px}figure{width:fit-content;img,video{margin-bottom:0}figcaption{background:var(--border);text-align:center;font-size:.85em;margin-top:-8px}}ul,ol{margin-left:var(--list-indent);:is(ul,ol){margin-top:0;margin-bottom:0}}:not(li)>:is(ul,ol){margin-left:calc(var(--list-inset) + var(--list-indent))}li::marker{color:var(--accent)}code,kbd{font-family:var(--font-mono);font-weight:400;font-feature-settings:"liga" 1,"calt" 1;font-size:.95em;background:var(--tint-code);color:var(--code-text);padding:0 6px;margin:0 2px}kbd{border-top:1px solid color-mix(in srgb,var(--accent) 25%,transparent);border-left:1px solid var(--accent);border-right:1px solid var(--accent);border-bottom:4px solid var(--accent);border-radius:4px}pre{tab-size:4;font-size:.9em;background:var(--tint-code);color:var(--code-text);padding:10px;overflow:auto;code{display:block;width:max-content;min-width:100%;background:none;color:inherit;font-size:inherit;padding:0;margin:0}}.highlight{position:relative;margin:20px 0;border:1px solid var(--code-border)}.highlight .copy{position:absolute;top:5px;right:5px;margin:0;padding:2px;border:2px solid var(--muted);border-radius:var(--radius);background:var(--tint-code);line-height:0;opacity:0;transition:opacity .15s ease;.highlight:hover>&,&:focus-visible,&.copied{opacity:1}.highlight:hover>&{transition-delay:var(--copy-show)}.highlight.idle>&:not(:focus-visible,.copied){opacity:0;pointer-events:none;transition-duration:.3s;transition-delay:0s}&:hover,&:focus-visible{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 15%,var(--tint-code))}&.copied{color:var(--green);.copy__board{fill:var(--green)}}svg{display:block;width:var(--icon-size);height:var(--icon-size)}.copy__board{fill:var(--muted)}}blockquote{background-color:var(--tint-code);padding:10px 25px;border:1px solid var(--code-border);&:before{content:"\203a";float:left;margin-left:-15px;color:var(--accent);font-weight:700}p:first-child{margin-top:0}p:last-child{margin-bottom:0}}.alert{--alert: var(--accent);padding-left:20px;border:0;border-left:4px solid var(--alert);background-color:color-mix(in srgb,var(--alert) 8%,var(--background));&:before{content:none}}.alert-title{margin:0 0 10px;font-weight:700;color:var(--alert);+*{margin-top:0}}.alert-note{--alert: var(--cyan)}.alert-tip{--alert: var(--green)}.alert-important{--alert: var(--orange)}.alert-warning{--alert: var(--yellow)}.alert-caution{--alert: var(--red)}table{border-collapse:collapse}.table-wrap{margin:25px 0;overflow-x:auto;table{margin:0}}table,th,td{border:2px solid var(--border);padding:10px}th{text-align:left;text-transform:uppercase;letter-spacing:.04em}thead th{background:var(--selection)}tbody:has(>tr:nth-child(3))>tr:nth-child(2n){background:color-mix(in srgb,var(--accent) 5%,transparent)}td code,th code{background:none}hr{border:none;height:1px;background:var(--rule)}abbr{text-decoration-style:wavy;text-decoration-color:var(--accent);cursor:help}mark{background:color-mix(in srgb,var(--accent) 45%,transparent);color:var(--foreground)}sub,sup{line-height:0}.footnotes{color:var(--muted)}fieldset{margin:25px 0;padding:15px;border:1px solid var(--code-border);border-radius:var(--radius);background:var(--tint-box)}input:not([type=checkbox],[type=radio],[type=range]),select,textarea{font:inherit;color:var(--foreground);background:transparent;border:2px solid var(--border);border-radius:var(--radius);padding:5px 10px;margin:5px 0;max-width:100%}input:focus-visible,select:focus-visible,textarea:focus-visible{outline:none;border-color:var(--accent)}::placeholder{color:var(--muted)}textarea{resize:both;min-height:4em;vertical-align:top}select{appearance:none;padding-right:30px;background-image:linear-gradient(45deg,transparent 50%,var(--accent) 50%),linear-gradient(135deg,var(--accent) 50%,transparent 50%);background-position:calc(100% - 15px) 50%,calc(100% - 10px) 50%;background-size:5px 5px;background-repeat:no-repeat;option{background:var(--background)}}input[type=range]{accent-color:var(--accent)}input[type=checkbox],input[type=radio]{appearance:none;font:inherit;width:1.25em;height:1.25em;vertical-align:-.25em;margin-right:8px;border:2px solid var(--border);border-radius:4px;background:transparent center / 70% no-repeat;cursor:pointer;&:hover{background-color:var(--tint-hover)}&:checked{border-color:var(--accent);background-color:var(--accent)}}input[type=radio]{border-radius:50%}input[type=checkbox]{position:relative;overflow:hidden}input[type=checkbox]:checked:before{content:"";position:absolute;top:50%;left:50%;width:.5em;height:.8em;background:linear-gradient(var(--background),var(--background)) right / 4px 100% no-repeat,linear-gradient(var(--background),var(--background)) bottom / 100% 4px no-repeat;transform:translate(-50%,-50%) rotate(45deg)}input[type=radio]:checked{background-image:radial-gradient(circle,var(--background) 35%,transparent 40%)}details{margin:25px 0;padding:0 15px;border:1px solid var(--code-border);background:var(--tint-box)}summary{margin:0 -15px;padding:10px 15px;font-weight:700;color:var(--accent);cursor:pointer;list-style:none;code{background:none;color:inherit;font-weight:inherit;padding:0}&:before{content:"\203a";display:inline-block;margin-right:10px;transition:transform .15s ease}details[open]>&:before{transform:rotate(90deg)}&:hover{background:var(--tint-hover)}}.skip-link{position:absolute;left:40px;top:-100px;z-index:300;padding:5px 10px;background:var(--accent);color:var(--background);font-weight:700;border-radius:var(--radius);&:focus{top:10px;color:var(--background)}}.header{position:sticky;top:0;z-index:100;display:flex;align-items:stretch;gap:10px;padding:24px 0 10px;background-color:var(--background);-webkit-user-select:none;user-select:none;&:after{content:"";position:absolute;left:0;right:0;bottom:-20px;height:20px;background:var(--background);mask-image:linear-gradient(black,rgb(0 0 0 / .9) 20%,rgb(0 0 0 / .65) 40%,rgb(0 0 0 / .35) 60%,rgb(0 0 0 / .1) 80%,transparent);pointer-events:none}}.logo,.menu a,.radio__button,.post-body button,a.button{font-weight:700;padding:5px 10px;border:2px solid var(--accent);border-radius:var(--radius)}.logo{flex:0 0 auto;max-width:100%;display:flex;align-items:center;background:var(--accent);color:var(--background);a{color:inherit}h1{font-size:inherit;margin:0}}.logo__roll{display:flex;padding:0;&:focus-visible{outline-color:var(--background)}}.logo__icon{--bleed: calc((var(--icon-size) - var(--logo-size)) / 2);width:var(--logo-size);height:var(--logo-size);margin:var(--bleed) calc(8px + var(--bleed)) var(--bleed) var(--bleed);border:0;padding:0}.logo{position:relative}.logo:before{--cat-size: 40px;content:"";position:absolute;right:0;top:calc(var(--cat-size) * -.514);width:var(--cat-size);height:var(--cat-size);background:var(--selection);-webkit-mask:url("/css/sleepycat-SOZ7QRY5.svg") center / contain no-repeat;mask:url("/css/sleepycat-SOZ7QRY5.svg") center / contain no-repeat;pointer-events:none}.menu{display:flex;gap:10px;white-space:nowrap;a{display:inline-flex;align-items:center}}.post-body button,a.button{margin:5px 0}a.button{display:inline-block}.menu a:hover,.menu a:focus-visible,.menu a[aria-current],.radio__button:hover,.radio__button:focus-visible,.post-body button:hover,.post-body button:focus-visible,a.button:hover,a.button:focus-visible{color:var(--accent);background:var(--tint-hover)}.radio{flex:1;min-width:0;display:flex;justify-content:flex-end;gap:10px}.radio__track{--radio-fade: 24px;--radio-gap: 4em;flex:1;min-width:0;align-self:center;margin:0;padding:0 10px 0 var(--radio-fade);overflow:hidden;white-space:nowrap;text-align:right;font-size:.85em;font-weight:450;color:color-mix(in srgb,var(--foreground) 65%,transparent);mask-image:linear-gradient(to right,transparent,black var(--radio-fade),black calc(100% - 10px),transparent);-webkit-user-select:text;user-select:text;span{display:inline-block}&.scrolls{text-align:left;span{animation:radio-enter var(--radio-entry, 7s) linear,radio-marquee var(--radio-duration, 20s) linear var(--radio-entry, 7s) infinite;&:after{content:attr(data-title) / "";padding:0 var(--radio-gap)}}}&:hover span{animation-play-state:paused}}@keyframes radio-enter{0%{transform:translate(var(--radio-entrance, 100%))}}@keyframes radio-marquee{to{transform:translate(calc(-1 * var(--radio-cycle, 100%)))}}.radio__button{padding:5px;display:flex;align-items:center;justify-content:center;&[aria-pressed=true]{color:var(--background);background:var(--accent)}&[aria-disabled=true],&[aria-disabled=true]:hover,&[aria-disabled=true]:focus-visible{color:var(--border);border-color:var(--border);background:transparent;cursor:not-allowed}&.link,&[aria-disabled=true].link{color:var(--accent);border-color:var(--accent);background:var(--tint-hover);cursor:pointer}}.radio__icon svg{display:block;width:var(--icon-size);height:var(--icon-size)}main{flex:1;display:flex;flex-direction:column}.list-title{margin:30px 0 0;padding-bottom:15px}.post{padding-top:30px}.post:not(:last-of-type),.list-title{border-bottom:1px solid;border-image:var(--rule) 1}.post-title{margin:0 0 15px}.post-meta{margin-bottom:10px;color:color-mix(in srgb,var(--foreground) 65%,transparent);>*:not(:first-child):before{content:"::";display:inline-block;margin:0 8px}}.post-tags{display:block;margin-bottom:20px;color:var(--accent)}.post-wrapper{display:flex;gap:40px}.post-content{flex:1;min-width:0;[id]{scroll-margin-top:var(--scroll-offset)}}.post-body ul{list-style:none;>li:not(:empty):before{content:var(--bullet);float:left;margin-left:calc(-1 * var(--list-indent));font-size:var(--bullet-size);line-height:calc(var(--line-height) * var(--font-size));color:var(--accent);font-weight:700}}.post-body li>:is(ul,ol){display:inline-flex;flex-direction:column;vertical-align:top;width:calc(100% - var(--list-indent))}.post :is(h1,h2,h3,h4,h5,h6) a{color:var(--foreground)}.post-title,.post-content :is(h1,h2,h3,h4,h5,h6){a:empty:after{content:"#";color:var(--accent);margin-left:10px;visibility:hidden}&:hover a:empty:after,a:empty:focus:after{visibility:visible}a:empty:hover:after{color:var(--secondary)}}.post-nav{display:flex;flex-wrap:wrap;gap:10px;margin-top:40px;.older{margin-left:auto}}:is(.toc-sidebar,.toc-drawer){li::selection{background:transparent}h2{margin:0}nav ul{list-style:none;margin:0;font-size:.85em;ul{padding-left:1em}}nav li a{display:block;padding:4px 0;color:var(--foreground);opacity:.7;font-weight:700;&:hover,&.active,&:focus-visible{opacity:1;color:var(--accent)}&:focus-visible{outline:none}&:focus-visible:after{content:" #"}}nav ul ul li a.active{border-left:2px solid var(--accent);padding-left:8px;margin-left:-10px}}:is(.toc-sidebar nav h2,.toc-drawer-header) a{color:var(--foreground);font-weight:700;&:hover{color:var(--accent)}}.toc-sidebar{width:250px;flex-shrink:0;position:sticky;top:var(--header-height);align-self:flex-start;margin-top:-30px;padding:30px 0 20px;max-height:calc(100dvh - var(--header-height));overflow-y:auto}.toc-drawer-toggle{display:none;position:fixed;right:0;top:50svh;transform:translateY(-50%);z-index:202;align-items:center;justify-content:center;min-width:22px;min-height:44px;padding:16px 10px;font-size:1.2em;line-height:1;background:var(--background);border:2px solid var(--border);border-right:none;border-radius:var(--radius) 0 0 var(--radius);transition:right .3s ease;&:hover{background:color-mix(in srgb,var(--accent) 15%,var(--background))}&.open{right:280px}}.toc-drawer-toggle:focus-visible,.toc-drawer-close:focus-visible,.toc-drawer-header a:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.toc-drawer{display:none;position:fixed;top:0;right:-280px;width:280px;height:100dvh;padding:20px;background:color-mix(in srgb,var(--background) 80%,transparent);backdrop-filter:blur(5px);border-left:2px solid var(--border);z-index:201;transition:right .3s ease;overflow:hidden;&.open{right:0}}.toc-drawer-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;font-weight:700}.toc-drawer-close{font-size:1.4em;padding:0 4px}@media(max-width:1280px){.post-wrapper{flex-direction:column}.toc-sidebar{display:none}.toc-drawer-toggle{display:flex}.toc-drawer{display:flex;flex-direction:column}.toc-drawer nav{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain}}.footer{display:flex;flex-direction:column;padding:40px 0;font-size:.85em;opacity:.65;a:not(:hover){color:inherit}}.copyright{display:flex;flex-wrap:wrap;justify-content:center;gap:.4ch;span{white-space:nowrap}}@media(max-width:684px){:root{--font-size: .95rem}body{padding:0 max(20px,env(safe-area-inset-right)) 0 max(20px,env(safe-area-inset-left))}}@media(max-width:560px){.radio__track{display:none}}@media(prefers-reduced-motion:reduce){.toc-drawer,.toc-drawer-toggle,.copy,summary:before{transition:none}.radio__track.scrolls span{animation:none;&:after{content:none}}}@media print{.skip-link,.header,.toc-sidebar,.toc-drawer-toggle,.toc-drawer,.radio,.copy,.footer{display:none}:root{print-color-adjust:exact}pre{white-space:pre-wrap;overflow-wrap:anywhere;code{width:auto}}}
