diff --git a/404.html b/404.html index 8e9a758af4..043457fbf5 100644 --- a/404.html +++ b/404.html @@ -6,7 +6,7 @@ 404 | The JavaScript Oxidation Compiler - + @@ -33,7 +33,7 @@
- + \ No newline at end of file diff --git a/assets/blog_2023-12-12-announcing-oxlint.md.B7YEH3U0.js b/assets/blog_2023-12-12-announcing-oxlint.md.BXiLLf5F.js similarity index 92% rename from assets/blog_2023-12-12-announcing-oxlint.md.B7YEH3U0.js rename to assets/blog_2023-12-12-announcing-oxlint.md.BXiLLf5F.js index b4d46b4974..f5e208b72e 100644 --- a/assets/blog_2023-12-12-announcing-oxlint.md.B7YEH3U0.js +++ b/assets/blog_2023-12-12-announcing-oxlint.md.BXiLLf5F.js @@ -1 +1 @@ -import{_ as t,c as a,I as i,a3 as s,o as n,E as o}from"./chunks/framework.Bg3dKMxI.js";const k=JSON.parse('{"title":"Oxlint General Availability","description":"","frontmatter":{"title":"Oxlint General Availability","outline":"deep","authors":["boshen"]},"headers":[],"relativePath":"blog/2023-12-12-announcing-oxlint.md","filePath":"blog/2023-12-12-announcing-oxlint.md"}'),r={name:"blog/2023-12-12-announcing-oxlint.md"},l=s('

We are thrilled to announce that oxlint is now generally available! This milestone signifies our team's ability to promptly address and triage issues.

Oxlint is a JavaScript linter designed to catch erroneous or useless code without requiring any configurations by default.

How to Use

At this stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

For faster feedback loops, we recommend running oxlint before ESLint in your lint-staged or CI setup, considering it only takes a few seconds to run on large codebases.

To test oxlint in your JavaScript / TypeScript codebase, simply execute the following command at the root directory of your repository:

sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
sh
$ bunx oxlint@latest
sh
$ deno run npm:oxlint@latest

Alternatively, refer to the installation guide for detailed instructions.

Design

50-100 Times Faster than ESLint

In real-world scenarios, Shopify reported that their 75 CI minutes ESLint run is now only 10 seconds.

From Jason Miller, Shopify DX and creator of Preact:

oxlint has been a massive win for us at Shopify. Our previous linting setup took 75 minutes to run, so we were fanning it out across 40+ workers in CI.

By comparison, oxlint takes around 10 seconds to lint the same codebase on a single worker, and the output is easier to interpret.

We even caught a few bugs that were hidden or skipped by our old setup when we migrated!

The majority of the performance gains stem from Oxlint being purposefully designed for performance, utilizing Rust and parallel processing as key factors.

Lint for Correctness

Oxlint defaults to identifying erroneous, redundant, or confusing code — prioritizing correctness over unnecessary nitpicking rules (categorized as perf, suspicious, pedantic, or style), which are disabled by default.

Ease of Use

Setting up new JavaScript / TypeScript codebases is becoming increasingly complex. There's a high likelihood of encountering compatibility issues among your tools, potentially resulting in hours of wasted time.

That's why we designed oxlint to be zero-config out of the box; even Node.js is not a requirement. Most adjustments can be made through the command-line, and reading from ESLint configuration file is currently work in progress.

Enhanced Diagnostics

Understanding linter messages can be challenging. Oxlint aims to simplify this by pinpointing root causes and providing helpful messages — eliminating the need for lengthy rule documentation reading, saving valuable time.

Running oxlint -D perf in the vscode repository:

Consolidated Rules

Oxlint does not provide a plugin system yet, but we are actively consolidating rules from popular plugins like TypeScript, React, Jest, Unicorn, JSX-a11y and Import.

We recognize the importance of plugins in the JavaScript ecosystem and are also investigating a DSL-based plugin system.

However, you might appreciate a standalone linter — no need to manage a list of plugin dependencies, navigate through compatibility issues, or resort to forked plugins due to version constraints.


Happy linting and have a joyful holiday season!

To get started, follow the installation guide, learn more about the oxc project, or discuss on Hacker News.

',30);function p(d,h,c,u,g,b){const e=o("AppBlogPostHeader");return n(),a("div",null,[i(e),l])}const y=t(r,[["render",p]]);export{k as __pageData,y as default}; +import{_ as t,c as a,I as i,a3 as s,o as n,E as o}from"./chunks/framework.Bg3dKMxI.js";const k=JSON.parse('{"title":"Oxlint General Availability","description":"","frontmatter":{"title":"Oxlint General Availability","outline":"deep","authors":["boshen"]},"headers":[],"relativePath":"blog/2023-12-12-announcing-oxlint.md","filePath":"blog/2023-12-12-announcing-oxlint.md"}'),r={name:"blog/2023-12-12-announcing-oxlint.md"},l=s('

We are thrilled to announce that oxlint is now generally available! This milestone signifies our team's ability to promptly address and triage issues.

Oxlint is a JavaScript linter designed to catch erroneous or useless code without requiring any configurations by default.

How to Use

At this stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

For faster feedback loops, we recommend running oxlint before ESLint in your lint-staged or CI setup, considering it only takes a few seconds to run on large codebases.

To test oxlint in your JavaScript / TypeScript codebase, simply execute the following command at the root directory of your repository:

sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
sh
$ bunx oxlint@latest
sh
$ deno run npm:oxlint@latest

Alternatively, refer to the installation guide for detailed instructions.

Design

50-100 Times Faster than ESLint

In real-world scenarios, Shopify reported that their 75 CI minutes ESLint run is now only 10 seconds.

From Jason Miller, Shopify DX and creator of Preact:

oxlint has been a massive win for us at Shopify. Our previous linting setup took 75 minutes to run, so we were fanning it out across 40+ workers in CI.

By comparison, oxlint takes around 10 seconds to lint the same codebase on a single worker, and the output is easier to interpret.

We even caught a few bugs that were hidden or skipped by our old setup when we migrated!

The majority of the performance gains stem from Oxlint being purposefully designed for performance, utilizing Rust and parallel processing as key factors.

Lint for Correctness

Oxlint defaults to identifying erroneous, redundant, or confusing code — prioritizing correctness over unnecessary nitpicking rules (categorized as perf, suspicious, pedantic, or style), which are disabled by default.

Ease of Use

Setting up new JavaScript / TypeScript codebases is becoming increasingly complex. There's a high likelihood of encountering compatibility issues among your tools, potentially resulting in hours of wasted time.

That's why we designed oxlint to be zero-config out of the box; even Node.js is not a requirement. Most adjustments can be made through the command-line, and reading from ESLint configuration file is currently work in progress.

Enhanced Diagnostics

Understanding linter messages can be challenging. Oxlint aims to simplify this by pinpointing root causes and providing helpful messages — eliminating the need for lengthy rule documentation reading, saving valuable time.

Running oxlint -D perf in the vscode repository:

Consolidated Rules

Oxlint does not provide a plugin system yet, but we are actively consolidating rules from popular plugins like TypeScript, React, Jest, Unicorn, JSX-a11y and Import.

We recognize the importance of plugins in the JavaScript ecosystem and are also investigating a DSL-based plugin system.

However, you might appreciate a standalone linter — no need to manage a list of plugin dependencies, navigate through compatibility issues, or resort to forked plugins due to version constraints.


Happy linting and have a joyful holiday season!

To get started, follow the installation guide, learn more about the oxc project, or discuss on Hacker News.

',30);function p(d,h,c,u,g,b){const e=o("AppBlogPostHeader");return n(),a("div",null,[i(e),l])}const f=t(r,[["render",p]]);export{k as __pageData,f as default}; diff --git a/assets/blog_2023-12-12-announcing-oxlint.md.B7YEH3U0.lean.js b/assets/blog_2023-12-12-announcing-oxlint.md.BXiLLf5F.lean.js similarity index 89% rename from assets/blog_2023-12-12-announcing-oxlint.md.B7YEH3U0.lean.js rename to assets/blog_2023-12-12-announcing-oxlint.md.BXiLLf5F.lean.js index 3302b745db..00978c8786 100644 --- a/assets/blog_2023-12-12-announcing-oxlint.md.B7YEH3U0.lean.js +++ b/assets/blog_2023-12-12-announcing-oxlint.md.BXiLLf5F.lean.js @@ -1 +1 @@ -import{_ as t,c as a,I as i,a3 as s,o as n,E as o}from"./chunks/framework.Bg3dKMxI.js";const k=JSON.parse('{"title":"Oxlint General Availability","description":"","frontmatter":{"title":"Oxlint General Availability","outline":"deep","authors":["boshen"]},"headers":[],"relativePath":"blog/2023-12-12-announcing-oxlint.md","filePath":"blog/2023-12-12-announcing-oxlint.md"}'),r={name:"blog/2023-12-12-announcing-oxlint.md"},l=s("",30);function p(d,h,c,u,g,b){const e=o("AppBlogPostHeader");return n(),a("div",null,[i(e),l])}const y=t(r,[["render",p]]);export{k as __pageData,y as default}; +import{_ as t,c as a,I as i,a3 as s,o as n,E as o}from"./chunks/framework.Bg3dKMxI.js";const k=JSON.parse('{"title":"Oxlint General Availability","description":"","frontmatter":{"title":"Oxlint General Availability","outline":"deep","authors":["boshen"]},"headers":[],"relativePath":"blog/2023-12-12-announcing-oxlint.md","filePath":"blog/2023-12-12-announcing-oxlint.md"}'),r={name:"blog/2023-12-12-announcing-oxlint.md"},l=s("",30);function p(d,h,c,u,g,b){const e=o("AppBlogPostHeader");return n(),a("div",null,[i(e),l])}const f=t(r,[["render",p]]);export{k as __pageData,f as default}; diff --git a/assets/docs_guide_usage_linter.md.BKec6KC0.js b/assets/docs_guide_usage_linter.md.CkG0C-L-.js similarity index 94% rename from assets/docs_guide_usage_linter.md.BKec6KC0.js rename to assets/docs_guide_usage_linter.md.CkG0C-L-.js index 3f9729eaf2..ad4532ac8b 100644 --- a/assets/docs_guide_usage_linter.md.BKec6KC0.js +++ b/assets/docs_guide_usage_linter.md.CkG0C-L-.js @@ -1,4 +1,4 @@ -import{_ as a,c as e,I as t,j as i,a as n,a3 as l,o,E as p}from"./chunks/framework.Bg3dKMxI.js";const F=JSON.parse('{"title":"Linter","description":"","frontmatter":{"title":"Linter","outline":"deep","badges":[{"src":"https://img.shields.io/npm/dw/oxlint","alt":"npm weekly downloads"}]},"headers":[],"relativePath":"docs/guide/usage/linter.md","filePath":"docs/guide/usage/linter.md"}'),h={name:"docs/guide/usage/linter.md"},r=i("h1",{id:"linter-oxlint",tabindex:"-1"},[n("Linter (oxlint) "),i("a",{class:"header-anchor",href:"#linter-oxlint","aria-label":'Permalink to "Linter (oxlint)"'},"​")],-1),d=l(`

Oxlint is designed to catch erroneous or useless code without requiring any configurations by default.

INFO

At the current stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

We recommend running oxlint before ESLint in your lint-staged or CI setup for a quicker feedback loop, considering it only takes a few seconds to run on large codebases.

Features

Language Support

Installation

Run oxlint directly at the root of your repository:

sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
sh
$ bunx oxlint@latest
sh
$ deno run npm:oxlint@latest

Or save it to your package.json:

sh
$ npm add -D oxlint
sh
$ pnpm add -D oxlint
sh
$ yarn add -D oxlint
sh
$ bun add -D oxlint

oxlint does not require Node.js, the binaries can be downloaded from the latest GitHub releases.

Command-line Interface

See Command-line Interface

Configuration File

See Configuration File

Integration

ESLint

If you are looking for a way to use oxlint in projects that still need ESLint, You can use eslint-plugin-oxlint to turn off ESLint rules that are already supported by oxlint. So you can enjoy the speed of oxlint while still using ESLint.

lint-staged

json
{
+import{_ as a,c as e,I as t,j as i,a as n,a3 as l,o,E as p}from"./chunks/framework.Bg3dKMxI.js";const F=JSON.parse('{"title":"Linter","description":"","frontmatter":{"title":"Linter","outline":"deep","badges":[{"src":"https://img.shields.io/npm/dw/oxlint","alt":"npm weekly downloads"}]},"headers":[],"relativePath":"docs/guide/usage/linter.md","filePath":"docs/guide/usage/linter.md"}'),h={name:"docs/guide/usage/linter.md"},r=i("h1",{id:"linter-oxlint",tabindex:"-1"},[n("Linter (oxlint) "),i("a",{class:"header-anchor",href:"#linter-oxlint","aria-label":'Permalink to "Linter (oxlint)"'},"​")],-1),d=l(`

Oxlint is designed to catch erroneous or useless code without requiring any configurations by default.

INFO

At the current stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

We recommend running oxlint before ESLint in your lint-staged or CI setup for a quicker feedback loop, considering it only takes a few seconds to run on large codebases.

Features

Language Support

  • Supports:
    • JavaScript and TypeScript by their extensions js, mjs, cjs, jsx, ts, mts, cts and tsx.
    • <script> content of .vue, .astro and .svelte files.
  • No support for:

Installation

Run oxlint directly at the root of your repository:

sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
sh
$ bunx oxlint@latest
sh
$ deno run npm:oxlint@latest

Or save it to your package.json:

sh
$ npm add -D oxlint
sh
$ pnpm add -D oxlint
sh
$ yarn add -D oxlint
sh
$ bun add -D oxlint

oxlint does not require Node.js, the binaries can be downloaded from the latest GitHub releases.

Command-line Interface

See Command-line Interface

Configuration File

See Configuration File

Integration

ESLint

If you are looking for a way to use oxlint in projects that still need ESLint, You can use eslint-plugin-oxlint to turn off ESLint rules that are already supported by oxlint. So you can enjoy the speed of oxlint while still using ESLint.

lint-staged

json
{
   "lint-staged": {
     "**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx,vue,astro,svelte}": "oxlint"
   }
diff --git a/assets/docs_guide_usage_linter.md.BKec6KC0.lean.js b/assets/docs_guide_usage_linter.md.CkG0C-L-.lean.js
similarity index 100%
rename from assets/docs_guide_usage_linter.md.BKec6KC0.lean.js
rename to assets/docs_guide_usage_linter.md.CkG0C-L-.lean.js
diff --git a/assets/index.md.CKjaI2rc.js b/assets/index.md.CKjaI2rc.js
new file mode 100644
index 0000000000..0f7f21fa89
--- /dev/null
+++ b/assets/index.md.CKjaI2rc.js
@@ -0,0 +1,87 @@
+import{c as i,j as A,k as t,o as e}from"./chunks/framework.Bg3dKMxI.js";const n=`
+
+
+Silver Sponsors
+  Snyder Technologies
+  
+Bronze Sponsors
+  schoolhouse.w...
+  
+Super Generous
+  Zack
+  
+Backers
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+  
+
+
+`,a={class:"Sponsors"},l=A("h2",null,"Sponsored by",-1),r=["innerHTML"],d=JSON.parse('{"title":"","titleTemplate":"The JavaScript Oxidation Compiler","description":"","frontmatter":{"titleTemplate":"The JavaScript Oxidation Compiler","layout":"home","hero":{"name":"The JavaScript Oxidation Compiler","tagline":"A collection of JavaScript tools written in Rust","image":{"src":"https://cdn.jsdelivr.net/gh/oxc-project/oxc-assets/uwu.png","alt":"The JavaScript Oxidation Compiler"},"actions":[{"theme":"brand","text":"Get Started","link":"/docs/guide/introduction"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/oxc-project/oxc"}]},"features":[{"title":"Parser ✅","details":"3x faster than swc","link":"/docs/guide/usage/parser","linkText":"Usage guide"},{"title":"Linter ✅","details":"50~100x faster than ESLint
340+ rules and counting","link":"/docs/guide/usage/linter","linkText":"Usage guide"},{"title":"Resolver ✅","details":"28x faster than enhanced-resolve","link":"/docs/guide/usage/resolver","linkText":"Usage guide"},{"title":"Transformer 🚧","details":"Babel compatible
Isolated Declarations Dts Emit","link":"/docs/guide/usage/transformer"},{"title":"Formatter","details":"Prettier compatible"},{"title":"Minifier","details":"Faster and better at compression"},{"title":"Rolldown Bundler 🚧","details":"Rollup compatible
Designed for Vite","link":"https://rolldown.rs","external":true}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),s={name:"index.md"},c=Object.assign(s,{setup(h){return(o,g)=>(e(),i("div",null,[A("div",a,[l,A("div",{innerHTML:t(n)},null,8,r)])]))}});export{d as __pageData,c as default}; diff --git a/assets/index.md.CKjaI2rc.lean.js b/assets/index.md.CKjaI2rc.lean.js new file mode 100644 index 0000000000..0f7f21fa89 --- /dev/null +++ b/assets/index.md.CKjaI2rc.lean.js @@ -0,0 +1,87 @@ +import{c as i,j as A,k as t,o as e}from"./chunks/framework.Bg3dKMxI.js";const n=` + + +Silver Sponsors + Snyder Technologies + +Bronze Sponsors + schoolhouse.w... + +Super Generous + Zack + +Backers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`,a={class:"Sponsors"},l=A("h2",null,"Sponsored by",-1),r=["innerHTML"],d=JSON.parse('{"title":"","titleTemplate":"The JavaScript Oxidation Compiler","description":"","frontmatter":{"titleTemplate":"The JavaScript Oxidation Compiler","layout":"home","hero":{"name":"The JavaScript Oxidation Compiler","tagline":"A collection of JavaScript tools written in Rust","image":{"src":"https://cdn.jsdelivr.net/gh/oxc-project/oxc-assets/uwu.png","alt":"The JavaScript Oxidation Compiler"},"actions":[{"theme":"brand","text":"Get Started","link":"/docs/guide/introduction"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/oxc-project/oxc"}]},"features":[{"title":"Parser ✅","details":"3x faster than swc","link":"/docs/guide/usage/parser","linkText":"Usage guide"},{"title":"Linter ✅","details":"50~100x faster than ESLint
340+ rules and counting","link":"/docs/guide/usage/linter","linkText":"Usage guide"},{"title":"Resolver ✅","details":"28x faster than enhanced-resolve","link":"/docs/guide/usage/resolver","linkText":"Usage guide"},{"title":"Transformer 🚧","details":"Babel compatible
Isolated Declarations Dts Emit","link":"/docs/guide/usage/transformer"},{"title":"Formatter","details":"Prettier compatible"},{"title":"Minifier","details":"Faster and better at compression"},{"title":"Rolldown Bundler 🚧","details":"Rollup compatible
Designed for Vite","link":"https://rolldown.rs","external":true}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),s={name:"index.md"},c=Object.assign(s,{setup(h){return(o,g)=>(e(),i("div",null,[A("div",a,[l,A("div",{innerHTML:t(n)},null,8,r)])]))}});export{d as __pageData,c as default}; diff --git a/assets/index.md.Cdau3kYi.js b/assets/index.md.Cdau3kYi.js deleted file mode 100644 index 487ed72fdd..0000000000 --- a/assets/index.md.Cdau3kYi.js +++ /dev/null @@ -1 +0,0 @@ -import{o as A,c as i,b as l,w as n,a as r,J as s,a3 as h,j as e,I as g,k as o}from"./chunks/framework.Bg3dKMxI.js";const E={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"800",height:"691"},m=h('Silver SponsorsSnyder TechnologiesBronze Sponsorsschoolhouse.w...Super GenerousZackBackers',28);function c(t,a){return A(),i("svg",E,[(A(),l(s("style"),null,{default:n(()=>[r('text{font-weight:300;font-size:14px;fill:#777;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif}.sponsorkit-link{cursor:pointer}.sponsorkit-tier-title{font-weight:500;font-size:20px}')]),_:1})),m])}const d={render:c},k={style:{display:"flex","flex-direction":"column","justify-content":"center","align-items":"center"}},p=e("h2",null,"Sponsored by",-1),w=JSON.parse('{"title":"","titleTemplate":"The JavaScript Oxidation Compiler","description":"","frontmatter":{"titleTemplate":"The JavaScript Oxidation Compiler","layout":"home","hero":{"name":"The JavaScript Oxidation Compiler","tagline":"A collection of JavaScript tools written in Rust","image":{"src":"https://cdn.jsdelivr.net/gh/oxc-project/oxc-assets/uwu.png","alt":"The JavaScript Oxidation Compiler"},"actions":[{"theme":"brand","text":"Get Started","link":"/docs/guide/introduction"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/oxc-project/oxc"}]},"features":[{"title":"Parser ✅","details":"3x faster than swc","link":"/docs/guide/usage/parser","linkText":"Usage guide"},{"title":"Linter ✅","details":"50~100x faster than ESLint
340+ rules and counting","link":"/docs/guide/usage/linter","linkText":"Usage guide"},{"title":"Resolver ✅","details":"28x faster than enhanced-resolve","link":"/docs/guide/usage/resolver","linkText":"Usage guide"},{"title":"Transformer 🚧","details":"Babel compatible
Isolated Declarations Dts Emit","link":"/docs/guide/usage/transformer"},{"title":"Formatter","details":"Prettier compatible"},{"title":"Minifier","details":"Faster and better at compression"},{"title":"Rolldown Bundler 🚧","details":"Rollup compatible
Designed for Vite","link":"https://rolldown.rs","external":true}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),S={name:"index.md"},x=Object.assign(S,{setup(t){return(a,b)=>(A(),i("div",null,[e("div",k,[p,g(o(d))])]))}});export{w as __pageData,x as default}; diff --git a/assets/index.md.Cdau3kYi.lean.js b/assets/index.md.Cdau3kYi.lean.js deleted file mode 100644 index 487ed72fdd..0000000000 --- a/assets/index.md.Cdau3kYi.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{o as A,c as i,b as l,w as n,a as r,J as s,a3 as h,j as e,I as g,k as o}from"./chunks/framework.Bg3dKMxI.js";const E={xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",width:"800",height:"691"},m=h('Silver SponsorsSnyder TechnologiesBronze Sponsorsschoolhouse.w...Super GenerousZackBackers',28);function c(t,a){return A(),i("svg",E,[(A(),l(s("style"),null,{default:n(()=>[r('text{font-weight:300;font-size:14px;fill:#777;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue",sans-serif}.sponsorkit-link{cursor:pointer}.sponsorkit-tier-title{font-weight:500;font-size:20px}')]),_:1})),m])}const d={render:c},k={style:{display:"flex","flex-direction":"column","justify-content":"center","align-items":"center"}},p=e("h2",null,"Sponsored by",-1),w=JSON.parse('{"title":"","titleTemplate":"The JavaScript Oxidation Compiler","description":"","frontmatter":{"titleTemplate":"The JavaScript Oxidation Compiler","layout":"home","hero":{"name":"The JavaScript Oxidation Compiler","tagline":"A collection of JavaScript tools written in Rust","image":{"src":"https://cdn.jsdelivr.net/gh/oxc-project/oxc-assets/uwu.png","alt":"The JavaScript Oxidation Compiler"},"actions":[{"theme":"brand","text":"Get Started","link":"/docs/guide/introduction"},{"theme":"alt","text":"View on GitHub","link":"https://github.com/oxc-project/oxc"}]},"features":[{"title":"Parser ✅","details":"3x faster than swc","link":"/docs/guide/usage/parser","linkText":"Usage guide"},{"title":"Linter ✅","details":"50~100x faster than ESLint
340+ rules and counting","link":"/docs/guide/usage/linter","linkText":"Usage guide"},{"title":"Resolver ✅","details":"28x faster than enhanced-resolve","link":"/docs/guide/usage/resolver","linkText":"Usage guide"},{"title":"Transformer 🚧","details":"Babel compatible
Isolated Declarations Dts Emit","link":"/docs/guide/usage/transformer"},{"title":"Formatter","details":"Prettier compatible"},{"title":"Minifier","details":"Faster and better at compression"},{"title":"Rolldown Bundler 🚧","details":"Rollup compatible
Designed for Vite","link":"https://rolldown.rs","external":true}]},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),S={name:"index.md"},x=Object.assign(S,{setup(t){return(a,b)=>(A(),i("div",null,[e("div",k,[p,g(o(d))])]))}});export{w as __pageData,x as default}; diff --git a/assets/style.DW1FmM7N.css b/assets/style.CAO0qC_k.css similarity index 96% rename from assets/style.DW1FmM7N.css rename to assets/style.CAO0qC_k.css index 0bd8f57bcf..edf0a2bc0e 100644 --- a/assets/style.DW1FmM7N.css +++ b/assets/style.CAO0qC_k.css @@ -1 +1 @@ -@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,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(/assets/inter-roman-cyrillic.C5lxZ8CY.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(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.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(/assets/inter-roman-vietnamese.BjW4sHH5.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(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,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(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.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:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.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:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.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:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,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:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-6d40506f]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-6d40506f],.VPBackdrop.fade-leave-to[data-v-6d40506f]{opacity:0}.VPBackdrop.fade-leave-active[data-v-6d40506f]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-6d40506f]{display:none}}.NotFound[data-v-c43c0ab5]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-c43c0ab5]{padding:96px 32px 168px}}.code[data-v-c43c0ab5]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-c43c0ab5]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-c43c0ab5]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-c43c0ab5]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-c43c0ab5]{padding-top:20px}.link[data-v-c43c0ab5]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-c43c0ab5]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-27321c25]{position:relative;z-index:1}.nested[data-v-27321c25]{padding-right:16px;padding-left:16px}.outline-link[data-v-27321c25]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-27321c25]:hover,.outline-link.active[data-v-27321c25]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-27321c25]{padding-left:13px}.VPDocAsideOutline[data-v-d4d31fbe]{display:none}.VPDocAsideOutline.has-outline[data-v-d4d31fbe]{display:block}.content[data-v-d4d31fbe]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-d4d31fbe]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-d4d31fbe]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-0bce3cd1]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-0bce3cd1]{flex-grow:1}.VPDocAside[data-v-0bce3cd1] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-0bce3cd1] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-0bce3cd1] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-27744493]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-27744493]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-14ebe21d]{margin-top:64px}.edit-info[data-v-14ebe21d]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-14ebe21d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-14ebe21d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-14ebe21d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-14ebe21d]{margin-right:8px}.prev-next[data-v-14ebe21d]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-14ebe21d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-14ebe21d]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-14ebe21d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-14ebe21d]{margin-left:auto;text-align:right}.desc[data-v-14ebe21d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-14ebe21d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-b231b937]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-b231b937]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-b231b937]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-b231b937]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-b231b937]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-b231b937]{display:flex;justify-content:center}.VPDoc .aside[data-v-b231b937]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-b231b937]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-b231b937]{max-width:1104px}}.container[data-v-b231b937]{margin:0 auto;width:100%}.aside[data-v-b231b937]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-b231b937]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-b231b937]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-b231b937]::-webkit-scrollbar{display:none}.aside-curtain[data-v-b231b937]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-b231b937]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-b231b937]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-b231b937]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-b231b937]{order:1;margin:0;min-width:640px}}.content-container[data-v-b231b937]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-b231b937]{max-width:688px}html:not(.dark) .VPImage.dark[data-v-bcd9c971]{display:none}.dark .VPImage.light[data-v-bcd9c971]{display:none}.VPHero[data-v-bcd9c971]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-bcd9c971]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-bcd9c971]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-bcd9c971]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-bcd9c971]{flex-direction:row}}.main[data-v-bcd9c971]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-bcd9c971]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-bcd9c971]{text-align:left}}@media (min-width: 960px){.main[data-v-bcd9c971]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-bcd9c971]{max-width:592px}}.name[data-v-bcd9c971],.text[data-v-bcd9c971]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-bcd9c971],.VPHero.has-image .text[data-v-bcd9c971]{margin:0 auto}.name[data-v-bcd9c971]{color:var(--vp-home-hero-name-color)}.clip[data-v-bcd9c971]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-bcd9c971],.text[data-v-bcd9c971]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-bcd9c971],.text[data-v-bcd9c971]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-bcd9c971],.VPHero.has-image .text[data-v-bcd9c971]{margin:0}}.tagline[data-v-bcd9c971]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-bcd9c971]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-bcd9c971]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-bcd9c971]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-bcd9c971]{margin:0}}.actions[data-v-bcd9c971]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-bcd9c971]{justify-content:center}@media (min-width: 640px){.actions[data-v-bcd9c971]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-bcd9c971]{justify-content:flex-start}}.action[data-v-bcd9c971]{flex-shrink:0;padding:6px}.image[data-v-bcd9c971]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-bcd9c971]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-bcd9c971]{flex-grow:1;order:2;margin:0;min-height:100%}}.perspective[data-v-bcd9c971]{perspective:30cm}.image-container[data-v-bcd9c971]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-bcd9c971]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-bcd9c971]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-bcd9c971]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-bcd9c971]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-bcd9c971]{width:320px;height:320px}}[data-v-bcd9c971] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-bcd9c971] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-bcd9c971] .image-src{max-width:320px;max-height:320px}}html:not(.dark) .VPImage.dark[data-v-d1aca2db]{display:none}.dark .VPImage.light[data-v-d1aca2db]{display:none}.VPFeature[data-v-a39effd1]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a39effd1]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a39effd1]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a39effd1]>.VPImage{margin-bottom:20px}.icon[data-v-a39effd1]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a39effd1]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a39effd1]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a39effd1]{padding-top:8px}.link-text-value[data-v-a39effd1]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a39effd1]{margin-left:6px}.VPFeatures[data-v-80d3149f]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-80d3149f]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-80d3149f]{padding:0 64px}}.container[data-v-80d3149f]{margin:0 auto;max-width:1152px}.items[data-v-80d3149f]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-80d3149f]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-80d3149f],.item.grid-4[data-v-80d3149f],.item.grid-6[data-v-80d3149f]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-80d3149f],.item.grid-4[data-v-80d3149f]{width:50%}.item.grid-3[data-v-80d3149f],.item.grid-6[data-v-80d3149f]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-80d3149f]{width:25%}}.container[data-v-e9f4940c]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-e9f4940c]{padding:0 48px}}@media (min-width: 960px){.container[data-v-e9f4940c]{width:100%;padding:0 64px}}.vp-doc[data-v-e9f4940c] .VPHomeSponsors,.vp-doc[data-v-e9f4940c] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-e9f4940c] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-e9f4940c] .VPHomeSponsors a,.vp-doc[data-v-e9f4940c] .VPTeamPage a{text-decoration:none}.VPHome[data-v-1f047126]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-1f047126]{margin-bottom:128px}}.VPContent[data-v-1fe9606f]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1fe9606f]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1fe9606f]{margin:0}@media (min-width: 960px){.VPContent[data-v-1fe9606f]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1fe9606f]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1fe9606f]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-dee565cd]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-dee565cd]{display:none}.VPFooter[data-v-dee565cd] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-dee565cd] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-dee565cd]{padding:32px}}.container[data-v-dee565cd]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-dee565cd],.copyright[data-v-dee565cd]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-75196eb7]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-75196eb7]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-75196eb7]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-75196eb7]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-75196eb7]{color:var(--vp-c-text-1)}.icon[data-v-75196eb7]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-75196eb7]{font-size:14px}.icon[data-v-75196eb7]{font-size:16px}}.open>.icon[data-v-75196eb7]{transform:rotate(90deg)}.items[data-v-75196eb7]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-75196eb7]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-75196eb7]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-75196eb7]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-75196eb7]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-75196eb7]{transition:all .2s ease-out}.flyout-leave-active[data-v-75196eb7]{transition:all .15s ease-in}.flyout-enter-from[data-v-75196eb7],.flyout-leave-to[data-v-75196eb7]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-72dfafe2]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-72dfafe2]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-72dfafe2]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-72dfafe2]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-72dfafe2]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-72dfafe2]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-72dfafe2]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-72dfafe2]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-72dfafe2]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-72dfafe2]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-72dfafe2]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-72dfafe2]{display:none}}.menu-icon[data-v-72dfafe2]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-72dfafe2]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-72dfafe2]{padding:12px 32px 11px}}.VPSwitch[data-v-85eab0dd]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-85eab0dd]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-85eab0dd]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-85eab0dd]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-85eab0dd] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-85eab0dd] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-fd2e402d]{opacity:1}.moon[data-v-fd2e402d],.dark .sun[data-v-fd2e402d]{opacity:0}.dark .moon[data-v-fd2e402d]{opacity:1}.dark .VPSwitchAppearance[data-v-fd2e402d] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-0e473924]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-0e473924]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-061ea3dc]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-061ea3dc]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-061ea3dc]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-061ea3dc]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-1d87b0cf]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-1d87b0cf]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-1d87b0cf]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-1d87b0cf]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-ac93fd39]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-ac93fd39] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-ac93fd39] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-ac93fd39] .group:last-child{padding-bottom:0}.VPMenu[data-v-ac93fd39] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-ac93fd39] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-ac93fd39] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-ac93fd39] .action{padding-left:24px}.VPFlyout[data-v-3c7b27f2]{position:relative}.VPFlyout[data-v-3c7b27f2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-3c7b27f2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-3c7b27f2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-3c7b27f2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-3c7b27f2]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-3c7b27f2],.button[aria-expanded=true]+.menu[data-v-3c7b27f2]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-3c7b27f2]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-3c7b27f2]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-3c7b27f2]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-3c7b27f2]{margin-right:0;font-size:16px}.text-icon[data-v-3c7b27f2]{margin-left:4px;font-size:14px}.icon[data-v-3c7b27f2]{font-size:20px;transition:fill .25s}.menu[data-v-3c7b27f2]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-dd51b7a6]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-dd51b7a6]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-dd51b7a6]>svg,.VPSocialLink[data-v-dd51b7a6]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-e94f3a92]{display:flex;justify-content:center}.VPNavBarExtra[data-v-6b18f3e7]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-6b18f3e7]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-6b18f3e7]{display:none}}.trans-title[data-v-6b18f3e7]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-6b18f3e7],.item.social-links[data-v-6b18f3e7]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-6b18f3e7]{min-width:176px}.appearance-action[data-v-6b18f3e7]{margin-right:-2px}.social-links-list[data-v-6b18f3e7]{margin:-4px -8px}.VPNavBarHamburger[data-v-c1b4e6f6]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-c1b4e6f6]{display:none}}.container[data-v-c1b4e6f6]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-c1b4e6f6]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-c1b4e6f6]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-c1b4e6f6]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-c1b4e6f6]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-c1b4e6f6]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-c1b4e6f6]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-c1b4e6f6],.VPNavBarHamburger.active:hover .middle[data-v-c1b4e6f6],.VPNavBarHamburger.active:hover .bottom[data-v-c1b4e6f6]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-c1b4e6f6],.middle[data-v-c1b4e6f6],.bottom[data-v-c1b4e6f6]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-c1b4e6f6]{top:0;left:0;transform:translate(0)}.middle[data-v-c1b4e6f6]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-c1b4e6f6]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-3b8abf07]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-3b8abf07],.VPNavBarMenuLink[data-v-3b8abf07]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-74640b02]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-74640b02]{display:flex}}/*! @docsearch/css 3.6.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-352772f4]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-352772f4]{display:flex;align-items:center}}.title[data-v-00cb6549]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-00cb6549]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-00cb6549]{border-bottom-color:var(--vp-c-divider)}}[data-v-00cb6549] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-0f8849a0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-0f8849a0]{display:flex;align-items:center}}.title[data-v-0f8849a0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-722f50dd]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar[data-v-722f50dd]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-722f50dd]:not(.home){background-color:transparent}.VPNavBar[data-v-722f50dd]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-722f50dd]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-722f50dd]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-722f50dd]{padding:0}}.container[data-v-722f50dd]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-722f50dd],.container>.content[data-v-722f50dd]{pointer-events:none}.container[data-v-722f50dd] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-722f50dd]{max-width:100%}}.title[data-v-722f50dd]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-722f50dd]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-722f50dd]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-722f50dd]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-722f50dd]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-722f50dd]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-722f50dd]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-722f50dd]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-722f50dd]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-722f50dd]{column-gap:.5rem}}.menu+.translations[data-v-722f50dd]:before,.menu+.appearance[data-v-722f50dd]:before,.menu+.social-links[data-v-722f50dd]:before,.translations+.appearance[data-v-722f50dd]:before,.appearance+.social-links[data-v-722f50dd]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-722f50dd]:before,.translations+.appearance[data-v-722f50dd]:before{margin-right:16px}.appearance+.social-links[data-v-722f50dd]:before{margin-left:16px}.social-links[data-v-722f50dd]{margin-right:-8px}.divider[data-v-722f50dd]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-722f50dd]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-722f50dd]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-722f50dd]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-722f50dd]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-722f50dd]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-722f50dd]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-bbfb1988]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-bbfb1988]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-85dc717d]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-85dc717d]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-f2af6f4c]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-f2af6f4c]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-dcc3bde8]{display:block}.title[data-v-dcc3bde8]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-bad045b1]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-bad045b1]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-bad045b1]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-bad045b1]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-bad045b1]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-bad045b1]{transform:rotate(45deg)}.button[data-v-bad045b1]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-bad045b1]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-bad045b1]{transition:transform .25s}.group[data-v-bad045b1]:first-child{padding-top:0}.group+.group[data-v-bad045b1],.group+.item[data-v-bad045b1]{padding-top:4px}.VPNavScreenTranslations[data-v-d4d09860]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-d4d09860]{height:auto}.title[data-v-d4d09860]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-d4d09860]{font-size:16px}.icon.lang[data-v-d4d09860]{margin-right:8px}.icon.chevron[data-v-d4d09860]{margin-left:4px}.list[data-v-d4d09860]{padding:4px 0 0 24px}.link[data-v-d4d09860]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-8ac9a04c]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-8ac9a04c],.VPNavScreen.fade-leave-active[data-v-8ac9a04c]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-8ac9a04c],.VPNavScreen.fade-leave-active .container[data-v-8ac9a04c]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-8ac9a04c],.VPNavScreen.fade-leave-to[data-v-8ac9a04c]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-8ac9a04c],.VPNavScreen.fade-leave-to .container[data-v-8ac9a04c]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-8ac9a04c]{display:none}}.container[data-v-8ac9a04c]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-8ac9a04c],.menu+.appearance[data-v-8ac9a04c],.translations+.appearance[data-v-8ac9a04c]{margin-top:24px}.menu+.social-links[data-v-8ac9a04c]{margin-top:16px}.appearance+.social-links[data-v-8ac9a04c]{margin-top:16px}.VPNav[data-v-c483df97]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-c483df97]{position:fixed}}.VPSidebarItem.level-0[data-v-9b8ffdfe]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-9b8ffdfe]{padding-bottom:10px}.item[data-v-9b8ffdfe]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-9b8ffdfe]{cursor:pointer}.indicator[data-v-9b8ffdfe]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-9b8ffdfe],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-9b8ffdfe],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-9b8ffdfe],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-9b8ffdfe]{background-color:var(--vp-c-brand-1)}.link[data-v-9b8ffdfe]{display:flex;align-items:center;flex-grow:1}.text[data-v-9b8ffdfe]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-9b8ffdfe]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-9b8ffdfe],.VPSidebarItem.level-2 .text[data-v-9b8ffdfe],.VPSidebarItem.level-3 .text[data-v-9b8ffdfe],.VPSidebarItem.level-4 .text[data-v-9b8ffdfe],.VPSidebarItem.level-5 .text[data-v-9b8ffdfe]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-9b8ffdfe]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-1.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-2.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-3.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-4.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-5.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-9b8ffdfe]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-9b8ffdfe]{color:var(--vp-c-brand-1)}.caret[data-v-9b8ffdfe]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-9b8ffdfe]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-9b8ffdfe]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-9b8ffdfe]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-9b8ffdfe]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-9b8ffdfe],.VPSidebarItem.level-2 .items[data-v-9b8ffdfe],.VPSidebarItem.level-3 .items[data-v-9b8ffdfe],.VPSidebarItem.level-4 .items[data-v-9b8ffdfe],.VPSidebarItem.level-5 .items[data-v-9b8ffdfe]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-9b8ffdfe]{display:none}.VPSidebar[data-v-4455554e]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-4455554e]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-4455554e]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-4455554e]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-4455554e]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-4455554e]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-4455554e]{outline:0}.group+.group[data-v-4455554e]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-4455554e]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-b972d4be]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-b972d4be]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-b972d4be]{top:14px;left:16px}}.Layout[data-v-7da325e9]{display:flex;flex-direction:column;min-height:100vh}.VPButton[data-v-67c84f68]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-67c84f68]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-67c84f68]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-67c84f68]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-67c84f68]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-67c84f68]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-67c84f68]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-67c84f68]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-67c84f68]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-67c84f68]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-67c84f68]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-67c84f68]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-67c84f68]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}.VPHomeSponsors[data-v-2fa3d7af]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-2fa3d7af]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-2fa3d7af]{margin:128px 0}}.VPHomeSponsors[data-v-2fa3d7af]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-2fa3d7af]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-2fa3d7af]{padding:0 64px}}.container[data-v-2fa3d7af]{margin:0 auto;max-width:1152px}.love[data-v-2fa3d7af]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-2fa3d7af]{display:inline-block}.message[data-v-2fa3d7af]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-2fa3d7af]{padding-top:32px}.action[data-v-2fa3d7af]{padding-top:40px;text-align:center}.VPTeamPage[data-v-4e32412b]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-4e32412b]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-4e32412b-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-4e32412b-s],.VPTeamMembers+.VPTeamPageSection[data-v-4e32412b-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-4e32412b-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-4e32412b-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-4e32412b-s],.VPTeamMembers+.VPTeamPageSection[data-v-4e32412b-s]{margin-top:96px}}.VPTeamMembers[data-v-4e32412b-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-4e32412b-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-4e32412b-s]{padding:0 64px}}.VPTeamPageTitle[data-v-7aee7255]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-7aee7255]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-7aee7255]{padding:80px 64px 48px}}.title[data-v-7aee7255]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-7aee7255]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-7aee7255]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-7aee7255]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-94e9f46b]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-94e9f46b]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-94e9f46b]{padding:0 64px}}.title[data-v-94e9f46b]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-94e9f46b]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-94e9f46b]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-94e9f46b]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-94e9f46b]{padding-top:40px}.VPTeamMembersItem[data-v-12daef67]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-12daef67]{padding:32px}.VPTeamMembersItem.small .data[data-v-12daef67]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-12daef67]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-12daef67]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-12daef67]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-12daef67]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-12daef67]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-12daef67]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-12daef67]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-12daef67]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-12daef67]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-12daef67]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-12daef67]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-12daef67]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-12daef67]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-12daef67]{text-align:center}.avatar[data-v-12daef67]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-12daef67]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-12daef67]{margin:0;font-weight:600}.affiliation[data-v-12daef67]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-12daef67]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-12daef67]:hover{color:var(--vp-c-brand-1)}.desc[data-v-12daef67]{margin:0 auto}.desc[data-v-12daef67] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-12daef67]{display:flex;justify-content:center;height:56px}.sp-link[data-v-12daef67]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-12daef67]:hover,.sp .sp-link.link[data-v-12daef67]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-12daef67]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-0bc45de8]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-0bc45de8]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-0bc45de8]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-0bc45de8]{max-width:876px}.VPTeamMembers.medium .container[data-v-0bc45de8]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-0bc45de8]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-0bc45de8]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-0bc45de8]{max-width:760px}.container[data-v-0bc45de8]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.AppBadgeList[data-v-86574938]{display:flex;flex-wrap:wrap;align-items:flex-start;gap:4px;min-height:20px;padding:0;list-style:none}.badge[data-v-86574938]{margin:0}.authors[data-v-6584a84b]{display:flex;flex-wrap:wrap;align-items:flex-start;gap:10px;list-style:none;padding:0;margin:0}.author[data-v-6584a84b]{display:flex;gap:10px;margin:0}.author-text[data-v-6584a84b]{display:flex;flex-direction:column;margin:0}.author-name[data-v-6584a84b]{line-height:1.25}.author-title[data-v-6584a84b]{font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.author-avatar[data-v-6584a84b]{width:48px;height:48px}.VPHero .VPImage.image-src{max-width:90%}.VPLocalSearchBox[data-v-01ed6117]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-01ed6117]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-01ed6117]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-01ed6117]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-01ed6117]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-01ed6117]{padding:0 8px}}.search-bar[data-v-01ed6117]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-01ed6117]{display:block;font-size:18px}.navigate-icon[data-v-01ed6117]{display:block;font-size:14px}.search-icon[data-v-01ed6117]{margin:8px}@media (max-width: 767px){.search-icon[data-v-01ed6117]{display:none}}.search-input[data-v-01ed6117]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-01ed6117]{padding:6px 4px}}.search-actions[data-v-01ed6117]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-01ed6117]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-01ed6117]{display:none}}.search-actions button[data-v-01ed6117]{padding:8px}.search-actions button[data-v-01ed6117]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-01ed6117]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-01ed6117]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-01ed6117]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-01ed6117]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-01ed6117]{display:none}}.search-keyboard-shortcuts kbd[data-v-01ed6117]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-01ed6117]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-01ed6117]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-01ed6117]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-01ed6117]{margin:8px}}.titles[data-v-01ed6117]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-01ed6117]{display:flex;align-items:center;gap:4px}.title.main[data-v-01ed6117]{font-weight:500}.title-icon[data-v-01ed6117]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-01ed6117]{opacity:.5}.result.selected[data-v-01ed6117]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-01ed6117]{position:relative}.excerpt[data-v-01ed6117]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-01ed6117]{opacity:1}.excerpt[data-v-01ed6117] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-01ed6117] mark,.excerpt[data-v-01ed6117] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-01ed6117] .vp-code-group .tabs{display:none}.excerpt[data-v-01ed6117] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-01ed6117]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-01ed6117]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-01ed6117],.result.selected .title-icon[data-v-01ed6117]{color:var(--vp-c-brand-1)!important}.no-results[data-v-01ed6117]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-01ed6117]{flex:none} +@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,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(/assets/inter-roman-cyrillic.C5lxZ8CY.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(/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(/assets/inter-roman-greek.BBVDIX6e.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(/assets/inter-roman-vietnamese.BjW4sHH5.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(/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,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(/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-cyrillic.By2_1cv3.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:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-greek.DJ8dCoTZ.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:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-vietnamese.BSbpV94h.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:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,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:italic;font-weight:100 900;font-display:swap;src:url(/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, "PingFang SC", "Noto Sans CJK SC", "Noto Sans SC", "Heiti SC", "Microsoft YaHei", "DengXian", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.vpi-social-discord{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418Z'/%3E%3C/svg%3E")}.vpi-social-facebook{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M9.101 23.691v-7.98H6.627v-3.667h2.474v-1.58c0-4.085 1.848-5.978 5.858-5.978.401 0 .955.042 1.468.103a8.68 8.68 0 0 1 1.141.195v3.325a8.623 8.623 0 0 0-.653-.036 26.805 26.805 0 0 0-.733-.009c-.707 0-1.259.096-1.675.309a1.686 1.686 0 0 0-.679.622c-.258.42-.374.995-.374 1.752v1.297h3.919l-.386 2.103-.287 1.564h-3.246v8.245C19.396 23.238 24 18.179 24 12.044c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.628 3.874 10.35 9.101 11.647Z'/%3E%3C/svg%3E")}.vpi-social-github{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12'/%3E%3C/svg%3E")}.vpi-social-instagram{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M7.03.084c-1.277.06-2.149.264-2.91.563a5.874 5.874 0 0 0-2.124 1.388 5.878 5.878 0 0 0-1.38 2.127C.321 4.926.12 5.8.064 7.076.008 8.354-.005 8.764.001 12.023c.007 3.259.021 3.667.083 4.947.061 1.277.264 2.149.563 2.911.308.789.72 1.457 1.388 2.123a5.872 5.872 0 0 0 2.129 1.38c.763.295 1.636.496 2.913.552 1.278.056 1.689.069 4.947.063 3.257-.007 3.668-.021 4.947-.082 1.28-.06 2.147-.265 2.91-.563a5.881 5.881 0 0 0 2.123-1.388 5.881 5.881 0 0 0 1.38-2.129c.295-.763.496-1.636.551-2.912.056-1.28.07-1.69.063-4.948-.006-3.258-.02-3.667-.081-4.947-.06-1.28-.264-2.148-.564-2.911a5.892 5.892 0 0 0-1.387-2.123 5.857 5.857 0 0 0-2.128-1.38C19.074.322 18.202.12 16.924.066 15.647.009 15.236-.006 11.977 0 8.718.008 8.31.021 7.03.084m.14 21.693c-1.17-.05-1.805-.245-2.228-.408a3.736 3.736 0 0 1-1.382-.895 3.695 3.695 0 0 1-.9-1.378c-.165-.423-.363-1.058-.417-2.228-.06-1.264-.072-1.644-.08-4.848-.006-3.204.006-3.583.061-4.848.05-1.169.246-1.805.408-2.228.216-.561.477-.96.895-1.382a3.705 3.705 0 0 1 1.379-.9c.423-.165 1.057-.361 2.227-.417 1.265-.06 1.644-.072 4.848-.08 3.203-.006 3.583.006 4.85.062 1.168.05 1.804.244 2.227.408.56.216.96.475 1.382.895.421.42.681.817.9 1.378.165.422.362 1.056.417 2.227.06 1.265.074 1.645.08 4.848.005 3.203-.006 3.583-.061 4.848-.051 1.17-.245 1.805-.408 2.23-.216.56-.477.96-.896 1.38a3.705 3.705 0 0 1-1.378.9c-.422.165-1.058.362-2.226.418-1.266.06-1.645.072-4.85.079-3.204.007-3.582-.006-4.848-.06m9.783-16.192a1.44 1.44 0 1 0 1.437-1.442 1.44 1.44 0 0 0-1.437 1.442M5.839 12.012a6.161 6.161 0 1 0 12.323-.024 6.162 6.162 0 0 0-12.323.024M8 12.008A4 4 0 1 1 12.008 16 4 4 0 0 1 8 12.008'/%3E%3C/svg%3E")}.vpi-social-linkedin{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z'/%3E%3C/svg%3E")}.vpi-social-mastodon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z'/%3E%3C/svg%3E")}.vpi-social-npm{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z'/%3E%3C/svg%3E")}.vpi-social-slack{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 2.521a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zm-1.268 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zm-2.523 10.122a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.268a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z'/%3E%3C/svg%3E")}.vpi-social-twitter,.vpi-social-x{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z'/%3E%3C/svg%3E")}.vpi-social-youtube{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s}.vp-doc blockquote>p{margin:0;font-size:16px;color:var(--vp-c-text-2);transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-6d40506f]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--vp-z-index-backdrop);background:var(--vp-backdrop-bg-color);transition:opacity .5s}.VPBackdrop.fade-enter-from[data-v-6d40506f],.VPBackdrop.fade-leave-to[data-v-6d40506f]{opacity:0}.VPBackdrop.fade-leave-active[data-v-6d40506f]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-6d40506f]{display:none}}.NotFound[data-v-c43c0ab5]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-c43c0ab5]{padding:96px 32px 168px}}.code[data-v-c43c0ab5]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-c43c0ab5]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-c43c0ab5]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-c43c0ab5]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-c43c0ab5]{padding-top:20px}.link[data-v-c43c0ab5]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-c43c0ab5]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-27321c25]{position:relative;z-index:1}.nested[data-v-27321c25]{padding-right:16px;padding-left:16px}.outline-link[data-v-27321c25]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-27321c25]:hover,.outline-link.active[data-v-27321c25]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-27321c25]{padding-left:13px}.VPDocAsideOutline[data-v-d4d31fbe]{display:none}.VPDocAsideOutline.has-outline[data-v-d4d31fbe]{display:block}.content[data-v-d4d31fbe]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-d4d31fbe]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-d4d31fbe]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-0bce3cd1]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-0bce3cd1]{flex-grow:1}.VPDocAside[data-v-0bce3cd1] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-0bce3cd1] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-0bce3cd1] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-27744493]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-27744493]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-14ebe21d]{margin-top:64px}.edit-info[data-v-14ebe21d]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-14ebe21d]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-14ebe21d]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-14ebe21d]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-14ebe21d]{margin-right:8px}.prev-next[data-v-14ebe21d]{border-top:1px solid var(--vp-c-divider);padding-top:24px;display:grid;grid-row-gap:8px}@media (min-width: 640px){.prev-next[data-v-14ebe21d]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-14ebe21d]{display:block;border:1px solid var(--vp-c-divider);border-radius:8px;padding:11px 16px 13px;width:100%;height:100%;transition:border-color .25s}.pager-link[data-v-14ebe21d]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-14ebe21d]{margin-left:auto;text-align:right}.desc[data-v-14ebe21d]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-14ebe21d]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-b231b937]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-b231b937]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-b231b937]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-b231b937]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-b231b937]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-b231b937]{display:flex;justify-content:center}.VPDoc .aside[data-v-b231b937]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-b231b937]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-b231b937]{max-width:1104px}}.container[data-v-b231b937]{margin:0 auto;width:100%}.aside[data-v-b231b937]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-b231b937]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-b231b937]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-b231b937]::-webkit-scrollbar{display:none}.aside-curtain[data-v-b231b937]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-b231b937]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-b231b937]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-b231b937]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-b231b937]{order:1;margin:0;min-width:640px}}.content-container[data-v-b231b937]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-b231b937]{max-width:688px}html:not(.dark) .VPImage.dark[data-v-bcd9c971]{display:none}.dark .VPImage.light[data-v-bcd9c971]{display:none}.VPHero[data-v-bcd9c971]{margin-top:calc((var(--vp-nav-height) + var(--vp-layout-top-height, 0px)) * -1);padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px) 24px 48px}@media (min-width: 640px){.VPHero[data-v-bcd9c971]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-bcd9c971]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-bcd9c971]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-bcd9c971]{flex-direction:row}}.main[data-v-bcd9c971]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-bcd9c971]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-bcd9c971]{text-align:left}}@media (min-width: 960px){.main[data-v-bcd9c971]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-bcd9c971]{max-width:592px}}.name[data-v-bcd9c971],.text[data-v-bcd9c971]{max-width:392px;letter-spacing:-.4px;line-height:40px;font-size:32px;font-weight:700;white-space:pre-wrap}.VPHero.has-image .name[data-v-bcd9c971],.VPHero.has-image .text[data-v-bcd9c971]{margin:0 auto}.name[data-v-bcd9c971]{color:var(--vp-home-hero-name-color)}.clip[data-v-bcd9c971]{background:var(--vp-home-hero-name-background);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:var(--vp-home-hero-name-color)}@media (min-width: 640px){.name[data-v-bcd9c971],.text[data-v-bcd9c971]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-bcd9c971],.text[data-v-bcd9c971]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-bcd9c971],.VPHero.has-image .text[data-v-bcd9c971]{margin:0}}.tagline[data-v-bcd9c971]{padding-top:8px;max-width:392px;line-height:28px;font-size:18px;font-weight:500;white-space:pre-wrap;color:var(--vp-c-text-2)}.VPHero.has-image .tagline[data-v-bcd9c971]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-bcd9c971]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-bcd9c971]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-bcd9c971]{margin:0}}.actions[data-v-bcd9c971]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-bcd9c971]{justify-content:center}@media (min-width: 640px){.actions[data-v-bcd9c971]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-bcd9c971]{justify-content:flex-start}}.action[data-v-bcd9c971]{flex-shrink:0;padding:6px}.image[data-v-bcd9c971]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-bcd9c971]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-bcd9c971]{flex-grow:1;order:2;margin:0;min-height:100%}}.perspective[data-v-bcd9c971]{perspective:30cm}.image-container[data-v-bcd9c971]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-bcd9c971]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-bcd9c971]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-bcd9c971]{position:absolute;top:50%;left:50%;border-radius:50%;width:192px;height:192px;background-image:var(--vp-home-hero-image-background-image);filter:var(--vp-home-hero-image-filter);transform:translate(-50%,-50%)}@media (min-width: 640px){.image-bg[data-v-bcd9c971]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-bcd9c971]{width:320px;height:320px}}[data-v-bcd9c971] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-bcd9c971] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-bcd9c971] .image-src{max-width:320px;max-height:320px}}html:not(.dark) .VPImage.dark[data-v-d1aca2db]{display:none}.dark .VPImage.light[data-v-d1aca2db]{display:none}.VPFeature[data-v-a39effd1]{display:block;border:1px solid var(--vp-c-bg-soft);border-radius:12px;height:100%;background-color:var(--vp-c-bg-soft);transition:border-color .25s,background-color .25s}.VPFeature.link[data-v-a39effd1]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-a39effd1]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-a39effd1]>.VPImage{margin-bottom:20px}.icon[data-v-a39effd1]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-a39effd1]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-a39effd1]{flex-grow:1;padding-top:8px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.link-text[data-v-a39effd1]{padding-top:8px}.link-text-value[data-v-a39effd1]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-a39effd1]{margin-left:6px}.VPFeatures[data-v-80d3149f]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-80d3149f]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-80d3149f]{padding:0 64px}}.container[data-v-80d3149f]{margin:0 auto;max-width:1152px}.items[data-v-80d3149f]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-80d3149f]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-80d3149f],.item.grid-4[data-v-80d3149f],.item.grid-6[data-v-80d3149f]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-80d3149f],.item.grid-4[data-v-80d3149f]{width:50%}.item.grid-3[data-v-80d3149f],.item.grid-6[data-v-80d3149f]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-80d3149f]{width:25%}}.container[data-v-e9f4940c]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-e9f4940c]{padding:0 48px}}@media (min-width: 960px){.container[data-v-e9f4940c]{width:100%;padding:0 64px}}.vp-doc[data-v-e9f4940c] .VPHomeSponsors,.vp-doc[data-v-e9f4940c] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-e9f4940c] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-e9f4940c] .VPHomeSponsors a,.vp-doc[data-v-e9f4940c] .VPTeamPage a{text-decoration:none}.VPHome[data-v-1f047126]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-1f047126]{margin-bottom:128px}}.VPContent[data-v-1fe9606f]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-1fe9606f]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-1fe9606f]{margin:0}@media (min-width: 960px){.VPContent[data-v-1fe9606f]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-1fe9606f]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-1fe9606f]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPFooter[data-v-dee565cd]{position:relative;z-index:var(--vp-z-index-footer);border-top:1px solid var(--vp-c-gutter);padding:32px 24px;background-color:var(--vp-c-bg)}.VPFooter.has-sidebar[data-v-dee565cd]{display:none}.VPFooter[data-v-dee565cd] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-dee565cd] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-dee565cd]{padding:32px}}.container[data-v-dee565cd]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-dee565cd],.copyright[data-v-dee565cd]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-75196eb7]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-75196eb7]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-75196eb7]{display:block;font-size:12px;font-weight:500;line-height:24px;color:var(--vp-c-text-2);transition:color .5s;position:relative}.VPLocalNavOutlineDropdown button[data-v-75196eb7]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-75196eb7]{color:var(--vp-c-text-1)}.icon[data-v-75196eb7]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-75196eb7]{font-size:14px}.icon[data-v-75196eb7]{font-size:16px}}.open>.icon[data-v-75196eb7]{transform:rotate(90deg)}.items[data-v-75196eb7]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-75196eb7]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-75196eb7]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-75196eb7]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-75196eb7]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-75196eb7]{transition:all .2s ease-out}.flyout-leave-active[data-v-75196eb7]{transition:all .15s ease-in}.flyout-enter-from[data-v-75196eb7],.flyout-leave-to[data-v-75196eb7]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-72dfafe2]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-72dfafe2]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-72dfafe2]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-72dfafe2]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-72dfafe2]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-72dfafe2]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-72dfafe2]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-72dfafe2]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-72dfafe2]{display:flex;align-items:center;padding:12px 24px 11px;line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.menu[data-v-72dfafe2]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-72dfafe2]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-72dfafe2]{display:none}}.menu-icon[data-v-72dfafe2]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-72dfafe2]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-72dfafe2]{padding:12px 32px 11px}}.VPSwitch[data-v-85eab0dd]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-85eab0dd]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-85eab0dd]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-85eab0dd]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-85eab0dd] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-85eab0dd] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-fd2e402d]{opacity:1}.moon[data-v-fd2e402d],.dark .sun[data-v-fd2e402d]{opacity:0}.dark .moon[data-v-fd2e402d]{opacity:1}.dark .VPSwitchAppearance[data-v-fd2e402d] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-0e473924]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-0e473924]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-061ea3dc]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-061ea3dc]{display:block;border-radius:6px;padding:0 12px;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);white-space:nowrap;transition:background-color .25s,color .25s}.link[data-v-061ea3dc]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-061ea3dc]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-1d87b0cf]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-1d87b0cf]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-1d87b0cf]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-1d87b0cf]{padding:0 12px;line-height:32px;font-size:14px;font-weight:600;color:var(--vp-c-text-2);white-space:nowrap;transition:color .25s}.VPMenu[data-v-ac93fd39]{border-radius:12px;padding:12px;min-width:128px;border:1px solid var(--vp-c-divider);background-color:var(--vp-c-bg-elv);box-shadow:var(--vp-shadow-3);transition:background-color .5s;max-height:calc(100vh - var(--vp-nav-height));overflow-y:auto}.VPMenu[data-v-ac93fd39] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-ac93fd39] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-ac93fd39] .group:last-child{padding-bottom:0}.VPMenu[data-v-ac93fd39] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-ac93fd39] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-ac93fd39] .label{flex-grow:1;line-height:28px;font-size:12px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.VPMenu[data-v-ac93fd39] .action{padding-left:24px}.VPFlyout[data-v-3c7b27f2]{position:relative}.VPFlyout[data-v-3c7b27f2]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-3c7b27f2]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-3c7b27f2]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-3c7b27f2]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-3c7b27f2]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-3c7b27f2],.button[aria-expanded=true]+.menu[data-v-3c7b27f2]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-3c7b27f2]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-3c7b27f2]{display:flex;align-items:center;padding:0 12px;height:var(--vp-nav-height);color:var(--vp-c-text-1);transition:color .5s}.text[data-v-3c7b27f2]{display:flex;align-items:center;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.option-icon[data-v-3c7b27f2]{margin-right:0;font-size:16px}.text-icon[data-v-3c7b27f2]{margin-left:4px;font-size:14px}.icon[data-v-3c7b27f2]{font-size:20px;transition:fill .25s}.menu[data-v-3c7b27f2]{position:absolute;top:calc(var(--vp-nav-height) / 2 + 20px);right:0;opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s,transform .25s}.VPSocialLink[data-v-dd51b7a6]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-dd51b7a6]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-dd51b7a6]>svg,.VPSocialLink[data-v-dd51b7a6]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-e94f3a92]{display:flex;justify-content:center}.VPNavBarExtra[data-v-6b18f3e7]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-6b18f3e7]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-6b18f3e7]{display:none}}.trans-title[data-v-6b18f3e7]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-6b18f3e7],.item.social-links[data-v-6b18f3e7]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-6b18f3e7]{min-width:176px}.appearance-action[data-v-6b18f3e7]{margin-right:-2px}.social-links-list[data-v-6b18f3e7]{margin:-4px -8px}.VPNavBarHamburger[data-v-c1b4e6f6]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-c1b4e6f6]{display:none}}.container[data-v-c1b4e6f6]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-c1b4e6f6]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-c1b4e6f6]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-c1b4e6f6]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-c1b4e6f6]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-c1b4e6f6]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-c1b4e6f6]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-c1b4e6f6],.VPNavBarHamburger.active:hover .middle[data-v-c1b4e6f6],.VPNavBarHamburger.active:hover .bottom[data-v-c1b4e6f6]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-c1b4e6f6],.middle[data-v-c1b4e6f6],.bottom[data-v-c1b4e6f6]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-c1b4e6f6]{top:0;left:0;transform:translate(0)}.middle[data-v-c1b4e6f6]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-c1b4e6f6]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-3b8abf07]{display:flex;align-items:center;padding:0 12px;line-height:var(--vp-nav-height);font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.VPNavBarMenuLink.active[data-v-3b8abf07],.VPNavBarMenuLink[data-v-3b8abf07]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-74640b02]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-74640b02]{display:flex}}/*! @docsearch/css 3.6.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 rgba(3,4,9,.30196078431372547);--docsearch-footer-background:#1e2136;--docsearch-footer-shadow:inset 0 1px 0 0 rgba(73,76,106,.5),0 -4px 8px 0 rgba(0,0,0,.2);--docsearch-logo-color:#fff;--docsearch-muted-color:#7f8497}.DocSearch-Button{align-items:center;background:var(--docsearch-searchbox-background);border:0;border-radius:40px;color:var(--docsearch-muted-color);cursor:pointer;display:flex;font-weight:500;height:36px;justify-content:space-between;margin:0 0 0 16px;padding:0 8px;-webkit-user-select:none;user-select:none}.DocSearch-Button:active,.DocSearch-Button:focus,.DocSearch-Button:hover{background:var(--docsearch-searchbox-focus-background);box-shadow:var(--docsearch-searchbox-shadow);color:var(--docsearch-text-color);outline:none}.DocSearch-Button-Container{align-items:center;display:flex}.DocSearch-Search-Icon{stroke-width:1.6}.DocSearch-Button .DocSearch-Search-Icon{color:var(--docsearch-text-color)}.DocSearch-Button-Placeholder{font-size:1rem;padding:0 12px 0 6px}.DocSearch-Button-Keys{display:flex;min-width:calc(40px + .8em)}.DocSearch-Button-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;position:relative;padding:0 0 2px;border:0;top:-1px;width:20px}.DocSearch-Button-Key--pressed{transform:translate3d(0,1px,0);box-shadow:var(--docsearch-key-pressed-shadow)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-action,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-icon,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-path,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-text,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-title,.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.DocSearch-Hit[aria-selected=true] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border-radius:2px;box-shadow:var(--docsearch-key-shadow);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;color:var(--docsearch-muted-color);border:0;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-352772f4]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-352772f4]{display:flex;align-items:center}}.title[data-v-00cb6549]{display:flex;align-items:center;border-bottom:1px solid transparent;width:100%;height:var(--vp-nav-height);font-size:16px;font-weight:600;color:var(--vp-c-text-1);transition:opacity .25s}@media (min-width: 960px){.title[data-v-00cb6549]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-00cb6549]{border-bottom-color:var(--vp-c-divider)}}[data-v-00cb6549] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-0f8849a0]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-0f8849a0]{display:flex;align-items:center}}.title[data-v-0f8849a0]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-722f50dd]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .5s}.VPNavBar[data-v-722f50dd]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-722f50dd]:not(.home){background-color:transparent}.VPNavBar[data-v-722f50dd]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-722f50dd]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-722f50dd]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-722f50dd]{padding:0}}.container[data-v-722f50dd]{display:flex;justify-content:space-between;margin:0 auto;max-width:calc(var(--vp-layout-max-width) - 64px);height:var(--vp-nav-height);pointer-events:none}.container>.title[data-v-722f50dd],.container>.content[data-v-722f50dd]{pointer-events:none}.container[data-v-722f50dd] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-722f50dd]{max-width:100%}}.title[data-v-722f50dd]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-722f50dd]{position:absolute;top:0;left:0;z-index:2;padding:0 32px;width:var(--vp-sidebar-width);height:var(--vp-nav-height);background-color:transparent}}@media (min-width: 1440px){.VPNavBar.has-sidebar .title[data-v-722f50dd]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}.content[data-v-722f50dd]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-722f50dd]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-722f50dd]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.content-body[data-v-722f50dd]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-722f50dd]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-722f50dd]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-722f50dd]{column-gap:.5rem}}.menu+.translations[data-v-722f50dd]:before,.menu+.appearance[data-v-722f50dd]:before,.menu+.social-links[data-v-722f50dd]:before,.translations+.appearance[data-v-722f50dd]:before,.appearance+.social-links[data-v-722f50dd]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-722f50dd]:before,.translations+.appearance[data-v-722f50dd]:before{margin-right:16px}.appearance+.social-links[data-v-722f50dd]:before{margin-left:16px}.social-links[data-v-722f50dd]{margin-right:-8px}.divider[data-v-722f50dd]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-722f50dd]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-722f50dd]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-722f50dd]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-722f50dd]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-722f50dd]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-722f50dd]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-bbfb1988]{display:flex;justify-content:space-between;align-items:center;border-radius:8px;padding:12px 14px 12px 16px;background-color:var(--vp-c-bg-soft)}.text[data-v-bbfb1988]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-85dc717d]{display:block;border-bottom:1px solid var(--vp-c-divider);padding:12px 0 11px;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:border-color .25s,color .25s}.VPNavScreenMenuLink[data-v-85dc717d]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-f2af6f4c]{display:block;margin-left:12px;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-1);transition:color .25s}.VPNavScreenMenuGroupLink[data-v-f2af6f4c]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-dcc3bde8]{display:block}.title[data-v-dcc3bde8]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-bad045b1]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-bad045b1]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-bad045b1]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-bad045b1]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-bad045b1]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-bad045b1]{transform:rotate(45deg)}.button[data-v-bad045b1]{display:flex;justify-content:space-between;align-items:center;padding:12px 4px 11px 0;width:100%;line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-1);transition:color .25s}.button[data-v-bad045b1]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-bad045b1]{transition:transform .25s}.group[data-v-bad045b1]:first-child{padding-top:0}.group+.group[data-v-bad045b1],.group+.item[data-v-bad045b1]{padding-top:4px}.VPNavScreenTranslations[data-v-d4d09860]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-d4d09860]{height:auto}.title[data-v-d4d09860]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-d4d09860]{font-size:16px}.icon.lang[data-v-d4d09860]{margin-right:8px}.icon.chevron[data-v-d4d09860]{margin-left:4px}.list[data-v-d4d09860]{padding:4px 0 0 24px}.link[data-v-d4d09860]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-8ac9a04c]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 1px);right:0;bottom:0;left:0;padding:0 32px;width:100%;background-color:var(--vp-nav-screen-bg-color);overflow-y:auto;transition:background-color .5s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-8ac9a04c],.VPNavScreen.fade-leave-active[data-v-8ac9a04c]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-8ac9a04c],.VPNavScreen.fade-leave-active .container[data-v-8ac9a04c]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-8ac9a04c],.VPNavScreen.fade-leave-to[data-v-8ac9a04c]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-8ac9a04c],.VPNavScreen.fade-leave-to .container[data-v-8ac9a04c]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-8ac9a04c]{display:none}}.container[data-v-8ac9a04c]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-8ac9a04c],.menu+.appearance[data-v-8ac9a04c],.translations+.appearance[data-v-8ac9a04c]{margin-top:24px}.menu+.social-links[data-v-8ac9a04c]{margin-top:16px}.appearance+.social-links[data-v-8ac9a04c]{margin-top:16px}.VPNav[data-v-c483df97]{position:relative;top:var(--vp-layout-top-height, 0px);left:0;z-index:var(--vp-z-index-nav);width:100%;pointer-events:none;transition:background-color .5s}@media (min-width: 960px){.VPNav[data-v-c483df97]{position:fixed}}.VPSidebarItem.level-0[data-v-9b8ffdfe]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-9b8ffdfe]{padding-bottom:10px}.item[data-v-9b8ffdfe]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-9b8ffdfe]{cursor:pointer}.indicator[data-v-9b8ffdfe]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-9b8ffdfe],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-9b8ffdfe],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-9b8ffdfe],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-9b8ffdfe]{background-color:var(--vp-c-brand-1)}.link[data-v-9b8ffdfe]{display:flex;align-items:center;flex-grow:1}.text[data-v-9b8ffdfe]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-9b8ffdfe]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-9b8ffdfe],.VPSidebarItem.level-2 .text[data-v-9b8ffdfe],.VPSidebarItem.level-3 .text[data-v-9b8ffdfe],.VPSidebarItem.level-4 .text[data-v-9b8ffdfe],.VPSidebarItem.level-5 .text[data-v-9b8ffdfe]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-9b8ffdfe],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-9b8ffdfe]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-1.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-2.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-3.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-4.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-5.has-active>.item>.text[data-v-9b8ffdfe],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-9b8ffdfe]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-9b8ffdfe],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-9b8ffdfe]{color:var(--vp-c-brand-1)}.caret[data-v-9b8ffdfe]{display:flex;justify-content:center;align-items:center;margin-right:-7px;width:32px;height:32px;color:var(--vp-c-text-3);cursor:pointer;transition:color .25s;flex-shrink:0}.item:hover .caret[data-v-9b8ffdfe]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-9b8ffdfe]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-9b8ffdfe]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-9b8ffdfe]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-9b8ffdfe],.VPSidebarItem.level-2 .items[data-v-9b8ffdfe],.VPSidebarItem.level-3 .items[data-v-9b8ffdfe],.VPSidebarItem.level-4 .items[data-v-9b8ffdfe],.VPSidebarItem.level-5 .items[data-v-9b8ffdfe]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-9b8ffdfe]{display:none}.VPSidebar[data-v-4455554e]{position:fixed;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);padding:32px 32px 96px;width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-sidebar-bg-color);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease;overscroll-behavior:contain}.VPSidebar.open[data-v-4455554e]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-4455554e]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-4455554e]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-4455554e]{padding-left:max(32px,calc((100% - (var(--vp-layout-max-width) - 64px)) / 2));width:calc((100% - (var(--vp-layout-max-width) - 64px)) / 2 + var(--vp-sidebar-width) - 32px)}}@media (min-width: 960px){.curtain[data-v-4455554e]{position:sticky;top:-64px;left:0;z-index:1;margin-top:calc(var(--vp-nav-height) * -1);margin-right:-32px;margin-left:-32px;height:var(--vp-nav-height);background-color:var(--vp-sidebar-bg-color)}}.nav[data-v-4455554e]{outline:0}.group+.group[data-v-4455554e]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-4455554e]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-b972d4be]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-b972d4be]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-b972d4be]{top:14px;left:16px}}.Layout[data-v-7da325e9]{display:flex;flex-direction:column;min-height:100vh}.VPButton[data-v-67c84f68]{display:inline-block;border:1px solid transparent;text-align:center;font-weight:600;white-space:nowrap;transition:color .25s,border-color .25s,background-color .25s}.VPButton[data-v-67c84f68]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-67c84f68]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-67c84f68]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-67c84f68]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-67c84f68]:hover{border-color:var(--vp-button-brand-hover-border);color:var(--vp-button-brand-hover-text);background-color:var(--vp-button-brand-hover-bg)}.VPButton.brand[data-v-67c84f68]:active{border-color:var(--vp-button-brand-active-border);color:var(--vp-button-brand-active-text);background-color:var(--vp-button-brand-active-bg)}.VPButton.alt[data-v-67c84f68]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-67c84f68]:hover{border-color:var(--vp-button-alt-hover-border);color:var(--vp-button-alt-hover-text);background-color:var(--vp-button-alt-hover-bg)}.VPButton.alt[data-v-67c84f68]:active{border-color:var(--vp-button-alt-active-border);color:var(--vp-button-alt-active-text);background-color:var(--vp-button-alt-active-bg)}.VPButton.sponsor[data-v-67c84f68]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-67c84f68]:hover{border-color:var(--vp-button-sponsor-hover-border);color:var(--vp-button-sponsor-hover-text);background-color:var(--vp-button-sponsor-hover-bg)}.VPButton.sponsor[data-v-67c84f68]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}.VPHomeSponsors[data-v-2fa3d7af]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-2fa3d7af]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-2fa3d7af]{margin:128px 0}}.VPHomeSponsors[data-v-2fa3d7af]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-2fa3d7af]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-2fa3d7af]{padding:0 64px}}.container[data-v-2fa3d7af]{margin:0 auto;max-width:1152px}.love[data-v-2fa3d7af]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-2fa3d7af]{display:inline-block}.message[data-v-2fa3d7af]{margin:0 auto;padding-top:10px;max-width:320px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.sponsors[data-v-2fa3d7af]{padding-top:32px}.action[data-v-2fa3d7af]{padding-top:40px;text-align:center}.VPTeamPage[data-v-4e32412b]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-4e32412b]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-4e32412b-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-4e32412b-s],.VPTeamMembers+.VPTeamPageSection[data-v-4e32412b-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-4e32412b-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-4e32412b-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-4e32412b-s],.VPTeamMembers+.VPTeamPageSection[data-v-4e32412b-s]{margin-top:96px}}.VPTeamMembers[data-v-4e32412b-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-4e32412b-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-4e32412b-s]{padding:0 64px}}.VPTeamPageTitle[data-v-7aee7255]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-7aee7255]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-7aee7255]{padding:80px 64px 48px}}.title[data-v-7aee7255]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-7aee7255]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-7aee7255]{margin:0 auto;max-width:512px;padding-top:12px;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 768px){.lead[data-v-7aee7255]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-94e9f46b]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-94e9f46b]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-94e9f46b]{padding:0 64px}}.title[data-v-94e9f46b]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-94e9f46b]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-94e9f46b]{position:relative;display:inline-block;padding:0 24px;letter-spacing:0;line-height:32px;font-size:20px;font-weight:500;background-color:var(--vp-c-bg)}.lead[data-v-94e9f46b]{margin:0 auto;max-width:480px;padding-top:12px;text-align:center;line-height:24px;font-size:16px;font-weight:500;color:var(--vp-c-text-2)}.members[data-v-94e9f46b]{padding-top:40px}.VPTeamMembersItem[data-v-12daef67]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-12daef67]{padding:32px}.VPTeamMembersItem.small .data[data-v-12daef67]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-12daef67]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-12daef67]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-12daef67]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-12daef67]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-12daef67]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-12daef67]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-12daef67]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-12daef67]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-12daef67]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-12daef67]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-12daef67]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-12daef67]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-12daef67]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-12daef67]{text-align:center}.avatar[data-v-12daef67]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-12daef67]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-12daef67]{margin:0;font-weight:600}.affiliation[data-v-12daef67]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-12daef67]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-12daef67]:hover{color:var(--vp-c-brand-1)}.desc[data-v-12daef67]{margin:0 auto}.desc[data-v-12daef67] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-12daef67]{display:flex;justify-content:center;height:56px}.sp-link[data-v-12daef67]{display:flex;justify-content:center;align-items:center;text-align:center;padding:16px;font-size:14px;font-weight:500;color:var(--vp-c-sponsor);background-color:var(--vp-c-bg-soft);transition:color .25s,background-color .25s}.sp .sp-link.link[data-v-12daef67]:hover,.sp .sp-link.link[data-v-12daef67]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-12daef67]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-0bc45de8]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-0bc45de8]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-0bc45de8]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-0bc45de8]{max-width:876px}.VPTeamMembers.medium .container[data-v-0bc45de8]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-0bc45de8]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-0bc45de8]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-0bc45de8]{max-width:760px}.container[data-v-0bc45de8]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.AppBadgeList[data-v-86574938]{display:flex;flex-wrap:wrap;align-items:flex-start;gap:4px;min-height:20px;padding:0;list-style:none}.badge[data-v-86574938]{margin:0}.authors[data-v-6584a84b]{display:flex;flex-wrap:wrap;align-items:flex-start;gap:10px;list-style:none;padding:0;margin:0}.author[data-v-6584a84b]{display:flex;gap:10px;margin:0}.author-text[data-v-6584a84b]{display:flex;flex-direction:column;margin:0}.author-name[data-v-6584a84b]{line-height:1.25}.author-title[data-v-6584a84b]{font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.author-avatar[data-v-6584a84b]{width:48px;height:48px}.VPHero .VPImage.image-src{max-width:90%}.Sponsors{display:grid;justify-items:center}.Sponsors svg{width:100%;height:auto}.VPLocalSearchBox[data-v-01ed6117]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-01ed6117]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-01ed6117]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-01ed6117]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-01ed6117]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-01ed6117]{padding:0 8px}}.search-bar[data-v-01ed6117]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-01ed6117]{display:block;font-size:18px}.navigate-icon[data-v-01ed6117]{display:block;font-size:14px}.search-icon[data-v-01ed6117]{margin:8px}@media (max-width: 767px){.search-icon[data-v-01ed6117]{display:none}}.search-input[data-v-01ed6117]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-01ed6117]{padding:6px 4px}}.search-actions[data-v-01ed6117]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-01ed6117]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-01ed6117]{display:none}}.search-actions button[data-v-01ed6117]{padding:8px}.search-actions button[data-v-01ed6117]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-01ed6117]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-01ed6117]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-01ed6117]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-01ed6117]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-01ed6117]{display:none}}.search-keyboard-shortcuts kbd[data-v-01ed6117]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-01ed6117]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-01ed6117]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-01ed6117]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-01ed6117]{margin:8px}}.titles[data-v-01ed6117]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-01ed6117]{display:flex;align-items:center;gap:4px}.title.main[data-v-01ed6117]{font-weight:500}.title-icon[data-v-01ed6117]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-01ed6117]{opacity:.5}.result.selected[data-v-01ed6117]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-01ed6117]{position:relative}.excerpt[data-v-01ed6117]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-01ed6117]{opacity:1}.excerpt[data-v-01ed6117] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-01ed6117] mark,.excerpt[data-v-01ed6117] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-01ed6117] .vp-code-group .tabs{display:none}.excerpt[data-v-01ed6117] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-01ed6117]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-01ed6117]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-01ed6117],.result.selected .title-icon[data-v-01ed6117]{color:var(--vp-c-brand-1)!important}.no-results[data-v-01ed6117]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-01ed6117]{flex:none} diff --git a/blog/2023-12-12-announcing-oxlint.html b/blog/2023-12-12-announcing-oxlint.html index 33cbbb3c7f..3b22f98ad8 100644 --- a/blog/2023-12-12-announcing-oxlint.html +++ b/blog/2023-12-12-announcing-oxlint.html @@ -6,13 +6,13 @@ Oxlint General Availability | The JavaScript Oxidation Compiler - + - + @@ -35,8 +35,8 @@ -
Skip to content

Oxlint General Availability

We are thrilled to announce that oxlint is now generally available! This milestone signifies our team's ability to promptly address and triage issues.

Oxlint is a JavaScript linter designed to catch erroneous or useless code without requiring any configurations by default.

How to Use

At this stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

For faster feedback loops, we recommend running oxlint before ESLint in your lint-staged or CI setup, considering it only takes a few seconds to run on large codebases.

To test oxlint in your JavaScript / TypeScript codebase, simply execute the following command at the root directory of your repository:

sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
sh
$ bunx oxlint@latest
sh
$ deno run npm:oxlint@latest

Alternatively, refer to the installation guide for detailed instructions.

Design

50-100 Times Faster than ESLint

In real-world scenarios, Shopify reported that their 75 CI minutes ESLint run is now only 10 seconds.

From Jason Miller, Shopify DX and creator of Preact:

oxlint has been a massive win for us at Shopify. Our previous linting setup took 75 minutes to run, so we were fanning it out across 40+ workers in CI.

By comparison, oxlint takes around 10 seconds to lint the same codebase on a single worker, and the output is easier to interpret.

We even caught a few bugs that were hidden or skipped by our old setup when we migrated!

The majority of the performance gains stem from Oxlint being purposefully designed for performance, utilizing Rust and parallel processing as key factors.

Lint for Correctness

Oxlint defaults to identifying erroneous, redundant, or confusing code — prioritizing correctness over unnecessary nitpicking rules (categorized as perf, suspicious, pedantic, or style), which are disabled by default.

Ease of Use

Setting up new JavaScript / TypeScript codebases is becoming increasingly complex. There's a high likelihood of encountering compatibility issues among your tools, potentially resulting in hours of wasted time.

That's why we designed oxlint to be zero-config out of the box; even Node.js is not a requirement. Most adjustments can be made through the command-line, and reading from ESLint configuration file is currently work in progress.

Enhanced Diagnostics

Understanding linter messages can be challenging. Oxlint aims to simplify this by pinpointing root causes and providing helpful messages — eliminating the need for lengthy rule documentation reading, saving valuable time.

Running oxlint -D perf in the vscode repository:

Consolidated Rules

Oxlint does not provide a plugin system yet, but we are actively consolidating rules from popular plugins like TypeScript, React, Jest, Unicorn, JSX-a11y and Import.

We recognize the importance of plugins in the JavaScript ecosystem and are also investigating a DSL-based plugin system.

However, you might appreciate a standalone linter — no need to manage a list of plugin dependencies, navigate through compatibility issues, or resort to forked plugins due to version constraints.


Happy linting and have a joyful holiday season!

To get started, follow the installation guide, learn more about the oxc project, or discuss on Hacker News.

Released under the MIT License.

- +
Skip to content

Oxlint General Availability

We are thrilled to announce that oxlint is now generally available! This milestone signifies our team's ability to promptly address and triage issues.

Oxlint is a JavaScript linter designed to catch erroneous or useless code without requiring any configurations by default.

How to Use

At this stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

For faster feedback loops, we recommend running oxlint before ESLint in your lint-staged or CI setup, considering it only takes a few seconds to run on large codebases.

To test oxlint in your JavaScript / TypeScript codebase, simply execute the following command at the root directory of your repository:

sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
sh
$ bunx oxlint@latest
sh
$ deno run npm:oxlint@latest

Alternatively, refer to the installation guide for detailed instructions.

Design

50-100 Times Faster than ESLint

In real-world scenarios, Shopify reported that their 75 CI minutes ESLint run is now only 10 seconds.

From Jason Miller, Shopify DX and creator of Preact:

oxlint has been a massive win for us at Shopify. Our previous linting setup took 75 minutes to run, so we were fanning it out across 40+ workers in CI.

By comparison, oxlint takes around 10 seconds to lint the same codebase on a single worker, and the output is easier to interpret.

We even caught a few bugs that were hidden or skipped by our old setup when we migrated!

The majority of the performance gains stem from Oxlint being purposefully designed for performance, utilizing Rust and parallel processing as key factors.

Lint for Correctness

Oxlint defaults to identifying erroneous, redundant, or confusing code — prioritizing correctness over unnecessary nitpicking rules (categorized as perf, suspicious, pedantic, or style), which are disabled by default.

Ease of Use

Setting up new JavaScript / TypeScript codebases is becoming increasingly complex. There's a high likelihood of encountering compatibility issues among your tools, potentially resulting in hours of wasted time.

That's why we designed oxlint to be zero-config out of the box; even Node.js is not a requirement. Most adjustments can be made through the command-line, and reading from ESLint configuration file is currently work in progress.

Enhanced Diagnostics

Understanding linter messages can be challenging. Oxlint aims to simplify this by pinpointing root causes and providing helpful messages — eliminating the need for lengthy rule documentation reading, saving valuable time.

Running oxlint -D perf in the vscode repository:

Consolidated Rules

Oxlint does not provide a plugin system yet, but we are actively consolidating rules from popular plugins like TypeScript, React, Jest, Unicorn, JSX-a11y and Import.

We recognize the importance of plugins in the JavaScript ecosystem and are also investigating a DSL-based plugin system.

However, you might appreciate a standalone linter — no need to manage a list of plugin dependencies, navigate through compatibility issues, or resort to forked plugins due to version constraints.


Happy linting and have a joyful holiday season!

To get started, follow the installation guide, learn more about the oxc project, or discuss on Hacker News.

Released under the MIT License.

+ \ No newline at end of file diff --git a/blog/2024-05-04-import-plugin-alpha.html b/blog/2024-05-04-import-plugin-alpha.html index 31208f7a31..9f53bc0f8a 100644 --- a/blog/2024-05-04-import-plugin-alpha.html +++ b/blog/2024-05-04-import-plugin-alpha.html @@ -6,7 +6,7 @@ Oxlint Import Plugin Alpha | The JavaScript Oxidation Compiler - + @@ -47,7 +47,7 @@ -> ./users - apps/web/playwright/fixtures/users.ts -> ../lib/testUtils - apps/web/playwright/lib/testUtils.ts -> ./fixtures - apps/web/playwright/lib/fixtures.ts

This isn't a long list of features, but due to the complexity of the current state of the ecosystem, it requires a lot of effort to implement these rules and ensure they work correctly.

Over the past six months, we have worked in our spare time and successfully completed all the prerequisites for the --import-plugin to work:

  • a resolver for module resolution
  • a small "runtime" to maximize processing dependent files in parallel
  • a ModuleRecord data structure for storing import / export information, and its respective builder

How can I help?

If you are a project maintainer (a.k.a. configuration engineer) and lack the time or energy to keep ESLint and all its plugins updated, you may follow @brooooooklyn's lead and replace ESLint with oxlint in all his projects.

If you are an open-source enthusiast and are willing to help out, come talk to us on discord, check out the linter product plan and progress issue, or help by proposing new rules that were deferred.

If you are an engineering manager, or are willing to migrate your project to oxlint (with 330 rules and growing) to keep your infrastructure costs down, you may consider sponsoring so we can prioritize your project.

Please remember oxlint is currently community driven, I believe that with enough resources, we can make --import-plugin generally available in the next few months.


To start using oxlint, follow the installation guide or learn more about the oxc project.

- + \ No newline at end of file diff --git a/branding.html b/branding.html index 8c1612dc52..6614bcaa7d 100644 --- a/branding.html +++ b/branding.html @@ -6,7 +6,7 @@ Branding | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Branding

Icons

SVG

           

PNG

     

With bubbles

For larger displays and stickers.

PNG

     

SVG

     

Banners

Visuals

Colors: #91EDE9 #FF915C #48ACBA #2B3C5A #8A380F

uwu

uwu images designed by icarusgkx

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/codegen.html b/docs/contribute/codegen.html index 4dd399ea45..8ada9631b8 100644 --- a/docs/contribute/codegen.html +++ b/docs/contribute/codegen.html @@ -6,7 +6,7 @@ Codegen | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/debugging.html b/docs/contribute/debugging.html index 0139a800e8..7d9c8b29cf 100644 --- a/docs/contribute/debugging.html +++ b/docs/contribute/debugging.html @@ -6,7 +6,7 @@ Debugging | The JavaScript Oxidation Compiler - + @@ -39,7 +39,7 @@ debug = true strip = false panic = "unwind"

Build the binary:

bash
cargo build --release --bin oxlint --features allocator

Run the binary:

bash
rust-lldb -- ./target/release/oxlint

Once it launches, press r for running the program.

Debug TypeScript in VSCode

According to their debugging guide, in the TypeScript repository:

- + \ No newline at end of file diff --git a/docs/contribute/development.html b/docs/contribute/development.html index 699932ef68..bb48f7af52 100644 --- a/docs/contribute/development.html +++ b/docs/contribute/development.html @@ -6,7 +6,7 @@ Getting Started | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Getting Started

Clone Repository

bash
git clone git@github.com:oxc-project/oxc.git

Set Up Project

Install Rust

If you have not yet installed Rust, follow the official instruction and install Rust.

After installing Rust, run the following command on the project root:

bash
rustup show

rustup show reads the ./rust-toolchain.toml file and installs the correct Rust toolchain and components for this project.

cargo binstall

Some Cargo tools are required to develop OXC, and it is recommended to use cargo binstall, which provides a low-complexity mechanism to install rust binaries and is faster way than building them from source by running cargo install.

bash
cargo install cargo-binstall

You can also download the pre-compiled binary and save it in ~/.cargo/bin.

just

OXC utilizes just, which is a handy way to save and run project-specific commands:

bash
cargo binstall just -y

Dependencies

Run the following command in justfile at the project root to install dependencies:

bash
just init

You can see the list of available commands by running just.

You can run just ready (or, just r in short) to make sure the whole project builds and runs correctly.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/formatter.html b/docs/contribute/formatter.html index 93612bf029..ad9758904a 100644 --- a/docs/contribute/formatter.html +++ b/docs/contribute/formatter.html @@ -6,7 +6,7 @@ Formatter | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Formatter (Prettier)

We are currently porting prettier to Oxc.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/introduction.html b/docs/contribute/introduction.html index a32bd1c752..26f6c6e339 100644 --- a/docs/contribute/introduction.html +++ b/docs/contribute/introduction.html @@ -6,7 +6,7 @@ Introduction | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Introduction

Thank you for your interest in contributing to Oxc!

Please check out our good first issues or ask for guidance on Discord.

We welcome and appreciate any form of contributions.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/linter.html b/docs/contribute/linter.html index a72887ff5f..94561d9241 100644 --- a/docs/contribute/linter.html +++ b/docs/contribute/linter.html @@ -6,7 +6,7 @@ Linter | The JavaScript Oxidation Compiler - + @@ -43,7 +43,7 @@ just new-oxc-rule name just new-deepscan-rule name just new-nextjs-rule name

Rule Category

General Advice

Pin point the error message to the shortest code span

We want the user to focus on the problematic code rather than deciphering the error message to identify which part of the code is erroneous.

- + \ No newline at end of file diff --git a/docs/contribute/minifier.html b/docs/contribute/minifier.html index a72ea5837b..0da28cd6fb 100644 --- a/docs/contribute/minifier.html +++ b/docs/contribute/minifier.html @@ -6,7 +6,7 @@ Minifier | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Minifier

JavaScript minification plays a crucial role in optimizing website performance as it reduces the amount of data sent to users, resulting in faster page loads. This holds tremendous economic value, particularly for e-commerce websites, where every second can equate to millions of dollars.

However, existing minifiers typically require a trade-off between compression quality and speed. You have to choose between the slowest for the best compression or the fastest for less compression. But what if we could develop a faster minifier without compromising on compression?

We are actively working on a prototype that aims to achieve this goal, by porting all test cases from well-known minifiers such as google-closure-compiler, terser, esbuild, and tdewolff-minify.

Preliminary results indicate that we are on track to achieve our objectives. With the Oxc minifier, you can expect faster minification times without sacrificing compression quality.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/parser.html b/docs/contribute/parser.html index 9a68cb6040..841e89e167 100644 --- a/docs/contribute/parser.html +++ b/docs/contribute/parser.html @@ -6,7 +6,7 @@ Parser | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Parser

We aim to be the fastest Rust-based ready-for-production parser.

Conformance Tests

bash
just c

Aliased to just coverage, runs the following conformance test suites by using the conformance runner found in tasks/coverage.

Test262

JavaScript has the ECMAScript Test Suite called Test262. The goal of Test262 is to provide test material that covers every observable behavior specified in the specification. Parser conformance uses the parse phase tests.

Babel

When new language features are added to JavaScript, it is required to have them implemented by Babel, this means Babel has another set of parser tests.

TypeScript

The TypeScript conformance tests can be found here.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/performance.html b/docs/contribute/performance.html index 0a44be867c..397e469762 100644 --- a/docs/contribute/performance.html +++ b/docs/contribute/performance.html @@ -6,7 +6,7 @@ Performance | The JavaScript Oxidation Compiler - + @@ -42,7 +42,7 @@ Target app exited, ending recording... Recording completed. Saving output file... Output file saved as: Launch_oxlint_2023-09-03_4.41.45 PM_EB179B85.trace

Open the trace file open Launch_oxlint_2023-09-03_4.41.45\ PM_EB179B85.trace.

To see a top down trace:

  1. On the top panel, click CPUs
  2. On the left input box, click x then select Time Profiler
  3. At the bottom panel, click "Call Tree", turn on "Invert Call Tree" and turn off separate by thread.

For memory and disk operations, use --template 'Allocations' and --template 'File Activity'.

- + \ No newline at end of file diff --git a/docs/contribute/resolver.html b/docs/contribute/resolver.html index 6c92f1216f..373e006b26 100644 --- a/docs/contribute/resolver.html +++ b/docs/contribute/resolver.html @@ -6,7 +6,7 @@ Resolver | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/rules.html b/docs/contribute/rules.html index 30a99c26d1..aad9657f9b 100644 --- a/docs/contribute/rules.html +++ b/docs/contribute/rules.html @@ -6,7 +6,7 @@ Rules and Policy | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Introduction

PR Rules

  • We prefer smaller PRs.
  • Try stacked PRs with graphite if you have write access, which will be given to you when you contribute a lot.
  • Please create an issue or discussion if the PR contains architectural changes.

Development Policy

  • All performance issues (runtime and compilation speed) are considered as bugs in this project.
  • Embrace data-oriented design.
  • APIs should be simple and well-documented.
  • Third-party dependencies should be minimal.
  • Avoid the regex crate when possible. Regex is slow, most of them can be rewritten in a performant way by using Rust iterator and string methods.
  • Avoid heavy macros or generics or any Rust techniques that would penalize compilation speed.
  • Always reference the source if the implementation comes from elsewhere.

Maintenance Policy

  • Monitor code coverage for unused code. Aim for 99% code coverage.
  • CI time should be actively monitored and reduced to speed up merging of PRs. The current CI time on GitHub actions is around 3 minutes.

Conventional Commits

We follow conventional commits:

The commit contains the following structural elements, to communicate intent to the consumers:

  • fix: a commit of the type fix patches a bug in your codebase.
  • feat: a commit of the type feat introduces a new feature to the codebase.
  • BREAKING CHANGE: a appends a ! after the type/scope, introduces a breaking API change, e.g. feat(parser)!: new feature.
  • the scopes are crate names.
  • the types are feat:, fix:, chore:, ci:, docs:, style:, refactor:, perf: and test:.

Action Policy

Taken from Astral's values:

We bias towards action, even in the face of uncertainty. We favor pragmatic doing over prolonged debating; we favor asking for forgiveness over permission. We value decisiveness — especially when a decision isn’t clear cut, and especially when a decision is reversible.

A bias towards action is not the same as recklessness. Rather, it’s a bias towards making responsible decisions and acting on them with urgency, even if we’re left with lingering ambiguity or known unknowns.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/transformer.html b/docs/contribute/transformer.html index c729098a1b..c8995752fa 100644 --- a/docs/contribute/transformer.html +++ b/docs/contribute/transformer.html @@ -6,7 +6,7 @@ Transformer | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Transformer

A transformer is responsible for turning higher versions of ECMAScript to a lower version that can be used in older browsers.

We are currently focusing on an esnext to es2015 transpiler.

See the umbrella issue for details.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/contribute/vscode.html b/docs/contribute/vscode.html index 8e1663f1c4..6f29fe3432 100644 --- a/docs/contribute/vscode.html +++ b/docs/contribute/vscode.html @@ -6,7 +6,7 @@ VSCode Extension | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

VSCode Extension

Development

Build the extension and run it inside vscode:

  1. pnpm install
  2. pnpm run build
  3. open vscode and run the command palette (ctrl-shift-p) "Extensions: Install from VSIX..."
  4. open ./editors/vscode/oxc_language_server.vsix
  5. open a .js / .ts file, add debugger; and save
  6. see the warning eslint(no-debugger): debugger statement is not allowed - oxc

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/introduction.html b/docs/guide/introduction.html index 0b78e1a7a2..bef45ccc85 100644 --- a/docs/guide/introduction.html +++ b/docs/guide/introduction.html @@ -6,7 +6,7 @@ Getting Started | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Getting Started

Overview

The JavaScript Oxidation Compiler (Oxc) is a collection of high-performance tools for the JavaScript language written in Rust.

Our focus lies in constructing essential compiler tools for JavaScript: parser, linter, formatter, transpiler, minifier and resolver.

Additionally, we provide support for emerging JavaScript tools like Rolldown.

Our goal is to create and empower tooling for The Third Age of JavaScript.

Endorsements

Evan You, creator of Vue.js and Vite:

Ran oxlint on the Vue 3 codebase, ~200 rules + ~590 files finished in 50ms 🤯 (30ms re-runs)

The performance is absolutely nuts

Jason Miller, creator of Preact:

oxlint has been a massive win for us at Shopify. Our previous linting setup took 75 minutes to run, so we were fanning it out across 40+ workers in CI.

By comparison, oxlint takes around 10 seconds to lint the same codebase on a single worker, and the output is easier to interpret.

We even caught a few bugs that were hidden or skipped by our old setup when we migrated!

Yagiz Nizipli, founder of Node.js performance team:

I'm impressed by how oxc is actively encouraging JavaScript tools to improve their performance.

Eric Simons, CEO of StackBlitz:

Oxc is slept on rn

Most JS/TS toolchains will be using it within the next few yrs imo

Miles Johnson, creator of Moonrepo:

It's crazy how good oxlint (and oxc tools) is. Not just in performance, but ease of use. Banking on Rust was a good choice!

Joe Savona, React team member:

For…reasons I am experimenting w various Rust-based JS compilers. I don’t agree w every design decision but overall oxc is really well done.

Sathya Gunasekaran, React team member:

oxc is kinda neat

Special Thanks

  • Biome and Ruff: This project would not exist without the help, inspiration, and encouragement from these two projects, who are pioneers in the field of Rust-based unified toolchains.
  • quick-lint-js and elm-review: For educating how static analysis could be improved in both performance and usability.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/usage/linter.html b/docs/guide/usage/linter.html index 9cf7e2af1e..ff2931cb61 100644 --- a/docs/guide/usage/linter.html +++ b/docs/guide/usage/linter.html @@ -6,13 +6,13 @@ Linter | The JavaScript Oxidation Compiler - + - + @@ -35,7 +35,7 @@ -
Skip to content

Linter (oxlint)

  • npm weekly downloads

Oxlint is designed to catch erroneous or useless code without requiring any configurations by default.

INFO

At the current stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

We recommend running oxlint before ESLint in your lint-staged or CI setup for a quicker feedback loop, considering it only takes a few seconds to run on large codebases.

Features

Language Support

  • Supports:
    • JavaScript and TypeScript by their extensions js, mjs, cjs, jsx, ts, mts, cts and tsx.
    • <script> content of .vue, .astro and .svelte files.
  • No support for:

Installation

Run oxlint directly at the root of your repository:

sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
sh
$ bunx oxlint@latest
sh
$ deno run npm:oxlint@latest

Or save it to your package.json:

sh
$ npm add -D oxlint
sh
$ pnpm add -D oxlint
sh
$ yarn add -D oxlint
sh
$ bun add -D oxlint

oxlint does not require Node.js, the binaries can be downloaded from the latest GitHub releases.

Command-line Interface

See Command-line Interface

Configuration File

See Configuration File

Integration

ESLint

If you are looking for a way to use oxlint in projects that still need ESLint, You can use eslint-plugin-oxlint to turn off ESLint rules that are already supported by oxlint. So you can enjoy the speed of oxlint while still using ESLint.

lint-staged

json
{
+    
Skip to content

Linter (oxlint)

  • npm weekly downloads

Oxlint is designed to catch erroneous or useless code without requiring any configurations by default.

INFO

At the current stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

We recommend running oxlint before ESLint in your lint-staged or CI setup for a quicker feedback loop, considering it only takes a few seconds to run on large codebases.

Features

Language Support

  • Supports:
    • JavaScript and TypeScript by their extensions js, mjs, cjs, jsx, ts, mts, cts and tsx.
    • <script> content of .vue, .astro and .svelte files.
  • No support for:

Installation

Run oxlint directly at the root of your repository:

sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
sh
$ bunx oxlint@latest
sh
$ deno run npm:oxlint@latest

Or save it to your package.json:

sh
$ npm add -D oxlint
sh
$ pnpm add -D oxlint
sh
$ yarn add -D oxlint
sh
$ bun add -D oxlint

oxlint does not require Node.js, the binaries can be downloaded from the latest GitHub releases.

Command-line Interface

See Command-line Interface

Configuration File

See Configuration File

Integration

ESLint

If you are looking for a way to use oxlint in projects that still need ESLint, You can use eslint-plugin-oxlint to turn off ESLint rules that are already supported by oxlint. So you can enjoy the speed of oxlint while still using ESLint.

lint-staged

json
{
   "lint-staged": {
     "**/*.{js,mjs,cjs,jsx,ts,mts,cts,tsx,vue,astro,svelte}": "oxlint"
   }
@@ -51,7 +51,7 @@
     hooks:
       - id: oxlint
         verbose: true

Unplugin

https://www.npmjs.com/package/unplugin-oxlint

Vite plugin

https://www.npmjs.com/package/vite-plugin-oxlint

System Requirements

oxlint is built for darwin-arm64, darwin-x64, linux-arm64, linux-x64, win32-arm64 and win32-x64.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/usage/linter/cli.html b/docs/guide/usage/linter/cli.html index 1d26d563e1..49a2fb5a59 100644 --- a/docs/guide/usage/linter/cli.html +++ b/docs/guide/usage/linter/cli.html @@ -6,7 +6,7 @@ Command-line Interface | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Command-line Interface

Usage

oxlint [-c=<./oxlintrc.json>] [--fix] [PATH]...

Basic Configuration

  • -c, --config=<./oxlintrc.json> — Oxlint configuration file (experimental)
  • only .json extension is supported
  • tries to be compatible with the ESLint v8's format
  • --tsconfig=<./tsconfig.json> — TypeScript tsconfig.json path for reading path alias and project references for import plugin

Allowing / Denying Multiple Lints

Accumulate rules and categories from left to right on the command-line.

For example -D correctness -A no-debugger or -A all -D no-debugger. The categories are:

  • correctness - code that is outright wrong or useless (default)
  • suspicious - code that is most likely wrong or useless
  • pedantic - lints which are rather strict or have occasional false positives
  • style - code that should be written in a more idiomatic way
  • nursery - new lints that are still under development
  • restriction - lints which prevent the use of language and library features
  • all - all the categories listed above except nursery

Arguments:

  • -A, --allow=NAME — Allow the rule or category (suppress the lint)
  • -W, --warn=NAME — Deny the rule or category (emit a warning)
  • -D, --deny=NAME — Deny the rule or category (emit an error)

Enable Plugins

  • --disable-react-plugin — Disable react plugin, which is turned on by default
  • --disable-unicorn-plugin — Disable unicorn plugin, which is turned on by default
  • --disable-oxc-plugin — Disable oxc unique rules, which is turned on by default
  • --disable-typescript-plugin — Disable TypeScript plugin, which is turned on by default
  • --import-plugin — Enable the experimental import plugin and detect ESM problems. It is recommended to use along side with the --tsconfig option.
  • --jsdoc-plugin — Enable the experimental jsdoc plugin and detect JSDoc problems
  • --jest-plugin — Enable the Jest plugin and detect test problems
  • --vitest-plugin — Enable the Vitest plugin and detect test problems
  • --jsx-a11y-plugin — Enable the JSX-a11y plugin and detect accessibility problems
  • --nextjs-plugin — Enable the Next.js plugin and detect Next.js problems
  • --react-perf-plugin — Enable the React performance plugin and detect rendering performance problems

Fix Problems

  • --fix — Fix as many issues as possible. Only unfixed issues are reported in the output

Ignore Files

  • --ignore-path=PATH — Specify the file to use as your .eslintignore

  • --ignore-pattern=PAT — Specify patterns of files to ignore (in addition to those in .eslintignore)

    The supported syntax is the same as for .eslintignore and .gitignore files You should quote your patterns in order to avoid shell interpretation of glob patterns

  • --no-ignore — Disables excluding of files from .eslintignore files, --ignore-path flags and --ignore-pattern flags

  • --symlinks — Follow symbolic links. Oxlint ignores symbolic links by default.

Handle Warnings

  • --quiet — Disable reporting on warnings, only errors are reported
  • --deny-warnings — Ensure warnings produce a non-zero exit code
  • --max-warnings=INT — Specify a warning threshold, which can be used to force exit with an error status if there are too many warning-level rule violations in your project

Output

  • -f, --format=ARG — Use a specific output format (default, json, unix, checkstyle, github)

Miscellaneous

  • --silent — Do not display any diagnostics
  • --threads=INT — Number of threads to use. Set to 1 for using only 1 CPU core

Available positional items:

  • PATH — Single file, single path or list of paths

Available options:

  • --rules — list all the rules that are currently registered
  • -h, --help — Prints help information
  • -V, --version — Prints version information

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/usage/linter/config.html b/docs/guide/usage/linter/config.html index 76a5382c29..64e6d7a3ff 100644 --- a/docs/guide/usage/linter/config.html +++ b/docs/guide/usage/linter/config.html @@ -6,7 +6,7 @@ Oxlint Configuration File | The JavaScript Oxidation Compiler - + @@ -47,7 +47,7 @@ "eqeqeq": "warn" } }

env

type: object

Predefine global variables.

globals

type: object

Add or remove global variables.

rules

See Oxlint Rules

settings

type: object

Shared settings for plugins

settings.jsdoc

type: object

settings.jsdoc.augmentsExtendsReplacesDocs

type: boolean

Only for require-(yields|returns|description|example|param|throws) rule

settings.jsdoc.exemptDestructuredRootsFromChecks

type: boolean

Only for require-param-type and require-param-description rule

settings.jsdoc.ignoreInternal

type: boolean

For all rules but NOT apply to empty-tags rule

settings.jsdoc.ignorePrivate

type: boolean

For all rules but NOT apply to check-access and empty-tags rule

settings.jsdoc.ignoreReplacesDocs

type: boolean

Only for require-(yields|returns|description|example|param|throws) rule

settings.jsdoc.implementsReplacesDocs

type: boolean

Only for require-(yields|returns|description|example|param|throws) rule

settings.jsdoc.overrideReplacesDocs

type: boolean

Only for require-(yields|returns|description|example|param|throws) rule

settings.jsdoc.tagNamePreference

type: object

settings.jsx-a11y

type: object

settings.jsx-a11y.components

type: object

settings.jsx-a11y.polymorphicPropName

type: [ string, null ]

settings.next

type: object

settings.next.rootDir

settings.react

type: object

settings.react.formComponents

type: array

settings.react.formComponents[n]

settings.react.linkComponents

type: array

settings.react.linkComponents[n]

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/usage/linter/generated-cli.html b/docs/guide/usage/linter/generated-cli.html index ff9fc973a0..8a2d896d77 100644 --- a/docs/guide/usage/linter/generated-cli.html +++ b/docs/guide/usage/linter/generated-cli.html @@ -6,7 +6,7 @@ The JavaScript Oxidation Compiler | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Usage

oxlint [-c=<./oxlintrc.json>] [--fix] [PATH]...

Basic Configuration

  • -c, --config=<./oxlintrc.json> — Oxlint configuration file (experimental)
  • only .json extension is supported
  • tries to be compatible with the ESLint v8's format
  • --tsconfig=<./tsconfig.json> — TypeScript tsconfig.json path for reading path alias and project references for import plugin

Allowing / Denying Multiple Lints

Accumulate rules and categories from left to right on the command-line.

For example -D correctness -A no-debugger or -A all -D no-debugger. The categories are:

  • correctness - code that is outright wrong or useless (default)
  • suspicious - code that is most likely wrong or useless
  • pedantic - lints which are rather strict or have occasional false positives
  • style - code that should be written in a more idiomatic way
  • nursery - new lints that are still under development
  • restriction - lints which prevent the use of language and library features
  • all - all the categories listed above except nursery

Arguments:

  • -A, --allow=NAME — Allow the rule or category (suppress the lint)
  • -W, --warn=NAME — Deny the rule or category (emit a warning)
  • -D, --deny=NAME — Deny the rule or category (emit an error)

Enable Plugins

  • --disable-react-plugin — Disable react plugin, which is turned on by default
  • --disable-unicorn-plugin — Disable unicorn plugin, which is turned on by default
  • --disable-oxc-plugin — Disable oxc unique rules, which is turned on by default
  • --disable-typescript-plugin — Disable TypeScript plugin, which is turned on by default
  • --import-plugin — Enable the experimental import plugin and detect ESM problems. It is recommended to use along side with the --tsconfig option.
  • --jsdoc-plugin — Enable the experimental jsdoc plugin and detect JSDoc problems
  • --jest-plugin — Enable the Jest plugin and detect test problems
  • --vitest-plugin — Enable the Vitest plugin and detect test problems
  • --jsx-a11y-plugin — Enable the JSX-a11y plugin and detect accessibility problems
  • --nextjs-plugin — Enable the Next.js plugin and detect Next.js problems
  • --react-perf-plugin — Enable the React performance plugin and detect rendering performance problems

Fix Problems

  • --fix — Fix as many issues as possible. Only unfixed issues are reported in the output

Ignore Files

  • --ignore-path=PATH — Specify the file to use as your .eslintignore

  • --ignore-pattern=PAT — Specify patterns of files to ignore (in addition to those in .eslintignore)

    The supported syntax is the same as for .eslintignore and .gitignore files You should quote your patterns in order to avoid shell interpretation of glob patterns

  • --no-ignore — Disables excluding of files from .eslintignore files, --ignore-path flags and --ignore-pattern flags

  • --symlinks — Follow symbolic links. Oxlint ignores symbolic links by default.

Handle Warnings

  • --quiet — Disable reporting on warnings, only errors are reported
  • --deny-warnings — Ensure warnings produce a non-zero exit code
  • --max-warnings=INT — Specify a warning threshold, which can be used to force exit with an error status if there are too many warning-level rule violations in your project

Output

  • -f, --format=ARG — Use a specific output format (default, json, unix, checkstyle, github)

Miscellaneous

  • --silent — Do not display any diagnostics
  • --threads=INT — Number of threads to use. Set to 1 for using only 1 CPU core

Available positional items:

  • PATH — Single file, single path or list of paths

Available options:

  • --rules — list all the rules that are currently registered
  • -h, --help — Prints help information
  • -V, --version — Prints version information

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/usage/linter/generated-config.html b/docs/guide/usage/linter/generated-config.html index bdbc333225..28567b5bae 100644 --- a/docs/guide/usage/linter/generated-config.html +++ b/docs/guide/usage/linter/generated-config.html @@ -6,7 +6,7 @@ Oxlint Configuration File | The JavaScript Oxidation Compiler - + @@ -47,7 +47,7 @@ "eqeqeq": "warn" } }

env

type: object

Predefine global variables.

globals

type: object

Add or remove global variables.

rules

See Oxlint Rules

settings

type: object

Shared settings for plugins

settings.jsdoc

type: object

settings.jsdoc.augmentsExtendsReplacesDocs

type: boolean

Only for require-(yields|returns|description|example|param|throws) rule

settings.jsdoc.exemptDestructuredRootsFromChecks

type: boolean

Only for require-param-type and require-param-description rule

settings.jsdoc.ignoreInternal

type: boolean

For all rules but NOT apply to empty-tags rule

settings.jsdoc.ignorePrivate

type: boolean

For all rules but NOT apply to check-access and empty-tags rule

settings.jsdoc.ignoreReplacesDocs

type: boolean

Only for require-(yields|returns|description|example|param|throws) rule

settings.jsdoc.implementsReplacesDocs

type: boolean

Only for require-(yields|returns|description|example|param|throws) rule

settings.jsdoc.overrideReplacesDocs

type: boolean

Only for require-(yields|returns|description|example|param|throws) rule

settings.jsdoc.tagNamePreference

type: object

settings.jsx-a11y

type: object

settings.jsx-a11y.components

type: object

settings.jsx-a11y.polymorphicPropName

type: [ string, null ]

settings.next

type: object

settings.next.rootDir

settings.react

type: object

settings.react.formComponents

type: array

settings.react.formComponents[n]

settings.react.linkComponents

type: array

settings.react.linkComponents[n]
- + \ No newline at end of file diff --git a/docs/guide/usage/linter/generated-rules.html b/docs/guide/usage/linter/generated-rules.html index 81bcb94894..9210a953f6 100644 --- a/docs/guide/usage/linter/generated-rules.html +++ b/docs/guide/usage/linter/generated-rules.html @@ -6,7 +6,7 @@ Rules | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Rules

The progress of all rule implementations is tracked here.

  • Total number of rules: 383
  • Rules turned on by default: 91

Correctness (159):

Code that is outright wrong or useless.

Rule nameSourceDefault
for-directioneslint
no-async-promise-executoreslint
no-callereslint
no-class-assigneslint
no-compare-neg-zeroeslint
no-cond-assigneslint
no-const-assigneslint
no-constant-binary-expressioneslint
no-constant-conditioneslint
no-control-regexeslint
no-debuggereslint
no-delete-vareslint
no-dupe-class-memberseslint
no-dupe-else-ifeslint
no-dupe-keyseslint
no-duplicate-caseeslint
no-empty-character-classeslint
no-empty-patterneslint
no-empty-static-blockeslint
no-ex-assigneslint
no-extra-boolean-casteslint
no-func-assigneslint
no-global-assigneslint
no-import-assigneslint
no-irregular-whitespaceeslint
no-loss-of-precisioneslint
no-new-native-nonconstructoreslint
no-nonoctal-decimal-escapeeslint
no-obj-callseslint
no-self-assigneslint
no-setter-returneslint
no-shadow-restricted-nameseslint
no-sparse-arrayseslint
no-this-before-supereslint
no-unsafe-finallyeslint
no-unsafe-negationeslint
no-unused-labelseslint
no-unused-private-class-memberseslint
no-useless-catcheslint
no-useless-escapeeslint
no-useless-renameeslint
no-witheslint
require-yieldeslint
use-isnaneslint
valid-typeofeslint
defaultimport
namedimport
namespaceimport
expect-expectjest
no-conditional-expectjest
no-disabled-testsjest
no-exportjest
no-focused-testsjest
no-standalone-expectjest
require-to-throw-messagejest
valid-describe-callbackjest
valid-expectjest
valid-titlejest
check-property-namesjsdoc
check-tag-namesjsdoc
implements-on-classesjsdoc
no-defaultsjsdoc
require-propertyjsdoc
require-property-descriptionjsdoc
require-property-namejsdoc
require-property-typejsdoc
require-yieldsjsdoc
alt-textjsx_a11y
anchor-has-contentjsx_a11y
anchor-is-validjsx_a11y
aria-activedescendant-has-tabindexjsx_a11y
aria-propsjsx_a11y
aria-rolejsx_a11y
aria-unsupported-elementsjsx_a11y
autocomplete-validjsx_a11y
click-events-have-key-eventsjsx_a11y
heading-has-contentjsx_a11y
html-has-langjsx_a11y
iframe-has-titlejsx_a11y
img-redundant-altjsx_a11y
langjsx_a11y
media-has-captionjsx_a11y
mouse-events-have-key-eventsjsx_a11y
no-access-keyjsx_a11y
no-aria-hidden-on-focusablejsx_a11y
no-autofocusjsx_a11y
no-distracting-elementsjsx_a11y
no-redundant-rolesjsx_a11y
prefer-tag-over-rolejsx_a11y
role-has-required-aria-propsjsx_a11y
role-supports-aria-propsjsx_a11y
scopejsx_a11y
tabindex-no-positivejsx_a11y
google-font-displaynextjs
google-font-preconnectnextjs
inline-script-idnextjs
next-script-for-ganextjs
no-assign-module-variablenextjs
no-async-client-componentnextjs
no-before-interactive-script-outside-documentnextjs
no-css-tagsnextjs
no-document-import-in-pagenextjs
no-duplicate-headnextjs
no-head-elementnextjs
no-head-import-in-documentnextjs
no-img-elementnextjs
no-page-custom-fontnextjs
no-script-component-in-headnextjs
no-styled-jsx-in-documentnextjs
no-sync-scriptsnextjs
no-title-in-document-headnextjs
no-typosnextjs
no-unwanted-polyfillionextjs
bad-array-method-on-argumentsoxc
bad-char-at-comparisonoxc
bad-comparison-sequenceoxc
bad-min-max-funcoxc
bad-object-literal-comparisonoxc
bad-replace-all-argoxc
const-comparisonsoxc
double-comparisonsoxc
erasing-opoxc
missing-throwoxc
number-arg-out-of-rangeoxc
only-used-in-recursionoxc
uninvoked-array-callbackoxc
jsx-keyreact
jsx-no-duplicate-propsreact
jsx-no-target-blankreact
jsx-no-undefreact
no-children-propreact
no-direct-mutation-statereact
no-find-dom-nodereact
no-is-mountedreact
no-render-return-valuereact
no-string-refsreact
void-dom-elements-no-childrenreact
no-extra-non-null-assertiontypescript
no-misused-newtypescript
no-namespacetypescript
no-non-null-asserted-optional-chaintypescript
no-this-aliastypescript
no-unsafe-declaration-mergingtypescript
no-useless-empty-exporttypescript
prefer-as-consttypescript
triple-slash-referencetypescript
no-await-in-promise-methodsunicorn
no-document-cookieunicorn
no-empty-fileunicorn
no-invalid-remove-event-listenerunicorn
no-new-arrayunicorn
no-single-promise-in-promise-methodsunicorn
no-thenableunicorn
no-unnecessary-awaitunicorn
no-useless-fallback-in-spreadunicorn
no-useless-length-checkunicorn
no-useless-spreadunicorn
prefer-set-sizeunicorn
prefer-string-starts-ends-withunicorn

Perf (6):

Code that can be written to run faster.

Rule nameSourceDefault
no-await-in-loopeslint
no-accumulating-spreadoxc
jsx-no-jsx-as-propreact_perf
jsx-no-new-array-as-propreact_perf
jsx-no-new-function-as-propreact_perf
jsx-no-new-object-as-propreact_perf

Restriction (49):

Lints which prevent the use of language and library features. Must not be enabled as a whole, should be considered on a case-by-case basis before enabling.

Rule nameSourceDefault
default-caseeslint
no-bitwiseeslint
no-consoleeslint
no-div-regexeslint
no-emptyeslint
no-empty-functioneslint
no-eq-nulleslint
no-evaleslint
no-iteratoreslint
no-protoeslint
no-regex-spaceseslint
no-restricted-globalseslint
no-undefinedeslint
no-unsafe-optional-chainingeslint
no-vareslint
no-voideslint
unicode-bomeslint
no-amdimport
no-cycleimport
no-default-exportimport
check-accessjsdoc
empty-tagsjsdoc
bad-bitwise-operatoroxc
no-async-awaitoxc
no-barrel-fileoxc
no-const-enumoxc
no-optional-chainingoxc
no-rest-spread-propertiesoxc
button-has-typereact
no-dangerreact
no-unknown-propertyreact
explicit-function-return-typetypescript
no-dynamic-deletetypescript
no-explicit-anytypescript
no-import-type-side-effectstypescript
no-non-null-asserted-nullish-coalescingtypescript
no-non-null-assertiontypescript
no-var-requirestypescript
prefer-literal-enum-membertypescript
no-abusive-eslint-disableunicorn
no-anonymous-default-exportunicorn
no-array-for-eachunicorn
no-array-reduceunicorn
no-magic-array-flat-depthunicorn
no-nested-ternaryunicorn
no-process-exitunicorn
prefer-modern-math-apisunicorn
prefer-node-protocolunicorn
prefer-number-propertiesunicorn

Suspicious (14):

code that is most likely wrong or useless.

Rule nameSourceDefault
no-neweslint
no-useless-concateslint
no-useless-constructoreslint
no-duplicatesimport
no-named-as-defaultimport
no-named-as-default-memberimport
no-self-importimport
no-commented-out-testsjest
approx-constantoxc
misrefactored-assign-opoxc
jsx-no-comment-textnodesreact
react-in-jsx-scopereact
no-unnecessary-type-constrainttypescript
prefer-add-event-listenerunicorn

Pedantic (66):

Lints which are rather strict or have occasional false positives.

Rule nameSourceDefault
array-callback-returneslint
eqeqeqeslint
max-classes-per-fileeslint
max-lineseslint
no-array-constructoreslint
no-case-declarationseslint
no-constructor-returneslint
no-fallthrougheslint
no-inner-declarationseslint
no-new-wrapperseslint
no-prototype-builtinseslint
no-redeclareeslint
no-self-compareeslint
radixeslint
require-awaiteslint
symbol-descriptioneslint
max-dependenciesimport
require-paramjsdoc
require-param-descriptionjsdoc
require-param-namejsdoc
require-param-typejsdoc
require-returnsjsdoc
require-returns-descriptionjsdoc
require-returns-typejsdoc
checked-requires-onchange-or-readonlyreact
jsx-no-useless-fragmentreact
no-unescaped-entitiesreact
ban-ts-commenttypescript
ban-typestypescript
no-duplicate-enum-valuestypescript
prefer-enum-initializerstypescript
prefer-ts-expect-errortypescript
escape-caseunicorn
explicit-length-checkunicorn
new-for-builtinsunicorn
no-hex-escapeunicorn
no-instanceof-arrayunicorn
no-lonely-ifunicorn
no-negated-conditionunicorn
no-negation-in-equality-checkunicorn
no-new-bufferunicorn
no-object-as-default-parameterunicorn
no-static-only-classunicorn
no-this-assignmentunicorn
no-typeof-undefinedunicorn
no-unreadable-iifeunicorn
no-useless-promise-resolve-rejectunicorn
no-useless-switch-caseunicorn
prefer-array-flatunicorn
prefer-array-someunicorn
prefer-blob-reading-methodsunicorn
prefer-code-pointunicorn
prefer-date-nowunicorn
prefer-dom-node-appendunicorn
prefer-dom-node-datasetunicorn
prefer-dom-node-removeunicorn
prefer-event-targetunicorn
prefer-math-truncunicorn
prefer-native-coercion-functionsunicorn
prefer-prototype-methodsunicorn
prefer-query-selectorunicorn
prefer-regexp-testunicorn
prefer-string-replace-allunicorn
prefer-string-sliceunicorn
prefer-type-errorunicorn
require-number-to-fixed-digits-argumentunicorn

Style (80):

Code that should be written in a more idiomatic way.

Rule nameSourceDefault
default-case-lasteslint
default-param-lasteslint
guard-for-ineslint
max-paramseslint
no-continueeslint
no-multi-streslint
no-script-urleslint
no-template-curly-in-stringeslint
no-ternaryeslint
prefer-exponentiation-operatoreslint
sort-importseslint
consistent-test-itjest
max-expectsjest
max-nested-describejest
no-alias-methodsjest
no-confusing-set-timeoutjest
no-deprecated-functionsjest
no-done-callbackjest
no-duplicate-hooksjest
no-hooksjest
no-identical-titlejest
no-interpolation-in-snapshotsjest
no-jasmine-globalsjest
no-large-snapshotsjest
no-mocks-importjest
no-restricted-jest-methodsjest
no-restricted-matchersjest
no-test-prefixesjest
no-test-return-statementjest
no-untyped-mock-factoryjest
prefer-called-withjest
prefer-comparison-matcherjest
prefer-equality-matcherjest
prefer-expect-resolvesjest
prefer-hooks-on-topjest
prefer-jest-mockedjest
prefer-lowercase-titlejest
prefer-mock-promise-shorthandjest
prefer-spy-onjest
prefer-strict-equaljest
prefer-to-bejest
prefer-to-containjest
prefer-to-have-lengthjest
prefer-todojest
require-hookjest
require-top-level-describejest
no-set-statereact
prefer-es-6-classreact
adjacent-overload-signaturestypescript
array-typetypescript
ban-tslint-commenttypescript
consistent-indexed-object-styletypescript
consistent-type-definitionstypescript
no-empty-interfacetypescript
prefer-for-oftypescript
prefer-function-typetypescript
catch-error-nameunicorn
empty-brace-spacesunicorn
error-messageunicorn
filename-caseunicorn
no-await-expression-memberunicorn
no-console-spacesunicorn
no-nullunicorn
no-unreadable-array-destructuringunicorn
no-zero-fractionsunicorn
number-literal-caseunicorn
numeric-separators-styleunicorn
prefer-array-flat-mapunicorn
prefer-dom-node-text-contentunicorn
prefer-includesunicorn
prefer-logical-operator-over-ternaryunicorn
prefer-modern-dom-apisunicorn
prefer-optional-catch-bindingunicorn
prefer-reflect-applyunicorn
prefer-spreadunicorn
prefer-string-trim-start-endunicorn
require-array-join-separatorunicorn
switch-case-bracesunicorn
text-encoding-identifier-caseunicorn
throw-new-errorunicorn

Nursery (9):

New lints that are still under development.

Rule nameSourceDefault
constructor-supereslint
getter-returneslint
no-undefeslint
no-unreachableeslint
exportimport
require-render-returnreact
rules-of-hooksreact
no-side-effects-in-initializationtree_shaking
consistent-type-importstypescript

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/usage/linter/rules.html b/docs/guide/usage/linter/rules.html index 342086965a..3c66ef013e 100644 --- a/docs/guide/usage/linter/rules.html +++ b/docs/guide/usage/linter/rules.html @@ -6,7 +6,7 @@ Rules | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Rules

The progress of all rule implementations is tracked here.

  • Total number of rules: 383
  • Rules turned on by default: 91

Correctness (159):

Code that is outright wrong or useless.

Rule nameSourceDefault
for-directioneslint
no-async-promise-executoreslint
no-callereslint
no-class-assigneslint
no-compare-neg-zeroeslint
no-cond-assigneslint
no-const-assigneslint
no-constant-binary-expressioneslint
no-constant-conditioneslint
no-control-regexeslint
no-debuggereslint
no-delete-vareslint
no-dupe-class-memberseslint
no-dupe-else-ifeslint
no-dupe-keyseslint
no-duplicate-caseeslint
no-empty-character-classeslint
no-empty-patterneslint
no-empty-static-blockeslint
no-ex-assigneslint
no-extra-boolean-casteslint
no-func-assigneslint
no-global-assigneslint
no-import-assigneslint
no-irregular-whitespaceeslint
no-loss-of-precisioneslint
no-new-native-nonconstructoreslint
no-nonoctal-decimal-escapeeslint
no-obj-callseslint
no-self-assigneslint
no-setter-returneslint
no-shadow-restricted-nameseslint
no-sparse-arrayseslint
no-this-before-supereslint
no-unsafe-finallyeslint
no-unsafe-negationeslint
no-unused-labelseslint
no-unused-private-class-memberseslint
no-useless-catcheslint
no-useless-escapeeslint
no-useless-renameeslint
no-witheslint
require-yieldeslint
use-isnaneslint
valid-typeofeslint
defaultimport
namedimport
namespaceimport
expect-expectjest
no-conditional-expectjest
no-disabled-testsjest
no-exportjest
no-focused-testsjest
no-standalone-expectjest
require-to-throw-messagejest
valid-describe-callbackjest
valid-expectjest
valid-titlejest
check-property-namesjsdoc
check-tag-namesjsdoc
implements-on-classesjsdoc
no-defaultsjsdoc
require-propertyjsdoc
require-property-descriptionjsdoc
require-property-namejsdoc
require-property-typejsdoc
require-yieldsjsdoc
alt-textjsx_a11y
anchor-has-contentjsx_a11y
anchor-is-validjsx_a11y
aria-activedescendant-has-tabindexjsx_a11y
aria-propsjsx_a11y
aria-rolejsx_a11y
aria-unsupported-elementsjsx_a11y
autocomplete-validjsx_a11y
click-events-have-key-eventsjsx_a11y
heading-has-contentjsx_a11y
html-has-langjsx_a11y
iframe-has-titlejsx_a11y
img-redundant-altjsx_a11y
langjsx_a11y
media-has-captionjsx_a11y
mouse-events-have-key-eventsjsx_a11y
no-access-keyjsx_a11y
no-aria-hidden-on-focusablejsx_a11y
no-autofocusjsx_a11y
no-distracting-elementsjsx_a11y
no-redundant-rolesjsx_a11y
prefer-tag-over-rolejsx_a11y
role-has-required-aria-propsjsx_a11y
role-supports-aria-propsjsx_a11y
scopejsx_a11y
tabindex-no-positivejsx_a11y
google-font-displaynextjs
google-font-preconnectnextjs
inline-script-idnextjs
next-script-for-ganextjs
no-assign-module-variablenextjs
no-async-client-componentnextjs
no-before-interactive-script-outside-documentnextjs
no-css-tagsnextjs
no-document-import-in-pagenextjs
no-duplicate-headnextjs
no-head-elementnextjs
no-head-import-in-documentnextjs
no-img-elementnextjs
no-page-custom-fontnextjs
no-script-component-in-headnextjs
no-styled-jsx-in-documentnextjs
no-sync-scriptsnextjs
no-title-in-document-headnextjs
no-typosnextjs
no-unwanted-polyfillionextjs
bad-array-method-on-argumentsoxc
bad-char-at-comparisonoxc
bad-comparison-sequenceoxc
bad-min-max-funcoxc
bad-object-literal-comparisonoxc
bad-replace-all-argoxc
const-comparisonsoxc
double-comparisonsoxc
erasing-opoxc
missing-throwoxc
number-arg-out-of-rangeoxc
only-used-in-recursionoxc
uninvoked-array-callbackoxc
jsx-keyreact
jsx-no-duplicate-propsreact
jsx-no-target-blankreact
jsx-no-undefreact
no-children-propreact
no-direct-mutation-statereact
no-find-dom-nodereact
no-is-mountedreact
no-render-return-valuereact
no-string-refsreact
void-dom-elements-no-childrenreact
no-extra-non-null-assertiontypescript
no-misused-newtypescript
no-namespacetypescript
no-non-null-asserted-optional-chaintypescript
no-this-aliastypescript
no-unsafe-declaration-mergingtypescript
no-useless-empty-exporttypescript
prefer-as-consttypescript
triple-slash-referencetypescript
no-await-in-promise-methodsunicorn
no-document-cookieunicorn
no-empty-fileunicorn
no-invalid-remove-event-listenerunicorn
no-new-arrayunicorn
no-single-promise-in-promise-methodsunicorn
no-thenableunicorn
no-unnecessary-awaitunicorn
no-useless-fallback-in-spreadunicorn
no-useless-length-checkunicorn
no-useless-spreadunicorn
prefer-set-sizeunicorn
prefer-string-starts-ends-withunicorn

Perf (6):

Code that can be written to run faster.

Rule nameSourceDefault
no-await-in-loopeslint
no-accumulating-spreadoxc
jsx-no-jsx-as-propreact_perf
jsx-no-new-array-as-propreact_perf
jsx-no-new-function-as-propreact_perf
jsx-no-new-object-as-propreact_perf

Restriction (49):

Lints which prevent the use of language and library features. Must not be enabled as a whole, should be considered on a case-by-case basis before enabling.

Rule nameSourceDefault
default-caseeslint
no-bitwiseeslint
no-consoleeslint
no-div-regexeslint
no-emptyeslint
no-empty-functioneslint
no-eq-nulleslint
no-evaleslint
no-iteratoreslint
no-protoeslint
no-regex-spaceseslint
no-restricted-globalseslint
no-undefinedeslint
no-unsafe-optional-chainingeslint
no-vareslint
no-voideslint
unicode-bomeslint
no-amdimport
no-cycleimport
no-default-exportimport
check-accessjsdoc
empty-tagsjsdoc
bad-bitwise-operatoroxc
no-async-awaitoxc
no-barrel-fileoxc
no-const-enumoxc
no-optional-chainingoxc
no-rest-spread-propertiesoxc
button-has-typereact
no-dangerreact
no-unknown-propertyreact
explicit-function-return-typetypescript
no-dynamic-deletetypescript
no-explicit-anytypescript
no-import-type-side-effectstypescript
no-non-null-asserted-nullish-coalescingtypescript
no-non-null-assertiontypescript
no-var-requirestypescript
prefer-literal-enum-membertypescript
no-abusive-eslint-disableunicorn
no-anonymous-default-exportunicorn
no-array-for-eachunicorn
no-array-reduceunicorn
no-magic-array-flat-depthunicorn
no-nested-ternaryunicorn
no-process-exitunicorn
prefer-modern-math-apisunicorn
prefer-node-protocolunicorn
prefer-number-propertiesunicorn

Suspicious (14):

code that is most likely wrong or useless.

Rule nameSourceDefault
no-neweslint
no-useless-concateslint
no-useless-constructoreslint
no-duplicatesimport
no-named-as-defaultimport
no-named-as-default-memberimport
no-self-importimport
no-commented-out-testsjest
approx-constantoxc
misrefactored-assign-opoxc
jsx-no-comment-textnodesreact
react-in-jsx-scopereact
no-unnecessary-type-constrainttypescript
prefer-add-event-listenerunicorn

Pedantic (66):

Lints which are rather strict or have occasional false positives.

Rule nameSourceDefault
array-callback-returneslint
eqeqeqeslint
max-classes-per-fileeslint
max-lineseslint
no-array-constructoreslint
no-case-declarationseslint
no-constructor-returneslint
no-fallthrougheslint
no-inner-declarationseslint
no-new-wrapperseslint
no-prototype-builtinseslint
no-redeclareeslint
no-self-compareeslint
radixeslint
require-awaiteslint
symbol-descriptioneslint
max-dependenciesimport
require-paramjsdoc
require-param-descriptionjsdoc
require-param-namejsdoc
require-param-typejsdoc
require-returnsjsdoc
require-returns-descriptionjsdoc
require-returns-typejsdoc
checked-requires-onchange-or-readonlyreact
jsx-no-useless-fragmentreact
no-unescaped-entitiesreact
ban-ts-commenttypescript
ban-typestypescript
no-duplicate-enum-valuestypescript
prefer-enum-initializerstypescript
prefer-ts-expect-errortypescript
escape-caseunicorn
explicit-length-checkunicorn
new-for-builtinsunicorn
no-hex-escapeunicorn
no-instanceof-arrayunicorn
no-lonely-ifunicorn
no-negated-conditionunicorn
no-negation-in-equality-checkunicorn
no-new-bufferunicorn
no-object-as-default-parameterunicorn
no-static-only-classunicorn
no-this-assignmentunicorn
no-typeof-undefinedunicorn
no-unreadable-iifeunicorn
no-useless-promise-resolve-rejectunicorn
no-useless-switch-caseunicorn
prefer-array-flatunicorn
prefer-array-someunicorn
prefer-blob-reading-methodsunicorn
prefer-code-pointunicorn
prefer-date-nowunicorn
prefer-dom-node-appendunicorn
prefer-dom-node-datasetunicorn
prefer-dom-node-removeunicorn
prefer-event-targetunicorn
prefer-math-truncunicorn
prefer-native-coercion-functionsunicorn
prefer-prototype-methodsunicorn
prefer-query-selectorunicorn
prefer-regexp-testunicorn
prefer-string-replace-allunicorn
prefer-string-sliceunicorn
prefer-type-errorunicorn
require-number-to-fixed-digits-argumentunicorn

Style (80):

Code that should be written in a more idiomatic way.

Rule nameSourceDefault
default-case-lasteslint
default-param-lasteslint
guard-for-ineslint
max-paramseslint
no-continueeslint
no-multi-streslint
no-script-urleslint
no-template-curly-in-stringeslint
no-ternaryeslint
prefer-exponentiation-operatoreslint
sort-importseslint
consistent-test-itjest
max-expectsjest
max-nested-describejest
no-alias-methodsjest
no-confusing-set-timeoutjest
no-deprecated-functionsjest
no-done-callbackjest
no-duplicate-hooksjest
no-hooksjest
no-identical-titlejest
no-interpolation-in-snapshotsjest
no-jasmine-globalsjest
no-large-snapshotsjest
no-mocks-importjest
no-restricted-jest-methodsjest
no-restricted-matchersjest
no-test-prefixesjest
no-test-return-statementjest
no-untyped-mock-factoryjest
prefer-called-withjest
prefer-comparison-matcherjest
prefer-equality-matcherjest
prefer-expect-resolvesjest
prefer-hooks-on-topjest
prefer-jest-mockedjest
prefer-lowercase-titlejest
prefer-mock-promise-shorthandjest
prefer-spy-onjest
prefer-strict-equaljest
prefer-to-bejest
prefer-to-containjest
prefer-to-have-lengthjest
prefer-todojest
require-hookjest
require-top-level-describejest
no-set-statereact
prefer-es-6-classreact
adjacent-overload-signaturestypescript
array-typetypescript
ban-tslint-commenttypescript
consistent-indexed-object-styletypescript
consistent-type-definitionstypescript
no-empty-interfacetypescript
prefer-for-oftypescript
prefer-function-typetypescript
catch-error-nameunicorn
empty-brace-spacesunicorn
error-messageunicorn
filename-caseunicorn
no-await-expression-memberunicorn
no-console-spacesunicorn
no-nullunicorn
no-unreadable-array-destructuringunicorn
no-zero-fractionsunicorn
number-literal-caseunicorn
numeric-separators-styleunicorn
prefer-array-flat-mapunicorn
prefer-dom-node-text-contentunicorn
prefer-includesunicorn
prefer-logical-operator-over-ternaryunicorn
prefer-modern-dom-apisunicorn
prefer-optional-catch-bindingunicorn
prefer-reflect-applyunicorn
prefer-spreadunicorn
prefer-string-trim-start-endunicorn
require-array-join-separatorunicorn
switch-case-bracesunicorn
text-encoding-identifier-caseunicorn
throw-new-errorunicorn

Nursery (9):

New lints that are still under development.

Rule nameSourceDefault
constructor-supereslint
getter-returneslint
no-undefeslint
no-unreachableeslint
exportimport
require-render-returnreact
rules-of-hooksreact
no-side-effects-in-initializationtree_shaking
consistent-type-importstypescript

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/usage/parser.html b/docs/guide/usage/parser.html index 84a19065fc..4cdd285969 100644 --- a/docs/guide/usage/parser.html +++ b/docs/guide/usage/parser.html @@ -6,7 +6,7 @@ Parser | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Parser

  • total downloads from crates.io

The Rust crate oxc_parser is production ready.

Features

Installation

Rust

Use the umbrella crate oxc or the individual oxc_ast and oxc_parser crates.

Rust usage example can be found here.

Node.js (NAPI)

Use the experimental node binding oxc-parser.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/usage/resolver.html b/docs/guide/usage/resolver.html index 352b48fcf3..735b68f91e 100644 --- a/docs/guide/usage/resolver.html +++ b/docs/guide/usage/resolver.html @@ -6,7 +6,7 @@ Resolver | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Resolver

  • total downloads from crates.io

Node.js cjs and esm path resolution.

Features

Installation

Rust

See https://crates.io/crates/oxc_resolver and its documentation https://docs.rs/oxc_resolver.

Node.js

See oxc-resolver for node binding via napi.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/guide/usage/transformer.html b/docs/guide/usage/transformer.html index 4d93c89a83..dad0a39727 100644 --- a/docs/guide/usage/transformer.html +++ b/docs/guide/usage/transformer.html @@ -6,7 +6,7 @@ Transformer | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Transformer

Features

Installation

Rust

Use the umbrella crate oxc with the transformer feature.

Rust usage example can be found here.

Node.js (NAPI)

Use the experimental node binding oxc-transformer.

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/architecture/formatter.html b/docs/learn/architecture/formatter.html index fde73af28c..bd35b43d2e 100644 --- a/docs/learn/architecture/formatter.html +++ b/docs/learn/architecture/formatter.html @@ -6,7 +6,7 @@ Formatter | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/architecture/introduction.html b/docs/learn/architecture/introduction.html index 6daed2b07b..4ef3c0360b 100644 --- a/docs/learn/architecture/introduction.html +++ b/docs/learn/architecture/introduction.html @@ -6,7 +6,7 @@ Introduction | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/architecture/linter.html b/docs/learn/architecture/linter.html index 69224e7c9e..37d954c030 100644 --- a/docs/learn/architecture/linter.html +++ b/docs/learn/architecture/linter.html @@ -6,7 +6,7 @@ Linter | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Linter Architecture

This article is originally posted on leaysgur.github.io/posts by @leaysgur.

apps/oxlint

The oxlint binary is the result of building main.rs from the apps/oxlint crate.

Cargo.toml Configuration

Here, it parses arguments and then runs the LintRunner.

Lint Execution Flow

crates/oxc_diagnostics

The LintService passes the mpsc::channel Sender to oxc_diagnostics to receive lint results.

Receiving Lint Results

It formats and displays the received messages. The formatting is done by the miette crate.

miette Crate Reference

crates/oxc_linter

Starting with the LintService:

  • Holds self.runtime as Arc<Runtime>
  • Runtime holds paths for linting
  • Upon running, it iterates over Runtime paths in parallel using rayon
  • It sends a None to finish

LintService Implementation

Runtime: process_path()

  • Infers extension and content from the path
  • Supports .[m|c]?[j|t]s or .[j|t]sx extensions
  • Exceptions for .vue, .astro, and .svelte with partial support for script blocks
  • Processes JavaScript and TypeScript sources
  • Executes linting and sends results to DiagnosticService

Runtime Path Processing

Runtime: process_source()

  • Processes the source with a parser into an AST
  • Creates a LintContext from SemanticBuilder and runs it through Linter

Runtime Source Processing

crates/oxc_semantic: SemanticBuilder

SemanticBuilder builds semantic information extracted from the source.

SemanticBuilder Source

  • source_text: Source code
  • nodes: AST nodes
  • classes: Classes
  • scopes: Scopes
  • trivias: Comments
  • jsdoc: JSDoc
  • etc.

When SemanticBuilder builds, it generates SemanticBuilderReturn, but only Semantic is passed to LintContext.

SemanticBuilder Return

crates/oxc_linter: LintContext

LintContext Source

Represents the context, with Semantic as the main body. It includes getters for each piece of information and methods like diagnostic() to notify of linting issues.

crates/oxc_linter: Linter

Linter Source

The run() function of this Linter is the core of the linting process.

  • Linter holds rules to execute on the target source in self.rules
  • Each rule can implement three types of processing as per the trait
  • It sequentially executes these three patterns

For the currently implemented rules, refer to this list.

Implemented Rules

For adding new rules, remember to update this list.

Linter Example

The repository provides the minimum code configuration for creating a linter.

Minimal Linter Code

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/architecture/minifier.html b/docs/learn/architecture/minifier.html index e717a11fc7..3c10a17fe2 100644 --- a/docs/learn/architecture/minifier.html +++ b/docs/learn/architecture/minifier.html @@ -6,7 +6,7 @@ Minifier | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/architecture/parser.html b/docs/learn/architecture/parser.html index a3db4e4737..a7be5a0243 100644 --- a/docs/learn/architecture/parser.html +++ b/docs/learn/architecture/parser.html @@ -6,7 +6,7 @@ Parser | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Parser

Oxc maintains its own AST and parser, which is by far the fastest and most conformant JavaScript and TypeScript (including JSX and TSX) parser written in Rust.

As the parser often represents a key performance bottleneck in JavaScript tooling, any minor improvements can have a cascading effect on our downstream tools. By developing our parser, we have the opportunity to explore and implement well-researched performance techniques.

While many existing JavaScript tools rely on [estree] as their AST specification, a notable drawback is its abundance of ambiguous nodes. This ambiguity often leads to confusion during development with [estree].

The Oxc AST differs slightly from the [estree] AST by removing ambiguous nodes and introducing distinct types. For example, instead of using a generic [estree] Identifier, the Oxc AST provides specific types such as BindingIdentifier, IdentifierReference, and IdentifierName.

This clear distinction greatly enhances the development experience by aligning more closely with the ECMAScript specification.

How is it so fast

  • AST is allocated in a memory arena for fast AST memory allocation and deallocation
  • Short strings are inlined by CompactString
  • No other heap allocations are done except the above two
  • Scope binding, symbol resolution and some syntax errors are not done in the parser, they are delegated to the semantic analyzer

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/architecture/resolver.html b/docs/learn/architecture/resolver.html index 56ac1a7885..de6609ea49 100644 --- a/docs/learn/architecture/resolver.html +++ b/docs/learn/architecture/resolver.html @@ -6,7 +6,7 @@ Resolver | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/architecture/transformer.html b/docs/learn/architecture/transformer.html index 78b07d890f..42e4f1c876 100644 --- a/docs/learn/architecture/transformer.html +++ b/docs/learn/architecture/transformer.html @@ -6,7 +6,7 @@ Transformer | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/ecmascript/grammar.html b/docs/learn/ecmascript/grammar.html index b4ab27dbad..974d93efb5 100644 --- a/docs/learn/ecmascript/grammar.html +++ b/docs/learn/ecmascript/grammar.html @@ -6,7 +6,7 @@ Grammar | The JavaScript Oxidation Compiler - + @@ -268,7 +268,7 @@ If LeftHandSideExpression is an ObjectLiteral or an ArrayLiteral, the following Early Error rules are applied: * LeftHandSideExpression must cover an AssignmentPattern.

These definitions define:

javascript
({ prop = value } = {}); // ObjectAssignmentPattern
 ({ prop = value }); // ObjectLiteral with SyntaxError

Parsers need to parse ObjectLiteral with CoverInitializedName, and throw the syntax error if it does not reach = for ObjectAssignmentPattern.

As an exercise, which one of the following = should throw a syntax error?

javascript
let { x = 1 } = { x = 1 } = { x = 1 }
- + \ No newline at end of file diff --git a/docs/learn/ecmascript/spec.html b/docs/learn/ecmascript/spec.html index 42f4429e89..588d977b15 100644 --- a/docs/learn/ecmascript/spec.html +++ b/docs/learn/ecmascript/spec.html @@ -6,7 +6,7 @@ Specification | The JavaScript Oxidation Compiler - + @@ -64,7 +64,7 @@ self.asi()?; self.ast.debugger_statement(self.finish_node(node)) }

INFO

This section on asi is written with a parser in mind, it explicitly states that the source text is parsed from left to right, which makes it almost impossible to write the parser in any other way. The author of jsparagus made a rant about this here.

The specification for this feature is both very-high-level and weirdly procedural (“When, as the source text is parsed from left to right, a token is encountered...”, as if the specification is telling a story about a browser. As far as I know, this is the only place in the spec where anything is assumed or implied about the internal implementation details of parsing.) But it would be hard to specify ASI any other way.

Expressions, Statements, Functions, Classes, Scripts and Modules

It takes a while to understand the syntactic grammar, then apply them to writing a parser.

- + \ No newline at end of file diff --git a/docs/learn/parser_in_rust/ast.html b/docs/learn/parser_in_rust/ast.html index 6444667517..075a2e08ab 100644 --- a/docs/learn/parser_in_rust/ast.html +++ b/docs/learn/parser_in_rust/ast.html @@ -6,7 +6,7 @@ Abstract Syntax Tree | The JavaScript Oxidation Compiler - + @@ -197,7 +197,7 @@ pub enum Expression<'a> { ... } - + \ No newline at end of file diff --git a/docs/learn/parser_in_rust/errors.html b/docs/learn/parser_in_rust/errors.html index 4d163a2238..ca5744885c 100644 --- a/docs/learn/parser_in_rust/errors.html +++ b/docs/learn/parser_in_rust/errors.html @@ -6,7 +6,7 @@ Dealing with Errors | The JavaScript Oxidation Compiler - + @@ -96,7 +96,7 @@ miette::Error::new(error).with_source_code(miette::NamedSource::new(file_path, source_code)) }) } - + \ No newline at end of file diff --git a/docs/learn/parser_in_rust/intro.html b/docs/learn/parser_in_rust/intro.html index 41b7937547..94966395b6 100644 --- a/docs/learn/parser_in_rust/intro.html +++ b/docs/learn/parser_in_rust/intro.html @@ -6,7 +6,7 @@ Introduction | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Introduction

We are in The Third Age of JavaScript, the common trend right now is to author JavaScript tools in Rust or Go for their performance gains.

But authoring JavaScript tools are challenging, let alone writing them in Rust. I have struggled a lot when learning these technologies, and I wish fewer people to take the same struggling journey.

I want to make my own contribution to the community by writing this guide, so you don't have to take the same journey as I had.

There are only a handful of developers on the Rust side, and I would like to see you here and join us, so we can build better and faster tools for everyone to enjoy.

Overview

For this guide, the standard compiler frontend phases will be applied:

Source Text --> Lexer --> Token --> Parser --> AST

Writing a JavaScript parser is fairly easy, it is 10% architectural decisions and 90% hard work on the fine-grained details.

The architectural decisions will mostly affect two categories:

  • the performance of our parser
  • how nice it is to consume our AST

Knowing all the options and trade-offs before building a parser in Rust will make our whole journey much smoother.

Performance

The key to a performant Rust program is to allocate less memory and use fewer CPU cycles.

It is mostly transparent where memory allocations are made just by looking for heap-allocated objects such as a Vec, Box or String. Reasoning about their usage will give us a sense of how fast our program will be - the more we allocate, the slower our program will be.

Rust gives us the power of zero-cost abstractions, we don't need to worry too much about abstractions causing slower performance. Be careful with our algorithmic complexities and we will be all good to go.

INFO

You should also read The Rust Performance Book.

Rust Source Code

Whenever the performance of an function call cannot be deduced, do not be afraid to click the "source" button on the Rust documentation and read the source code, they are easy to understand most of the time.

INFO

When navigating the Rust source code, searching for a definition is simply looking for fn function_name, struct struct_name, enum enum_name etc. This is one advantage of having constant grammar in Rust (compared to JavaScript 😉).

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/parser_in_rust/lexer.html b/docs/learn/parser_in_rust/lexer.html index 61ed55be83..4e88686353 100644 --- a/docs/learn/parser_in_rust/lexer.html +++ b/docs/learn/parser_in_rust/lexer.html @@ -6,7 +6,7 @@ Lexer | The JavaScript Oxidation Compiler - + @@ -218,7 +218,7 @@ // highlight-next-line String(Atom), }

and string comparison becomes matches!(value, TokenValue::String(atom!("string"))).

- + \ No newline at end of file diff --git a/docs/learn/parser_in_rust/parser.html b/docs/learn/parser_in_rust/parser.html index 438d9695cb..5fbf7958db 100644 --- a/docs/learn/parser_in_rust/parser.html +++ b/docs/learn/parser_in_rust/parser.html @@ -6,7 +6,7 @@ Parser | The JavaScript Oxidation Compiler - + @@ -293,7 +293,7 @@ // Definitely not a parenthesized arrow function. return Tristate.False; }

In summary, the TypeScript parser uses a combination of lookahead (fast path) and backtracking to parse arrow functions.

- + \ No newline at end of file diff --git a/docs/learn/parser_in_rust/semantic_analysis.html b/docs/learn/parser_in_rust/semantic_analysis.html index 27c8009163..42eca27d08 100644 --- a/docs/learn/parser_in_rust/semantic_analysis.html +++ b/docs/learn/parser_in_rust/semantic_analysis.html @@ -6,7 +6,7 @@ Semantic Analysis | The JavaScript Oxidation Compiler - + @@ -131,7 +131,7 @@ self.current_scope_id = self.scopes[self.current_scope_id].parent().unwrap(); } }

We then call enter_scope and leave_scope accordingly inside the parse functions, for example in acorn:

javascript
https://github.com/acornjs/acorn/blob/11735729c4ebe590e406f952059813f250a4cbd1/acorn/src/statement.js#L425-L437

INFO

One of the downsides of this approach is that for arrow functions, we may need to create a temporary scope and then drop it afterwards if it is not an arrow function but a sequence expression. This is detailed in cover grammar.

The Visitor Pattern

If we decide to build the scope tree in another pass for simplicity, then every node in the AST need to be visited in depth-first preorder and build the scope tree.

We can use the Visitor Pattern to separate out the traversal process from the operations performed on each object.

Upon visit, we can call enter_scope and leave_scope accordingly to build the scope tree.

- + \ No newline at end of file diff --git a/docs/learn/performance.html b/docs/learn/performance.html index 414fc0feb0..6e77d05266 100644 --- a/docs/learn/performance.html +++ b/docs/learn/performance.html @@ -6,7 +6,7 @@ Performance | The JavaScript Oxidation Compiler - + @@ -270,7 +270,7 @@ writeln!(handle, "foo: {}", 42); // add `?` if you care about errors here

Or acquire the lock on stdout.

rust
let stdout = io::stdout(); // get the global stdout entity
 let mut handle = stdout.lock(); // acquire a lock on it
 writeln!(handle, "foo: {}", 42); // add `?` if you care about errors here
- + \ No newline at end of file diff --git a/docs/learn/references.html b/docs/learn/references.html index ec6ab47f4e..b8e91b10a3 100644 --- a/docs/learn/references.html +++ b/docs/learn/references.html @@ -6,7 +6,7 @@ References | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Released under the MIT License.

- + \ No newline at end of file diff --git a/docs/learn/terminology.html b/docs/learn/terminology.html index 4285f252ce..46559b8a47 100644 --- a/docs/learn/terminology.html +++ b/docs/learn/terminology.html @@ -6,7 +6,7 @@ Terminology | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Terminology

Binding

A value being assigned/bound within a scope.

Binding type

The type of the binding: imported value, assigned value (let/const/var), exported value, func/class declaration, func/method arguments, etc.

Scope

A block in which bindings can exist. A block is any code surrounded with {}, such as classes, functions, methods, callbacks, if/else, etc. Scopes have a hierarchy, with parents having children (not always), and children belonging to a parent. Bindings in a child shadow those in a parent if they have the same name.

Scope flags

Metadata about the current scope (not inherited hierarchy scope): function, constructor, top-level (program), etc.

Symbol

A binding wrapper with references to each usage/call site of the bound variable within the current source text. A symbol is assigned an ID in the order they are scanned, and reach reference points to the symbol by that ID.

Symbol flags

Metadata about the symbol/binding.

Reference

A symbol reference is the usage of a symbol (and in turn a binding), and is assigned an ID in the order they are scanned. Each reference is flagged as read, write, or both.

Span

The start/end offset of the node within the source text.

Released under the MIT License.

- + \ No newline at end of file diff --git a/ecosystem.html b/ecosystem.html index 99e5446bc5..277f08b5e5 100644 --- a/ecosystem.html +++ b/ecosystem.html @@ -6,7 +6,7 @@ Ecosystem | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Ecosystem

Rolldown

Fast Rust bundler for JavaScript with Rollup-compatible API.

Tyvm

An experimental bytecode interpreter for type-level TypeScript.

Released under the MIT License.

- + \ No newline at end of file diff --git a/feeds/blog-en.atom b/feeds/blog-en.atom index 56e37cfbb9..2a95c38bfb 100644 --- a/feeds/blog-en.atom +++ b/feeds/blog-en.atom @@ -2,7 +2,7 @@ https://oxc.rs The Oxidation Compiler Blog - 2024-07-08T15:28:58.739Z + 2024-07-09T03:08:34.866Z https://github.com/jpmonette/feed https://cdn.jsdelivr.net/gh/oxc-project/oxc-assets/round.ico @@ -19,7 +19,7 @@ This milestone signifies our team's ability to promptly address and triage issue

At this stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

For faster feedback loops, we recommend running oxlint before ESLint in your lint-staged or CI setup, considering it only takes a few seconds to run on large codebases.

To test oxlint in your JavaScript / TypeScript codebase, simply execute the following command at the root directory of your repository:

-
+
sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
@@ -63,7 +63,7 @@ This milestone signifies our team's ability to promptly address and triage issue

At this stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

For faster feedback loops, we recommend running oxlint before ESLint in your lint-staged or CI setup, considering it only takes a few seconds to run on large codebases.

To test oxlint in your JavaScript / TypeScript codebase, simply execute the following command at the root directory of your repository:

-
+
sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
diff --git a/feeds/blog-en.rss b/feeds/blog-en.rss index f9b67e92d9..22b6ebc662 100644 --- a/feeds/blog-en.rss +++ b/feeds/blog-en.rss @@ -4,7 +4,7 @@ The Oxidation Compiler Blog https://oxc.rs undefined - Mon, 08 Jul 2024 15:28:58 GMT + Tue, 09 Jul 2024 03:08:34 GMT https://validator.w3.org/feed/docs/rss2.html https://github.com/jpmonette/feed en @@ -21,7 +21,7 @@ This milestone signifies our team's ability to promptly address and triage issue

At this stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

For faster feedback loops, we recommend running oxlint before ESLint in your lint-staged or CI setup, considering it only takes a few seconds to run on large codebases.

To test oxlint in your JavaScript / TypeScript codebase, simply execute the following command at the root directory of your repository:

-
+
sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
@@ -65,7 +65,7 @@ This milestone signifies our team's ability to promptly address and triage issue

At this stage, oxlint is not intended to fully replace ESLint; it serves as an enhancement when ESLint's slowness becomes a bottleneck in your workflow.

For faster feedback loops, we recommend running oxlint before ESLint in your lint-staged or CI setup, considering it only takes a few seconds to run on large codebases.

To test oxlint in your JavaScript / TypeScript codebase, simply execute the following command at the root directory of your repository:

-
+
sh
$ npx oxlint@latest
sh
$ pnpm dlx oxlint@latest
sh
$ yarn dlx oxlint@latest
diff --git a/hashmap.json b/hashmap.json index 73897deff4..2c810e018d 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"blog_2023-12-12-announcing-oxlint.md":"B7YEH3U0","docs_contribute_parser.md":"DmrSYngQ","docs_contribute_linter.md":"BJfmbKqA","docs_contribute_introduction.md":"b4tQBQps","docs_contribute_minifier.md":"BGJY0qQs","docs_contribute_vscode.md":"D5ev2M8m","docs_contribute_codegen.md":"DVDTy-QO","docs_contribute_development.md":"BfF6JQVi","docs_contribute_debugging.md":"wf62p0pV","docs_contribute_formatter.md":"CVTcHWgq","blog_2024-05-04-import-plugin-alpha.md":"CDj5Qk0-","docs_contribute_performance.md":"BKSV8nxa","docs_contribute_transformer.md":"BFOJ_v97","docs_contribute_rules.md":"DbddV0-_","docs_contribute_resolver.md":"CX0aKGr1","branding.md":"DsY9sylZ","docs_learn_architecture_introduction.md":"osWFYMAo","docs_guide_usage_linter_config.md":"YPItqhwI","docs_learn_architecture_linter.md":"DnXo92qj","docs_learn_parser_in_rust_ast.md":"DHPKWjqL","docs_learn_ecmascript_spec.md":"Cj9_Mi_1","docs_guide_usage_linter.md":"BKec6KC0","docs_guide_usage_linter_cli.md":"DKR_2Z-O","docs_learn_parser_in_rust_intro.md":"C5UqHrxs","docs_guide_usage_linter_generated-cli.md":"CD8IawSY","docs_learn_parser_in_rust_parser.md":"CzQ_y2vK","docs_learn_architecture_formatter.md":"BVZ-vo2Y","ecosystem.md":"Djfbae5O","docs_learn_architecture_transformer.md":"Dl9hbgfb","docs_guide_usage_parser.md":"Cnl4_3Lr","docs_learn_terminology.md":"JUNpIX2N","docs_guide_introduction.md":"C-A_xKL5","docs_learn_ecmascript_grammar.md":"4fpVxcqT","docs_guide_usage_resolver.md":"BQowe79s","docs_guide_usage_linter_generated-config.md":"BWvfgu-8","team.md":"DSeMi21q","docs_learn_parser_in_rust_lexer.md":"DbGdqw1W","docs_learn_parser_in_rust_errors.md":"LnhQn00i","index.md":"Cdau3kYi","docs_learn_architecture_minifier.md":"CzIBlr2F","docs_guide_usage_transformer.md":"BAWgOUo0","docs_learn_architecture_parser.md":"BUDL3Ik4","docs_guide_usage_linter_rules.md":"BuT5Mv3W","docs_learn_references.md":"B3XntCyY","docs_guide_usage_linter_generated-rules.md":"ChFwV2Gb","docs_learn_parser_in_rust_semantic_analysis.md":"BGl8A9TV","docs_learn_architecture_resolver.md":"merwBVzd","docs_learn_performance.md":"BwZ2vErI"} +{"docs_contribute_transformer.md":"BFOJ_v97","blog_2023-12-12-announcing-oxlint.md":"BXiLLf5F","docs_contribute_codegen.md":"DVDTy-QO","branding.md":"DsY9sylZ","docs_contribute_debugging.md":"wf62p0pV","docs_guide_usage_linter.md":"CkG0C-L-","docs_guide_usage_resolver.md":"BQowe79s","docs_contribute_formatter.md":"CVTcHWgq","docs_contribute_introduction.md":"b4tQBQps","docs_contribute_development.md":"BfF6JQVi","docs_guide_usage_linter_generated-cli.md":"CD8IawSY","docs_contribute_minifier.md":"BGJY0qQs","docs_contribute_linter.md":"BJfmbKqA","docs_contribute_parser.md":"DmrSYngQ","docs_contribute_performance.md":"BKSV8nxa","docs_contribute_resolver.md":"CX0aKGr1","docs_learn_architecture_formatter.md":"BVZ-vo2Y","docs_contribute_rules.md":"DbddV0-_","docs_learn_architecture_linter.md":"DnXo92qj","docs_learn_architecture_introduction.md":"osWFYMAo","docs_guide_usage_transformer.md":"BAWgOUo0","docs_learn_architecture_resolver.md":"merwBVzd","docs_guide_usage_linter_generated-rules.md":"ChFwV2Gb","docs_guide_usage_linter_cli.md":"DKR_2Z-O","docs_guide_usage_parser.md":"Cnl4_3Lr","docs_learn_architecture_parser.md":"BUDL3Ik4","docs_learn_ecmascript_spec.md":"Cj9_Mi_1","docs_learn_architecture_minifier.md":"CzIBlr2F","docs_learn_parser_in_rust_ast.md":"DHPKWjqL","docs_learn_parser_in_rust_semantic_analysis.md":"BGl8A9TV","docs_learn_parser_in_rust_intro.md":"C5UqHrxs","docs_learn_references.md":"B3XntCyY","docs_learn_parser_in_rust_errors.md":"LnhQn00i","docs_learn_terminology.md":"JUNpIX2N","team.md":"DSeMi21q","docs_guide_introduction.md":"C-A_xKL5","docs_learn_ecmascript_grammar.md":"4fpVxcqT","docs_guide_usage_linter_config.md":"YPItqhwI","index.md":"CKjaI2rc","docs_contribute_vscode.md":"D5ev2M8m","docs_guide_usage_linter_generated-config.md":"BWvfgu-8","docs_learn_architecture_transformer.md":"Dl9hbgfb","ecosystem.md":"Djfbae5O","docs_learn_parser_in_rust_lexer.md":"DbGdqw1W","docs_guide_usage_linter_rules.md":"BuT5Mv3W","docs_learn_parser_in_rust_parser.md":"CzQ_y2vK","blog_2024-05-04-import-plugin-alpha.md":"CDj5Qk0-","docs_learn_performance.md":"BwZ2vErI"} diff --git a/index.html b/index.html index aa0d0006f0..999ecc8543 100644 --- a/index.html +++ b/index.html @@ -6,13 +6,13 @@ The JavaScript Oxidation Compiler - + - + @@ -35,8 +35,94 @@ -
Skip to content

The JavaScript Oxidation Compiler

A collection of JavaScript tools written in Rust

Sponsored by

Silver SponsorsSnyder TechnologiesBronze Sponsorsschoolhouse.w...Super GenerousZackBackers

Released under the MIT License.

- +
Skip to content

The JavaScript Oxidation Compiler

A collection of JavaScript tools written in Rust

Sponsored by

+ + +Silver Sponsors + Snyder Technologies + +Bronze Sponsors + schoolhouse.w... + +Super Generous + Zack + +Backers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Released under the MIT License.

+ \ No newline at end of file diff --git a/team.html b/team.html index f7f88c4daf..bb87f889d4 100644 --- a/team.html +++ b/team.html @@ -6,7 +6,7 @@ Meet the Team | The JavaScript Oxidation Compiler - + @@ -36,7 +36,7 @@
Skip to content

Meet the Team

Core Team

Boshen

Boshen

Project Lead

Dunqing

Dunqing

Member

overlookmotel

overlookmotel

Member

Mysteryven

Mysteryven

Member

rzvxa

rzvxa

Member

Cameron

Cameron

Member

Consultants

Yagiz

Yagiz

Performance Engineer @ Sentry

Released under the MIT License.

- + \ No newline at end of file