@import 'https://fonts.cdnfonts.com/css/jetbrains-mono-2';:root{--font-mono:"JetBrains Mono", "Fira Code", "Source Code Pro", "Lucida Console", Courier, monospace;--font-size:16px;--line-height:1.32rem;--font-weight-normal:500;--font-weight-medium:600;--font-weight-bold:800}@media(prefers-color-scheme:dark){:root{--color-text:#f1e7da;--color-background:#17120e;--color-text-alt:#b9a792;--color-background-alt:#221b15;--color-border:#c1a989;--color-accent:#e0c29a;--color-syntax-keyword:#efc07e;--color-syntax-type:#8fc8ff;--color-syntax-name:#8fd7ca;--color-syntax-string:#f4a6ba;--color-syntax-number:#8fd9ae;--color-syntax-function:#f3b08b;--color-syntax-comment:#a89176;--color-syntax-operator:#f2e6d2;--color-syntax-highlight:rgba(214, 171, 114, 0.12);--color-syntax-deleted:#f2b0a4;--color-syntax-inserted:#9addb3}}@media(prefers-color-scheme:light){:root{--color-text:#241b13;--color-background:#f7f0e2;--color-text-alt:#6f604f;--color-background-alt:#eee1cc;--color-border:#6a5641;--color-accent:#8e6941;--color-syntax-keyword:#7a3e9d;--color-syntax-type:#24607c;--color-syntax-name:#176e63;--color-syntax-string:#a2355c;--color-syntax-number:#1a6a5f;--color-syntax-function:#8a3d25;--color-syntax-comment:#817261;--color-syntax-operator:#241b13;--color-syntax-highlight:rgba(95, 76, 55, 0.08);--color-syntax-deleted:#a34336;--color-syntax-inserted:#1f6a3f}}@media screen and (max-width:767px){:root{--font-size:14px}}*{box-sizing:border-box}body{font-family:var(--font-mono);font-size:var(--font-size);line-height:var(--line-height);font-weight:var(--font-weight-normal);color:var(--color-text);background-color:var(--color-background);margin:0;padding:2.4rem 0;max-width:80ch;margin:0 auto;text-rendering:optimizeLegibility}header{margin-bottom:2.4rem}.header-container{border:1px solid var(--color-border,var(--color-text));padding:1.2rem;margin-bottom:2.4rem;background-color:var(--color-background-alt)}.header-title{font-size:calc(var(--font-size) * 1.8);font-weight:var(--font-weight-bold);text-transform:uppercase;letter-spacing:4px;margin-bottom:.6rem}.header-title a{color:inherit;text-decoration:none}.header-subtitle{font-size:var(--font-size);font-weight:var(--font-weight-normal);color:var(--color-text-alt);margin-bottom:1.2rem;text-transform:uppercase;max-width:100%;overflow-wrap:break-word}.header-nav{border-top:1px solid var(--color-border,var(--color-text));padding-top:.6rem;font-size:var(--font-size);font-weight:var(--font-weight-normal)}.header-nav a{color:var(--color-text);text-decoration:none;text-transform:uppercase;font-weight:var(--font-weight-normal);display:inline-block;position:relative}.header-nav a.active{font-weight:var(--font-weight-bold);text-decoration:none;padding-bottom:.08rem;border-bottom:2px solid}.header-nav a:not(:last-child)::after{content:"│";color:var(--color-text-alt);font-weight:var(--font-weight-normal);text-decoration:none;position:absolute;left:calc(100% + .9ch);top:50%;transform:translateY(-50%)}.header-nav a:not(:last-child){margin-right:2.2ch}main{margin-bottom:2.4rem;padding:0 1.2rem;min-height:60vh}section{margin-bottom:3.6rem;padding:0}section:last-child{margin-bottom:2.4rem}h1{font-size:var(--font-size);font-weight:var(--font-weight-bold);line-height:var(--line-height);margin:0 0 1.2rem;text-transform:uppercase;color:var(--color-text)}h2{font-size:var(--font-size);font-weight:var(--font-weight-bold);line-height:var(--line-height);margin:2.4rem 0 1.2rem;text-transform:uppercase;color:var(--color-text)}h3{font-size:var(--font-size);font-weight:var(--font-weight-medium);line-height:var(--line-height);margin:1.2rem 0 .6rem;color:var(--color-text)}a{color:var(--color-text);text-decoration:underline;font-weight:var(--font-weight-normal)}a:hover{color:var(--color-accent,var(--color-text-alt))}p{margin:0 0 1.2rem;line-height:var(--line-height)}strong{font-weight:var(--font-weight-bold);color:var(--color-text)}ul,ol{margin:0 0 1.2rem;padding-left:2ch}li{margin-bottom:0;line-height:var(--line-height)}ul{list-style-type:none}ul li::before{content:"• ";font-weight:var(--font-weight-bold)}ol{list-style-type:decimal}code{font-family:var(--font-mono);font-size:var(--font-size);background-color:var(--color-background-alt)}pre{font-family:var(--font-mono);font-size:var(--font-size);line-height:var(--line-height);background-color:var(--color-background-alt);padding:1.2rem;margin:1.2rem 0;overflow-x:auto;border:1px solid var(--color-border,var(--color-text));background-color:inherit!important;-moz-tab-size:inherit!important;-o-tab-size:inherit!important;tab-size:inherit!important}.codeblock{background-color:var(--color-background-alt);border:1px solid var(--color-border,var(--color-text));margin:1.2rem 0;position:relative;padding:0}.codeblock pre{margin:0;padding:1.2rem;border:none;background-color:var(--color-background-alt);scrollbar-width:thin;scrollbar-color:var(--color-border,var(--color-text))var(--color-background)}.codeblock pre::-webkit-scrollbar{height:.7rem;background-color:var(--color-background)}.codeblock pre::-webkit-scrollbar-track{background-color:var(--color-background);border-top:1px solid var(--color-border,var(--color-text))}.codeblock pre::-webkit-scrollbar-thumb{background-color:var(--color-background-alt);border:1px solid var(--color-border,var(--color-text))}.codeblock pre::-webkit-scrollbar-thumb:hover{background-color:var(--color-accent,var(--color-text))}.codeblock.highlight{background-color:var(--color-background-alt)}.codeblock.highlight pre{background-color:var(--color-background-alt)}.copy-btn{position:absolute;top:.6rem;right:.6rem;background-color:var(--color-background-alt);color:var(--color-text);border:1px solid var(--color-border,var(--color-text));padding:.3rem 1ch;font-family:var(--font-mono);font-size:var(--font-size);cursor:pointer;text-transform:uppercase}.copy-btn:hover{background-color:var(--color-accent,var(--color-text));color:var(--color-background)}.copy-btn.copied{background-color:var(--color-accent,var(--color-text));color:var(--color-background)}footer{margin-top:3.6rem;text-align:center;border-top:1px solid var(--color-border,var(--color-text));padding-top:1.2rem;color:var(--color-text-alt)}hr{border:none;border-top:1px solid var(--color-border,var(--color-text));margin:2.4rem 0}hr.double{border-top:3px double var(--color-text)}.post-meta{color:var(--color-text-alt);margin-bottom:1.2rem;text-transform:uppercase}.post-list{margin:2.4rem 0}.post-item{margin-bottom:2.4rem;padding-bottom:1.2rem;border-bottom:1px solid var(--color-background-alt)}.post-item:last-child{border-bottom:none}.post-title{margin-bottom:.6rem;font-weight:var(--font-weight-bold);text-transform:uppercase}.post-title a{color:var(--color-text);text-decoration:none}.post-title a:hover{color:var(--color-text-alt)}.post-summary{color:var(--color-text-alt);margin-bottom:.6rem}.grid{display:grid;gap:1.2rem}.grid-2{grid-template-columns:1fr 1fr}.grid-3{grid-template-columns:1fr 1fr 1fr}@media screen and (max-width:767px){.grid-2,.grid-3{grid-template-columns:1fr}}div.highlight pre code span[style],div.highlight code span[style],.highlight pre span[style],.highlight span[style*=color],.highlight span[style*=font-weight],.highlight span[style*=font-style]{font-family:var(--font-mono)!important;font-size:var(--font-size)!important;line-height:var(--line-height)!important;font-weight:var(--font-weight-normal)!important}.highlight span[style*="font-weight:bold"]{font-weight:var(--font-weight-medium)!important}.highlight span[style*="font-style:italic"]{font-style:italic!important;font-weight:var(--font-weight-normal)!important}.highlight span{font-family:var(--font-mono)!important;font-size:var(--font-size)!important;line-height:var(--line-height)!important}.highlight span[style*="display:flex"]{display:flex!important}.highlight *{font-family:var(--font-mono)!important;font-size:var(--font-size)!important;line-height:var(--line-height)!important}div.highlight pre.chroma code span,div.highlight pre code span,.highlight pre code span{font-family:var(--font-mono)!important;font-size:var(--font-size)!important;line-height:var(--line-height)!important;font-weight:var(--font-weight-normal)!important}.chroma{background-color:transparent}.chroma .err{color:var(--color-syntax-deleted);background-color:var(--color-syntax-highlight)}.chroma .hl{background-color:var(--color-syntax-highlight)}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:var(--color-text-alt)}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:var(--color-text-alt)}.chroma .line{display:flex}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:var(--color-syntax-keyword);font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .kt{color:var(--color-syntax-type);font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .na{color:var(--color-syntax-name);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .nb{color:var(--color-syntax-type);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .bp{color:var(--color-text-alt);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .nc{color:var(--color-syntax-type);font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .no{color:var(--color-syntax-name);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .nd{color:var(--color-syntax-name);font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .ni{color:var(--color-syntax-keyword);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .ne{color:var(--color-syntax-function);font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .nf{color:var(--color-syntax-function);font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .nl{color:var(--color-syntax-function);font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .nn{color:var(--color-text-alt);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .nt{color:var(--color-syntax-type);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi{color:var(--color-syntax-name);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .ss{color:var(--color-syntax-string);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .sr{color:var(--color-syntax-number);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{color:var(--color-syntax-number);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .o,.chroma .ow{color:var(--color-syntax-operator);font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1{color:var(--color-syntax-comment);font-style:italic;font-family:var(--font-mono);font-size:var(--font-size)}.chroma .cs,.chroma .cp,.chroma .cpf{color:var(--color-text-alt);font-weight:var(--font-weight-medium);font-style:italic;font-family:var(--font-mono);font-size:var(--font-size)}.chroma .gd{color:var(--color-text);background-color:var(--color-syntax-highlight);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .ge{color:var(--color-text);font-style:italic;font-family:var(--font-mono);font-size:var(--font-size)}.chroma .gr{color:var(--color-syntax-deleted);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .gh{color:var(--color-text-alt);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .gi{color:var(--color-text);background-color:var(--color-syntax-highlight);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .go{color:var(--color-text-alt);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .gp{color:var(--color-text-alt);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .gs{font-weight:var(--font-weight-medium);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .gu{color:var(--color-text-alt);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .gt{color:var(--color-syntax-deleted);font-family:var(--font-mono);font-size:var(--font-size)}.chroma .gl{text-decoration:underline;font-family:var(--font-mono);font-size:var(--font-size)}.chroma .w{color:var(--color-text-alt);font-family:var(--font-mono);font-size:var(--font-size)}.chroma *{font-family:var(--font-mono)!important;font-size:var(--font-size)!important;line-height:var(--line-height)!important}code[class*=language-],pre[class*=language-]{font-family:var(--font-mono)!important;font-size:var(--font-size)!important;line-height:var(--line-height)!important;font-weight:var(--font-weight-normal)!important;color:var(--color-text);background:0 0;text-shadow:none;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;tab-size:4;hyphens:none}pre[class*=language-]{padding:1.2rem;margin:1.2rem 0;overflow:auto;border:1px solid var(--color-text);background-color:var(--color-background-alt)}:not(pre)>code[class*=language-]{padding:0 1ch;background-color:var(--color-background-alt);border-radius:0}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:var(--color-syntax-comment);font-style:italic;font-family:var(--font-mono)!important;font-size:var(--font-size)!important;font-weight:var(--font-weight-normal)!important}.token.punctuation{color:var(--color-syntax-operator);font-family:var(--font-mono)!important;font-size:var(--font-size)!important;font-weight:var(--font-weight-normal)!important}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted{color:var(--color-syntax-number);font-family:var(--font-mono)!important;font-size:var(--font-size)!important;font-weight:var(--font-weight-normal)!important}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:var(--color-syntax-string);font-family:var(--font-mono)!important;font-size:var(--font-size)!important;font-weight:var(--font-weight-normal)!important}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string{color:var(--color-syntax-operator);font-family:var(--font-mono)!important;font-size:var(--font-size)!important;font-weight:var(--font-weight-medium)!important}.token.atrule,.token.attr-value,.token.keyword{color:var(--color-syntax-keyword);font-family:var(--font-mono)!important;font-size:var(--font-size)!important;font-weight:var(--font-weight-medium)!important}.token.function,.token.class-name{color:var(--color-syntax-function);font-family:var(--font-mono)!important;font-size:var(--font-size)!important;font-weight:var(--font-weight-medium)!important}.token.regex,.token.important,.token.variable{color:var(--color-syntax-type);font-family:var(--font-mono)!important;font-size:var(--font-size)!important;font-weight:var(--font-weight-normal)!important}.token{font-family:var(--font-mono)!important;font-size:var(--font-size)!important;line-height:var(--line-height)!important}