.page-header{display:grid;gap:0;justify-items:center;margin-block:24px 16px}.page-header small{color:var(--color-text--muted);font:inherit}.logo-text{color:var(--color-text);display:flex;font-size:32px;gap:4px;line-height:48px;outline:none;text-decoration:none}.logo-text:focus-visible,.logo-text:hover{color:var(--color-accent);--color-primary--dimmed:var(--color-accent)}.logo-text:focus-visible span:nth-child(3):after,.logo-text:hover span:nth-child(3):after{text-shadow:-1px 0 0 var(--color-bg),1px 0 0 var(--color-bg)}.logo-text span:nth-child(2){display:none}.logo-text span:nth-child(3){color:var(--color-primary--dimmed);position:relative}.logo-text span:nth-child(3):after{bottom:0;color:var(--color-accent);content:"/";font-size:48px;left:-9px;line-height:48px;pointer-events:none;position:absolute;text-shadow:-3px 0 0 var(--color-bg),3px 0 0 var(--color-bg);top:0;transition:text-shadow .2s}.page-footer{display:grid;justify-items:center;margin-block:var(--gap--medium)}.page-footer a{color:var(--color-text--faint);text-decoration:none;transition:color .2s}.page-footer:hover a{color:var(--color-primary);transition:none}.page-footer:hover a:focus,.page-footer:hover a:hover{color:var(--color-accent)}.social-links{display:flex;font-size:24px;gap:var(--gap--medium);line-height:1em}.social-links .link-bluesky{--color-primary:#2ee2e8}.social-links .link-linkedin{--color-primary:#e0ac32}.social-links .link-x{--color-primary:#489634}.social-links .link-github{--color-primary:var(--color-text--dimmed)}.rimy5efa{fill:currentColor;d:path("M4.907 3.44c.709.12 1.533.501 2.576 1.247C9.28 5.97 10.769 7.739 12 9.564c1.231-1.825 2.72-3.593 4.517-4.877c1.043-.746 1.867-1.127 2.576-1.248c.767-.13 1.29.065 1.615.2C21.717 4.06 22 5.225 22 6.215c0 .201-.086 1.302-.185 2.36c-.052.546-.11 1.108-.166 1.577c-.053.428-.115.88-.19 1.133a4.33 4.33 0 0 1-1.951 2.517c.937.707 1.277 1.856.928 2.984c-.597 1.924-2.737 4.397-4.835 4.618c-1.773.186-2.935-1.325-3.601-2.76c-.666 1.435-1.828 2.946-3.6 2.76c-2.099-.22-4.24-2.694-4.836-4.618c-.35-1.128-.01-2.277.928-2.984a4.33 4.33 0 0 1-1.95-2.517c-.076-.253-.138-.705-.19-1.133a61 61 0 0 1-.167-1.577C2.085 7.517 2 6.416 2 6.215c0-.99.283-2.155 1.292-2.576c.326-.135.847-.33 1.615-.2M4.05 6.916c.064.818.18 2.108.288 2.992c.032.268.055.545.122.807c.397 1.34 1.929 2.082 3.686 1.887a1 1 0 0 1 .257 1.983c-.756.112-3.315.357-2.928 1.607c.357 1.151 1.848 3.087 3.134 3.222c.928.097 1.5-1.394 1.766-2.045c.275-.674.488-1.38.668-1.982a1 1 0 0 1 1.916 0c.18.602.393 1.308.668 1.982c.266.651.838 2.142 1.766 2.045c1.286-.135 2.777-2.07 3.134-3.222c.387-1.25-2.172-1.495-2.928-1.607a1 1 0 0 1 .257-1.983c1.757.195 3.289-.547 3.686-1.887c.069-.266.089-.536.122-.807a80 80 0 0 0 .288-2.992c.037-.468.247-1.637-.522-1.506c-.286.049-.823.241-1.749.903c-1.943 1.389-3.705 3.513-4.789 5.64a1 1 0 0 1-1.782 0c-1.084-2.127-2.846-4.251-4.789-5.64c-.926-.662-1.463-.854-1.749-.903c-.784-.134-.559 1.034-.522 1.506")}.rio40dnh{fill:currentColor;d:path("M5.884 18.653c-.3-.2-.558-.455-.86-.816a51 51 0 0 1-.466-.579c-.463-.575-.755-.841-1.056-.95a1 1 0 1 1 .675-1.882c.752.27 1.261.735 1.947 1.588c-.094-.117.34.427.433.539c.19.227.33.365.44.438c.204.137.588.196 1.15.14c.024-.382.094-.753.202-1.095c-2.968-.726-4.648-2.64-4.648-6.396c0-1.24.37-2.356 1.058-3.292c-.218-.894-.185-1.975.302-3.192a1 1 0 0 1 .63-.582c.081-.024.127-.035.208-.047c.803-.124 1.937.17 3.415 1.096a11.7 11.7 0 0 1 2.687-.308c.912 0 1.819.104 2.684.308c1.477-.933 2.614-1.227 3.422-1.096q.128.02.218.05a1 1 0 0 1 .616.58c.487 1.216.52 2.296.302 3.19c.691.936 1.058 2.045 1.058 3.293c0 3.757-1.674 5.665-4.642 6.392c.125.415.19.878.19 1.38c0 .665-.002 1.299-.007 2.01c0 .19-.002.394-.005.706a1 1 0 0 1-.018 1.958c-1.14.227-1.984-.532-1.984-1.525l.002-.447l.005-.705c.005-.707.008-1.337.008-1.997c0-.697-.184-1.152-.426-1.361c-.661-.57-.326-1.654.541-1.751c2.966-.333 4.336-1.482 4.336-4.66c0-.955-.312-1.744-.913-2.404A1 1 0 0 1 17.2 6.19c.166-.414.236-.957.095-1.614l-.01.003c-.491.139-1.11.44-1.858.949a1 1 0 0 1-.833.135a9.6 9.6 0 0 0-2.592-.349c-.89 0-1.772.118-2.592.35a1 1 0 0 1-.829-.134c-.753-.507-1.374-.807-1.87-.947c-.143.653-.072 1.194.093 1.607a1 1 0 0 1-.189 1.045c-.597.655-.913 1.458-.913 2.404c0 3.172 1.371 4.328 4.322 4.66c.865.097 1.202 1.177.545 1.748c-.193.168-.43.732-.43 1.364v3.15c0 .985-.834 1.725-1.96 1.528a1 1 0 0 1-.04-1.962v-.99c-.91.061-1.661-.088-2.254-.485")}.ri78832u{fill:currentColor;d:path("M10.488 14.651L15.25 21h7l-7.858-10.478L20.93 3h-2.65l-5.117 5.886L8.75 3h-7l7.51 10.015L2.32 21h2.65zM16.25 19L5.75 5h2l10.5 14z")}.rilg5dgz{fill:currentColor;d:path("M4.001 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1h-16a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1m1 2v14h14V5zm2.5 4a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3m-1 1h2v7.5h-2zm5.5.43c.584-.565 1.266-.93 2-.93c2.071 0 3.5 1.679 3.5 3.75v4.25h-2v-4.25a1.75 1.75 0 1 0-3.5 0v4.25h-2V10h2z")}@font-face{font-family:PT Sans;src:local("PT Sans Regular Italic"),local("PT Sans Italic"),url(../_fonts/QhAIE0CbiHUD2V2XQJDs8LYQHTbx2bHFvodAYt3Dlsw-Us8DsVPdcdsPm0Q5rhEigWQm5qY288x2yxEqTGOoLfE.woff2) format(woff2);font-display:swap;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-weight:400;font-style:italic}@font-face{font-family:"PT Sans Fallback: Arial";src:local("Arial");size-adjust:96.68%;ascent-override:105.2959%;descent-override:28.5478%;line-gap-override:0%}@font-face{font-family:PT Sans;src:local("PT Sans Regular Italic"),local("PT Sans Italic"),url(../_fonts/faUJ8Z0G51lTQNKueKI0K0QrI0YHLmi5Wym7Tetn3BQ-KuEEc_lMz1CfPBQfThOHJWYM5SXup7yfNeIYqzk02l8.woff2) format(woff2);font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-weight:400;font-style:italic}@font-face{font-family:PT Sans;src:local("PT Sans Regular Italic"),local("PT Sans Italic"),url(../_fonts/eHt30TfzHkhWz31g9tpzc0j7NvdlMQhHD76cy69mnts-W3ggTALBr3H1rlcvWJ5_eovi2yXckxhAeafFs_ZRL6k.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:400;font-style:italic}@font-face{font-family:PT Sans;src:local("PT Sans Regular Italic"),local("PT Sans Italic"),url(../_fonts/bnM5m1TdCR5Knf0ZsMjdC2zH5VJ7QiPeoMLl_7BQAOE-pNqMAsR8qkYy5VctikkUreuGhxX9_4auNqNpPLCAlxo.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:italic}@font-face{font-family:PT Sans;src:local("PT Sans Regular"),local("PT Sans"),url(../_fonts/oAKnXYEjE8QLLgzO-2pfenjjZp-_OqD-_NcMo7Q3qOo-6JLvIdEz9Sf3aQjNPvhMyrpPo5_D_5ZNLqNKeRIwhLI.woff2) format(woff2);font-display:swap;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;font-weight:400;font-style:normal}@font-face{font-family:PT Sans;src:local("PT Sans Regular"),local("PT Sans"),url(../_fonts/V8nYeWuZj4DYcCEFN2MwitsB69Vtt5NPsOhn8eq-I_M-29_LgZOR3kcM5LmLoXPSLNDyCtjNZQwo-V119WAz-RM.woff2) format(woff2);font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;font-weight:400;font-style:normal}@font-face{font-family:PT Sans;src:local("PT Sans Regular"),local("PT Sans"),url(../_fonts/9lTqagvCkcSGKs2TTRqbaaQ28wlNp1PNY7fL0-OUHRY-_kivgskyZASz_Lh2myRNBunQMGxUa_tZO-pER1htN3I.woff2) format(woff2);font-display:swap;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;font-weight:400;font-style:normal}@font-face{font-family:PT Sans;src:local("PT Sans Regular"),local("PT Sans"),url(../_fonts/tEPBZyWGXq3-XI6COL6HpD-4nje4aylbUDSd08QkUf0-wrWFdMikshKaMXGg9h1Ey6N_Q6IInjfMyDkzY7mjOqo.woff2) format(woff2);font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;font-weight:400;font-style:normal}@font-face{font-family:PT Sans;src:local("PT Sans Regular Italic"),local("PT Sans Italic"),url(../_fonts/w8eSfPwaRo6GEJ1Gjyzm3Vs6Kcdav6rY5NrzpRnJfLs-7V3xFrQ6_3U3yt6iqRlYDKiCd_nNDnNw9ZlR1G2skko.woff) format(woff);font-display:swap;font-weight:400;font-style:italic}@font-face{font-family:PT Sans;src:local("PT Sans Regular"),local("PT Sans"),url(../_fonts/qId1lrJ3ivzSZiRlrkORkny1qqDyJwW7g4imjzg8pEo-PlqOewXc7N7Jyh5C9RQcxNFXUg__2BelLe75jf0JfSs.woff) format(woff);font-display:swap;font-weight:400;font-style:normal}:root{--color-bg:#181818;--color-text:#fff;--color-text--dimmed:#c5c5c5;--color-text--muted:#8c8c8c;--color-text--faint:#5d5d5d;--color-primary:#489634;--color-primary--dimmed:#3c772d;--color-accent:#e1552e;--color-secondary:#f2c14e;--color-secondary--dimmed:#bc9741;--color-tertiary:#2ec9e8;--color-tertiary--dimmed:#299db4;--color-quaternary:#d85ffa;--color-quaternary--dimmed:#b251cd;--color-bg--panel:rgba(0,0,0,.2);--color-border--panel:hsla(0,0%,100%,.15);--color-bg--icon-path1:#1f1f1f;--color-bg--icon-path2:#221b19;--color-bg--inline-code:hsla(17,91%,74%,.1);--color-inline-code:#f9a380;--color-text--tag:#181818;--color-bg--tag:#489634;--color-bg--tag-hover:#e1552e}html{color-scheme:dark;--gap--tiny:4px;--gap--small:8px;--gap--medium:16px;--gap--large:32px;background:var(--color-bg);color:var(--color-text--dimmed);font-family:PT Sans,"PT Sans Fallback: Arial",Noto Sans,Open Sans,-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;font-size:16px;height:100%;line-height:1.5}body,html{margin:0;padding:0}body{overflow-y:scroll}.page-wrapper,body{min-height:100vh;position:relative}.page-wrapper{display:grid;gap:var(--gap--medium);grid-template-rows:auto 1fr auto}.bg-logo{--bg-size:min(30vh,40vw);left:50%;margin:calc(var(--bg-size)/-2);pointer-events:none;position:fixed;top:50%;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bg-logo svg{height:var(--bg-size);width:var(--bg-size)}.bg-logo .path1{fill:var(--color-bg--icon-path1);d:path("M197.3 106.7c0-43-28-74.7-69.3-74.7-41.2 0-69.3 31.6-69.3 74.7 0 12.2 4.4 23.7 11.5 36.7 3.6 6.6 7.7 13.2 12 20.6 4.2 7.2 8.7 15 12.7 23.4 5 10.3 18.3 15.3 33.1 15.3s28-5 33-15.3c4.1-8.4 8.6-16.2 12.8-23.4 4.3-7.4 8.4-14 12-20.6a76.6 76.6 0 0 0 11.5-36.7Zm21.4 0c0 17.6-6.5 32.8-14.2 47-3.8 7-8.2 14.1-12.3 21-4.2 7.2-8.3 14.3-12 22-10.4 21.7-35 27.3-52.2 27.3-17.2 0-41.8-5.6-52.3-27.4-3.6-7.6-7.7-14.7-11.9-21.8-4.1-7-8.5-14.1-12.3-21.2a97.4 97.4 0 0 1-14.2-47c0-52.9 36-96 90.7-96 54.8 0 90.7 43.1 90.7 96ZM178.5 112c4.4 7.7-.3 18.6-10.5 24.5-10.2 6-22 4.5-26.5-3.2-4.4-7.6.3-18.6 10.5-24.5 10.2-5.9 22-4.5 26.5 3.2Zm-64 21.3c-4.4 7.7-16.3 9.1-26.5 3.2-10.2-5.9-14.9-16.8-10.5-24.5 4.4-7.7 16.3-9 26.5-3.2 10.2 5.9 14.9 16.9 10.5 24.5Z")}.bg-logo .path2{fill:var(--color-bg);d:path("M81 155.6a21.3 21.3 0 1 1 30 30.2l-16.8 16.9 16.9 16.9a21.3 21.3 0 1 1-30.2 30.2l-32-32a21.3 21.3 0 0 1 0-30.2l32-32Zm64 0a21.3 21.3 0 0 1 30 0l32 32a21.3 21.3 0 0 1 0 30.2l-32 32a21.3 21.3 0 1 1-30-30.2l16.8-17-16.9-16.8a21.3 21.3 0 0 1 0-30.2Z")}.bg-logo .path3{fill:var(--color-bg--icon-path2);d:path("M88.5 163.1a10.7 10.7 0 1 1 15 15.1l-24.4 24.5 24.4 24.4a10.7 10.7 0 1 1-15 15.1l-32-32c-4.2-4.2-4.2-11 0-15l32-32Zm64 0a10.7 10.7 0 0 1 15 0l32 32c4.2 4.2 4.2 11 0 15.1l-32 32a10.7 10.7 0 1 1-15-15l24.4-24.5-24.4-24.5c-4.2-4.2-4.2-11 0-15Z")}a{color:var(--color-primary);outline:none;text-decoration:underline}a:focus-visible,a:hover{color:var(--color-accent);text-decoration:underline}ol,ul{margin-block:8px 16px}li{margin-block:8px;padding-block:0}.page-content,.page-footer,.page-header{margin-inline:5vw}@media (min-width:1056px){.page-content,.page-footer,.page-header{margin-inline:auto;width:960px}}main{margin-bottom:var(--gap--large)}main h1,main h2,main h3,main h4,main h5{color:var(--color-tertiary--dimmed);font-size:20px;line-height:26px;margin:32px 0 16px;padding:0}main h1 a,main h2 a,main h3 a,main h4 a,main h5 a{color:inherit;text-decoration:none}main h1 a:hover,main h2 a:hover,main h3 a:hover,main h4 a:hover,main h5 a:hover{color:var(--color-accent)}main h1{color:var(--color-primary--dimmed);font-size:28px;line-height:36px}main h1:first-child,main h2:first-child{margin-top:0}main h2{color:var(--color-secondary--dimmed);font-size:24px;line-height:32px}main h3{margin-top:24px}main h4{color:var(--color-quaternary--dimmed);font-size:18px;line-height:26px;margin-top:20px}main .separate-section{margin-top:32px}main p{margin:8px 0 12px;padding:0}main p.small{color:var(--color-text--muted);font-size:14px;line-height:20px}main li code,main p code{background:var(--color-bg--inline-code);border-radius:2px;box-shadow:0 0 0 2px var(--color-bg--inline-code);color:var(--color-inline-code);display:inline-block;margin:0 4px;padding:0 2px}main li code:hover,main p code:hover{color:var(--color-text)}main .code-wrapper,main .demo,main .demo-box,main pre{margin:8px 0 16px}main .code-wrapper+.code-wrapper,main .code-wrapper+.demo,main .code-wrapper+.demo-box,main .code-wrapper+pre,main .demo+.code-wrapper,main .demo+.demo,main .demo+.demo-box,main .demo+pre,main .demo-box+.code-wrapper,main .demo-box+.demo,main .demo-box+.demo-box,main .demo-box+pre,main pre+.code-wrapper,main pre+.demo,main pre+.demo-box,main pre+pre{margin-top:-8px}main pre{background:var(--color-bg--panel);border:2px solid var(--color-border--panel);border-radius:12px;padding:8px 12px;white-space:pre-wrap}main .code-wrapper{position:relative}main .code-wrapper pre{margin:0}main .code-wrapper.short pre{max-height:100px;overflow-y:auto}main .code-wrapper .code-lang{background:var(--color-bg--panel);background:#2ec9e8;border-radius:6px;color:var(--color-text--dimmed);color:#000;opacity:.8;padding:4px 8px;pointer-events:none;position:absolute;right:-4px;top:-6px;transition:opacity .2s}main .code-wrapper:hover .code-lang{opacity:1}main .code-wrapper.lang-js .code-lang,main .code-wrapper.lang-ts .code-lang{background-color:#2287f5}main .code-wrapper.lang-svg .code-lang{background-color:#f5a422}main .code-wrapper.lang-html .code-lang{background-color:#f06327}main .code-wrapper.lang-css .code-lang{background-color:#2781f0}main .demo,main .demo-box{background:var(--color-bg--panel);border:2px dashed var(--color-border--panel);border-radius:6px;display:flex;gap:8px;padding:8px;width:-moz-fit-content;width:fit-content}main .demo-box{border-radius:0;padding:0}.articles-list,main .articles-list{margin-bottom:var(--gap--large)}.articles-list h1,main .articles-list h1{color:var(--color-secondary--dimmed);font-size:24px;line-height:32px;margin:32px 0 16px}.articles-list ul,main .articles-list ul{all:unset;display:grid;gap:var(--gap--small);margin-block:var(--gap--medium)}.articles-list li,main .articles-list li{all:unset;display:inline-flex;gap:4px;margin-left:16px}.articles-list li.article-year,main .articles-list li.article-year{color:var(--color-text--muted);font-size:20px;line-height:26px;margin:24px 0 0;padding:0}.articles-list li.article-year:first-child,main .articles-list li.article-year:first-child{margin-top:0}.articles-list li small,main .articles-list li small{color:var(--color-text--muted);font-size:14px;line-height:24px}p.publish-date{color:var(--color-text--muted);float:right;font-size:14px;margin:16px 0;padding:0;text-align:right}@media (max-width:600px){p.publish-date{float:none;text-align:left}}.tag-link{background:var(--color-bg--tag);border-radius:4px;color:var(--color-text--tag);display:inline-block;font-size:14px;line-height:24px;margin:0 6px;padding:0 6px;text-decoration:none}.tag-link:focus-visible,.tag-link:hover{background-color:var(--color-bg--tag-hover);color:inherit;text-decoration:underline}.tag--svg{--color-bg--tag:#f5a422}.tag--animations{--color-bg--tag:#ca58e9}
