@font-face{font-family:roboto slab;font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/roboto-slab-latin-400-normal.woff2)format("woff2")}@font-face{font-family:roboto slab;font-style:normal;font-weight:500;font-display:swap;src:url(../fonts/roboto-slab-latin-500-normal.woff2)format("woff2")}@font-face{font-family:merriweather;font-style:normal;font-weight:300;font-display:swap;src:url(../fonts/merriweather-latin-300-normal.woff2)format("woff2")}@font-face{font-family:merriweather;font-style:italic;font-weight:300;font-display:swap;src:url(../fonts/merriweather-latin-300-italic.woff2)format("woff2")}@font-face{font-family:merriweather;font-style:normal;font-weight:400;font-display:swap;src:url(../fonts/merriweather-latin-400-normal.woff2)format("woff2")}@font-face{font-family:merriweather;font-style:italic;font-weight:400;font-display:swap;src:url(../fonts/merriweather-latin-400-italic.woff2)format("woff2")}@font-face{font-family:merriweather;font-style:normal;font-weight:700;font-display:swap;src:url(../fonts/merriweather-latin-700-normal.woff2)format("woff2")}@font-face{font-family:open sans;font-style:normal;font-weight:300 800;font-stretch:75% 100%;font-display:swap;src:url(../fonts/open-sans-latin-wdth-normal.woff2)format("woff2")}:root{--font-slab:"Roboto Slab",Georgia,serif;--font-body:"Merriweather",Georgia,serif;--font-cond:"Open Sans","Arial Narrow",sans-serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;--bg:#ffffff;--fg:#4a4a4a;--excerpt:#666666;--heading:#1a1a1a;--muted:#6e6e6e;--rule:#e6e6e6;--accent:#2a74b3;--accent-hover:#1d5a8e;--accent-line:#a9c8e3;--code-bg:#f1f1f4;--code-block-bg:#f7f7f9;--tok-keyword:#0b64a0;--tok-string:#2a7348;--tok-comment:#6a6a72;--tok-number:#a84d17;--tok-func:#7a3fa0;--tok-tag:#00707a;--tok-var:#b0304a;color-scheme:light}:root[data-theme=dark]{--bg:#0d0d0e;--fg:#d2d2d4;--excerpt:#a2a2a4;--heading:#ebebeb;--muted:#969698;--rule:#2c2c2f;--accent:#5aa5e0;--accent-hover:#8cc4ef;--accent-line:#2f5f86;--code-bg:#1a1a1d;--code-block-bg:#0a0a0b;--tok-keyword:#5aa5e0;--tok-string:#8fc9a4;--tok-comment:#8f8f94;--tok-number:#e0a46a;--tok-func:#c3a0e8;--tok-tag:#5fc9cc;--tok-var:#ee8fa0;color-scheme:dark}@media(prefers-color-scheme:dark){:root:not([data-theme]){--bg:#0d0d0e;--fg:#d2d2d4;--excerpt:#a2a2a4;--heading:#ebebeb;--muted:#969698;--rule:#2c2c2f;--accent:#5aa5e0;--accent-hover:#8cc4ef;--accent-line:#2f5f86;--code-bg:#1a1a1d;--code-block-bg:#0a0a0b;--tok-keyword:#5aa5e0;--tok-string:#8fc9a4;--tok-comment:#8f8f94;--tok-number:#e0a46a;--tok-func:#c3a0e8;--tok-tag:#5fc9cc;--tok-var:#ee8fa0;color-scheme:dark}}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font-body);font-weight:300;font-size:17px;line-height:1.9;text-rendering:optimizeLegibility}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px}img{max-width:100%;height:auto}.wrap{width:100%;max-width:688px;margin-inline:auto;padding-inline:24px}.skip-link{position:absolute;left:-9999px;top:8px;background:var(--bg);color:var(--heading);padding:8px 12px;z-index:10}.skip-link:focus{left:8px}.menu,.meta,.tagline,.more,.pagination,.site-footer,.term-count,.toc summary{font-family:var(--font-cond);font-stretch:75%;font-weight:300;text-transform:uppercase}.site-bar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:4px 22px;padding-top:20px;padding-bottom:0}.site-name{padding:12px 0;font-family:var(--font-slab);font-size:20px;line-height:1.2;color:var(--heading)}.menu{display:flex;align-items:center;gap:22px;margin-left:auto;font-size:17px;letter-spacing:.03em;color:var(--muted)}.menu a{padding:12px 0}.menu a:hover,.menu a[aria-current=page]{color:var(--heading)}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;margin-right:-12px;padding:0;background:0 0;border:0;color:var(--muted);cursor:pointer}.theme-toggle:hover{color:var(--heading)}.icon-sun{display:none}:root[data-theme=dark] .icon-moon{display:none}:root[data-theme=dark] .icon-sun{display:block}@media(prefers-color-scheme:dark){:root:not([data-theme]) .icon-moon{display:none}:root:not([data-theme]) .icon-sun{display:block}}.hero{display:flex;flex-direction:column;align-items:center;gap:22px;padding:40px 0 44px;text-align:center}.avatar{position:relative;display:block;width:96px;height:96px;border-radius:50%;overflow:hidden;background:var(--code-bg)}.avatar img{position:absolute;display:block;max-width:none;height:auto;width:calc(var(--scale,1) * 100%);left:calc(50% - var(--fx,.5) * var(--scale,1) * 100%);top:calc(50% - var(--fy,.5) * var(--scale,1) * 100%)}.avatar-link{display:block;border-radius:50%}.hero-title{margin:0;font-family:var(--font-slab);font-weight:400;font-size:52px;line-height:1.1;color:var(--heading)}.tagline{margin:0;padding:22px 8px;border-block:1px solid var(--rule);text-align:center;font-size:22px;line-height:1.45;letter-spacing:.01em;color:var(--muted)}.home-intro{padding-top:40px}.entries{display:flex;flex-direction:column;gap:64px;padding:64px 0 32px}.entry{display:flex;flex-direction:column;align-items:center;gap:20px;text-align:center}.entry-title{margin:0;font-family:var(--font-slab);font-weight:400;font-size:34px;line-height:1.25}.entry-title a{color:var(--heading)}.entry-title a:hover{color:var(--accent)}.meta{font-size:17px;color:var(--muted)}.summary{align-self:stretch;margin:0;text-align:left;font-size:16px;line-height:1.85;color:var(--excerpt)}.summary.clamped{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--summary-lines);line-clamp:var(--summary-lines);overflow:hidden}.more{align-self:flex-start;display:inline-flex;align-items:center;gap:8px;padding:10px 0;font-size:18px;color:var(--accent)}.more:hover{color:var(--accent-hover)}.pagination{display:flex;justify-content:space-between;gap:16px;margin-top:8px;padding:22px 0;border-top:1px solid var(--rule);font-size:18px;color:var(--muted)}.pagination a{padding:10px 0}.pagination a:hover{color:var(--heading)}.post .pagination{margin-top:48px;text-transform:none;font-family:var(--font-slab);font-stretch:100%;font-size:16px;font-weight:400}.page-header{padding:64px 0 40px;text-align:center;border-bottom:1px solid var(--rule);display:flex;flex-direction:column;gap:14px}.page-title{margin:0;font-family:var(--font-slab);font-weight:400;font-size:44px;line-height:1.2;color:var(--heading)}.page-header .meta{font-size:18px}.prose{padding:48px 0 24px;overflow-wrap:break-word}.home-intro.prose{padding-bottom:0}.prose>*{margin-block:0 24px}.prose>*:last-child{margin-bottom:0}.prose h2,.prose h3,.prose h4,.prose h5,.prose h6{font-family:var(--font-slab);font-weight:400;line-height:1.3;color:var(--heading);margin-top:48px;margin-bottom:16px}.prose h2{font-size:28px}.prose h3{font-size:22px}.prose h4{font-size:18px}.prose h5{font-size:16px;font-weight:500}.prose h6{font-size:14px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.prose strong{font-weight:700;color:var(--heading)}.prose a{color:var(--accent);border-bottom:1px solid var(--accent-line)}.prose a:hover{color:var(--accent-hover);border-bottom-color:var(--accent-hover)}.prose ul,.prose ol{padding-left:1.4em}.prose li{margin-block:.3em}.prose li:has(>input[type=checkbox]){list-style:none}.prose input[type=checkbox]{appearance:none;-webkit-appearance:none;position:relative;display:inline-block;width:16px;height:16px;margin:0 .5em 0 -1.4em;vertical-align:-.2em;border:1.5px solid var(--muted);border-radius:3px;background:0 0}.prose input[type=checkbox]:checked{border-color:var(--accent);background:var(--accent)}.prose input[type=checkbox]:checked::after{content:"";position:absolute;left:4px;top:1px;width:4px;height:8px;border:solid var(--bg);border-width:0 2px 2px 0;transform:rotate(45deg)}.prose blockquote{margin-inline:0;padding-inline:1.4em;font-style:italic;color:var(--muted)}.prose hr{border:0;border-top:1px solid var(--rule);margin-block:48px}.prose img{display:block;margin-inline:auto;border-radius:4px}.prose figure{margin-inline:0}.prose figcaption :is(h1,h2,h3,h4,h5,h6,p){margin:0;font:inherit;letter-spacing:normal;text-transform:none;color:inherit}.embed iframe{display:block;width:100%;aspect-ratio:16/9;border:0;border-radius:6px}.embed-gist iframe{aspect-ratio:auto;height:240px;background:#fff}.prose a.embed-card{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px;border:1px solid var(--rule);border-radius:6px;background:var(--code-block-bg);color:var(--fg);text-align:center}.prose a.embed-card:hover{border-color:var(--accent);color:var(--fg)}.embed-video .embed-card{aspect-ratio:16/9}.embed-gist .embed-card{min-height:150px}.embed-play{color:var(--accent)}.embed-title{font-family:var(--font-slab);font-size:20px;line-height:1.3;color:var(--heading)}.embed-note{font-size:15px;color:var(--accent)}.embed-privacy{font-size:14px;color:var(--muted)}.prose figcaption{margin-top:8px;text-align:center;font-size:14px;color:var(--muted)}.prose table{display:block;max-width:100%;overflow-x:auto;border-collapse:collapse;font-size:15px;line-height:1.6}.prose th,.prose td{padding:10px 14px;border-bottom:1px solid var(--rule);text-align:left;vertical-align:top}.prose th{font-family:var(--font-slab);font-weight:500;color:var(--heading)}.prose code{padding:.15em .4em;border-radius:4px;background:var(--code-bg);font-family:var(--font-mono);font-size:.84em;color:var(--heading)}.prose pre{margin-inline:0;padding:18px 20px;border-radius:6px;background:var(--code-block-bg);overflow-x:auto;font-size:14px;line-height:1.65;tab-size:4}.prose pre code{padding:0;background:0 0;color:var(--fg);font-size:inherit;white-space:pre}.prose .highlight{position:relative}.prose .highlight pre{margin:0}.copy-btn{position:absolute;top:8px;right:8px;min-width:44px;min-height:32px;padding:4px 10px;border:1px solid var(--rule);border-radius:4px;background:var(--bg);color:var(--muted);font-family:var(--font-cond);font-stretch:75%;font-size:14px;text-transform:uppercase;cursor:pointer;opacity:0;transition:opacity .15s}.highlight:hover .copy-btn,.copy-btn:focus-visible{opacity:1}@media(hover:none){.copy-btn{opacity:1}}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .kt,.chroma .ow{color:var(--tok-keyword)}.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,.chroma .l,.chroma .ld,.chroma .sl{color:var(--tok-string)}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:var(--tok-comment);font-style:italic}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo,.chroma .mx{color:var(--tok-number)}.chroma .nf,.chroma .fm,.chroma .nc,.chroma .nb,.chroma .bp,.chroma .nd,.chroma .ne,.chroma .nn{color:var(--tok-func)}.chroma .nt,.chroma .na,.chroma .nl,.chroma .py{color:var(--tok-tag)}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm,.chroma .no,.chroma .nx{color:var(--tok-var)}.chroma .gi{color:var(--tok-string)}.chroma .gd,.chroma .err{color:var(--tok-var)}.chroma .gh,.chroma .gu,.chroma .ge{font-weight:600}.chroma .hl{display:block;margin-inline:-20px;padding-inline:20px;background:color-mix(in srgb,var(--accent) 14%,transparent)}.chroma .ln,.chroma .lnt{color:var(--tok-comment);opacity:.75;user-select:none;-webkit-user-select:none}.chroma .ln{display:inline-block;min-width:2.5ch;margin-right:1.2em;text-align:right}.prose .highlight>div.chroma{padding:18px 20px;border-radius:6px;background:var(--code-block-bg);overflow-x:auto}.prose pre,.prose .highlight>div.chroma{scrollbar-color:var(--muted)var(--code-block-bg)}.prose .chroma .lntable{display:table;width:100%;max-width:none;margin:0;border-spacing:0;border-collapse:separate;overflow:visible;font-size:14px;line-height:1.65}.prose .chroma .lntd{padding:0;border:0;vertical-align:top}.prose .chroma .lntd:first-child{width:1%;text-align:right;white-space:nowrap}.prose .chroma .lntd pre{margin:0;padding:0;border-radius:0;background:0 0;overflow:visible}.prose .chroma .lntd:first-child .lnt{padding-right:1.2em}.prose .chroma .lntd:first-child .hl{margin-inline:-20px 0;padding-inline:20px 1.2em}.prose .chroma .lntd:last-child .hl{margin-inline:0 -20px;padding-inline:0 20px}.toc{margin-top:32px;padding:14px 0;border-bottom:1px solid var(--rule);font-size:15px;line-height:1.7}.toc summary{cursor:pointer;font-size:17px;color:var(--muted)}.toc nav ul,.toc ul{margin:8px 0 0;padding-left:1.2em}.toc a:hover{color:var(--accent)}.post-tags{display:flex;flex-wrap:wrap;gap:4px 20px;margin:40px 0 0;padding:20px 0 0;border-top:1px solid var(--rule);list-style:none;font-family:var(--font-cond);font-stretch:75%;text-transform:uppercase;font-size:17px;color:var(--muted)}.post-tags a{display:inline-block;padding:8px 0}.post-tags a:hover{color:var(--accent)}.term-list{margin:0;padding:16px 0 48px;list-style:none}.term-row{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:20px 0;border-bottom:1px solid var(--rule)}.term-name{font-family:var(--font-slab);font-size:26px;line-height:1.3;color:var(--heading)}.term-row:hover .term-name{color:var(--accent)}.term-count{flex:none;font-size:18px;color:var(--muted)}.site-footer{padding-top:24px;padding-bottom:48px;text-align:center;font-size:16px;color:var(--muted)}.site-footer a:hover{color:var(--heading)}main+.site-footer{margin-top:24px}@media(max-width:560px){body{font-size:16px}.hero-title{font-size:40px}.tagline{font-size:19px}.entry-title{font-size:28px}.page-title{font-size:36px}.term-name{font-size:22px}.entries{gap:56px}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}@media print{.site-bar,.pagination,.theme-toggle,.copy-btn{display:none}}