:root{--bg: #ffffff;--text: #111111;--muted: #8a8a8a;--soft: #666666;--rule: #ececec;--rule-soft: #f4f4f4;--accent: #111111;--code-bg: #f7f7f7;--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, Helvetica, Arial, sans-serif;--mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--measure: 68ch;--rail: 140px;--gutter: 2.5rem;--edge: 2rem}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}@media(prefers-reduced-motion: reduce){html{scroll-behavior:auto}}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.7;font-weight:400;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{color:var(--text);line-height:1.3;font-weight:500}h1{font-size:1.5rem;margin:0 0 .5rem;letter-spacing:-0.01em}h2{font-size:1.1875rem;margin:2.75rem 0 .75rem}h3{font-size:1.0625rem;margin:2rem 0 .5rem}h4{font-size:1rem;margin:1.5rem 0 .5rem}p,ul,ol,blockquote,figure,pre,table{max-width:var(--measure)}p{margin:0 0 1.15rem}a{color:var(--accent);text-decoration:underline;text-decoration-color:#cfcfcf;text-underline-offset:2px}a:hover{text-decoration-color:var(--text)}ul,ol{padding-left:1.25rem;margin:0 0 1.15rem}li{margin-bottom:.35rem}blockquote{margin:1.5rem 0;padding-left:1rem;border-left:2px solid var(--rule);color:var(--soft)}hr{border:0;border-top:1px solid var(--rule);margin:2.5rem 0}img{max-width:100%;height:auto;display:block}figure{margin:2rem 0}figcaption{color:var(--muted);font-size:.8125rem;line-height:1.5;margin-top:.5rem}table{border-collapse:collapse;width:100%;font-size:.9375rem;margin:0 0 1.5rem}th,td{text-align:left;padding:.5rem .75rem .5rem 0;border-bottom:1px solid var(--rule)}th{font-weight:500}.meta{color:var(--muted);font-size:.875rem;margin:0}.note{color:var(--muted);font-size:.9375rem;font-style:italic;margin:1.25rem 0 2rem}.container{max-width:calc(var(--edge)*2 + var(--rail) + var(--gutter)*2 + var(--measure));margin:0 auto;padding:4rem var(--edge) 6rem;display:grid;grid-template-columns:var(--rail) minmax(0, 1fr);gap:var(--gutter);align-items:stretch}@media(max-width: 720px){.container{grid-template-columns:1fr;gap:2.5rem;padding:2.5rem 1.25rem 4rem}}main{min-width:0;border-left:1px solid var(--rule);padding-left:var(--gutter)}@media(max-width: 720px){main{border-left:none;border-top:1px solid var(--rule);padding-left:0;padding-top:2rem}}.sidebar{min-width:0}.sidebar-inner{position:sticky;top:4rem}@media(max-width: 720px){.sidebar-inner{position:static;text-align:center}}.avatar{display:inline-block;line-height:0}.avatar img{width:112px;height:112px;border-radius:10px;object-fit:cover;display:block}.sidebar-name{margin:1rem 0 0;font-size:1rem;font-weight:500}.sidebar-name a{color:var(--text);text-decoration:none}.sidebar-tagline{margin:.1rem 0 0;color:var(--muted);font-size:.875rem;line-height:1.45}.contact{list-style:none;padding:0;margin:1.25rem 0 0;display:flex;flex-direction:column;gap:.35rem}.contact li{margin:0}.contact a{display:flex;align-items:center;gap:.55rem;color:var(--muted);text-decoration:none;font-size:.875rem;line-height:1.4}.contact a:hover{color:var(--text)}.contact svg{width:15px;height:15px;flex:none;fill:currentColor}@media(max-width: 720px){.contact{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:1rem}}.site-nav{display:flex;flex-direction:column;gap:.4rem;margin-top:1.75rem;padding-top:1.25rem;border-top:1px solid var(--rule)}.site-nav a{color:var(--muted);text-decoration:none;font-size:.9375rem;width:fit-content}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--text)}@media(max-width: 720px){.site-nav{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:1rem;margin-top:1.25rem;padding-top:1rem}}.section{scroll-margin-top:3rem;padding-bottom:4rem}.section:last-of-type{padding-bottom:0}.section>h2{margin:0 0 1.5rem;padding-bottom:.6rem;border-bottom:1px solid var(--rule);font-size:1.25rem;max-width:var(--measure)}.section>h3{margin-top:2rem}.lost{padding:4rem 0}.lost-code{font-size:3.5rem;font-weight:500;line-height:1;letter-spacing:-0.03em;margin:0}.lost-text{color:var(--muted);font-size:1.0625rem;margin:.5rem 0 0}code,pre{font-family:var(--mono);font-size:.8125rem}:not(pre)>code{background:var(--code-bg);padding:.1em .35em;border-radius:3px}pre{background:var(--code-bg);padding:1rem 1.1rem;border-radius:6px;overflow-x:auto;line-height:1.6;margin:0 0 1.5rem}pre code{background:none;padding:0}div.highlight{max-width:var(--measure)}.post-list{list-style:none;padding:0;margin:0;max-width:var(--measure)}.post-list li{margin:0;padding:1.15rem 0;border-bottom:1px solid var(--rule)}.post-list li:first-child{padding-top:0}.post-list li:last-child{border-bottom:none}.excerpt{color:var(--soft);font-size:.9375rem;line-height:1.6;margin:.45rem 0 0}.post-link{font-size:1.0625rem;color:var(--text);text-decoration:none;display:inline-block}.post-link:hover{text-decoration:underline;text-underline-offset:2px}.entries{max-width:var(--measure)}.entries .entry{padding:1.5rem 0;border-top:1px solid var(--rule)}.entries .entry:first-of-type,.entries .entry.is-first{border-top:none}.entries .entry>:last-child{margin-bottom:0}.entries h3{font-size:1.0625rem;margin:0 0 .4rem}.entries .entry-link{color:var(--text);text-decoration:none}.entries .entry-link:hover{text-decoration:underline;text-underline-offset:2px}.entries .stack{color:var(--muted);font-size:.8125rem;font-family:var(--mono);margin-bottom:.4rem}.entries .links{font-size:.875rem;margin-bottom:0}.entries .links a{margin-right:1rem}.pager{display:flex;gap:.35rem;margin-top:1.5rem;padding-top:1.25rem;border-top:1px solid var(--rule)}.pager button{font:inherit;font-size:.875rem;line-height:1;color:var(--muted);background:none;border:1px solid rgba(0,0,0,0);border-radius:4px;padding:.35rem .6rem;cursor:pointer}.pager button:hover{color:var(--text);border-color:var(--rule)}.pager button[aria-current]{color:var(--text);border-color:var(--rule)}.pager button:focus-visible{outline:2px solid var(--text);outline-offset:1px}.paged .post-list li:last-child{border-bottom:none}.post-nav{display:flex;justify-content:space-between;gap:2rem;margin-top:4rem;padding-top:1.25rem;border-top:1px solid var(--rule);font-size:.875rem;max-width:var(--measure)}.post-nav a{color:var(--muted);text-decoration:none}.post-nav a:hover{color:var(--text)}.post-nav .next{text-align:right;margin-left:auto}.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight,.highlight .w{color:#24292f;background-color:#f6f8fa}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .kv{color:#cf222e}.highlight .gr{color:#f6f8fa}.highlight .gd{color:#82071e;background-color:#ffebe9}.highlight .nb{color:#953800}.highlight .nc{color:#953800}.highlight .no{color:#953800}.highlight .nn{color:#953800}.highlight .sr{color:#116329}.highlight .na{color:#116329}.highlight .nt{color:#116329}.highlight .gi{color:#116329;background-color:#dafbe1}.highlight .ges{font-weight:bold;font-style:italic}.highlight .kc{color:#0550ae}.highlight .l,.highlight .ld,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .il,.highlight .mo,.highlight .mx{color:#0550ae}.highlight .sb{color:#0550ae}.highlight .bp{color:#0550ae}.highlight .ne{color:#0550ae}.highlight .nl{color:#0550ae}.highlight .py{color:#0550ae}.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:#0550ae}.highlight .o,.highlight .ow{color:#0550ae}.highlight .gh{color:#0550ae;font-weight:bold}.highlight .gu{color:#0550ae;font-weight:bold}.highlight .s,.highlight .sa,.highlight .sc,.highlight .dl,.highlight .sd,.highlight .s2,.highlight .se,.highlight .sh,.highlight .sx,.highlight .s1,.highlight .ss{color:#0a3069}.highlight .nd{color:#8250df}.highlight .nf,.highlight .fm{color:#8250df}.highlight .err{color:#f6f8fa;background-color:#82071e}.highlight .c,.highlight .ch,.highlight .cd,.highlight .cm,.highlight .cp,.highlight .cpf,.highlight .c1,.highlight .cs{color:#6e7781}.highlight .gl{color:#6e7781}.highlight .gt{color:#6e7781}.highlight .ni{color:#24292f}.highlight .si{color:#24292f}.highlight .ge{color:#24292f;font-style:italic}.highlight .gs{color:#24292f;font-weight:bold}