/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}html{box-sizing:border-box;font-family:sans-serif}*,:after,:before{box-sizing:inherit}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,p,pre{margin:0}button{background:transparent;border:0;padding:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}fieldset{border:0}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}.Article{font-size:18px;line-height:1.6;margin:0 1.5em}.Article-header{margin-bottom:3rem}.Article-meta{color:var(--muted-text);font-size:.8em;text-transform:uppercase;margin-bottom:1em;letter-spacing:1px;text-indent:2px}.Article-title{font-weight:400;font-size:2em;line-height:1.2;color:var(--heading-color);font-family:var(--font)}.Article-subtitle{font-size:1.2em;margin:.5em 0 0;color:var(--muted-text);font-weight:400}.Article-footer{border-top:1px solid var(--subtle);margin-top:2rem}.Article-social{display:block;margin-top:.6rem;font-size:.8em;color:var(--muted-text)}.Article-social:first-child{margin-top:2rem;font-size:1.1em}.Article-social:last-child{padding-bottom:1.5rem;border-bottom:1px solid var(--subtle)}.Article-social a{color:var(--accent)}.Article-social a:focus,.Article-social a:hover{color:var(--dark-accent);text-decoration:underline}.Article-social--twitter{display:table;width:100%}.Article-social--comments{margin:6em 0 0}.Article-twitter{display:table-cell;vertical-align:middle;width:1%}.Article-twitter--main{width:100%}.Article-back{position:absolute;top:0;transform:translateY(-2.5rem);opacity:.6;transition:opacity .2s ease-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.Article-back:focus,.Article-back:hover{opacity:1}.Article-readmo{position:relative;padding-bottom:.5rem;border-bottom:1px solid var(--subtle);margin-bottom:1rem;font-size:.8em;color:var(--muted-text);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:block}.Article-readmo:focus:before,.Article-readmo:hover:before{content:"🎶";position:absolute;left:0;bottom:.5em;color:transparent;text-shadow:0 0 0 var(--text-color);animation:Article-readmo-animation 4s infinite}@keyframes Article-readmo-animation{33%{opacity:1;transform:translateY(-50%) rotate(-20deg)}70%{opacity:0;transform:translateY(-150%) rotate(20deg)}to{opacity:0;transform:translateY(-150%) rotate(0deg)}}.Article-readmoIcon{color:transparent;text-shadow:0 0 0 var(--text-color)}.Article-readmoIconSpace{display:inline-block;width:.5em}.Article-spacer{border-bottom:1px solid var(--subtle);margin-bottom:1.5rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:block}@media (hover:none){.Article-back{opacity:1}}@media screen and (min-width:700px){.Article,.Article-social--comments{max-width:var(--screen-large-size);margin-right:auto;margin-left:auto}.Article-back{transform:translate(-2rem,2.8rem)}}.ArticleExcerpt{font-size:18px;margin:3em 1.5em 0}.ArticleExcerpt:first-child{margin-top:0}.ArticleExcerpt-title{line-height:2.2}.ArticleExcerpt-link{font-weight:400;letter-spacing:-1px;font-size:1.5em;line-height:1.1;color:var(--accent);font-family:var(--font)}.ArticleExcerpt-link:focus,.ArticleExcerpt-link:hover{color:var(--dark-accent);text-decoration:underline}.ArticleExcerpt-meta{color:var(--muted-text);font-size:.8em;font-weight:400;text-transform:uppercase;margin-bottom:1em;letter-spacing:1px;text-indent:2px}.ArticleExcerpt--section{margin-top:3em;padding-top:6em;position:relative}.ArticleExcerpt--section:before{content:"";display:block;width:2em;height:1px;background:var(--muted-text);position:absolute;top:0;left:0}@media screen and (min-width:700px){.ArticleExcerpt{max-width:var(--screen-large-size);margin-right:auto;margin-left:auto}}.Copy h2,.Copy h2 a,.Copy h2 a:focus,.Copy h2 a:hover,.Copy h3,.Copy h3 a,.Copy h3 a:focus,.Copy h3 a:hover,.Copy h4,.Copy h4 a,.Copy h4 a:focus,.Copy h4 a:hover,.Copy h5,.Copy h5 a,.Copy h5 a:focus,.Copy h5 a:hover,.Copy h6,.Copy h6 a,.Copy h6 a:focus,.Copy h6 a:hover{color:var(--heading-color);text-decoration:none;border-bottom:0}.Copy h2{font-size:1.5em;margin:1.5em 0 .5em;font-weight:400}.Copy h3{font-size:1.2em;font-weight:400;margin-top:1.5em;margin-bottom:1em}.Copy h4{font-size:1em;font-weight:600;margin-top:2em;margin-bottom:.5em;text-transform:uppercase;font-weight:400;color:var(--muted-text)}.Copy h1:target,.Copy h2:target,.Copy h3:target,.Copy h4:target,.Copy h5:target,.Copy h6:target{position:relative;padding-top:3rem}.Copy h1:target:before,.Copy h2:target:before,.Copy h3:target:before,.Copy h4:target:before,.Copy h5:target:before,.Copy h6:target:before{content:"→";position:absolute;right:100%;margin-right:.75rem;opacity:0;animation:highlight 3s ease-out}.Copy h1:target:after,.Copy h2:target:after,.Copy h3:target:after,.Copy h4:target:after,.Copy h5:target:after,.Copy h6:target:after{content:"";position:absolute;right:100%;line-height:0;width:2em;height:2em;background-color:currentColor;border-radius:100%;margin-right:-.1em;top:3rem;margin-top:-.15em;opacity:0;animation:highlightCircle 2s ease-out}@keyframes highlight{10%{opacity:.7}75%{opacity:.7}}@keyframes highlightCircle{10%{opacity:.15;transform:scale(1.5)}to{transform:scale(3)}}.Copy p+p{margin:1.5em 0 0}.Copy ol,.Copy ul{font-weight:600;margin:1.5em 0;padding:0;list-style-type:square}.Copy ol ol,.Copy ul ul{margin:.5em 0;padding-left:1.3em}.Copy li{font-weight:400;margin-bottom:.5em}.Copy li:focus,.Copy li:hover{list-style-type:disc}.Copy blockquote{border:0;margin:3em 0;padding:0;position:relative;font-style:italic}.Copy blockquote:before{content:"“";display:block;position:absolute;font-size:2em;left:-.5em;top:-.25em;line-height:1}.Copy blockquote:after{content:"";display:block;width:2em;height:1px;background:var(--muted-text);margin:1.5em 0}.Copy blockquote footer{margin-top:1.5em;font-size:.8em}@media screen and (min-width:700px){.Copy blockquote:before{left:-.75em}.Copy blockquote footer{position:absolute;right:0;top:100%;margin-top:-.7em;padding-left:3em}}.Copy .Tldr,.Copy .gist,.Copy figure,.Copy pre,.Copy-embedTestcase{margin:3em -1.5em}.Copy iframe,.Copy video{width:100%;border-radius:8px}.Copy iframe,.Copy video,.Copy-embedTweet{margin:3em auto}.Copy .Video{height:350px}.Copy video.Video{height:auto}.Copy-embedTweet .twitter-tweet,.Copy-embedTweet iframe,.Copy-embedTweet twitter-widget{margin:0 auto!important;filter:grayscale(1)}@media screen and (min-width:700px){.Copy .Tldr,.Copy .gist,.Copy figure,.Copy pre,.Copy-embedTestcase{margin:3em -2em}.Copy iframe,.Copy video{width:112%!important;margin:3em -6%}}.Copy figcaption{font-size:.8em;text-transform:uppercase;background:var(--subtle);padding:1em;border-radius:0 0 8px 8px}.Copy img{width:100%;display:block;border-radius:8px;box-shadow:0 2px 4px 1px var(--subtle)}.Copy .emoji{width:auto;display:inline}.Copy a{border-bottom:1px outset;color:var(--accent);transition:color .2s ease}.Copy a:focus,.Copy a:hover{color:var(--dark-accent);border-bottom:1px solid}.Copy code{border-radius:6px;vertical-align:baseline;padding:.15em .5em;font-size:.9em;font-family:Menlo,monospace;white-space:nowrap}.Copy code,.Copy pre{background-color:var(--subtle)}.Copy pre{position:relative;display:block;overflow-x:auto;padding:1rem 1.25rem;margin:3rem -.5rem 4rem;border-radius:8px;transition:box-shadow .2s ease-out}@media screen and (min-width:700px){.Copy pre{padding:2rem;margin:3rem -1.5rem 4rem}}.Copy pre code{display:block;border:0;border-radius:none;padding-left:0;white-space:inherit}@media screen and (min-width:700px){.Copy code[data-lang]:before{content:attr(data-lang);display:inline-block;position:absolute;top:0;right:0;padding:.5em 1em;background-color:rgba(0,0,0,.1);color:var(--text-color);font-size:.8em;opacity:1;transition:opacity .2s ease-out;line-height:1.2}.Copy pre:hover code[data-lang]:before{opacity:0}}.Copy hr{background-color:var(--subtle);height:1px;border:0;margin:1.5em 0}.Copy button{border:2px solid var(--text-color);display:inline-block;border-radius:3px;padding:.25em .5em;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin:1em 0 1.5em;color:var(--text-color)}.Copy button:hover{background-color:var(--text-color);color:var(--background-color)}.Copy button:active{transform:scale(.9)}.Form{display:block;width:100%}.Form label{display:block;font-size:.9em}.Form label+label{margin-top:1rem}.Form input,.Form select,.Form textarea{display:block;width:100%;margin-top:.5rem;background-color:var(--subtle);border-radius:6px;border:1px solid transparent;border-bottom:1px solid var(--text-color);font:inherit;color:var(--text-color);padding:.25rem .5rem}.Form textarea{min-height:7em;resize:vertical}.Nav{font-size:18px;line-height:1.4;margin:0 1.5rem}.Nav-group{display:block}.Nav-group+.Nav-group{margin-top:.5em}.Nav-link,.Nav-separator{font-family:var(--font)}.Nav-separator{margin:0 .25em}.Nav-link.is-active,.Nav-link:focus,.Nav-link:hover{color:var(--accent)}.Nav-link:focus,.Nav-link:hover{text-decoration:underline}.Nav-link.is-active{font-weight:500}.Nav-link--social{color:var(--muted-text)}.Nav-separator:after{content:"/"}.Nav--after{border-top:1px solid var(--subtle);margin-top:2rem;margin-bottom:4rem;padding-top:2rem}@media screen and (min-width:700px){.Nav{max-width:var(--screen-large-size);margin-right:auto;margin-left:auto}.Nav-link+.Nav-link{padding-left:.05em}.Nav-link--blog{width:100%}}.Screensaver{font-size:3rem;font-weight:700}.hljs{background:transparent;margin:0!important}.hljs .c{opacity:.6;font-style:italic}.hljs-string{font-weight:700}.hljs-subst,.hljs-tag .hljs-string{font-weight:400}.hljs .k{opacity:.8}.hljs-keyword{opacity:.55}.hljs-operator{font-style:italic}.hljs .c1,.hljs-comment{opacity:.6;font-style:italic}.hljs .gd{opacity:.6;background-color:#fdd}.hljs-deletion{background-color:#faa}.hljs .ge{font-style:italic}.hljs .gi{background-color:#ddffdd}.hljs .gi .x{background-color:#aaffaa}.hljs-meta.prompt_{font-weight:700}.hljs .kc{font-weight:700}.hljs .kp,.hljs .kr,.hljs-built_in,.hljs-symbol{opacity:.8}.hljs .kt{font-weight:700}.hljs .nx{color:var(--accent)}.hljs .nb{font-style:italic}.hljs .nc{font-weight:700}.hljs .ne,.hljs .nf{font-weight:700}.hljs .ow{font-weight:700}.hljs .s2{font-weight:700}.hljs .s1{font-weight:700}.Note{border:1px solid var(--muted-text);border-radius:8px;padding:1rem}.Note--center{font-weight:700;text-align:center}.u-visuallyHidden{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);padding:0!important;border:0!important;height:1px!important;width:1px!important;overflow:hidden}*,:after,:before{box-sizing:border-box}::-moz-selection{background-color:var(--text-color);color:var(--background-color)}::selection{background-color:var(--text-color);color:var(--background-color)}body{margin:0;padding:0;font-family:var(--font);color:var(--text-color);font-size:18px;background-color:var(--background-color)}h1,h2,h3,h4,h5,h6{text-rendering:optimizelegibility}h1,h2,h3,h4,h5,h6,p{margin:0;font-size:1em}a{color:inherit;text-decoration:none}:focus:not(:focus-visible){outline:none}main{position:relative;margin:4rem auto 2rem}iframe{border:0}video{background-color:#000}.HireMe{display:block;padding:1em 0;text-transform:uppercase;font-size:.7em;font-weight:700}:root{--font:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--background-color:#fcfcfd;--text-color:#222;--muted-text:#6b7280;--heading-color:#222;--accent:#000;--dark-accent:#000;--subtle:#f3f3f3;--screen-large-size:678px}.dark{--background-color:#21272d;--text-color:#dfdedd;--muted-text:#d7cdcd;--heading-color:#efefee;--accent:#f5f5f5;--dark-accent:#fff;--subtle:#f1f2f3}@media (prefers-color-scheme:dark){html body{--background-color:#21272d;--text-color:#dfdedd;--muted-text:#d7cdcd;--heading-color:#efefee;--accent:#f5f5f5;--dark-accent:#fff;--subtle:#393f45}}