@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/5476f68d60460930-s.0wxq9webf.ew4.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,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-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Fallback;src:local(Arial);ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.0%;size-adjust:107.12%}.inter_5972bc34-module__OU16Qa__className{font-family:Inter,Inter Fallback;font-style:normal}
body{--color-foreground-paper:black;--color-foreground-secondary:#111;--color-foreground-border:#bbb;--color-foreground-highlight:#555;--color-foreground-impact:white;--color-background-paper:white;--color-background-paper-secondary:#eee;--color-background-deep:#aab;--color-background-impact:#222;--color-instruction-primary:#f90;--color-instruction-darken:#c27400;--color-instruction-secondary:#907f12;--color-warn-primary:#ff8400;--color-warn-contrast:black;--color-warn-secondary:#fffcd3;--color-info-primary:#40c4ff;--color-info-contrast:black;--color-info-secondary:#b3e5fc;--color-action-primary:#3629c2;--color-action-darken:#1a117d;--color-foreground-darken:#362b97;--color-background-darken:#00000015;--color-background-lighten:#ffffff08;color:var(--color-foreground-paper);--column-width:1100px;line-height:1.75}img{max-width:100%}pre,pre:hover{white-space:pre-wrap;word-break:break-word}pre code{display:block;overflow-x:auto;white-space:pre-wrap!important}.rgp-base pre{width:0!important;min-width:calc(100% - 2em)!important}.react-github-permalink .link-wrapper a{word-break:break-word}@media (prefers-color-scheme:dark){body{--color-foreground-paper:#e0e0e0;--color-foreground-secondary:#ccc;--color-foreground-border:#aaa;--color-foreground-highlight:#55ff5540;--color-foreground-impact:white;--color-background-paper:#222;--color-background-paper-secondary:#444;--color-foreground-darken:#ffffff20;--color-background-darken:#00000030;--color-background-lighten:#ffffff08;--color-background-deep:black;--color-background-impact:#black;--color-instruction-primary:#e2c715;--color-instruction-darken:#aa9719;--color-instruction-secondary:#907f12;--color-warn-primary:#d88f41;--color-warn-contrast:#ebc97a;--color-warn-secondary:#3c2301;--color-info-primary:#00a8f5;--color-info-contrast:#fdfdfd;--color-info-secondary:#033248;--color-action-primary:#96f;--color-action-darken:#a29ce1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}code{background-color:var(--color-background-lighten)}details{cursor:pointer}.main-column{background-color:var(--color-background-paper);max-width:var(--column-width);box-shadow:2px 2px 2px var(--color-foreground-highlight);margin:.5em auto;padding:2em}#page-opensource a{font-weight:700}#page-opensource li{margin-bottom:1em}.icon-links{align-self:flex-start;align-items:center;gap:.5em;display:flex}.icon-links svg path{fill:#fff;stroke:#fff}.demo-frame{background-color:var(--color-background-darken);border-radius:1em;margin:1em;padding:1em}.demo-frame .demo-frame-title{border:solid 1px var(--color-foreground-darken);border-radius:1em;padding:0 1em;font-size:.8em;display:inline-block}.demo-frame .demo-frame-content{background-color:var(--color-background-darken);border-radius:1em;padding:1em}.demo-frame .demo-frame-description{border-radius:1em;margin:.5em 0;padding:.25em 1em;font-size:.85em}.code-example-link{font-size:.9em}.code-example-link,.code-example-link:visited{margin-bottom:2em;margin-left:1em;font-weight:700;display:block}.sheep-image-wrapper.force-light{background:unset}.sheep-image-wrapper.force-dark{background:radial-gradient(circle, black 60%, var(--color-background-paper) 68%, #ddffdd50 69%, var(--color-background-paper) 70%)}@media (prefers-color-scheme:dark){.sheep-image-wrapper{background:radial-gradient(circle, black 60%, var(--color-background-paper) 68%, #ddffdd50 69%, var(--color-background-paper) 70%)}.sheep-image-wrapper .light{display:none}.sheep-image-wrapper .dark{display:block}}@media (prefers-color-scheme:light){.sheep-image-wrapper .dark{display:none}}.sheep-image-wrapper{justify-content:center;align-items:center;width:200px;height:200px;display:flex}.sheep-image-wrapper img{object-fit:contain;width:60%;height:60%;left:25%}.slim{max-width:800px;margin:0 auto}.main{border:solid 1px var(--color-foreground-darken);border-radius:.25em;max-width:600px;margin:50px auto;padding:2em;display:block}.main h1{text-align:center}.section-break{margin-top:5em}h1{margin-bottom:0}h1+.date-published{color:var(--color-foreground-secondary);margin-top:0;margin-bottom:3em;margin-left:1em}h1+.date-published span{display:none}.error-page h1{text-align:center}.error-page{background-color:var(--color-background-paper);margin:4em 2em;padding:2em}.error-page img{width:400px;height:400px;margin:3em auto;display:block}.error-page a{text-align:center;margin:0 auto;font-size:1.5em;display:block}.open-source{text-align:center}details{background-color:var(--color-background-darken);border:var(--color-foreground-darken) solid 1px;margin-bottom:.25em;padding:1.5em 1.5em 1em}summary>*{display:inline}body{background-color:var(--color-background-deep);margin:0;font-family:Open Sans}header{background-color:var(--color-background-impact);padding:.5em;font-size:1.5em}.header-flex-container{max-width:var(--column-width);flex-flow:wrap;justify-content:space-between;margin:0 auto;display:flex}header .title{margin-bottom:1em;display:block}header a,header a:visited{color:var(--color-foreground-impact);text-decoration:none}header a:hover{color:var(--color-foreground-impact);text-decoration:underline}nav:not(.tags-panel){flex-flow:wrap;flex:1 0 100%;gap:1em;font-family:monospace;display:flex}nav:not(.tags-panel) .active{font-weight:700}.tags-panel ul{flex-flow:wrap;justify-content:space-between;display:flex}.tags-panel li{flex-basis:50%;font-weight:700;display:block}.logo-container{width:100px;height:100px}.logo-container>img{object-fit:contain;object-position:0 -1px;width:100%;height:100%}.headline{flex-flow:column;align-items:center;margin-bottom:3em;display:flex}.edit-with-github{text-align:right}a,a:hover{color:var(--color-foreground-paper)}.game-of-life-cell{border:solid 1px var(--color-foreground-paper);width:20px;height:20px}.game-of-life-cell:hover{cursor:pointer}.game-of-life-row{flex-flow:row;display:flex}.game-of-life-cell.live{background-color:green}.game-of-life-cell.dead{background-color:gray}img{object-fit:contain}.blog-image{max-width:100%;margin:0 auto;display:block}@media (prefers-color-scheme:dark){.invert-colors-on-dark{filter:invert(.89)}}table{border-spacing:0;border-collapse:separate;border:1px solid var(--color-foreground-border)}table thead td{font-weight:700}table td{border:1px solid var(--color-foreground-border);padding:.5em}.homepage-article-link{border:solid 1px var(--color-background-paper-secondary);background-color:var(--color-background-lighten);margin:1em;padding:1em;text-decoration:none;display:block}.homepage-article-link-title{margin-bottom:0;font-weight:700;text-decoration:underline}.series-box{border:solid 1px var(--color-foreground-paper);padding:1.5em}.series-box li{margin:.5em 0}.series-box .current{font-weight:700}.infopanel{border:1px solid;border-radius:1em;margin:.5em 0;padding:1em;font-size:.8em}.infopanel-instruction{background-color:var(--color-background-darken);border-color:var(--color-instruction-secondary);margin:0 1em}.infopanel-instruction .icon{color:var(--color-instruction-primary)}.infopanel-warning a{color:var(--color-warn-contrast)}.infopanel-warning{color:var(--color-warn-contrast);border-color:var(--color-warn-primary);background-color:var(--color-warn-secondary)}.infopanel-info a{color:var(--color-info-contrast)}.infopanel-info{color:var(--color-info-contrast);border-color:var(--color-info-primary);background-color:var(--color-info-secondary)}.infopanel .icon{float:left;margin:.5em}.infopanel-warning .icon{color:var(--color-warn-primary)}.infopanel-info .icon{color:var(--color-info-primary)}@media only screen and (max-width:767px){.main-column{margin:0;padding:.5em}.main{border:0 solid #0000;margin:0 0 .25em;padding:0}li:has(>a){margin:.5em 0}.series-box{border:border 1px solid var(--color-foreground-border);border-width:0 0 1px;padding:0}.series-box>p{margin-top:0}.homepage-article-link{margin:.5em 0}}.date-published{font-size:.75em}.next-post{border:solid 2px var(--color-foreground-paper);border-radius:1em;margin:2em 0;padding:2em;font-size:1.2em}#comments:focus{border:2px solid #aaf;border-radius:.2em}.aside{border:1px solid var(--color-foreground-border);background-color:var(--color-background-paper-secondary);float:right;width:300px;box-shadow:2px 2px 2px var(--color-foreground-border);border-radius:.5em;margin:1em;padding:20px;font-size:.75em;position:relative}.aside .triangle{border-left:10px solid var(--color-foreground-border);border-right:10px solid #0000;border-top:10px solid var(--color-foreground-border);z-index:2;border-bottom:10px solid #0000;width:0;height:0;position:absolute;top:6px;right:-21px}.aside .triangle:after{content:"";border-left:10px solid var(--color-background-paper-secondary);border-right:10px solid #0000;border-top:10px solid var(--color-background-paper-secondary);border-bottom:10px solid #0000;width:0;height:0;position:absolute;top:-8px;right:-5px}.clear-right{clear:right}.tooltip-container svg{display:block!important}.image-panel{background-color:var(--color-background-paper-secondary);border:solid 1px var(--color-foreground-border);border-radius:.25em;flex-flow:wrap;justify-content:space-around;padding:.25em;display:flex}.image-panel .image-panel-single{background-color:var(--color-background-paper);border:solid 1px var(--color-background-paper-secondary);border-radius:.25em;padding:1em}.image-panel .image-panel-caption{text-align:center;color:var(--color-foreground-secondary);font-size:.75em}
.rgp-base{--rgp-color-bg-stark:white;--rgp-color-text-stark:#1f2328;--rgp-color-bg-frame:#f6f8fa;--rgp-color-text-frame:#656d76;--rgp-color-border:#d0d7de;--rgp-color-issuenumber:#656d76;--rgp-color-file-link:#0969da;--rgp-color-commit-link:#1f2328;--rgp-color-status-foreground:white;--rgp-color-status-open:#1f883d;--rgp-color-status-closed:#8250df;--rgp-color-status-error:red;--rgp-color-reaction-foreground:#0969da;--rgp-color-reaction-background:#ddf4ff;--rgp-color-button-text:#59636e;--rgp-color-button-text-success:#3fb950;--rgp-color-button-background:#f6f8fa;--rgp-color-button-background-hover:#eff2f5;--rgp-color-button-border:#d1d9e0;--rgp-color-tooltip-bg:#3d444d;color:var(--rgp-color-text-stark)}@media (prefers-color-scheme:dark){.rgp-base{--rgp-color-bg-stark:#1d1f21;--rgp-color-text-stark:#e6edf3;--rgp-color-bg-frame:#161b22;--rgp-color-text-frame:#8d96a0;--rgp-color-border:#30363d;--rgp-color-issuenumber:#656d76;--rgp-color-file-link:#4493f8;--rgp-color-commit-link:#e6edf3;--rgp-color-status-foreground:white;--rgp-color-status-open:#238636;--rgp-color-status-closed:#8250df;--rgp-color-status-error:red;--rgp-color-reaction-foreground:#4493f8;--rgp-color-reaction-background:#388bfd33;--rgp-color-button-text:#9198a1;--rgp-color-button-background:#212830;--rgp-color-button-background-hover:#262c36;--rgp-color-button-border:#3d444d}}.react-github-issue-link-inline{color:var(--rgp-color-reaction-forergound);border:solid 1px var(--rgp-color-text-frame);background-color:var(--rgp-color-bg-stark);border-radius:2px;margin:0 .25em;padding:0 .25em;font-family:monospace}.react-github-issue-link-inline .github-logo{width:.9em;height:.9em;position:relative;top:.1em}.rgp-base>pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;margin:0!important}.rgp-base pre+.hide-line-numbers{margin-top:-1em}.rgp-base .hide-line-numbers+pre{margin-top:0}.rgp-base .hide-line-numbers{margin:0}.rgp-base .hide-line-numbers .linenumber{visibility:hidden}svg.github-logo{fill:var(--rgp-color-commit-link)}.react-github-issuelink .react-github-issuelink-body{color:var(--rgp-color-text-stark);flex-flow:row;justify-content:space-between;align-items:center;font-size:16px;text-decoration:none;display:flex}.react-github-issuelink-body p{margin:0}.react-github-issuelink a{color:inherit;text-decoration:none}.react-github-issuelink a:hover .react-github-issuelink-title,.react-github-issuelink a:hover .react-github-issuelink-number{text-decoration:underline}.react-github-issuelink-number{color:var(--rgp-color-issuenumber)}.react-github-issuelink-repo{flex-flow:row;align-items:center;gap:.75em;font-size:12px;font-weight:700;text-decoration:underline;display:flex}.react-github-issuelink-status{color:var(--rgp-color-status-foreground);fill:var(--rgp-color-status-foreground);border-radius:2em;flex-flow:row;justify-content:space-between;align-items:center;gap:.6em;padding:0 10px;font-size:.75em;font-weight:500;line-height:24px;display:flex}.react-github-issuelink-status.open{background-color:var(--rgp-color-status-open)}.react-github-issuelink-status.closed{background-color:var(--rgp-color-status-closed)}.react-github-issuelink{padding:.5em}.react-github-permalink,.react-github-issuelink{border:solid 1px var(--rgp-color-border);text-align:left;background-color:var(--rgp-color-bg-stark);border-radius:4px;margin:.5em;font-size:12px}.react-github-permalink,.react-github-permalink .header{border-color:var(--rgp-color-border);border-style:solid;border-width:1px}.react-github-permalink .header{flex-flow:row;align-items:center;gap:.75em;display:flex}.copy-button-container .tooltip-container{anchor-name:--tooltip-anchor;position:relative}.copy-button-container .tooltip-content{background-color:var(--rgp-color-tooltip-bg);opacity:1;transition-property:opacity;transition-duration:.25s;position:absolute;top:-14px;left:-26px}@starting-style{.copy-button-container .tooltip-content{opacity:0}}@supports (position-anchor:--tooltip-anchor){.copy-button-container .tooltip-content{position-anchor:--tooltip-anchor;top:unset;left:unset;bottom:anchor(top);justify-self:anchor-center;margin:3px;position:fixed}}.copy-button-container .tooltip-content{white-space:nowrap;height:12px;color:var(--rgp-color-text-stark);box-shadow:2px 2px 2px var(--rgp-color-bg-stark);border-radius:2px;padding:.5em .75em;font-size:11px}.copy-button-container .tooltip-target[popover]{display:none;overlay:none!important}.copy-button-container .tooltip-target[popover]:popover-open+.tooltip-content{display:block}.copy-button-container .tooltip-target[popover]+.tooltip-content{display:none}.copy-button-container button{all:unset;appearance:none;box-shadow:none;text-align:inherit;font:inherit;color:var(--rgp-color-button-text);cursor:pointer;background:0 0;background-color:var(--rgp-color-button-background);border:none;border:solid 1px var(--rgp-color-button-border);border-radius:.25em;margin:0;padding:.5em}.copy-button-container button.clicked{color:var(--rgp-color-button-text-success)}.copy-button-container button svg{fill:currentColor}.copy-button-container button:hover{background-color:var(--rgp-color-button-background-hover)}.react-github-permalink .header,.react-github-issuelink .header{border-width:0 0 1px;font-family:Segoe UI,Noto Sans,Helvetica,Arial,sans-serif}.react-github-permalink a.file-link{color:var(--rgp-color-file-link);font-weight:700}.react-github-permalink a.commit-link{color:var(--rgp-color-commit-link);text-decoration:underline}.react-github-permalink .header p{color:var(--rgp-color-text-frame);margin:.25em 0}.react-github-permalink .header{background-color:var(--rgp-color-bg-frame);padding:8px}.react-github-permalink .header .link-wrapper{flex:auto;min-width:0;overflow:hidden}.react-github-permalink .header .link-wrapper a{text-overflow:ellipsis;display:block;overflow:hidden}.react-github-permalink .error,.react-github-issuelink .error{color:var(--rgp-color-status-error);margin-left:1em;font-weight:700}.reaction-bar{margin-top:.5em;font-size:.8em}.reaction-value{color:var(--rgp-color-reaction-foreground);background-color:var(--rgp-color-reaction-background);border:solid 1px var(--rgp-color-reaction-foreground);border-radius:100px;margin-right:.75em;padding:.25em;display:inline-block}.reaction-value span{margin:0 2px}
:root{--highlight-bg-color:#fde05f;--highlight-text-color:#000;--highlight-bg-color-hover:#fde05f;--highlight-border-hover:#ba9769;--highlight-border-selected:#e18b19;--highlight-comment-box-shadow:#0003;--highlight-comment-bg:#f6e69c}.page-with-margins{flex-flow:row;gap:6px;display:flex}.page-with-margins .main-column{flex:0 1 var(--column-width)}.page-with-margins .left-gutter{flex:auto}.right-gutter{flex-flow:column;flex:auto;display:flex}@media screen and (max-width:985px){.right-gutter{display:block;position:fixed;bottom:0;left:0;right:0}}@media (prefers-color-scheme:dark){:root{--highlight-bg-color:#5790d459;--highlight-text-color:#fff;--highlight-bg-color-hover:#4a4b80;--highlight-border-hover:#5b5f99;--highlight-border-selected:#9178e2;--highlight-comment-box-shadow:#0003;--highlight-comment-bg:#223253}}.text-highlight{background-color:var(--highlight-bg-color);color:var(--highlight-text-color);border:1px solid #0000}.text-highlight-comment{background-color:var(--highlight-comment-bg);color:var(--highlight-text-color);box-sizing:border-box;border:1px solid #0000;max-width:400px;margin:2px;padding:1em;font-size:.75em}@media screen and (max-width:985px){.text-highlight-comment{max-width:100%;margin-left:0;margin-right:0;padding:1em}.text-highlight-comment.text-highlight-selected{transition-behavior:allow-discrete;transition-property:display;transition-duration:1s;animation:.1s ease-out slideInFromBottom;display:block}.text-highlight-comment:not(.text-highlight-selected){transition-behavior:allow-discrete;transition-property:display;transition-duration:.1s;animation:.1s ease-out slideOutToBottom;display:none}}.text-highlight-hover{border-color:var(--highlight-border-hover);box-shadow:1px 1px 2px var(--highlight-comment-box-shadow);cursor:pointer;transition:box-shadow .2s ease-in-out,background-color .2s ease-in-out}.text-highlight-selected{border:solid 1px var(--highlight-border-selected)}@keyframes slideInFromBottom{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slideOutToBottom{0%{transform:translateY(0)}to{transform:translateY(100%)}}.text-highlight-comment>button.rth-close-button{background:0 0;background-color:var(--highlight-comment-bg);border:1px solid var(--highlight-border-hover);color:var(--highlight-text-color);font:inherit;cursor:pointer;border-radius:4px;outline:none;margin:2px 2px 0 auto;padding:.5em 1em;font-size:.75em;transition:background .2s,color .2s;display:none}@media screen and (max-width:985px){.text-highlight-comment>button.rth-close-button{display:block}}