@font-face{font-display:swap;font-family:Coustard;font-style:normal;font-weight:400;src:local("Coustard"),url("../fonts/coustard-42be12704ef50999d53a7c55da2bb7522ef1efde.woff2") format("woff2"),url("../fonts/coustard-047cecb729edc84ebbfff371ab07726904c7856e.woff") format("woff")}@font-face{font-display:swap;font-family:"Ubuntu Mono";font-style:normal;font-weight:400;src:local("Ubuntu Mono"),local("UbuntuMono-Regular"),url("../fonts/ubuntumono-84b73f5b59a742a668f218d10172f8dd66738a4d.woff2") format("woff2"),url("../fonts/ubuntumono-828b42bb81d9d1d12bedd533d93cc466ebb59bac.woff") format("woff")}@font-face{font-display:swap;font-family:Ubuntu;font-style:italic;font-weight:300;src:local("Ubuntu Light Italic"),local("Ubuntu-LightItalic"),url("../fonts/ubuntu-d1c3d1baea4ab0249aa137cc8b3e1c6f94d5d28c.woff2") format("woff2"),url("../fonts/ubuntu-047f76fbceab3e22ce8f729ffef77ba99188312e.woff") format("woff")}@font-face{font-display:swap;font-family:Ubuntu;font-style:italic;font-weight:700;src:local("Ubuntu Bold Italic"),local("Ubuntu-BoldItalic"),url("../fonts/ubuntu-bbdd0957cff7ea4b8ca8cef54b8d48ab66d5643b.woff2") format("woff2"),url("../fonts/ubuntu-83d2526710ef570fb5770b92eb107aa166495751.woff") format("woff")}@font-face{font-display:swap;font-family:Ubuntu;font-style:normal;font-weight:300;src:local("Ubuntu Light"),local("Ubuntu-Light"),url("../fonts/ubuntu-e4c86e820c9a5f86c6832a68e432c6bf6981084b.woff2") format("woff2"),url("../fonts/ubuntu-b384751d9bfe0f33fa07fe4c36d6a0a251651576.woff") format("woff")}@font-face{font-display:swap;font-family:Ubuntu;font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url("../fonts/ubuntu-ea34e91a0860ecad502410e6f10b10e5929400ff.woff2") format("woff2"),url("../fonts/ubuntu-140b699a9d0dd0cef6287ef712ae1933beb82b22.woff") format("woff")}:root{color-scheme:light dark;--color-bg:light-dark(#f8f8f8, #1a1613);--color-text:light-dark(#414141, #f4f1ea);--color-text-muted:light-dark(#828282, #a89f93);--color-link:light-dark(#e4322e, #eed3b1);--color-link-hover:light-dark(#af1a17, #f6e6cf);--color-border:light-dark(#e8e8e8, #332e27);--color-border-code:light-dark(#dddddd, #332e27);--color-rule-top:light-dark(#424242, #4a443b);--color-logo:light-dark(#313131, #f4f1ea);--color-icon:light-dark(#828282, #a89f93);--color-accent:light-dark(#dc322f, #eed3b1);--color-code-bg:light-dark(#f8f8f8, #241f1a);--color-surface:light-dark(#ffffff, #2e2823);--color-accent-strong:light-dark(#cf2b27, #eed3b1)}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}@supports not (color:light-dark(#000,#fff)){:root{--color-bg:#f8f8f8;--color-text:#414141;--color-text-muted:#828282;--color-link:#e4322e;--color-link-hover:#af1a17;--color-border:#e8e8e8;--color-border-code:#dddddd;--color-rule-top:#424242;--color-logo:#313131;--color-icon:#828282;--color-accent:#dc322f;--color-code-bg:#f8f8f8;--color-surface:#ffffff;--color-accent-strong:#cf2b27}}blockquote,body,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,ol,p,pre,ul{margin:0;padding:0}body{font-display:swap;font-family:Ubuntu,Helvetica,Arial,sans-serif;font-size:18px;line-height:2;font-weight:300;color:var(--color-text);background-color:var(--color-bg);transition:color .2s,background-color .2s}.highlight,blockquote,dl,figure,h1,h2,h3,h4,h5,h6,ol,p,pre,ul{margin-bottom:30px}h1,h2,h3,h4,h5,h6{font-display:swap;font-family:Coustard,Georgia,serif;font-weight:400}strong{font-weight:700}img{max-width:100%;height:auto;vertical-align:middle}figure>img{display:block}figcaption{font-size:15.75px}ol,ul{margin-left:30px}blockquote>:last-child,li p,li>ol,li>ul{margin-bottom:0}a{color:var(--color-link);text-decoration:none;transition:color .15s}a:hover{color:var(--color-link-hover)}blockquote{color:var(--color-text-muted);border-left:4px solid var(--color-border);padding-left:15px;font-size:18px;letter-spacing:-1px;font-style:italic}code,pre{font-display:swap;font-family:"Ubuntu Mono",monospace;word-break:break-all}code{padding:1px 5px}pre{padding:8px 0;overflow-x:scroll;border-top:1px solid var(--color-border-code);border-bottom:1px solid var(--color-border-code)}pre>code{border:0;padding-right:0;padding-left:0}.wrapper{max-width:-webkit-calc(840px - (30px * 2));max-width:calc(840px - (30px * 2));padding-right:30px;padding-left:30px}@media screen and (max-width:800px){.wrapper{max-width:-webkit-calc(800px - (30px));max-width:calc(800px - (30px));padding-right:15px;padding-left:15px}}.wrapper:after{content:"";display:table;clear:both}.icon>svg{display:inline-block;width:16px;height:16px;vertical-align:middle}.icon>svg path{fill:var(--color-icon)}.site-header{border-top:5px solid var(--color-rule-top);border-bottom:1px solid var(--color-border);min-height:56px;padding:30px 0}.site-header .wrapper{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px}.site-header .wrapper::after{display:none}.site-title{font-size:18px;line-height:56px;margin-bottom:0}.logo{height:16px;width:16px;border-radius:50%;border:8px solid var(--color-logo);display:inline-block;vertical-align:middle;line-height:56px;margin-right:8px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.site-footer{border-top:1px solid var(--color-border);padding:30px 0;font-size:15px}.page-content{padding:30px 0}.page-heading{font-size:20px}.post-list{margin-left:0;list-style:none}.post-list>li{margin-bottom:30px}.post-meta{font-size:15.75px;color:var(--color-text-muted)}.post-link{display:block;font-size:24px;line-height:1.4;color:var(--color-text)}.post-header{margin-bottom:30px}.post-title{font-size:42px;line-height:1.4}.post-content{margin-bottom:30px}.post-content h2{font-size:32px}@media screen and (max-width:800px){.post-title{font-size:36px}.post-content h2{font-size:28px}}.post-content h3{font-size:26px}@media screen and (max-width:800px){.post-content h3{font-size:22px}}.post-content h4{font-size:20px}@media screen and (max-width:800px){.post-content h4{font-size:18px}}.footnote{font-size:14px}.footnote-article-number,.footnote-footer-number{color:var(--color-accent);vertical-align:super;font-weight:600;font-size:14px}.table-header{text-align:center;margin-bottom:0}.table-header+table{text-align:center;margin:0 auto}.table-header+table th{padding:0 15px}@media screen and (max-width:600px){.table-header+table{font-size:14px}.table-header+table th{padding:0 5px}}.table-header+table td{font-display:swap;font-family:"Ubuntu Mono",monospace}.table-note{font-size:14px;margin:5px 0 30px;text-align:center}.highlight{background:#f8f8f8;color:#e4322e;line-height:18px}.highlight code{font-size:16px;line-height:20px}.highlight .c{color:#998;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .k{color:#a79d00;font-weight:400}.highlight .o{color:#849a22;font-weight:700}.highlight .cm{color:#998;font-style:italic}.highlight .cp{color:#dc322f;font-weight:400}.highlight .c1{color:#998;font-style:italic}.highlight .cs{color:#999;font-weight:700;font-style:italic}.highlight .gd{color:#000;background-color:#fdd}.highlight .gd .x{color:#000;background-color:#faa}.highlight .ge{color:#000;font-style:italic}.highlight .gr{color:#a00}.highlight .gh{color:#999}.highlight .gi{color:#000;background-color:#dfd}.highlight .gi .x{color:#000;background-color:#afa}.highlight .go{color:#888}.highlight .gp{color:#555}.highlight .gs{font-weight:700}.highlight .gu{color:#aaa}.highlight .gt{color:#a00}.highlight .kc,.highlight .kd,.highlight .kp,.highlight .kr{color:#000;font-weight:700}.highlight .kt{color:#458;font-weight:700}.highlight .m{color:#099}.highlight .s{color:#d14}.highlight .na{color:#657b83}.highlight .nb{color:#0086b3}.highlight .nc{color:#458;font-weight:700}.highlight .no{color:teal}.highlight .ni{color:purple}.highlight .ne{color:#900;font-weight:700}.highlight .nf{color:#657b83;font-weight:400}.highlight .nn{color:#555}.highlight .nt{color:navy}.highlight .nv{color:#258ad1}.highlight .ow{color:#000;font-weight:700}.highlight .w{color:#bbb}.highlight .mf,.highlight .mh{color:#099}.highlight .mi{color:#4cc0cb}.highlight .mo{color:#099}.highlight .s2,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .se,.highlight .sh,.highlight .si,.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#4cc0cb}.highlight .ss{color:#990073}.highlight .bp{color:#999}.highlight .vc,.highlight .vg,.highlight .vi{color:teal}.highlight .il{color:#099}.highlight .nx{color:#687b89}.highlight .x{color:#258bd2}.theme-control{position:relative;display:none;flex:none}:root[data-theme] .theme-control{display:block}.theme-control__toggle{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;padding:0;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface);color:var(--color-icon);cursor:pointer;-webkit-appearance:none;appearance:none;transition:color .18s,border-color .2s}.theme-control__toggle:hover{color:var(--color-link)}.theme-control__toggle:focus-visible{outline:2px solid var(--color-link);outline-offset:2px}.theme-control__icon{display:none}:root[data-theme=dark] .theme-control__icon[data-icon=dark],:root[data-theme=light] .theme-control__icon[data-icon=light],:root[data-theme=system] .theme-control__icon[data-icon=system]{display:block}.theme-picker{min-width:0;margin:0;padding:8px 12px;border:1px solid var(--color-border);border-radius:10px;background:var(--color-surface);box-shadow:0 6px 20px rgba(0,0,0,.14);transition:background-color .2s,border-color .2s}.theme-picker__label{display:block;margin-bottom:6px;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-muted)}.theme-picker__options{display:flex;flex-direction:column;gap:2px}.theme-picker label{display:block;padding:8px 12px;border-radius:6px;cursor:pointer;font-size:14px;line-height:1.4;color:var(--color-text);white-space:nowrap;-webkit-user-select:none;user-select:none;transition:color .15s}.theme-picker label:hover{color:var(--color-accent-strong)}.theme-picker input:checked+label,:root[data-theme=dark] .theme-picker label[for=theme-dark],:root[data-theme=light] .theme-picker label[for=theme-light],:root[data-theme=system] .theme-picker label[for=theme-system]{color:var(--color-accent-strong);font-weight:700}.theme-picker input:focus-visible+label{outline:2px solid var(--color-link);outline-offset:2px}@media (max-width:1119px){.theme-picker{display:none;position:absolute;top:calc(100% + 8px);right:0;z-index:50;min-width:150px}.theme-control.is-open .theme-picker{display:block}}@media (min-width:1120px){.theme-control{position:fixed;right:20px;bottom:20px;z-index:50}.theme-control__toggle{display:none}.theme-picker{display:flex;align-items:center;gap:12px}.theme-picker__label{margin-bottom:0}.theme-picker__options{flex-direction:row;gap:4px}.theme-picker label{padding:6px 10px}}@view-transition{navigation:auto}@media (prefers-reduced-motion:no-preference){.site-header{view-transition-name:site-header}.site-footer{view-transition-name:site-footer}::view-transition-old(root){animation:220ms both vt-slide-out}::view-transition-new(root){animation:220ms both vt-slide-in}@keyframes vt-slide-out{to{opacity:0;transform:translateY(-16px)}}@keyframes vt-slide-in{from{opacity:0;transform:translateY(16px)}}}@media (prefers-reduced-motion:reduce){*,::after,::before{transition-duration:0s!important}::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){animation:none!important}}