@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/ba9851c3c22cd980-s.woff2) format("woff2");unicode-range:u+0460-052f,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(/_next/static/media/21350d82a1f187e9-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/c5fe6dc8356a8c31-s.woff2) format("woff2");unicode-range:u+1f??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/19cfc7226ec3afaa-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/df0a9ae256c0569c-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/8e9860b6e62d6359-s.woff2) format("woff2");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-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_next/static/media/e4af272ccee01ff0-s.p.woff2) format("woff2");unicode-range:u+00??,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-face{font-family:Inter Fallback;src:local("Arial");ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.00%;size-adjust:107.12%}.__className_f367f3{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:#ff9900;--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);line-height:1.75;--column-width:1100px}pre,pre:hover{white-space:pre-wrap;word-break:break-word}pre code{display:block;overflow-x:auto;white-space:pre-wrap!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:rgb(235,201,122);--color-warn-secondary:#3c2301;--color-info-primary:#00a8f5;--color-info-contrast:rgb(253,253,253);--color-info-secondary:#033248;--color-action-primary:#9966ff;--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);margin:.5em auto;padding:2em;box-shadow:2px 2px 2px var(--color-foreground-highlight)}#page-opensource{a{font-weight:700}li{margin-bottom:1em}}.icon-links{align-items:center;align-self:flex-start;display:flex;gap:.5em;svg{path{fill:white;stroke:white}}}.demo-frame{background-color:var(--color-background-darken);margin:1em;padding:1em;border-radius:1em;.demo-frame-title{font-size:.8em;border:1px solid var(--color-foreground-darken);border-radius:1em;display:inline-block;padding:0 1em}.demo-frame-content{background-color:var(--color-background-darken);padding:1em;border-radius:1em}.demo-frame-description{font-size:.85em;margin:.5em 0;padding:.25em 1em;border-radius:1em}}.code-example-link{font-size:.9em;&,&:visited{font-weight:700;margin-left:1em;margin-bottom:2em;display:block}}.sheep-image-wrapper{&.force-light{background:unset}&.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){background:radial-gradient(circle,black 60%,var(--color-background-paper) 68%,#ddffdd50 69%,var(--color-background-paper) 70%);.light{display:none}.dark{display:block}}@media (prefers-color-scheme:light){.dark{display:none}}width:200px;height:200px;display:flex;justify-content:center;align-items:center;img{object-fit:contain;left:25%;height:60%;width:60%}}.slim{max-width:800px;margin:0 auto}.main{max-width:600px;display:block;margin:50px auto;border:1px solid var(--color-foreground-darken);border-radius:.25em;padding:2em;h1{text-align:center}}.section-break{margin-top:5em}h1{margin-bottom:0}h1+.date-published{margin-top:0;margin-bottom:3em;margin-left:1em;color:var(--color-foreground-secondary);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;display:block;margin:3em auto}.error-page a{display:block;margin:0 auto;font-size:1.5em}.error-page a,.open-source{text-align:center}details{padding:1.5em 1.5em 1em;margin-bottom:.25em;background-color:var(--color-background-darken);border:1px solid var(--color-foreground-darken)}summary{>*{display:inline}}body{background-color:var(--color-background-deep);font-family:Open Sans;margin:0}header{background-color:var(--color-background-impact);padding:.5em;font-size:1.5em}.header-flex-container{display:flex;flex-flow:row wrap;justify-content:space-between;max-width:var(--column-width);margin:0 auto}header .title{display:block;margin-bottom:1em}header{a,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:1 0 100%;font-family:monospace;display:flex;flex-flow:row wrap;gap:1em;.active{font-weight:700}}.tags-panel{ul{display:flex;flex-flow:row wrap;justify-content:space-between}li{display:block;flex-basis:50%;font-weight:700}}.logo-container{width:100px;height:100px}.logo-container>img{object-fit:contain;height:100%;width:100%;object-position:0 -1px}.headline{display:flex;flex-flow:column;align-items:center;margin-bottom:3em}.edit-with-github{text-align:right}a,a:hover{color:var(--color-foreground-paper)}.game-of-life-cell{width:20px;height:20px;border:1px solid var(--color-foreground-paper)}.game-of-life-cell:hover{cursor:pointer}.game-of-life-row{display:flex;flex-flow:row nowrap}.game-of-life-cell.live{background-color:green}.game-of-life-cell.dead{background-color:grey}img{object-fit:contain}.blog-image{max-width:100%;display:block;margin:0 auto}.invert-colors-on-dark{@media (prefers-color-scheme: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:1px solid var(--color-background-paper-secondary);background-color:var(--color-background-lighten);padding:1em;margin:1em;display:block;text-decoration:none}.homepage-article-link-title{text-decoration:underline;font-weight:700;margin-bottom:0}.series-box{border:1px solid 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;padding:1em;margin:.5em 0;font-size:.8em}.infopanel-instruction{background-color:var(--color-background-darken);border-color:var(--color-instruction-secondary);margin:0 1em;.icon{color:var(--color-instruction-primary)}}.infopanel-warning{a{color:var(--color-warn-contrast)}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)}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{margin:0 0 .25em;border:0 solid transparent;padding:0}li:has(>a){margin:.5em 0}.series-box{padding:0;border:solid var(--color-foreground-border);border-width:0 0 1px}.series-box>p{margin-top:0}.homepage-article-link{margin:.5em 0}}.date-published{font-size:.75em}.next-post{border:2px solid var(--color-foreground-paper);padding:2em;border-radius:1em;font-size:1.2em;margin:2em 0}#comments:focus{border:2px solid #aaf;border-radius:.2em}.aside{width:300px;margin:1em;border:1px solid var(--color-foreground-border);border-radius:.5em;padding:20px;background-color:var(--color-background-paper-secondary);font-size:.75em;position:relative;float:right;box-shadow:2px 2px 2px var(--color-foreground-border)}.aside .triangle{border-left:10px solid var(--color-foreground-border);border-top:10px solid var(--color-foreground-border);right:-21px;top:6px;z-index:2}.aside .triangle,.aside .triangle:after{width:0;height:0;position:absolute;border-right:10px solid transparent;border-bottom:10px solid transparent}.aside .triangle:after{content:"";border-left:10px solid var(--color-background-paper-secondary);border-top:10px solid var(--color-background-paper-secondary);right:-5px;top:-8px}.clear-right{clear:right}.tooltip-container svg{display:block!important}.image-panel{display:flex;flex-flow:row wrap;justify-content:space-around;background-color:var(--color-background-paper-secondary);border:1px solid var(--color-foreground-border);border-radius:.25em;padding:.25em;.image-panel-single{background-color:var(--color-background-paper);padding:1em;border:1px solid var(--color-background-paper-secondary);border-radius:.25em}.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:rgb(31,35,40);--rgp-color-bg-frame:rgb(246,248,250);--rgp-color-text-frame:rgb(101,109,118);--rgp-color-border:rgb(208,215,222);--rgp-color-issuenumber:rgb(101,109,118);--rgp-color-file-link:rgb(9,105,218);--rgp-color-commit-link:rgb(31,35,40);--rgp-color-status-foreground:white;--rgp-color-status-open:rgb(31,136,61);--rgp-color-status-closed:rgb(130,80,223);--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:rgb(29,31,33);--rgp-color-text-stark:rgb(230,237,243);--rgp-color-bg-frame:rgb(22,27,34);--rgp-color-text-frame:rgb(141,150,160);--rgp-color-border:rgb(48,54,61);--rgp-color-issuenumber:rgb(101,109,118);--rgp-color-file-link:rgb(68,147,248);--rgp-color-commit-link:rgb(230,237,243);--rgp-color-status-foreground:white;--rgp-color-status-open:#238636;--rgp-color-status-closed:rgb(130,80,223);--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:1px solid var(--rgp-color-text-frame);border-radius:2px;background-color:var(--rgp-color-bg-stark);font-family:monospace;padding:0 .25em;margin:0 .25em;.github-logo{position:relative;top:.1em;width:.9em;height:.9em}}.rgp-base{pre+.hide-line-numbers{margin-top:-1em}.hide-line-numbers+pre{margin-top:0}.hide-line-numbers{margin:0}.hide-line-numbers .linenumber{visibility:hidden}}svg.github-logo{fill:var(--rgp-color-commit-link)}.react-github-issuelink .react-github-issuelink-body{font-size:16px;color:var(--rgp-color-text-stark);display:flex;flex-flow:row nowrap;justify-content:space-between;align-items:center;text-decoration:none}.react-github-issuelink-body p{margin:0}.react-github-issuelink a{text-decoration:none;color:inherit}.react-github-issuelink a:hover .react-github-issuelink-number,.react-github-issuelink a:hover .react-github-issuelink-title{text-decoration:underline}.react-github-issuelink-number{color:var(--rgp-color-issuenumber)}.react-github-issuelink-repo{font-size:12px;font-weight:700;display:flex;flex-flow:row nowrap;align-items:center;gap:.75em;text-decoration:underline}.react-github-issuelink-status{color:var(--rgp-color-status-foreground);fill:var(--rgp-color-status-foreground);font-size:.75em;padding:0 10px;border-radius:2em;font-weight:500;line-height:24px;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between;gap:.6em}.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-issuelink,.react-github-permalink{border:1px solid var(--rgp-color-border);margin:.5em;font-size:12px;border-radius:4px;text-align:left;background-color:var(--rgp-color-bg-stark)}.react-github-permalink,.react-github-permalink .header{border-color:var(--rgp-color-border);border-style:solid;border-width:1px}.react-github-permalink .header{display:flex;flex-flow:row nowrap;gap:.75em;align-items:center}.copy-button-container{.tooltip-container{position:relative;anchor-name:--tooltip-anchor}.tooltip-content{position:absolute;top:-14px;left:-26px;background-color:var(--rgp-color-tooltip-bg);transition-property:opacity;transition-duration:.25s;opacity:1;@starting-style{opacity:0}@supports(position-anchor:--tooltip-anchor){position:fixed;position-anchor:--tooltip-anchor;top:unset;left:unset;bottom:anchor(top);justify-self:anchor-center;margin-left:3px;margin-bottom:3px;margin-right:3px;margin-top:3px}height:12px;white-space:nowrap;border-radius:2px;color:var(--rgp-color-text-stark);box-shadow:2px 2px 2px var(--rgp-color-bg-stark);font-size:11px;padding:.5em .75em}.tooltip-target[popover]{overlay:none!important;display:none}.tooltip-target[popover]:popover-open+.tooltip-content{display:block}.tooltip-target[popover]+.tooltip-content{display:none}button{all:unset;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;margin:0;box-shadow:none;text-align:inherit;font:inherit;color:inherit;cursor:pointer;background-color:var(--rgp-color-button-background);border:1px solid var(--rgp-color-button-border);padding:.5em;border-radius:.25em;color:var(--rgp-color-button-text);&.clicked{color:var(--rgp-color-button-text-success)}svg{fill:currentColor}&:hover{background-color:var(--rgp-color-button-background-hover)}}}.react-github-issuelink .header,.react-github-permalink .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;.link-wrapper{min-width:0;overflow:hidden;flex:1 1 auto;a{text-overflow:ellipsis;overflow:hidden;display:block}}}.react-github-issuelink .error,.react-github-permalink .error{font-weight:700;color:var(--rgp-color-status-error);margin-left:1em}.reaction-bar{font-size:.8em;margin-top:.5em}.reaction-value{color:var(--rgp-color-reaction-foreground);background-color:var(--rgp-color-reaction-background);border:1px solid var(--rgp-color-reaction-foreground);border-radius:100px;display:inline-block;margin-right:.75em;padding:.25em;span{margin:0 2px}}:root{--highlight-bg-color:#fde05f;--highlight-text-color:#000000;--highlight-bg-color-hover:#fde05f;--highlight-border-hover:rgb(186,151,105);--highlight-border-selected:rgb(225,139,25);--highlight-comment-box-shadow:rgba(0,0,0,0.2);--highlight-comment-bg:#f6e69c}.page-with-margins{display:flex;flex-flow:row nowrap;gap:6px;.main-column{flex:0 1 var(--column-width)}.left-gutter{flex:1 1 auto}}.right-gutter{display:flex;flex-direction:column;flex-wrap:nowrap;flex:1 1 auto;@media screen and (max-width:985px){display:block;position:fixed;bottom:0;left:0;right:0}}@media (prefers-color-scheme:dark){:root{--highlight-bg-color:#4a4b80;--highlight-text-color:#fff;--highlight-bg-color-hover:#4a4b80;--highlight-border-hover:#5b5f99;--highlight-border-selected:#9178e2;--highlight-comment-box-shadow:rgba(0,0,0,0.2);--highlight-comment-bg:#223253}}.text-highlight{background-color:var(--highlight-bg-color);color:var(--highlight-text-color);border:1px solid transparent}.text-highlight-comment{background-color:var(--highlight-comment-bg);color:var(--highlight-text-color);box-sizing:border-box;margin:2px;padding:1em;font-size:.75em;max-width:400px;border:1px solid transparent;@media screen and (max-width:985px){max-width:100%;margin-left:0;margin-right:0;padding-left:1em;padding-bottom:1em;padding-right:1em;padding-top:1em;&.text-highlight-selected{display:block;transition-duration:1s;animation:slideInFromBottom .1s ease-out 0s 1}&.text-highlight-selected,&:not(.text-highlight-selected){transition-property:display;transition-behavior:allow-discrete}&:not(.text-highlight-selected){animation:slideOutToBottom .1s ease-out 0s 1;display:none;transition-duration:.1s}}}.text-highlight-hover{border-color:var(--highlight-border-hover);box-shadow:1px 1px 2px var(--highlight-comment-box-shadow);transition:box-shadow .2s ease-in-out,background-color .2s ease-in-out;cursor:pointer}.text-highlight-selected{border:1px solid 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{display:none;margin:2px 2px 0 auto;background:none;background-color:var(--highlight-comment-bg);border:1px solid var(--highlight-border-hover);border-radius:4px;padding:.5em 1em;color:var(--highlight-text-color);font:inherit;font-size:.75em;cursor:pointer;outline:none;transition:background .2s,color .2s;@media screen and (max-width:985px){display:block}}