:root{--ps-base:Canvas;--ps-ink:light-dark(#1d1d1f,#f2f2f4);--ps-panel:color-mix(in srgb, var(--ps-ink) 4%, var(--ps-base));--ps-hover:color-mix(in srgb, var(--ps-ink) 8%, var(--ps-base));--ps-canvas:color-mix(in srgb, var(--ps-ink) 9%, var(--ps-base));--ps-rule:color-mix(in srgb, var(--ps-ink) 15%, var(--ps-base));--ps-ink-dim:color-mix(in srgb, var(--ps-ink) 70%, var(--ps-base));--ps-code:light-dark(#f6f8fa,#24292e);--ps-brand:light-dark(#135be1,#7fadff);--ps-on-ink:#f4f5f6;--ps-scrim:#000;--ps-note:var(--ps-brand);--ps-tip:light-dark(#1a7f4b,#58c98a);--ps-important:light-dark(#7b2fe0,#c39bff);--ps-caution:light-dark(#b26a00,#e3a44a);--ps-warning:light-dark(#c0392b,#f28c7e);--ps-font:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ps-font-mono:"Roboto Mono", ui-monospace, "Cascadia Mono", "SF Mono", Menlo, monospace;--ps-font-math:"Euler Math", math;--ps-type:1.1;--ps-text:calc(1rem * var(--ps-type));--ps-small:calc(.875rem * var(--ps-type));--ps-lead:1.5;--ps-lead-tight:1.2;--ps-gap:1rem;--ps-gap-half:.5rem;--ps-block:1.5rem;--ps-section:2.5rem;--ps-measure:41.25rem;--ps-rail:15rem;--ps-pad:1.25rem;--ps-radius:6px}@media (width>=820px){:root{--ps-text:calc(1.0625rem * var(--ps-type));--ps-small:calc(.9375rem * var(--ps-type));--ps-pad:2rem}}@media (width<=659px){:root{--ps-pad:1rem;--ps-block:1.25rem;--ps-section:2rem}}@media (width>=1180px){:root{--ps-measure:51.25rem}}@media (width>=1280px){:root{--ps-measure:57.5rem;--ps-type:1.2}}:root{--ps-red:light-dark(#c33,#d55);--ps-wrap:calc(var(--ps-measure) + var(--ps-rail) + var(--ps-section));--ps-wide:87.5rem;--ps-abstract:calc(var(--ps-text) * 1.2);--ps-youtube:#f03;--ps-inlay:light-dark(#1d1d1f,color-mix(in srgb, var(--ps-ink) 10%, var(--ps-base)))}@font-face{font-family:Euler Math;src:url("/_/p/63tybpen31g4kz3.woff2")format("woff2");font-display:swap}@font-face{font-family:Roboto Mono;src:url("/_/5/tp9mchad8kb3c5b.woff2")format("woff2");font-weight:100 700;font-style:normal;font-display:swap}@font-face{font-family:Roboto Mono;src:url("/_/i/yut3b7g1tiuj3nr.woff2")format("woff2");font-weight:100 700;font-style:italic;font-display:swap}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;color-scheme:light dark}body{background:var(--ps-base);color:var(--ps-ink);font-family:var(--ps-font);font-size:var(--ps-text);line-height:var(--ps-lead);-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3{line-height:var(--ps-lead-tight);text-wrap:balance;margin:0}h1{font-weight:700}h2,h3,h4,h5,h6{font-weight:600}p,ul,ol,figure,table,pre{margin:0}a{color:var(--ps-brand);text-underline-offset:.15em;font-weight:500;text-decoration-thickness:1px;&:hover{text-decoration-thickness:2px}}:focus-visible{outline:2px solid var(--ps-brand);outline-offset:2px;border-radius:2px}img,svg,video{max-width:100%;height:auto}code,pre,kbd,samp{font-family:var(--ps-font-mono);font-size:.9em}table{border-collapse:collapse}.page{flex-direction:column;min-height:100vh;display:flex}.page-body{flex:1}.article-grid,.article-header{grid-template-columns:minmax(0, var(--ps-measure));justify-content:center;gap:0 var(--ps-section);padding:var(--ps-section) var(--ps-pad);display:grid}@media (width>=1180px){.article-grid,.article-header{grid-template-columns:2fr minmax(0, var(--ps-measure)) var(--ps-section) var(--ps-rail) 1fr;column-gap:0}.article-grid>.article{grid-column:2}.article-grid>.on-this-page{grid-column:4}.article-header>.inner{grid-column:2/5}}.on-this-page{top:var(--ps-section);font-size:var(--ps-small);color:var(--ps-ink-dim);max-height:calc(100vh - var(--ps-section) * 2);align-self:start;display:none;position:sticky;overflow-y:auto;& ul{margin:0;padding:0;list-style:none}& li{margin:0}& .level-3{padding-left:var(--ps-gap)}& a{padding:0 0 var(--ps-gap-half);line-height:var(--ps-lead-tight);color:color-mix(in srgb, var(--ps-brand) 55%, var(--ps-ink-dim));font-weight:400;text-decoration:none;display:block;&:hover{color:var(--ps-brand);text-decoration:underline}}}@media (width>=1180px){.on-this-page{display:block}}.site-footer{border-top:1px solid var(--ps-rule);background:var(--ps-panel);padding:var(--ps-section) var(--ps-pad);font-size:var(--ps-small);color:var(--ps-ink-dim);& .inner{max-width:calc(var(--ps-measure) + var(--ps-rail) + var(--ps-section));margin:0 auto}}.top-nav{z-index:10;border-bottom:1px solid var(--ps-rule);background:color-mix(in srgb, var(--ps-base) 72%, transparent);backdrop-filter:saturate(1.4)blur(12px);position:relative;.landing &{position:sticky;top:0}& .inner{align-items:center;gap:var(--ps-gap-half) var(--ps-gap);max-width:var(--ps-wrap);min-height:3.75rem;padding:var(--ps-gap-half) var(--ps-pad);grid-template-columns:1fr auto 1fr;margin:0 auto;display:grid}& .brand{color:var(--ps-ink);white-space:nowrap;grid-template-columns:auto auto;justify-self:start;font-size:1.75rem;text-decoration:none;display:inline-grid}& .brand-name,& .brand-dot{font-weight:600;line-height:1}& .brand-dot{color:var(--ps-red)}& .brand-strap{color:color-mix(in srgb, var(--ps-ink) 58%, var(--ps-base));grid-column:1;justify-content:space-between;margin-top:.3em;font-size:.285em;line-height:1;display:flex}& nav{justify-self:center}& nav ul{flex-wrap:wrap;justify-content:center;gap:2px .25rem;margin:0;padding:0;list-style:none;display:flex}& nav a{height:2rem;font-size:var(--ps-small);color:var(--ps-ink);text-underline-offset:.25em;white-space:nowrap;align-items:center;padding:0 .6rem;font-weight:500;text-decoration:none;display:inline-flex;&:hover{color:var(--ps-red);text-decoration:underline}&[aria-current=page]{font-weight:600}}& .top-nav-end{justify-self:end;align-items:center;gap:var(--ps-gap-half);display:flex}& .top-nav-action{border:1px solid var(--ps-red);height:2rem;color:var(--ps-red);font-size:var(--ps-small);white-space:nowrap;border-radius:.625rem;align-items:center;padding:0 1rem;font-weight:600;text-decoration:none;display:inline-flex;&:hover{background:var(--ps-red);color:var(--ps-base)}}&.searching{& .inner{grid-template-columns:auto 1fr auto}& nav{display:none}& .top-nav-end{display:contents}& .site-search{grid-area:1/2}& .top-nav-action{grid-area:1/3}& .site-search input{width:100%}}@media (width<=1179px){& .inner{grid-template-columns:1fr auto}& nav{grid-area:2/1/auto/-1}&.searching nav{display:block}}@media (width<=659px){& .brand{font-size:1.5rem}&:not(.searching) .site-search{&:before{left:50%;translate:-50% -50%}& input{width:2rem;padding:0;&::placeholder{color:#0000}}}&.searching{& nav{visibility:hidden}& .site-search{grid-area:2/1/auto/-1}}}}.site-search{align-items:center;display:flex;position:relative;&:before{content:"";background:var(--ps-ink-dim);pointer-events:none;width:.9rem;height:.9rem;position:absolute;top:50%;left:.75rem;translate:0 -50%;mask:url("/_/g/hjbzozzz4jm7wiq.svg") 50%/contain no-repeat}& input{border:1px solid var(--ps-rule);background:var(--ps-base);width:7rem;height:2rem;color:var(--ps-ink);font:inherit;font-size:var(--ps-small);border-radius:.625rem;padding:0 .75rem 0 2rem;&:focus-visible{border-color:var(--ps-red);outline:none}}& .results{z-index:20;border:1px solid var(--ps-rule);background:var(--ps-base);max-height:70vh;box-shadow:0 16px 48px color-mix(in srgb, var(--ps-scrim) 18%, transparent);border-radius:.75rem;margin:0;padding:.25rem;list-style:none;position:absolute;top:calc(100% + .5rem);left:0;right:0;overflow-y:auto;& a{color:var(--ps-ink);border-radius:.5rem;padding:.5rem .75rem;text-decoration:none;display:block;&:hover,&:focus-visible{background:color-mix(in srgb, var(--ps-brand) 10%, transparent);outline:none}& .hit{display:block}& .snippet{font-size:.875rem;line-height:var(--ps-lead-tight)}& .route{color:var(--ps-ink-dim);margin-top:.125rem;font-size:.8125rem;display:block}& mark{background:color-mix(in srgb, var(--ps-brand) 22%, transparent);color:inherit;border-radius:2px}}& .empty{color:var(--ps-ink-dim);padding:.5rem .75rem;display:block}}}.article{min-width:0;&>*+*{margin-top:var(--ps-block)}& h2,& h3{margin-top:var(--ps-section);scroll-margin-top:var(--ps-section)}&>[id]{scroll-margin-top:var(--ps-section)}& ::target-text{background:color-mix(in srgb, var(--ps-brand) 22%, transparent)}& ul,& ol{padding-left:1.5rem}& li+li{margin-top:var(--ps-gap-half)}& figure{& img,& svg{width:100%;height:auto;display:block}& img.screenshot{width:min(var(--shot,100%), 100%)}}& figcaption{margin-top:var(--ps-gap-half);color:var(--ps-ink-dim);font-size:var(--ps-small);text-align:left}& .code-block{border:1px solid var(--ps-rule);border-radius:var(--ps-radius);position:relative;overflow:hidden;& .code-copy{top:var(--ps-gap-half);right:var(--ps-gap-half);border:1px solid var(--ps-rule);border-radius:var(--ps-radius);background:var(--ps-base);color:var(--ps-ink-dim);font:inherit;font-size:var(--ps-small);cursor:pointer;opacity:0;padding:.2rem .5rem;line-height:1.4;transition:opacity .12s ease-out;position:absolute;&:hover{background:var(--ps-hover);color:var(--ps-ink)}}&:hover .code-copy,& .code-copy:focus-visible{opacity:1}@media (hover:none){& .code-copy{opacity:1}}& pre{padding:var(--ps-gap);line-height:var(--ps-lead-tight);overflow-x:auto;& code{font-size:inherit}}& .shiki{background-color:var(--ps-code)!important}@media (prefers-color-scheme:dark){& .shiki,& .shiki span{color:var(--shiki-dark)!important}}}& :not(pre)>code{background:var(--ps-code);border-radius:3px;padding:.1em .3em}& .markdown-alert{border-left:3px solid var(--accent);background:color-mix(in srgb, var(--accent) 6%, transparent);border-radius:var(--ps-radius);padding:var(--ps-gap);&>*+*{margin-top:var(--ps-gap-half)}@media (prefers-color-scheme:dark){background:color-mix(in srgb, var(--accent) 14%, transparent)}}& .markdown-alert-title{color:var(--accent);font-weight:600}& .markdown-alert-note{--accent:var(--ps-note)}& .markdown-alert-tip{--accent:var(--ps-tip)}& .markdown-alert-important{--accent:var(--ps-important)}& .markdown-alert-caution{--accent:var(--ps-caution)}& .markdown-alert-warning{--accent:var(--ps-warning)}& math{font-family:var(--ps-font-math)}& table{width:100%;font-size:var(--ps-small);& th,& td{border-bottom:1px solid var(--ps-rule);padding:var(--ps-gap-half);text-align:left;vertical-align:top}& th{font-weight:600}& tbody tr:hover{background:var(--ps-hover)}}& .table-scroll{overflow-x:auto}}.article-header{background:var(--ps-canvas) var(--splash,none) center / cover no-repeat;position:relative;& .inner{position:relative}& .abstract{margin-top:var(--ps-gap);color:var(--ps-ink-dim);font-size:calc(var(--ps-text) * 1.125);max-width:var(--ps-measure)}&.has-splash{color:var(--ps-on-ink);& .abstract{color:color-mix(in srgb, var(--ps-on-ink) 82%, transparent)}&:before{content:"";background:linear-gradient(to bottom, color-mix(in srgb, var(--ps-scrim) 35%, transparent), color-mix(in srgb, var(--ps-scrim) 65%, transparent));position:absolute;inset:0}@media (width<=659px){background-image:var(--splash-phone,var(--splash))}}}.code{border:1px solid var(--ps-rule);border-radius:var(--ps-radius);position:relative;overflow:hidden;& pre{padding:var(--ps-gap);line-height:var(--ps-lead-tight);overflow-x:auto;& code{font-size:inherit}}& .shiki{background-color:var(--ps-code)!important}@media (prefers-color-scheme:dark){& .shiki,& .shiki span{color:var(--shiki-dark)!important}}}.code-copy{top:var(--ps-gap-half);right:var(--ps-gap-half);border:1px solid var(--ps-rule);border-radius:var(--ps-radius);background:var(--ps-base);color:var(--ps-ink-dim);font:inherit;font-size:var(--ps-small);cursor:pointer;opacity:0;padding:.2rem .5rem;line-height:1.4;transition:opacity .12s ease-out;position:absolute;&:hover{background:var(--ps-hover);color:var(--ps-ink)}.code:hover &,&:focus-visible{opacity:1}@media (hover:none){opacity:1}}.article-header.has-splash{min-height:min(60vh,30rem);color:var(--ps-ink);align-content:end;&:before{content:none}}.article-header.splash-dark{color-scheme:dark}.article-header.splash-light{color-scheme:light}.article-header{--title-scale:1;& h1{font-size:calc(2em * 1.5 * var(--title-scale));font-weight:500}& .subtitle{margin-top:var(--ps-gap-half);font-size:calc(var(--ps-abstract) * 1.5 * var(--title-scale));line-height:var(--ps-lead-tight);text-wrap:balance}& :is(h1,.subtitle){overflow-wrap:break-word}}.ld-abstract{font-size:var(--ps-abstract);text-wrap:pretty}.landing-body{&>*+*{margin-top:0}}.landing-section{padding:var(--ps-section) var(--ps-pad);&>*+*{margin-top:var(--ps-block)}&>h1{letter-spacing:-.02em;text-align:center;font-size:clamp(1.75em,1em + 2.8vw,3.4em);line-height:1.05}&>.ld-abstract{margin-top:var(--ps-gap);font-size:calc(var(--ps-text) * 1.125);color:var(--ps-ink-dim);text-align:center}&>:is(p,ul,ol,h2,h3,h4,blockquote,.markdown-alert,.math):not(.ld-abstract){max-width:var(--ps-measure);margin-inline:auto}&>.cards{margin-top:var(--ps-section)}&[data-tone=dark]{--on:var(--ps-on-ink);--on-dim:color-mix(in srgb, var(--on) 78%, transparent);--on-rule:color-mix(in srgb, var(--on) 14%, transparent);background:var(--ps-inlay);color:var(--on);&>.ld-abstract{color:var(--on-dim)}& .card{border-color:var(--on-rule);background:color-mix(in srgb, var(--on) 7%, var(--ps-inlay));color:var(--on);& .card-name{color:var(--on)}&:hover{border-top-color:var(--ps-red)}&:hover .card-name{color:var(--ps-red)}& p{color:var(--on-dim)}& table{& :is(td,th){border-bottom-color:var(--on-rule)}& :is(td,th):first-child{color:var(--on-dim)}}}}}.cards{grid-template-columns:repeat(auto-fit, minmax(max(min(100%, 20rem), calc((100% - 2 * var(--ps-gap)) / 3)), 1fr));gap:var(--ps-gap);max-width:var(--ps-wide);margin-inline:auto;display:grid}.card{padding:0 var(--ps-block) var(--ps-block);border:1px solid var(--ps-rule);border-radius:var(--ps-radius);background:var(--ps-panel);color:var(--ps-ink);font-size:var(--ps-small);flex-direction:column;font-weight:400;text-decoration:none;display:flex;overflow:hidden;&:hover{border-top-color:var(--ps-red);box-shadow:inset 0 2px 0 var(--ps-red)}&>:is(p,figure):has(>:is(picture,img)){margin:0 calc(-1 * var(--ps-block));padding:0;& picture{display:contents}& img{width:100%;height:auto;display:block}}& .card-name{padding:var(--ps-block) 0 var(--ps-gap);font-size:1.75em;font-weight:700;line-height:var(--ps-lead-tight);color:var(--ps-ink)}&:hover .card-name{color:var(--ps-red)}& h3{margin-top:var(--ps-block);text-wrap:pretty;font-size:1.25em}& p{margin-top:var(--ps-gap-half);padding-bottom:var(--ps-gap);color:var(--ps-ink-dim);font-size:.9em}& table{margin-top:auto;font-size:.8em;& th{font-weight:400}& :is(td,th):first-child{color:var(--ps-ink-dim)}& :is(td,th):last-child{font-family:var(--ps-font-mono);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}& tbody tr:hover{background:0 0}}}.landing-section>table.specs{width:min(100%, var(--ps-measure));margin-inline:auto;& th[scope=row]{color:var(--ps-ink-dim);font-weight:400}& .specs-group th{padding-top:var(--ps-block);font-weight:600;&>:is(h2,h3){margin-top:0}}& .specs-group:hover{background:0 0}}.landing-body.product h2{font-size:clamp(calc(var(--ps-text) * 1.3), calc(var(--ps-text) * .6 + 1.6vw), calc(var(--ps-text) * 2));font-weight:600;line-height:1.15}.landing-body.product .landing-section>:is(p,figure):has(img,picture){max-width:75rem;margin-inline:auto;& picture{display:contents}& img{width:100%;height:auto;display:block}& img.screenshot{width:min(var(--shot,100%), 100%);margin-inline:auto}}.article .shelf{width:auto;font-size:var(--ps-small);font-variant-numeric:tabular-nums;margin-inline:auto;& th,& td{text-align:center;border-bottom:0;padding:.35em 1em}& thead th{color:var(--ps-ink-dim);font-weight:500}& .group th{padding-top:var(--ps-block);border-bottom:1px solid var(--ps-rule);text-align:left;font-weight:600}& tbody .group:first-child th{padding-top:var(--ps-gap-half)}& .kind{text-align:right;min-width:9em;color:var(--ps-ink-dim);font-weight:400}& tbody .group:hover{background:0 0}}.embed{aspect-ratio:16/9;border-radius:var(--ps-radius);background:var(--ps-inlay);display:block;position:relative;overflow:hidden;& picture{display:contents}& img,& iframe{border:0;width:100%;height:100%;display:block}& img{object-fit:cover;opacity:.82}& .play{background:var(--ps-youtube);color:#fff;cursor:pointer;border:0;border-radius:14px;place-items:center;width:68px;height:48px;padding:0;display:grid;position:absolute;top:50%;left:50%;translate:-50% -50%;& svg{fill:currentColor;width:1.25rem;height:1.5rem;margin-left:.2rem}&:hover{filter:brightness(1.1)}}& .embed-note{padding:var(--ps-gap-half) var(--ps-gap);background:color-mix(in srgb, var(--ps-inlay) 72%, transparent);color:var(--ps-on-ink);font-size:var(--ps-small);position:absolute;inset:auto 0 0}}.site-footer{--footer-text-2:color-mix(in srgb, var(--ps-ink) 78%, var(--ps-base));--footer-text-3:color-mix(in srgb, var(--ps-ink) 58%, var(--ps-base));--footer-text-dis:color-mix(in srgb, var(--ps-ink) 36%, var(--ps-base));& .footer-grid{gap:var(--ps-block) var(--ps-section);grid-template-columns:repeat(auto-fit,minmax(min(100%,9.5rem),auto));display:grid}& h4{margin:0 0 var(--ps-gap-half);letter-spacing:.06em;text-transform:uppercase;color:var(--footer-text-3);font-size:.75em}& ul{gap:var(--ps-gap-half);color:var(--footer-text-2);overflow-wrap:anywhere;padding:0;font-size:.9em;list-style:none;display:grid}& a{color:var(--footer-text-2);font-weight:400;text-decoration:none;&:hover{color:var(--ps-ink)}}& .footer-bottom{align-items:center;gap:var(--ps-gap);margin-top:var(--ps-block);padding-top:var(--ps-block);border-top:1px solid var(--ps-rule);font-family:var(--ps-font-mono);color:var(--footer-text-3);flex-wrap:wrap;font-size:.75em;display:flex}& .footer-build{color:var(--footer-text-dis);margin-left:auto}}.consent{--consent-text-2:color-mix(in srgb, var(--ps-ink) 78%, var(--ps-base));--consent-text-dis:color-mix(in srgb, var(--ps-ink) 36%, var(--ps-base));z-index:200;border-top:1px solid var(--ps-rule);background:var(--ps-panel);box-shadow:0 -8px 32px color-mix(in srgb, var(--ps-scrim) 12%, transparent);font-size:var(--ps-small);color:var(--consent-text-2);position:fixed;inset:auto 0 0;&[hidden]{display:none}& .consent-inner{align-items:center;gap:var(--ps-gap) var(--ps-section);max-width:var(--ps-wrap);padding:var(--ps-block) var(--ps-pad);flex-wrap:wrap;margin:0 auto;display:flex}& .consent-body{flex:999 30rem;min-width:0}& h2{margin:0 0 var(--ps-gap-half);color:var(--ps-ink);font-size:1.2em;font-weight:700}& p{max-width:62ch}& .consent-options{gap:var(--ps-gap-half) var(--ps-block);margin-top:var(--ps-gap);padding-top:var(--ps-gap);border-top:1px solid var(--ps-rule);flex-wrap:wrap;display:flex}& label{align-items:center;gap:var(--ps-gap-half);display:flex}& input{accent-color:var(--ps-brand);margin:0}& input[disabled]+span{color:var(--consent-text-dis)}& .consent-actions{flex-wrap:wrap;flex:auto;gap:.75rem;display:flex}& button{border:1px solid color-mix(in srgb, var(--ps-ink) 25%, var(--ps-base));border-radius:var(--ps-radius);height:2.625rem;color:var(--ps-ink);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;flex:1 0 auto;padding:0 1.25rem;&:hover{background:var(--ps-hover)}}& .consent-accept{border-color:var(--ps-brand);background:var(--ps-brand);color:var(--ps-base);font-weight:600;&:hover{background:color-mix(in srgb, var(--ps-brand) 88%, var(--ps-ink))}}}.empty{min-height:100dvh;padding:var(--ps-pad);text-align:center;flex-direction:column;justify-content:center;align-items:center;display:flex}.empty-logo{padding-bottom:4rem;font-size:1.5em;font-weight:600;& span{color:var(--ps-red)}}.empty-body{max-width:var(--ps-measure);& h1{padding-bottom:.25rem;font-size:2em}& p{text-wrap:pretty;font-size:1.2em}& p+p{margin-top:.75em}}