*,::after,::before{box-sizing:border-box}html{-webkit-tap-highlight-color:transparent;overflow-y:scroll;-webkit-text-size-adjust:100%;text-size-adjust:100%}body{font-family:-apple-system,BlinkMacSystemFont,segoe ui,Roboto,Oxygen,Ubuntu,Cantarell,open sans,helvetica neue,sans-serif;font-size:18px;line-height:1.6;word-break:break-word}article,aside,figcaption,figure,header,hgroup,main,nav,section,table{display:block}h1,h2,h3,h4,h5,h6{line-height:1.2}h1,h2,h3,h4,h5,h6,p{margin-top:0;margin-bottom:0}ul,ol{padding:0}a{text-decoration:none}body,figure,ul{margin:0}table{width:100%;border-collapse:collapse;border-spacing:0;overflow-x:auto;word-break:keep-all}button,input,textarea{padding:0;font:inherit;background:0 0;border:0}input,textarea{outline:0}button,input[type=button],input[type=submit]{cursor:pointer}img{display:block;max-width:100%}:root{color-scheme:light dark;--content-primary:light-dark(
    var(--content-primary-light),
    var(--content-primary-dark)
  );--content-secondary:light-dark(
    var(--content-secondary-light),
    var(--content-secondary-dark)
  );--background:light-dark(var(--background-light), var(--background-dark));--code-background:light-dark(
    var(--code-background-light),
    var(--code-background-dark)
  );--code-border:light-dark(var(--code-border-light), var(--code-border-dark));--h1-margin-top:2rem;--h1-margin-bottom:1.5rem;--h2-margin-top:2rem;--h2-margin-bottom:1.5rem;--hx-margin-top:1.5rem;--hx-margin-bottom:1rem;--p-margin-top:1rem;--p-margin-bottom:1rem;--h1-font-size:2em;--h2-font-size:1.8em;--hx-font-size:1.3em;--p-font-size:1em;--p-line-height:1.5em;--li-indent:2rem;--li-checkbox-size:0.8em;--code-padding:1.5rem;--code-border-radius:10px;--code-margin-top:2rem;--code-margin-bottom:2rem;--copy-code-button-border-radius:7px;--table-cell-padding:0.5rem;--table-margin-top:2rem;--table-margin-bottom:2rem;--figure-img-max-height:800px;--caption-font-size:0.8em;--caption-padding:calc(0.25 * var(--main-padding));--main-padding:1.4em;--footer-height:3rem}@media screen and (max-width:640px){:root{--caption-padding:calc(2 * var(--main-padding))}}.light{color-scheme:light}.dark{color-scheme:dark}html{scroll-behavior:smooth}body{font-family:var(--font-body);color:var(--content-primary);background:var(--background)}h1{margin-top:var(--h1-margin-top);margin-bottom:var(--h1-margin-bottom);font-size:var(--h1-font-size)}h2{margin-top:var(--h2-margin-top);margin-bottom:var(--h2-margin-bottom);font-size:var(--h2-font-size)}h3,h4,h5,h6{font-size:var(--hx-font-size);margin-top:var(--hx-margin-top);margin-bottom:var(--hx-margin-bottom)}.heading{.anchor{text-decoration:none;font-weight:400;color:var(--content-secondary);visibility:hidden;font-size:.9em;font-family:var(--font-mono)}&:hover .anchor{visibility:visible}}p{margin-top:var(--p-margin-top);margin-bottom:var(--p-margin-bottom);font-size:var(--p-font-size);line-height:var(--p-line-height)}li{margin-left:var(--li-indent);&:has(> input[type=checkbox]){list-style-type:none}& > input[type=checkbox]{width:var(--li-checkbox-size);height:var(--li-checkbox-size);margin:0 .2em .15em -1.25em;vertical-align:middle}}a{text-decoration:underline}hr{border:none;height:1px;background:var(--content-secondary);margin-top:2rem;margin-bottom:2rem}blockquote{margin:1.5rem;margin-left:0;margin-right:0;border-left:solid 2px;color:var(--content-secondary)}blockquote p{margin-left:1rem;margin-right:1rem}.copy-code-button{background-color:var(--background);font-family:var(--font-mono);padding:3px 6px;font-size:.8em;border-radius:var(--copy-code-button-border-radius);position:absolute;top:10px;right:10px;z-index:1;display:none;border:1px solid var(--code-border)}div.code-block{position:relative}div.code-block:hover .copy-code-button{display:block}pre{padding:var(--code-padding);border:1px solid var(--code-border);overflow:scroll;border-radius:var(--code-border-radius);margin-top:var(--code-margin-top);margin-bottom:var(--code-margin-bottom);overflow-x:auto;-ms-overflow-style:none;scrollbar-width:none;line-height:1.3em}pre::-webkit-scrollbar{display:none}code span{display:inline!important}code{-webkit-font-smoothing:antialiased;font-feature-settings:"liga","dlig";font-variant-ligatures:contextual;font-family:var(--font-mono);font-size:.9em}li code,table code,p code{background-color:var(--code-background);border-radius:3px;padding:2px}.footnotes{margin-top:3rem;border-style:none}.table-outer{width:100%;overflow-x:auto}table{border-collapse:collapse;margin-top:var(--table-margin-top);margin-bottom:var(--table-margin-bottom);font-size:var(--p-font-size);line-height:var(--p-line-height);color:var(--content-primary);width:fit-content;margin-left:auto;margin-right:auto;border:1px solid var(--code-border);border-radius:var(--code-border-radius)}th,td{padding:var(--table-cell-padding);text-align:left}th{background-color:var(--code-background);font-weight:700}tbody tr{border-top:1px solid var(--code-border)}figure{.img-container{aspect-ratio:var(--w)/var(--h);max-height:var(--figure-img-max-height);width:auto;margin-inline:auto}img{display:block;max-width:100%;height:auto}}.caption-container{display:flex;justify-content:center}figcaption{color:var(--content-secondary);padding-left:var(--caption-padding);padding-right:var(--caption-padding);font-size:var(--caption-font-size);margin-top:1rem;margin-bottom:1rem}.breadcrumbs{display:flex;flex-wrap:wrap;gap:2px;font-size:small;margin-bottom:calc(-.5 * var(--h1-margin-top));font-family:var(--font-mono)}footer{font-size:small;display:flex;justify-content:center;align-items:center;max-height:var(--footer-height)}footer a{font-family:var(--font-mono);margin-left:.2rem;margin-right:.2rem}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-Light.woff2)format("woff2");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-LightItalic.woff2)format("woff2");font-weight:300;font-style:italic;font-display:swap}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-SemiBold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:literata;src:url(/fonts/Literata/Literata-SemiBoldItalic.woff2)format("woff2");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:monaspace;src:url(/fonts/Monaspace/MonaspaceArgon-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:monaspace;src:url(/fonts/Monaspace/MonaspaceArgon-SemiBold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}.bg{color:light-dark(#282a36,#f8f8f2);background-color:var(--code-background)}.chroma{color:light-dark(#282a36,#f8f8f2);background-color:var(--code-background);-webkit-text-size-adjust:none}.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:light-dark(#ece9d9,#3d3f4a)}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:light-dark(#8a8a8a,#7f7f7f)}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:light-dark(#8a8a8a,#7f7f7f)}.chroma .line{display:flex}.chroma .k{color:light-dark(#a02f7a,#ff79c6)}.chroma .kc{color:light-dark(#a02f7a,#ff79c6)}.chroma .kn{color:light-dark(#a02f7a,#ff79c6)}.chroma .kp{color:light-dark(#a02f7a,#ff79c6)}.chroma .kr{color:light-dark(#a02f7a,#ff79c6)}.chroma .nt{color:light-dark(#a02f7a,#ff79c6)}.chroma .o{color:light-dark(#a02f7a,#ff79c6)}.chroma .ow{color:light-dark(#a02f7a,#ff79c6)}.chroma .cp{color:light-dark(#a02f7a,#ff79c6)}.chroma .cpf{color:light-dark(#a02f7a,#ff79c6)}.chroma .kd{color:light-dark(#1f6f8a,#8be9fd);font-style:italic}.chroma .kt{color:light-dark(#1f6f8a,#8be9fd)}.chroma .nl{color:light-dark(#1f6f8a,#8be9fd);font-style:italic}.chroma .nb{color:light-dark(#1f6f8a,#8be9fd);font-style:italic}.chroma .bp{font-style:italic}.chroma .nv{color:light-dark(#1f6f8a,#8be9fd);font-style:italic}.chroma .vc{color:light-dark(#1f6f8a,#8be9fd);font-style:italic}.chroma .vg{color:light-dark(#1f6f8a,#8be9fd);font-style:italic}.chroma .vi{color:light-dark(#1f6f8a,#8be9fd);font-style:italic}.chroma .vm{color:light-dark(#1f6f8a,#8be9fd);font-style:italic}.chroma .na{color:light-dark(#2c7a3a,#50fa7b)}.chroma .nc{color:light-dark(#2c7a3a,#50fa7b)}.chroma .nf{color:light-dark(#2c7a3a,#50fa7b)}.chroma .fm{color:light-dark(#2c7a3a,#50fa7b)}.chroma .s{color:light-dark(#7a5e00,#f1fa8c)}.chroma .sa{color:light-dark(#7a5e00,#f1fa8c)}.chroma .sb{color:light-dark(#7a5e00,#f1fa8c)}.chroma .sc{color:light-dark(#7a5e00,#f1fa8c)}.chroma .dl{color:light-dark(#7a5e00,#f1fa8c)}.chroma .sd{color:light-dark(#7a5e00,#f1fa8c)}.chroma .s2{color:light-dark(#7a5e00,#f1fa8c)}.chroma .se{color:light-dark(#7a5e00,#f1fa8c)}.chroma .sh{color:light-dark(#7a5e00,#f1fa8c)}.chroma .si{color:light-dark(#7a5e00,#f1fa8c)}.chroma .sx{color:light-dark(#7a5e00,#f1fa8c)}.chroma .sr{color:light-dark(#7a5e00,#f1fa8c)}.chroma .s1{color:light-dark(#7a5e00,#f1fa8c)}.chroma .ss{color:light-dark(#7a5e00,#f1fa8c)}.chroma .m{color:light-dark(#6f4cb8,#bd93f9)}.chroma .mb{color:light-dark(#6f4cb8,#bd93f9)}.chroma .mf{color:light-dark(#6f4cb8,#bd93f9)}.chroma .mh{color:light-dark(#6f4cb8,#bd93f9)}.chroma .mi{color:light-dark(#6f4cb8,#bd93f9)}.chroma .il{color:light-dark(#6f4cb8,#bd93f9)}.chroma .mo{color:light-dark(#6f4cb8,#bd93f9)}.chroma .c{color:light-dark(#525d8c,#aeb6d0)}.chroma .ch{color:light-dark(#525d8c,#aeb6d0)}.chroma .cm{color:light-dark(#525d8c,#aeb6d0)}.chroma .c1{color:light-dark(#525d8c,#aeb6d0)}.chroma .cs{color:light-dark(#525d8c,#aeb6d0)}.chroma .gd{color:light-dark(#c93b3b,#f55)}.chroma .ge{text-decoration:underline}.chroma .gh{font-weight:700}.chroma .gi{color:light-dark(#2c7a3a,#50fa7b);font-weight:700}.chroma .go{color:light-dark(#6e7180,#b0b6c6)}.chroma .gu{font-weight:700}.chroma .gl{text-decoration:underline}.theme-toggle{display:flex;align-items:center;justify-content:center;width:44px;height:44px;padding:0;margin:0;border:1px solid var(--content-secondary);border-radius:50%;background:0 0;color:var(--content-primary);cursor:pointer;transition:color .2s ease,background .2s ease,border-color .2s ease;position:relative}.theme-toggle:hover{background:var(--content-secondary);color:var(--background)}.theme-toggle:focus-visible{outline:2px solid var(--blog-link);outline-offset:2px}.theme-toggle svg{width:18px;height:18px;fill:none}.theme-icon-light,.theme-icon-dark{display:none}body.dark .theme-icon-light,html.dark .theme-icon-light{display:block}body.light .theme-icon-dark,html.light .theme-icon-dark{display:block}:root{--content-primary-light:#282a36;--content-primary-dark:#f8f8f2;--background-light:#f8f8f2;--background-dark:#282a36;--content-secondary-light:#525d8c;--content-secondary-dark:#9aa4cc;--code-background-light:#fdfdf9;--code-background-dark:#44475a;--code-border-light:#d0d0ca;--code-border-dark:#44475a;--blog-divider-light:#d0d0ca;--blog-divider-dark:#383a47;--blog-card-light:#fdfdf9;--blog-card-dark:#44475a;--blog-photo-mat-light:#f0f0eb;--blog-photo-mat-dark:#1f2028;--blog-link-light:#7846b6;--blog-link-dark:#8be9fd;--blog-accent-light:#7846b6;--blog-accent-dark:#bd93f9;--blog-status-finished-bg-light:rgba(44, 122, 58, 0.10);--blog-status-finished-bg-dark:rgba(80, 250, 123, 0.12);--blog-status-error-light:#c93b3b;--blog-status-error-dark:#ff5555;--blog-shell-max:1440px;--blog-pad-x:80px;--blog-pad-y:20px;--blog-post-pad-x:240px;--blog-mobile-pad:24px;--blog-mobile-gap:16px;--blog-font-display:"Literata", Georgia, Cambria, "Noto Serif", "Droid Serif", ui-serif, serif;--blog-font-mono:"Monaspace", ui-monospace, monospace;--fs-avatar:48px;--fs-hero:44px;--fs-title:36px;--fs-hero-sm:32px;--fs-section:28px;--fs-heading:24px;--fs-result:22px;--fs-brand:20px;--fs-subheading:18px;--fs-body:16px;--fs-meta:13px;--fs-micro:12px;--fs-label:11px;--blog-divider:light-dark(var(--blog-divider-light), var(--blog-divider-dark));--blog-card:light-dark(var(--blog-card-light), var(--blog-card-dark));--blog-photo-mat:light-dark(var(--blog-photo-mat-light), var(--blog-photo-mat-dark));--blog-link:light-dark(var(--blog-link-light), var(--blog-link-dark));--blog-accent:light-dark(var(--blog-accent-light), var(--blog-accent-dark));--blog-status-finished-bg:light-dark(var(--blog-status-finished-bg-light),   var(--blog-status-finished-bg-dark));--blog-status-error:light-dark(var(--blog-status-error-light), var(--blog-status-error-dark));--font-body:var(--blog-font-display);--font-mono:var(--blog-font-mono)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.skip-link{position:absolute;top:8px;left:8px;z-index:200;padding:8px 12px;background:var(--content-primary);color:var(--background);font-family:var(--blog-font-mono);font-size:var(--fs-meta);text-decoration:none;transform:translateY(-200%);transition:transform .2s ease}.skip-link:focus,.skip-link:focus-visible{transform:translateY(0);outline:2px solid var(--blog-link);outline-offset:2px}a:focus-visible{outline:2px solid var(--blog-link);outline-offset:2px;text-decoration:underline}.reading-progress{position:fixed;top:0;left:0;width:100%;height:3px;background:var(--blog-link);transform:scaleX(0);transform-origin:0 0;z-index:300;transition:transform .08s linear;pointer-events:none;will-change:transform}@media(prefers-reduced-motion:reduce){.reading-progress{transition:none}}html{background:var(--background)}body.site-body{margin:0;max-width:none;min-height:100vh;padding:0;color:var(--content-primary);background:var(--background);font-kerning:normal;font-feature-settings:"kern","liga","calt";text-rendering:optimizeLegibility}.site-shell{min-height:100vh}.site-header,.site-breadcrumbs,.site-main,.site-footer{width:min(100%,var(--blog-shell-max));margin:0 auto;box-sizing:border-box}.site-main{min-height:auto}.site-footer{margin-top:48px;padding:20px var(--blog-pad-x)40px;border-top:1px solid var(--blog-divider)}body.kind-page.section-posts .site-footer{margin-top:32px;padding-left:var(--blog-post-pad-x);padding-right:var(--blog-post-pad-x)}body.layout-search .site-footer{margin-top:auto;padding-left:var(--blog-pad-x);padding-right:var(--blog-pad-x)}body.section-about .site-footer{margin-top:48px;padding:20px var(--blog-pad-x)40px;border-top:1px solid var(--blog-divider)}.blog-header{display:flex;align-items:center;justify-content:space-between;gap:32px;padding:var(--blog-pad-y)var(--blog-pad-x);border-bottom:1px solid var(--blog-divider)}.blog-header__brand{min-width:0}.blog-header__brand-link{color:var(--content-primary);font-family:var(--blog-font-display);font-size:var(--fs-brand);font-weight:700;line-height:1.2;text-decoration:none}.blog-header__actions{display:flex;align-items:center;justify-content:flex-end;gap:24px}.blog-nav{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:32px}.blog-nav__link{display:inline-flex;align-items:center;min-height:44px;padding:4px 0;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-meta);font-weight:400;line-height:1.4;text-decoration:none}.blog-nav__link:hover,.blog-nav__link:focus-visible,.blog-header__brand-link:hover,.blog-header__brand-link:focus-visible{color:var(--blog-link)}.blog-theme-toggle.theme-toggle{width:44px;height:44px;border:0;color:var(--content-secondary);flex-shrink:0}.blog-theme-toggle.theme-toggle svg{width:18px;height:18px}.blog-theme-toggle.theme-toggle:hover{background:0 0;color:var(--blog-link)}.blog-header__rss{width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;color:var(--content-secondary);text-decoration:none;border-radius:6px;flex-shrink:0}.blog-header__rss svg{width:18px;height:18px}.blog-header__rss:hover,.blog-header__rss:focus-visible{color:var(--blog-link)}.blog-nav__link.is-active{color:var(--content-primary);text-decoration:underline;text-decoration-color:var(--blog-link);text-decoration-thickness:1px;text-underline-offset:6px}.site-breadcrumbs .breadcrumbs{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:16px var(--blog-pad-x);color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-micro);line-height:1.5}.site-breadcrumbs .breadcrumbs a,.site-breadcrumbs .breadcrumbs-separator{color:var(--content-secondary);text-decoration:none}.site-breadcrumbs .breadcrumbs a{color:var(--blog-link);text-decoration:none}.site-breadcrumbs .breadcrumbs a:last-of-type{color:var(--content-secondary);text-decoration:none}.site-breadcrumbs .breadcrumbs a:hover,.site-breadcrumbs .breadcrumbs a:focus-visible{color:var(--blog-link)}.home-hero{display:flex;flex-direction:column;align-items:center;gap:20px;padding:72px var(--blog-pad-x)48px;text-align:center}.home-hero__title{max-width:720px;margin:0;font-size:var(--fs-hero);font-weight:700;line-height:1.15;letter-spacing:-.01em;text-wrap:balance}.home-hero__summary{max-width:680px;margin:0;color:var(--content-secondary);font-size:var(--fs-body);line-height:1.6}.home-hero__summary p{margin:0}.home-hero__topics{margin:0;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-micro);letter-spacing:1.5px;text-transform:uppercase}.home-hero__social{display:flex;flex-wrap:wrap;justify-content:center;gap:32px}.home-hero__social a{color:var(--blog-link);font-family:var(--blog-font-mono);font-size:var(--fs-label);letter-spacing:1.5px;text-decoration:none;text-transform:uppercase;transition:color .2s ease}.home-hero__social a:hover,.home-hero__social a:focus-visible{color:var(--content-primary)}.home-hero__divider,.feed-section__divider,.feed-list__divider,.article-head__divider{width:100%;height:1px;background:var(--blog-divider)}.feed-section,.list-page{padding:48px var(--blog-pad-x)0}.feed-section__title,.list-page__title{margin:0 0 20px;font-size:var(--fs-section);font-weight:700;line-height:1.2;letter-spacing:-.005em}.list-page__intro{max-width:720px;margin:0 0 20px;color:var(--content-secondary)}.feed-list{padding-top:8px}.not-found-page{display:flex;flex-direction:column;gap:24px;padding:48px var(--blog-pad-x)0}.not-found-page__title{margin:0;font-size:var(--fs-hero);font-weight:700;line-height:1.15;letter-spacing:-.01em;text-wrap:balance}.not-found-page__sketch{display:block;width:100%;max-width:240px;height:auto;margin:0;color:var(--content-secondary)}.not-found-page__lead{max-width:65ch;margin:0;color:var(--content-secondary);font-size:var(--fs-body);line-height:1.7}.not-found-page__actions{margin-top:16px;padding-top:24px;border-top:1px solid var(--blog-divider)}.not-found-page__label{margin:0 0 12px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-label);letter-spacing:1.5px;text-transform:uppercase}.not-found-page__list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}.not-found-page__list li{margin:0}.not-found-page__list a{color:var(--content-primary);font-family:var(--blog-font-mono);font-size:var(--fs-meta);text-decoration:none}.not-found-page__list a:hover,.not-found-page__list a:focus-visible{color:var(--blog-link)}@media screen and (max-width:768px){.not-found-page__title{font-size:var(--fs-hero-sm)}.not-found-page{padding-top:32px}}.feed-section--archive{padding-top:24px;padding-bottom:32px}.feed-section__archive-link{margin:0;font-family:var(--blog-font-mono);font-size:var(--fs-meta);color:var(--content-secondary)}.feed-section__archive-link a{color:var(--blog-link);text-decoration:none}.feed-section__archive-link a:hover,.feed-section__archive-link a:focus-visible{text-decoration:underline}.post-row,.tag-row{display:grid;grid-template-columns:112px minmax(0,1fr);gap:24px;align-items:center;padding:16px 0}.post-row--no-date,.tag-row{grid-template-columns:1fr}.post-row__date{color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-meta);letter-spacing:.5px;line-height:1.5;white-space:nowrap;font-variant-numeric:tabular-nums}.post-row__title,.tag-row__title{margin:0;font-size:var(--fs-body);font-weight:400;line-height:1.45;overflow-wrap:anywhere;word-break:break-word;min-width:0}.post-row__readtime{margin-left:8px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-micro);font-variant-numeric:tabular-nums;white-space:nowrap}.post-row__title a,.tag-row__title a{color:var(--content-primary);text-decoration:none}.post-row__title a:hover,.post-row__title a:focus-visible,.tag-row__title a:hover,.tag-row__title a:focus-visible{color:var(--blog-link)}.list-pagination{display:flex;align-items:center;justify-content:center;gap:16px;padding-top:32px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-micro);font-variant-numeric:tabular-nums}.list-pagination__slot,.list-pagination__count{min-width:96px;text-align:center}.list-pagination__link{color:var(--blog-link);text-decoration:none;transition:color .2s ease}.list-pagination__link:hover,.list-pagination__link:focus-visible{color:var(--content-primary);text-decoration:underline}.article-head{display:flex;flex-direction:column;gap:16px;padding:40px var(--blog-post-pad-x)32px}.article-head__title{width:100%;margin:0;font-size:var(--fs-title);font-weight:700;line-height:1.2;letter-spacing:-.01em;text-wrap:balance}.article-head__meta{display:flex;flex-wrap:wrap;align-items:center;gap:20px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-meta);line-height:1.5;font-variant-numeric:tabular-nums}.article-head__meta-dot{color:var(--content-secondary);font-family:var(--blog-font-display)}.article-tags{display:flex;flex-wrap:wrap;gap:12px}.article-tags a{color:var(--blog-link);font-family:var(--blog-font-mono);font-size:var(--fs-micro);text-decoration:none;transition:color .2s ease}.article-tags a:hover,.article-tags a:focus-visible{color:var(--content-primary);text-decoration:underline}.article-body,.page-body,.single-comments{padding:32px var(--blog-post-pad-x)0}.page-head{padding:40px var(--blog-pad-x)0}.page-head__title{margin:0;font-size:var(--fs-title);font-weight:700;line-height:1.2;letter-spacing:-.01em;text-wrap:balance}.page-head__summary{max-width:720px;margin:16px 0 0;color:var(--content-secondary)}.page-body{padding-left:var(--blog-pad-x);padding-right:var(--blog-pad-x)}.article-body .heading,.page-body .heading{position:relative}.article-body h2,.page-body h2{margin-top:0;margin-bottom:16px;font-size:var(--fs-heading);font-weight:700;line-height:1.3}.article-body h3,.page-body h3{margin-top:0;margin-bottom:12px;font-size:var(--fs-subheading);font-weight:700;line-height:1.4}.article-body p,.page-body p,.article-body li,.page-body li{font-size:var(--fs-body);line-height:1.7}.article-body p,.page-body p{margin-top:0;margin-bottom:24px;hyphens:auto;-webkit-hyphens:auto;hyphenate-limit-chars:6 3 3}.article-body ul,.article-body ol,.page-body ul,.page-body ol{margin-top:0;margin-bottom:32px}.article-body li+li,.page-body li+li{margin-top:8px}.article-body strong,.page-body strong{font-weight:700}.article-body a,.page-body a,.single-comments a{color:var(--blog-link)}.article-body blockquote,.page-body blockquote{margin:0 0 32px;padding-left:24px;border-left:1px solid var(--blog-divider);color:var(--content-secondary);font-style:italic}.article-body .code-block,.page-body .code-block{position:relative;margin:0 0 32px;max-width:100%;border-radius:6px;background:var(--blog-card);overflow-x:auto;overflow-y:hidden}.article-body .highlight,.page-body .highlight,.article-body pre,.page-body pre{margin:0;border:0;background:0 0;max-width:100%;overflow-x:auto}.article-body .highlight pre,.page-body .highlight pre{padding:20px 24px}.article-body .copy-code-button,.page-body .copy-code-button{top:12px;right:12px;display:block;border:1px solid var(--blog-divider);background:0 0;color:var(--blog-link);cursor:pointer;transition:color .2s ease,border-color .2s ease}.article-body .copy-code-button:hover,.page-body .copy-code-button:hover{color:var(--content-primary);border-color:var(--content-primary)}.article-body .copy-code-button:focus-visible,.page-body .copy-code-button:focus-visible{outline:2px solid var(--blog-link);outline-offset:2px}.article-body table,.page-body table{margin-left:0;margin-right:0}.terms-list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px}.terms-list__item{display:flex;align-items:baseline;gap:12px;padding:6px 0;border-bottom:1px solid var(--blog-divider)}.terms-list__link{color:var(--content-primary);font-family:var(--blog-font-display);font-size:var(--fs-body);text-decoration:none;flex:1;min-width:0}.terms-list__link:hover,.terms-list__link:focus-visible{color:var(--blog-link)}.terms-list__count{color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-micro);font-variant-numeric:tabular-nums;white-space:nowrap}.archive-year{margin-bottom:32px}.archive-year__title{margin:24px 0 12px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-meta);font-weight:400;letter-spacing:1.5px;text-transform:uppercase;font-variant-numeric:tabular-nums}.article-related{margin:48px var(--blog-post-pad-x)0;padding-top:24px;border-top:1px solid var(--blog-divider)}.article-related__label{margin:0 0 16px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-label);letter-spacing:1.5px;text-transform:uppercase}.article-related__list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:12px}.article-related__list li{display:flex;align-items:baseline;gap:12px;margin:0}.article-related__title{color:var(--content-primary);font-family:var(--blog-font-display);font-size:var(--fs-body);text-decoration:none;flex:1;min-width:0}.article-related__title:hover,.article-related__title:focus-visible{color:var(--blog-link)}.article-related__meta{color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-micro);font-variant-numeric:tabular-nums;white-space:nowrap}@media screen and (max-width:640px){.article-related{margin-left:var(--blog-mobile-pad);margin-right:var(--blog-mobile-pad)}}.post-photo{margin:32px 0}.post-photo picture,.post-photo img{display:block;width:100%;height:auto;border-radius:2px}.post-photo figcaption{margin-top:10px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-micro);letter-spacing:.3px;line-height:1.5;text-align:center}.post-photo--missing{margin:32px 0;padding:12px 16px;color:var(--blog-status-error,#ff5555);font-family:var(--blog-font-mono);font-size:var(--fs-meta)}@media screen and (max-width:768px){.post-photo{margin:56px 0}}.article-series{margin:0 var(--blog-post-pad-x)32px;padding-top:16px;border-top:1px solid var(--blog-divider)}.article-series__label{margin:0 0 10px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-label);letter-spacing:1.5px;text-transform:uppercase}.article-series__name{color:var(--content-primary);text-decoration:none;letter-spacing:0;text-transform:none;font-family:var(--blog-font-display);font-size:var(--fs-meta)}.article-series__name:hover,.article-series__name:focus-visible{color:var(--blog-link)}.article-series__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;font-family:var(--blog-font-display);font-size:var(--fs-body)}.article-series__list li{margin:0;color:var(--content-secondary)}.article-series__list li.is-current{color:var(--content-primary);font-weight:600}.article-series__list li.is-current::before{content:"▸ ";color:var(--blog-link);font-weight:400}.article-series__title{color:inherit;text-decoration:none}a.article-series__title:hover,a.article-series__title:focus-visible{color:var(--blog-link)}@media screen and (max-width:640px){.article-series{margin-left:var(--blog-mobile-pad);margin-right:var(--blog-mobile-pad)}}.article-head__lastmod{color:var(--content-secondary);font-style:italic}.article-nav{display:grid;grid-template-columns:minmax(0,1fr)minmax(0,1fr)auto;align-items:start;gap:24px;margin:48px var(--blog-post-pad-x)0;padding-top:24px;border-top:1px solid var(--blog-divider)}.article-nav__entry{display:flex;flex-direction:column;gap:4px}.article-nav__entry--next{text-align:right}.article-nav__label,.article-nav__top{color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-label);letter-spacing:.5px;text-decoration:none;transition:color .2s ease}.article-nav__title{color:var(--blog-link);font-size:var(--fs-meta);line-height:1.4;text-decoration:none;transition:color .2s ease}a.article-nav__title:hover,a.article-nav__title:focus-visible{color:var(--content-primary);text-decoration:underline}.article-nav__top{align-self:center;color:var(--blog-link);font-size:var(--fs-micro)}a.article-nav__top:hover,a.article-nav__top:focus-visible{color:var(--content-primary);text-decoration:underline}.article-nav__ghost{display:block}.search-page{min-height:calc(100vh - 105px - 73px);padding-bottom:48px}.search-page__hero{display:flex;flex-direction:column;gap:24px;padding:48px var(--blog-pad-x)16px}.search-page__hero-title{margin:0;font-size:var(--fs-hero);font-weight:700;line-height:1.15;letter-spacing:-.01em;text-wrap:balance}.search-page__hero-summary{max-width:720px;margin:0;color:var(--content-secondary);font-size:var(--fs-body);line-height:1.6}.search-page__query-wrap{width:min(100%,720px);margin-top:8px}.search-page__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.search-page__query{width:100%;min-width:0;padding:16px 20px;border:1px solid var(--blog-divider);border-radius:0;background:var(--blog-card);color:var(--content-primary);font-family:var(--blog-font-mono);font-size:var(--fs-body);line-height:1.4;transition:border-color .2s ease,background .2s ease}.search-page__query::placeholder{color:var(--content-secondary)}.search-page__query:focus,.search-page__query:focus-visible{outline:none;border-color:var(--blog-link)}.search-page__results{padding:24px var(--blog-pad-x)0}.search-results-list{display:grid;gap:0}.search-result-row{display:flex;flex-direction:column;gap:10px;padding:24px 0}.search-results-list__divider{width:100%;height:1px;background:var(--blog-divider)}.search-result-row__title{margin:0;font-family:var(--blog-font-display);font-size:var(--fs-result);font-weight:700;line-height:1.3}.search-result-row__title a{color:var(--content-primary);text-decoration:none}.search-result-row__title a:hover,.search-result-row__title a:focus-visible{color:var(--blog-link)}.search-result-row__excerpt{margin:0;color:var(--content-secondary);font-family:var(--blog-font-display);font-size:var(--fs-body);line-height:1.65;max-width:65ch}.search-result-row__excerpt mark{padding:0 1px;color:var(--content-primary);font-weight:600;background:var(--blog-status-finished-bg)}.search-page__status{margin:0 0 16px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-meta)}.search-page__status.is-error{color:var(--blog-status-error)}.search-result-row--empty{min-height:78px}.about-page{display:flex;flex-direction:column;gap:48px;padding:48px var(--blog-pad-x)0}.about-page__hero{display:flex;flex-direction:column;gap:16px}.about-page__title{margin:0;color:var(--content-primary);font-family:var(--blog-font-display);font-size:var(--fs-title);font-weight:700;line-height:1.2;letter-spacing:-.01em;text-wrap:balance}.about-page__lead,.about-page__text,.about-page__contact-meta{max-width:65ch;margin:0;color:var(--content-primary);font-family:var(--blog-font-display);font-size:var(--fs-body);line-height:1.7}.about-page__lead{font-size:var(--fs-subheading);line-height:1.6;color:var(--content-secondary)}.about-page__meta{margin:0;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-label);letter-spacing:1.5px;text-transform:uppercase}.about-page__divider{width:100%;height:1px;background:var(--blog-divider)}.about-page__bio-row{display:grid;grid-template-columns:160px minmax(0,1fr);gap:32px;align-items:start}.about-page__avatar{display:flex;align-items:center;justify-content:center;width:160px;height:160px;border:1px solid var(--blog-divider);background:0 0;color:var(--content-primary);font-family:var(--blog-font-display);font-size:var(--fs-avatar);font-weight:700;overflow:hidden}.about-page__avatar img{display:block;width:100%;height:100%;object-fit:cover}.about-page__columns{display:grid;grid-template-columns:minmax(0,1fr)minmax(0,1fr);gap:48px;align-items:start}.about-page__bio-col,.about-page__column,.about-page__contact{display:flex;flex-direction:column}.about-page__bio-col{gap:16px}.about-page__column{gap:16px}.about-page__section-title{margin:0;color:var(--content-primary);font-family:var(--blog-font-display);font-size:var(--fs-heading);font-weight:700;line-height:1.3}.about-page__section-title--small{font-size:var(--fs-subheading)}.about-page__list{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}.about-page__list li{margin:0;padding-left:16px;position:relative;color:var(--content-primary);font-family:var(--blog-font-display);font-size:var(--fs-body);line-height:1.7}.about-page__list li::before{content:"·";position:absolute;left:0;color:var(--content-secondary)}.about-page__text--compact{margin-bottom:0}.about-page__contact{gap:12px;padding-top:24px;border-top:1px solid var(--blog-divider)}.about-page__contact-meta{font-family:var(--blog-font-mono);font-size:var(--fs-meta);color:var(--content-secondary)}.blog-footer{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:6px 10px;color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-micro);letter-spacing:.3px;line-height:1.5;font-variant-numeric:tabular-nums}.blog-footer a{color:var(--content-secondary);text-decoration:none}.blog-footer a:hover,.blog-footer a:focus-visible{color:var(--blog-link)}@media screen and (max-width:1200px){:root{--blog-post-pad-x:160px}}@media screen and (max-width:1024px){:root{--blog-pad-x:48px;--blog-post-pad-x:80px}.blog-header{align-items:flex-start}.article-nav{grid-template-columns:1fr}.article-nav__entry--next{text-align:left}.article-nav__ghost{display:none}.about-page__bio-row{grid-template-columns:1fr;gap:24px}.about-page__avatar{width:120px;height:120px;font-size:var(--fs-hero)}}@media screen and (max-width:768px){:root{--blog-pad-x:var(--blog-mobile-pad);--blog-post-pad-x:var(--blog-mobile-pad)}.blog-header{flex-wrap:wrap;gap:12px 16px;padding-top:14px;padding-bottom:14px}.blog-header__brand{flex:auto;min-width:0;order:0}.blog-header__actions{display:contents}.blog-header__rss{order:1;flex:none}.blog-theme-toggle.theme-toggle{order:2;flex:none}.blog-nav{order:3;flex:0 0 100%;width:100%;justify-content:flex-start;gap:8px 16px}.blog-nav__link{min-height:36px;font-size:var(--fs-micro)}.blog-theme-toggle.theme-toggle,.blog-header__rss{width:36px;height:36px}.home-hero{padding-top:48px;gap:16px}.home-hero__title{font-size:var(--fs-hero-sm)}.feed-section,.list-page{padding-top:32px}.post-row,.tag-row{grid-template-columns:1fr;gap:8px}.article-head__title,.page-head__title{font-size:var(--fs-section)}.about-page,body.section-about .site-footer{padding-left:var(--blog-mobile-pad);padding-right:var(--blog-mobile-pad)}.search-page__hero{padding-top:32px}.search-page__hero-title{font-size:var(--fs-hero-sm)}.about-page{gap:32px;padding-top:32px}.about-page__title{font-size:var(--fs-section)}.about-page__columns{grid-template-columns:1fr;gap:24px}}.article-discuss{margin-top:32px;padding-top:20px;border-top:1px solid var(--blog-divider);display:flex;flex-wrap:wrap;align-items:baseline;gap:12px}.article-discuss__link{font-family:var(--blog-font-mono);font-size:var(--fs-meta);font-weight:600;letter-spacing:.3px;color:var(--blog-accent);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s ease}.article-discuss__link:hover,.article-discuss__link:focus-visible{border-bottom-color:initial}.article-discuss__hint{color:var(--content-secondary);font-family:var(--blog-font-mono);font-size:var(--fs-micro);letter-spacing:.3px}