pre code.hljs{padding:1em;display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{color:#dcdcdc;background-color:#1e1e1e}.light .hljs{color:#1f1f1f;background-color:#f0f0f0}.hljs-keyword,.hljs-doctag,.hljs-literal,.hljs-name,.hljs-symbol,.hljs-link{color:#569cd6}.light .hljs-keyword,.light .hljs-doctag,.light .hljs-literal,.light .hljs-name,.light .hljs-symbol,.light .hljs-link{color:#00f}.hljs-link{text-decoration:underline}.hljs-built_in,.hljs-type,.hljs-title,.hljs-title.class_{color:#4ec9b0}.light .hljs-built_in,.light .hljs-type,.light .hljs-title,.light .hljs-title.class_{color:#267f99}.hljs-number{color:#b5cea8}.light .hljs-number{color:#098658}.hljs-comment{color:#6a9955}.light .hljs-comment{color:green}.hljs-meta .hljs-string,.hljs-string,.hljs-subst{color:#ce9178}.light .hljs-meta .hljs-string,.light .hljs-string,.light .hljs-subst{color:#a31515}.hljs-function,.hljs-params{color:#dcdcdc}.light .hljs-function,.light .hljs-params{color:#1f1f1f}.hljs-function .hljs-title,.hljs-title.function_{color:#dcdcaa}.light .hljs-function .hljs-title,.light .hljs-title.function_{color:#795e26}.hljs-attr,.hljs-variable,.hljs-property{color:#9cdcfe}.light .hljs-attr,.light .hljs-variable,.light .hljs-property{color:#3684dd}html{box-sizing:border-box}:root{color-scheme:dark;--main-bg:#262626;--text-color:#e0e0e0;--text-color-dim:#c9c9c9;--menu-bg:#181818;--highlight-color:#23e7e7;--highlight-color-emph:#6cefef;--outline-color:white;--menu-bg-highlight:#2a2d2e;--menu-bg-highlight-emph:#37373d;--code-bg:#1e1e1e;--code-color:#dcdcdc;--border-color:#3a3a3a;--section-nav-offset-color:#404040;--scroll-track-color:#1e1e1e;--scroll-thumb-color:#3f3f3f;--scroll-thumb-hover:#7b7b7b;--scroll-thumb-active:#a1a1a1;--sans-serif-font-family:-apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif;--code-font-family:Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace;font-family:var(--sans-serif-font-family);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;--menu-button-height:2em;--menu-button-padding:.5em;--menu-button-margin:.5em;--header-vpad:.25em;--header-height:calc(var(--menu-button-height) + 2 * var(--menu-button-margin) + 2 * var(--header-vpad));--btn-filter:invert(57%) sepia(33%) saturate(0%) hue-rotate(221deg) brightness(104%) contrast(91%);--btn-filter-highlight:invert(83%) sepia(25%) saturate(1367%) hue-rotate(124deg) brightness(95%) contrast(91%);--btn-filter-highlight-emp:invert(95%) sepia(42%) saturate(5883%) hue-rotate(149deg) brightness(107%) contrast(87%);--success-color:#00cb5e;--btn-filter-success:invert(50%) sepia(92%) saturate(1470%) hue-rotate(110deg) brightness(99%) contrast(101%);--large-size:1024px;--xl-size:1280px;--column-gap:1em;--patreon-dark-display:inline-block;--patreon-light-display:none}:root:has(body.light){color-scheme:light}.light{--main-bg:#fafafa;--text-color:black;--text-color-dim:#3a3a3a;--menu-bg:#e5e5e5;--highlight-color:#005fb8;--highlight-color-emph:#1f72c1;--menu-bg-highlight:#f2f2f2;--menu-bg-highlight-emph:#e4e6f1;--outline-color:black;--code-bg:#f0f0f0;--code-color:#1f1f1f;--border-color:#cfcfcf;--section-nav-offset-color:#d3d3d3;--scroll-track-color:#e0e0e0;--scroll-thumb-color:#c1c1c1;--scroll-thumb-hover:#a8a8a8;--scroll-thumb-active:#787878;--btn-filter:invert(34%) sepia(13%) saturate(0%) hue-rotate(215deg) brightness(102%) contrast(91%);--btn-filter-highlight:invert(22%) sepia(89%) saturate(2204%) hue-rotate(195deg) brightness(92%) contrast(102%);--btn-filter-highlight-emp:invert(31%) sepia(72%) saturate(1346%) hue-rotate(186deg) brightness(97%) contrast(86%);--patreon-dark-display:none;--patreon-light-display:inline-block}*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}html{height:100%}body{max-width:calc(4 / 5 * var(--large-size));background-color:var(--main-bg);min-height:100vh;color:var(--text-color);grid-template-rows:auto 1fr auto;margin:0 auto;display:grid;overflow-y:scroll;&.display-nav{overflow-y:hidden;& .page-header{top:0}& .site-menu{font-size:.95em;display:block}& .page-main,& .page-footer{visibility:hidden}}}pre,code{background-color:var(--code-bg);color:var(--code-color);font-family:Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;font-size:.95em}:not(pre)>code{padding:.05em .25em}span:has(span.katex-display){display:block;overflow-x:auto}a{color:var(--highlight-color);text-decoration:none;&:is(:focus-visible,:active){text-decoration:underline}&:active{color:var(--highlight-color-emph)}}blockquote{border-left:.25em solid var(--border-color);margin:1em 1.25em;padding:0 1.5em 0 .75em}section>:is(h2,h3){scroll-margin-top:var(--header-height)}.svg-button{height:var(--menu-button-height);margin:var(--menu-button-margin);padding:var(--menu-button-padding);font-family:var(--system-fonts);cursor:pointer;background:0 0;border:none;outline:none;font-size:1em}.svg-icon{pointer-events:none;height:100%;filter:var(--btn-filter)}:focus-visible{&:has(.svg-icon){outline:2px solid var(--outline-color)}&>.svg-icon{filter:var(--btn-filter-highlight);&.clicked-btn{filter:var(--btn-filter-success)}}}:active>.svg-icon{filter:var(--btn-filter-highlight-emp);&.clicked-btn{filter:var(--btn-filter-success)}}.dark-block{display:block}.light-block{display:none}.light{& .dark-block{display:none}& .light-block{display:block}}.dark-inline{display:inline}.light-inline{display:none}.light{& .dark-inline{display:none}& .light-inline{display:inline}}@keyframes showThenRemove{0%{opacity:1;visibility:visible}99%{opacity:1;visibility:visible}to{opacity:0;visibility:collapse}}@keyframes removeThenShow{0%{opacity:0;visibility:collapse}99%{opacity:0;visibility:collapse}to{opacity:1;visibility:visible}}.show-then-hide{animation:2s showThenRemove}.hide-then-show{animation:2s removeThenShow}.code-copy-btn{opacity:0;border-radius:.3125em;height:2em;margin:0;padding:.4em;position:absolute;top:.4em;right:.4em;&:focus-visible{opacity:1;outline:1.5px solid var(--highlight-color)}&:active{opacity:1;outline:1.5px solid var(--highlight-color-emph)}& .clicked-btn{top:calc(-1 * var(--menu-button-margin));left:calc(-1 * var(--menu-button-margin) - 2px);visibility:collapse;opacity:0;height:var(--menu-button-height);margin:var(--menu-button-margin);padding:var(--menu-button-padding);font-family:var(--system-fonts);filter:var(--btn-filter-success);background:0 0;border:none;outline:none;font-size:1em;position:absolute}}pre:has(.code-copy-btn){position:relative;&:hover .code-copy-btn{opacity:1;background-color:var(--code-bg);outline:1.5px solid var(--border-color);filter:drop-shadow(0 1px 2px #0006);&:focus-visible{outline:1.5px solid var(--highlight-color)}&:active{outline:1.5px solid var(--highlight-color-emph)}&.clicked-btn{filter:var(--btn-filter-success)}}}.site-menu{top:var(--header-height);width:100%;height:calc(100% - var(--header-height));background-color:var(--menu-bg);z-index:1;display:none;position:fixed;overflow-y:auto;& ol{margin:0;padding:0;list-style-type:none}& li{border-bottom:2px solid var(--border-color)}& a{color:var(--text-color);outline:none;width:100%;padding:1em;display:inline-block;&.return-link{text-align:center}&:focus-visible{background-color:var(--menu-bg-highlight);color:var(--highlight-color);text-decoration:none}&:active{background-color:var(--menu-bg-highlight-emph);color:var(--highlight-color-emph)}}}.site-menu-info{display:none}.page-header{padding:var(--header-vpad) 0;background-color:var(--main-bg);z-index:2;grid-template-columns:auto 1fr auto;justify-content:start;place-items:center start;width:100%;margin:0;display:grid;position:sticky;top:0;& h1{text-overflow:ellipsis;white-space:nowrap;width:100%;margin:0;overflow:hidden}}.header-shadow{box-shadow:0 -1px 3px 3px #0006}body:not(.display-nav):not(:has(.article-nav)) .header-shadow{&:before{content:"";background-color:var(--main-bg);width:10px;height:calc(var(--header-height) + 10px);z-index:5;position:fixed;inset:0 0 0 calc(50% - 420px)}&:after{content:"";background-color:var(--main-bg);width:10px;height:calc(var(--header-height) + 10px);z-index:5;position:fixed;right:calc(50% - 419px)}}body.display-nav:not(:has(.article-nav)) .header-shadow{&:after{content:"";background-color:var(--main-bg);width:10px;height:calc(var(--header-height) + 10px);z-index:5;position:fixed;right:calc(50% - 522px)}}body:not(.display-nav):has(.article-nav) .header-shadow{&:before{content:"";background-color:var(--main-bg);width:10px;height:calc(var(--header-height) + 10px);z-index:5;display:block;position:fixed;left:calc(50% - 522px)}&:after{content:"";background-color:var(--main-bg);width:10px;height:calc(var(--header-height) + 10px);z-index:5;display:block;position:fixed;right:calc(50% - 522px)}}body.display-nav:has(.article-nav) .header-shadow{&:after{content:"";background-color:var(--main-bg);width:10px;height:calc(var(--header-height) + 10px);z-index:5;display:block;position:fixed;right:calc(50% - 650px)}}.page-main{margin:0 0 1em;padding:0 1em}.katex{font-size:1.095em}.katex-display{margin-top:.5em;margin-bottom:.5em}.video{width:100%}nav.end-nav{flex-wrap:wrap;place-content:center space-between;align-items:center;margin:1em auto 0;display:flex}nav.end-nav:has(.end-nav-next:only-child){justify-content:flex-end}nav.end-nav{& a{text-decoration:none;& h4{color:var(--highlight-color);margin:0}& div{color:var(--text-color)}&:active>h4{color:var(--highlight-color-emph)}&:is(:focus-visible,:active)>h4{text-decoration:underline}}& .svg-icon{grid-row:1/3;height:1.2em}}.end-nav-prev,.end-nav-next{grid-template-columns:auto auto;align-items:center;column-gap:1em;padding:.25em .5em;display:grid}.end-nav-prev{justify-content:start;align-self:start;justify-items:start}.end-nav-next{text-align:right;justify-content:end;align-self:start;justify-items:end;& .svg-icon{grid-column:2}}.section-header-anchor{color:var(--text-color);text-decoration:none;&:focus-visible{text-decoration:none;&>.link-indicator{color:var(--highlight-color)}}&:active{color:var(--text-color);text-decoration:none;&>.link-indicator{color:var(--highlight-color-emph)}}}.link-indicator{color:var(--main-bg);-webkit-user-select:none;user-select:none}.middle-image{text-align:center;place-content:start;place-items:center;width:100%;margin:0 auto;display:grid;&>.image-caption{width:80%;margin-top:.25em;font-size:.9em}& img{margin:0 auto}}.text-list{& li{margin:.5em 0}& p{margin:.25em 0}}.alph-list{counter-reset:list;& li{counter-increment:list;list-style:none;&::marker{content:"(" counter(list, lower-alpha) ") "}}}.roman-list{counter-reset:list;& li{counter-increment:list;list-style:none;&::marker{content:"(" counter(list, lower-roman) ") "}}}.description-list{padding-left:0;list-style:none;& p:not(:first-child){margin-left:2em}}.theorem{font-style:italic}.theorem,.definition{background-color:var(--code-bg);padding:1em;& p:first-child{margin-top:0}& p:last-child{margin-bottom:0}}.theorem,.definition,.proof{margin-block:1em}.math-element-name{font-style:normal}.end-of-proof{position:relative;& .hidden-qed{visibility:hidden}& .inline-qed{position:absolute;right:0}}.block-qed{text-align:right}span:has(>span.katex-display)+.block-qed{margin-top:-1em}.article-nav{color:var(--text-color-dim);font-size:.95em;display:none}.page-footer{border-top:1px solid var(--border-color);text-align:center;padding:.5em 0 1em}.patreon-anchor{&:is(:focus-visible,:active){&>.patreon-logo-light,&>.patreon-logo-dark{display:none}&>.patreon-logo-highlight{display:inline-block}}&>img{display:var(--patreon-dark-display);height:.8em;padding-right:.2em}&>.patreon-logo-light{display:var(--patreon-light-display)}&>.patreon-logo-highlight{display:none}}.cc-image-link{text-align:center;margin:1em auto}@media (hover:hover){a:hover{text-decoration:underline}.article-nav a:hover{color:var(--highlight-color)}:hover>.svg-icon{filter:var(--btn-filter-highlight);&.clicked-btn{filter:var(--btn-filter-success)}}pre:has(.code-copy-btn):hover:not(:active) .code-copy-btn:hover{outline:1.5px solid var(--highlight-color)}.site-menu a:hover{background-color:var(--menu-bg-highlight);color:var(--highlight-color);text-decoration:none}nav.end-nav:hover>h4{text-decoration:underline}.section-header-anchor{&:hover{text-decoration:none;&>.link-indicator{color:var(--highlight-color)}&:active>.link-indicator{color:var(--highlight-color-emph)}}}:is(code,span:has(span.katex-display))::-webkit-scrollbar{height:.5rem}:is(.site-menu,.article-nav)::-webkit-scrollbar{width:.5rem}:is(code,.site-menu,.article-nav,span:has(span.katex-display))::-webkit-scrollbar-track{background-color:var(--scroll-track-color);border-radius:.5rem}:is(code,.site-menu,.article-nav,span:has(span.katex-display))::-webkit-scrollbar-thumb{background-color:var(--scroll-thumb-color);border-radius:.5rem}:is(code,.site-menu,.article-nav,span:has(span.katex-display))::-webkit-scrollbar-thumb:hover{background-color:var(--scroll-thumb-hover)}:is(code,.site-menu,.article-nav,span:has(span.katex-display))::-webkit-scrollbar-thumb:active{background-color:var(--scroll-thumb-active)}.patreon-anchor:hover{&>.patreon-logo-light,&>.patreon-logo-dark{display:none}&>.patreon-logo-highlight{display:inline-block}}}@media (width>=40em){body{column-gap:var(--column-gap)}.inline-code{white-space:nowrap}body.display-nav{grid-template-columns:1fr 3fr;overflow-y:scroll;& .page-header{padding-left:var(--column-gap);margin-left:calc(-1 * var(--column-gap));width:calc(100% + var(--column-gap))}& .site-menu{overscroll-behavior:contain;background-color:var(--main-bg);border-right:1px solid var(--border-color);height:100vh;color:var(--text-color-dim);z-index:3;grid-row:1/4;justify-self:stretch;position:sticky;top:0;& .return-link{box-sizing:border-box;width:calc(100% - 1em);margin:0 .5em 1em;padding:.25em .5em;display:block}&.hide-border{border-right:1px solid var(--main-bg)!important}& .site-menu-info{border-bottom:1px solid var(--border-color);margin:1em 1em 0;padding-bottom:.5em;display:block}& ol{padding:.5em}& li{border:none}& a{color:var(--text-color-dim);background-color:var(--main-bg);border:none;margin:.1em;padding:.25em .5em;&:focus-visible{outline:2px solid var(--outline-color);color:var(--highlight-color)}&:active{color:var(--highlight-color-emph)}}& .current-page-link{color:var(--highlight-color);font-weight:700}}& .page-header{grid-area:1/2/2/3}& .page-main{visibility:visible;grid-area:2/2/3/3}& .page-footer{visibility:visible;grid-area:3/2/4/3}}.page-footer{text-align:left;margin:0 1em}}@media (width>=40em) and (hover:hover){body.display-nav .site-menu a:hover{color:var(--highlight-color)}}@media (width>=48em){body.display-nav:not(:has(.article-nav)){max-width:var(--large-size)}body:has(.article-nav){max-width:var(--large-size);grid-template-columns:3fr 1fr;& .page-header{grid-area:1/1/2/3}& .page-main{grid-area:2/1/3/2}& .page-footer{grid-area:3/1/4/2}& .article-nav{height:min-content;max-height:calc(100vh - var(--header-height) - 1em);top:calc(1em + var(--header-height));background-color:var(--main-bg);border-left:1px solid var(--border-color);overscroll-behavior:contain;grid-area:2/2/4/3;margin-right:1em;display:block;position:sticky;overflow-y:auto;&>h4{margin:0 0 .5em 1em}&>ol{margin:0;padding:0;list-style-type:none;& li{margin:.5em 0}& a{border-left:2px solid var(--main-bg);width:100%;margin-left:0;padding:0 1em;text-decoration:none;display:inline-block;&:not(:hover){color:var(--text-color-dim)}&:focus-visible{outline:2px solid var(--outline-color);color:var(--highlight-color)}&:active{color:var(--highlight-color-emph)}&.selected-section-link{border-left:2px solid var(--highlight-color);color:var(--highlight-color)}}}}&.display-nav{max-width:var(--xl-size);grid-template-columns:1fr 3fr 1fr;& .page-header{grid-area:1/2/2/4}& .page-main{visibility:visible;grid-area:2/2/3/3}& .page-footer{visibility:visible;grid-area:3/2/4/3}& .article-nav{grid-column:3/4}}}}@media (prefers-reduced-motion:no-preference){.code-copy-btn{transition:opacity .2s}@keyframes showBriefly{0%{opacity:1;visibility:visible}67%{opacity:1;visibility:visible}to{opacity:0;visibility:collapse}}@keyframes removeBriefly{0%{opacity:0;visibility:collapse}67%{opacity:0;visibility:collapse}to{opacity:1;visibility:visible}}.show-then-hide{animation:2s showBriefly}.hide-then-show{animation:2s removeBriefly}}
