:root{--base:#eff1f5;--mantle:#e6e9ef;--crust:#dce0e8;--surface0:#ccd0da;--surface1:#bcc0cc;--overlay1:#8c8fa1;--subtext0:#6c6f85;--text:#4c4f69;--mauve:#8839ef;--pink:#ea76cb;--blue:#1e66f5;--lavender:#7287fd;--red:#d20f39;--yellow:#df8e1d;--green:#40a02b;--mauve-deep:color-mix(in srgb, var(--mauve) 80%, black);--mono:"IBM Plex Mono", ui-monospace, Menlo, Consolas, monospace;--serif:"Newsreader", Georgia, "Times New Roman", serif}*{box-sizing:border-box}html{background:var(--base);color-scheme:light;accent-color:var(--mauve);scrollbar-color:var(--surface1)var(--base);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body{max-width:56rem;margin:0 auto;padding:2.5rem 1rem;background:var(--base);color:var(--text);font-family:var(--serif);font-size:1.15rem;font-optical-sizing:auto;line-height:1.7}::selection{background:color-mix(in srgb,var(--mauve) 22%,transparent)}:focus-visible{outline:2px solid var(--mauve);outline-offset:2px;border-radius:2px}a{color:var(--blue);text-decoration-color:var(--surface1);text-underline-offset:.2em}a:hover{color:var(--mauve);text-decoration-color:initial}header{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.75rem 1.5rem;margin-bottom:3rem;padding-bottom:1rem;border-bottom:1px solid var(--crust)}.site-title{margin:0;font-family:var(--mono);font-size:1.4rem;font-weight:700;font-style:italic;letter-spacing:-.03em;color:var(--mauve-deep);text-transform:lowercase}.site-title::before{content:"~/";color:var(--overlay1)}nav{display:flex;gap:1.25rem;font-family:var(--mono);font-size:.9rem}nav a{color:var(--subtext0);text-decoration:none}nav a:hover{color:var(--mauve)}h1,h2,h3,h4{font-weight:600;line-height:1.2;letter-spacing:-.01em;color:var(--text);text-wrap:balance}h1{font-size:2.2rem}em{font-style:italic}p,li{text-wrap:pretty}time{color:var(--subtext0);font-family:var(--mono);font-size:.85rem}.year h2{margin:2.5rem 0 .5rem;font-family:var(--mono);font-size:.85rem;font-weight:600;letter-spacing:.05em;color:var(--overlay1)}.year:first-child h2{margin-top:0}.post-list{list-style:none;margin:0;padding:0}.post-list li{display:flex;align-items:baseline;gap:1.25rem;padding:.3rem 0;font-family:var(--mono);font-size:.95rem}.post-list time{font-size:inherit;flex-shrink:0}.post-list a{color:var(--text);text-decoration:none}.post-list a:hover{color:var(--mauve)}.post-list .reading-time{margin-left:auto;flex-shrink:0;color:var(--overlay1);font-size:.8rem}.post-meta{margin-top:-.5rem;color:var(--subtext0);font-family:var(--mono);font-size:.85rem}.post-body a{color:var(--text);text-decoration:underline wavy var(--lavender)1px;text-underline-offset:.25em}.post-body a:hover{color:var(--mauve);text-decoration-color:var(--mauve)}.post-body .anchor{margin-right:.15em;font-family:var(--mono);font-weight:400;color:var(--surface1);text-decoration:none}.post-body .anchor:hover{color:var(--mauve)}blockquote{margin:1.5rem 0;padding:.5rem 1.25rem;border-left:3px solid var(--mauve);border-radius:0 6px 6px 0;background:var(--mantle);font-style:italic;color:var(--subtext0)}blockquote p{margin:.5rem 0}.post-body img,.post-body>iframe{display:block;max-width:100%;margin:2rem auto;border-radius:6px}.post-body img{width:auto;height:auto;max-height:80vh}.post-body>div:has(>iframe){margin:2rem 0;border-radius:6px}.post-body hr{margin:2.5rem 0;border:0;text-align:center}.post-body hr::after{content:"* * *";font-family:var(--mono);letter-spacing:.5em;color:var(--overlay1)}.footnote-ref{font-family:var(--mono);font-size:.75em;text-decoration:none;color:var(--mauve)}.footnotes{margin-top:3rem;padding-top:1rem;border-top:1px solid var(--crust);font-size:.9rem;color:var(--subtext0)}.footnotes hr{display:none}.footnotes ol{padding-left:1.5rem}.footnotes li::marker{font-family:var(--mono);color:var(--overlay1)}.footnotes .footnote-backref{text-decoration:none}code{font-family:var(--mono);font-size:.9em;background:var(--mantle);padding:.1em .35em;border-radius:4px}pre{margin:0;padding:1rem;overflow-x:auto}pre code{background:0 0;padding:0}.chroma{background:var(--mantle)}.code{margin:1.5rem 0;border:1px solid var(--crust);border-radius:6px;overflow:hidden;background:var(--mantle)}.code figcaption{display:flex;align-items:center;justify-content:space-between;padding:.35rem .75rem;background:var(--crust);font-family:var(--mono);font-size:.75rem;color:var(--subtext0)}.code figcaption::before{content:"";width:2.6rem;height:.65rem;background:radial-gradient(circle at .325rem 50%,var(--red) .3rem,transparent .32rem),radial-gradient(circle at 1.3rem 50%,var(--yellow) .3rem,transparent .32rem),radial-gradient(circle at 2.275rem 50%,var(--green) .3rem,transparent .32rem)}footer{display:flex;align-items:center;justify-content:space-between;margin-top:4rem;padding-top:1rem;border-top:1px solid var(--crust);color:var(--overlay1);font-family:var(--mono);font-size:.8rem}.socials{display:flex;gap:.9rem}.socials a{display:inline-flex;color:var(--overlay1)}.socials a:hover{color:var(--mauve)}.bg{color:#4c4f69;background-color:#eff1f5}.chroma{color:#4c4f69;background-color:#eff1f5;-webkit-text-size-adjust:none}.chroma .x{color:#4c4f69}.chroma .err{color:#d20f39}.chroma .cl{color:#4c4f69}.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:#bcc0cc}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8c8fa1}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8c8fa1}.chroma .line{display:flex}.chroma .k{color:#8839ef}.chroma .kc{color:#fe640b}.chroma .kd{color:#d20f39}.chroma .kn{color:#179299}.chroma .kp{color:#8839ef}.chroma .kr{color:#8839ef}.chroma .kt{color:#d20f39}.chroma .na{color:#1e66f5}.chroma .nc{color:#df8e1d}.chroma .no{color:#df8e1d}.chroma .nd{color:#1e66f5;font-weight:700}.chroma .ni{color:#179299}.chroma .ne{color:#fe640b}.chroma .nl{color:#04a5e5}.chroma .nn{color:#fe640b}.chroma .nx{color:#4c4f69}.chroma .py{color:#fe640b}.chroma .nt{color:#8839ef}.chroma .nb{color:#04a5e5}.chroma .bp{color:#04a5e5}.chroma .nv{color:#dc8a78}.chroma .vc{color:#dc8a78}.chroma .vg{color:#dc8a78}.chroma .vi{color:#dc8a78}.chroma .vm{color:#dc8a78}.chroma .nf{color:#1e66f5}.chroma .fm{color:#1e66f5}.chroma .ld{color:#4c4f69}.chroma .s{color:#40a02b}.chroma .sa{color:#d20f39}.chroma .sb{color:#40a02b}.chroma .sc{color:#40a02b}.chroma .dl{color:#1e66f5}.chroma .sd{color:#9ca0b0}.chroma .s2{color:#40a02b}.chroma .se{color:#1e66f5}.chroma .sh{color:#9ca0b0}.chroma .si{color:#40a02b}.chroma .sx{color:#40a02b}.chroma .sr{color:#179299}.chroma .s1{color:#40a02b}.chroma .ss{color:#40a02b}.chroma .m{color:#fe640b}.chroma .mb{color:#fe640b}.chroma .mf{color:#fe640b}.chroma .mh{color:#fe640b}.chroma .mi{color:#fe640b}.chroma .il{color:#fe640b}.chroma .mo{color:#fe640b}.chroma .o{color:#04a5e5;font-weight:700}.chroma .ow{color:#04a5e5;font-weight:700}.chroma .or{color:#04a5e5;font-weight:700}.chroma .c{color:#9ca0b0;font-style:italic}.chroma .ch{color:#acb0be;font-style:italic}.chroma .cm{color:#9ca0b0;font-style:italic}.chroma .c1{color:#9ca0b0;font-style:italic}.chroma .cs{color:#9ca0b0;font-style:italic}.chroma .cp{color:#9ca0b0;font-style:italic}.chroma .cpf{color:#9ca0b0;font-weight:700;font-style:italic}.chroma .gd{color:#d20f39;background-color:#ccd0da}.chroma .ge{font-style:italic}.chroma .gr{color:#d20f39}.chroma .gh{color:#fe640b;font-weight:700}.chroma .gi{color:#40a02b;background-color:#ccd0da}.chroma .go{color:#4c4f69}.chroma .gp{color:#4c4f69}.chroma .gs{font-weight:700}.chroma .gu{color:#fe640b;font-weight:700}.chroma .gt{color:#d20f39}.chroma .gl{text-decoration:underline}