From 30a68d6b350452d110c4bc1707e8112866ebdb95 Mon Sep 17 00:00:00 2001 From: ZanzyTHEbar Date: Tue, 26 Sep 2023 17:04:13 +0000 Subject: [PATCH] feat: update css - add updated css for new vitepress --- 404.html | 4 ++-- about.html | 4 ++-- archive/fox_ir_v2_build_instructions.html | 4 ++-- assets/{style.301f8f7e.css => style.41ea939d.css} | 2 +- contact.html | 4 ++-- dev_roadmap.html | 4 ++-- development/docs/dev_docs.html | 4 ++-- development/docs/pages.html | 4 ++-- development/docs/standards.html | 4 ++-- firmware_guide/configure_firmware.html | 4 ++-- firmware_guide/environments.html | 4 ++-- firmware_guide/firmware.html | 4 ++-- firmware_guide/mdns.html | 4 ++-- firmware_guide/rest_api.html | 4 ++-- firmware_guide/setup_vscode.html | 4 ++-- firmware_guide/update_platformio.html | 4 ++-- firmware_guide/upload_and_update_firmware.html | 4 ++-- getting_started/intro.html | 4 ++-- getting_started/led_safety.html | 4 ++-- getting_started/things_to_know.html | 4 ++-- hashmap.json | 2 +- how_to_build/creating_your_own_mount.html | 4 ++-- how_to_build/full_build.html | 4 ++-- how_to_build/parts_list.html | 4 ++-- index.html | 4 ++-- misc/faq.html | 4 ++-- misc/vrc_avatar_setup.html | 4 ++-- software_guide/build_software.html | 4 ++-- software_guide/eyetrackvr_app_guide.html | 4 ++-- software_guide/osc_setup.html | 4 ++-- 30 files changed, 58 insertions(+), 58 deletions(-) rename assets/{style.301f8f7e.css => style.41ea939d.css} (85%) diff --git a/404.html b/404.html index 92a9ff0..d4e95f6 100644 --- a/404.html +++ b/404.html @@ -5,7 +5,7 @@ 404 | EyeTrackVR Docs - + @@ -14,7 +14,7 @@
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.

Released under the MIT License.

- + \ No newline at end of file diff --git a/about.html b/about.html index a3e6f9e..df2a403 100644 --- a/about.html +++ b/about.html @@ -5,7 +5,7 @@ EyeTrackVR Docs | EyeTrackVR Docs - + @@ -17,7 +17,7 @@
Skip to content

Our Team

The development of EyeTrackVR is guided by an international team, some of whom have chosen to be featured below.

EyeTrackVR developers are a group of people who are passionate about the field of augmented and virtual reality.

Prohurtz

Prohurtz

Creator / Lead Software Developer / Documentor / Hardware Developer

Summer

Summer

Machine Learning Engineer / Data Scientist / App Developer

lorow

lorow

Lead Firmware Developer / App Developer

DaOfficialWizard

DaOfficialWizard

Firmware Developer / Documentation Manager / App Developer

Contributors

Those who have actively contributed to development.
Community Support

Philosophy

The guides on this website include some of our teams own notes (not all of them are polished) that we disclose for other people to use.

Here, we hope you may find something useful to you.

We advocate the Open Source model.

This is why we strive to make our work open to other people for consultation, replication and reuse.

Released under the MIT License.

- + \ No newline at end of file diff --git a/archive/fox_ir_v2_build_instructions.html b/archive/fox_ir_v2_build_instructions.html index 0ac96e8..dc5ef86 100644 --- a/archive/fox_ir_v2_build_instructions.html +++ b/archive/fox_ir_v2_build_instructions.html @@ -5,7 +5,7 @@ Fox IR V2 Buil dInstructions | EyeTrackVR Docs - + @@ -18,7 +18,7 @@
Skip to content

Fox IR V2 Buil dInstructions

Step 15: Prepare to solder IR LED PCB V2s

Get your magnifying glass out, it's time to solder very smol things.

Gather 4 PCBs, 4 IR LEDs, and 2 ~700ohm resistors.

'img'

698ohm resistors and V2 PCBs

Here are the PCB pin-out labels:

'img'

V2

LED labels:

'img'

The green markings and notched corners mark the positive sides of the LEDs pictured above.

If you have different LEDs, please consult their datasheet.

Some terminology related to them:

5V: 5-volt power in.

GND: Ground or power out.

AR: After-Resistor this is to be used as the power in on the 2nd PCB in series as resistors are not needed on the 2nd PCB since they are on the 1st one.

SNG: Single resistor, use this as 5V in if you are using only 1 ~700ohm resistor on V3 boards (not recommended).

Negative: This marks the negative side of the LED.

Positive: This marks the positive side of the LED.

Step 17: Solder resistors on PCB V2

You only need 1 PCB to have a resistor per eye.

'img'

Tin the resistor pads.

'img'

Hold the resistor in place.

'img'

Solder one end.

'img'

Flip to the other side of the resistor and solder it.

'img'

Solder LEDs on PCB V2

'img'

Tin the pads

'img'

Place the resistor on the pads in the correct orientation.

'img'

Solder each side of the resistor. Be careful not to solder at too high of a temp, recommended soldering temp is 230C with a max of 245C.

'img'

The LED is flipped in this Image, the green dot should face AWAY from the PCB.

Wire up the PCBs V2

Basic full wiring diagram of IR PCBs V2.

'drawing'

The PCB that receives the 5V power is the one with the resistor. The second one, which gets its power from the ground pin of the first, does not have a resistor on it and its power input pin is the AR pin (After-Resistor). The 2nd PCBs ground pin goes to the ground of the system, in the diagram it is the ESPs ground pin.

Released under the MIT License.

- + \ No newline at end of file diff --git a/assets/style.301f8f7e.css b/assets/style.41ea939d.css similarity index 85% rename from assets/style.301f8f7e.css rename to assets/style.41ea939d.css index c1f17b8..37c1416 100644 --- a/assets/style.301f8f7e.css +++ b/assets/style.41ea939d.css @@ -1 +1 @@ -@import"https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700;800;900&display=swap";@import"https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700;900&display=swap";@import"https://fonts.googleapis.com/css?family=Ubuntu:500";@import"https://fonts.googleapis.com/css?family=Space+Mono:regular,italic,700,700italic";@import"https://fonts.googleapis.com/css?family=Space+Grotesk:regular,italic,700,700italic";@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.5f2c6c8c.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.e75737ce.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 var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.d5a6d92a.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.ab0619bc.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.2ed14f66.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,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 var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.0030eebd.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.14ce25a6.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.ea42a392.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.33bd5a8e.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 var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.8f4463c4.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.4fbe9427.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.bd3b6f56.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,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 var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.bd8920cc.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.6ce511fb.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}: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-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-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-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)}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}: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}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}: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-green-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-green-1);--vp-code-line-diff-remove-color: var(--vp-c-red-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red-1);--vp-code-line-warning-color: var(--vp-c-yellow-soft);--vp-code-line-error-color: var(--vp-c-red-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-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-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-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-gray-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-brand-1);--vp-badge-tip-bg: var(--vp-c-brand-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:scroll!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);direction:ltr;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}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}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::-moz-placeholder,textarea::-moz-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}select{-webkit-appearance:none}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);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{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-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-brand-1)}.custom-block.tip a:hover{color:var(--vp-c-brand-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-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{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{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-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{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}.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-light{display:none}html:not(.dark) .vp-code-dark{display:none}.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;-moz-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{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;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:-moz-fit-content;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:.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:-moz-fit-content;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:""}.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-bottom:4px;text-align:center;letter-spacing:1px;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[data-v-4415f8bd]{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)}.vp-doc h1>.VPBadge[data-v-4415f8bd]{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge[data-v-4415f8bd]{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge[data-v-4415f8bd]{vertical-align:middle}.vp-doc h4>.VPBadge[data-v-4415f8bd],.vp-doc h5>.VPBadge[data-v-4415f8bd],.vp-doc h6>.VPBadge[data-v-4415f8bd]{vertical-align:middle;line-height:18px}.VPBadge.info[data-v-4415f8bd]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-4415f8bd]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-4415f8bd]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-4415f8bd]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b2600058]{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-b2600058],.VPBackdrop.fade-leave-to[data-v-b2600058]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b2600058]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b2600058]{display:none}}.NotFound[data-v-572b3891]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-572b3891]{padding:96px 32px 168px}}.code[data-v-572b3891]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-572b3891]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-572b3891]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-572b3891]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-572b3891]{padding-top:20px}.link[data-v-572b3891]{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-572b3891]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-74479eb5]{position:relative;z-index:1}.nested[data-v-74479eb5]{padding-left:16px}.outline-link[data-v-74479eb5]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:400}.outline-link[data-v-74479eb5]:hover,.outline-link.active[data-v-74479eb5]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-74479eb5]{padding-left:13px}.VPDocAsideOutline[data-v-d8517c5e]{display:none}.VPDocAsideOutline.has-outline[data-v-d8517c5e]{display:block}.content[data-v-d8517c5e]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-d8517c5e]{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-d8517c5e]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-79cae1a0]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-79cae1a0]{flex-grow:1}.VPDocAside[data-v-79cae1a0] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-79cae1a0] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-79cae1a0] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-5be60f87]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-5be60f87]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-67de71aa]{margin-top:64px}.edit-info[data-v-67de71aa]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-67de71aa]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-67de71aa]{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-67de71aa]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-67de71aa]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-67de71aa]{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-67de71aa]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-67de71aa]{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-67de71aa]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-67de71aa]{margin-left:auto;text-align:right}.desc[data-v-67de71aa]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-67de71aa]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDocOutlineDropdown[data-v-3686ba1c]{margin-bottom:48px}.VPDocOutlineDropdown button[data-v-3686ba1c]{display:block;font-size:14px;font-weight:500;line-height:24px;border:1px solid var(--vp-c-border);padding:4px 12px;color:var(--vp-c-text-2);background-color:var(--vp-c-default-soft);border-radius:8px;transition:color .5s}.VPDocOutlineDropdown button[data-v-3686ba1c]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-3686ba1c]{color:var(--vp-c-text-1)}.icon[data-v-3686ba1c]{display:inline-block;vertical-align:middle;width:16px;height:16px;fill:currentColor}[data-v-3686ba1c] .outline-link{font-size:14px;font-weight:400}.open>.icon[data-v-3686ba1c]{transform:rotate(90deg)}.items[data-v-3686ba1c]{margin-top:12px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-281cfc61]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-281cfc61]{display:none}@media (min-width: 960px) and (max-width: 1279px){.VPDoc .VPDocOutlineDropdown[data-v-281cfc61]{display:block}}@media (min-width: 768px){.VPDoc[data-v-281cfc61]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-281cfc61]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-281cfc61]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-281cfc61]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-281cfc61]{display:flex;justify-content:center}.VPDoc .aside[data-v-281cfc61]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-281cfc61]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-281cfc61]{max-width:1104px}}.container[data-v-281cfc61]{margin:0 auto;width:100%}.aside[data-v-281cfc61]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-281cfc61]{order:1;padding-left:0;padding-left:initial;padding-right:32px}.aside-container[data-v-281cfc61]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 32px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-281cfc61]::-webkit-scrollbar{display:none}.aside-curtain[data-v-281cfc61]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-281cfc61]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-281cfc61]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-281cfc61]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-281cfc61]{order:1;margin:0;min-width:640px}}.content-container[data-v-281cfc61]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-281cfc61]{max-width:688px}.external-link-icon-enabled[data-v-281cfc61] :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.VPButton[data-v-de3c2b62]{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-de3c2b62]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-de3c2b62]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-de3c2b62]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-de3c2b62]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-de3c2b62]: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-de3c2b62]: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-de3c2b62]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-de3c2b62]: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-de3c2b62]: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-de3c2b62]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-de3c2b62]: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-de3c2b62]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-4d414b82]{display:none}.dark .VPImage.light[data-v-4d414b82]{display:none}.VPHero[data-v-3d564967]{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-3d564967]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-3d564967]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-3d564967]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-3d564967]{flex-direction:row}}.main[data-v-3d564967]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-3d564967]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-3d564967]{text-align:left}.main[data-v-3d564967]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-3d564967]{max-width:592px}}.name[data-v-3d564967],.text[data-v-3d564967]{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-3d564967],.VPHero.has-image .text[data-v-3d564967]{margin:0 auto}.name[data-v-3d564967]{color:var(--vp-home-hero-name-color)}.clip[data-v-3d564967]{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-3d564967],.text[data-v-3d564967]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-3d564967],.text[data-v-3d564967]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-3d564967],.VPHero.has-image .text[data-v-3d564967]{margin:0}}.tagline[data-v-3d564967]{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-3d564967]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-3d564967]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-3d564967]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-3d564967]{margin:0}}.actions[data-v-3d564967]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-3d564967]{justify-content:center}@media (min-width: 640px){.actions[data-v-3d564967]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-3d564967]{justify-content:flex-start}}.action[data-v-3d564967]{flex-shrink:0;padding:6px}.image[data-v-3d564967]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-3d564967]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-3d564967]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-3d564967]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-3d564967]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-3d564967]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-3d564967]{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-3d564967]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-3d564967]{width:320px;height:320px}}[data-v-3d564967] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-3d564967] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-3d564967] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-c552d5c5]{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-c552d5c5]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-c552d5c5]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-c552d5c5]>.VPImage{margin-bottom:20px}.icon[data-v-c552d5c5]{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-c552d5c5]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-c552d5c5]{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-c552d5c5]{padding-top:8px}.link-text-value[data-v-c552d5c5]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-c552d5c5]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-1da4ff3d]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-1da4ff3d]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-1da4ff3d]{padding:0 64px}}.container[data-v-1da4ff3d]{margin:0 auto;max-width:1152px}.items[data-v-1da4ff3d]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-1da4ff3d]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-1da4ff3d],.item.grid-4[data-v-1da4ff3d],.item.grid-6[data-v-1da4ff3d]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-1da4ff3d],.item.grid-4[data-v-1da4ff3d]{width:50%}.item.grid-3[data-v-1da4ff3d],.item.grid-6[data-v-1da4ff3d]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-1da4ff3d]{width:25%}}.VPHome[data-v-8ebac4ee]{padding-bottom:96px}.VPHome[data-v-8ebac4ee] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-8ebac4ee]{padding-bottom:128px}}.VPContent[data-v-b7946bfc]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-b7946bfc]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-b7946bfc]{margin:0}@media (min-width: 960px){.VPContent[data-v-b7946bfc]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-b7946bfc]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-b7946bfc]{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-04a39284]{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-04a39284]{display:none}@media (min-width: 768px){.VPFooter[data-v-04a39284]{padding:32px}}.container[data-v-04a39284]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-04a39284],.copyright[data-v-04a39284]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-2c1007a4]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-2c1007a4]{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-2c1007a4]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-2c1007a4]{color:var(--vp-c-text-1)}.icon[data-v-2c1007a4]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-2c1007a4] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-2c1007a4]{transform:rotate(90deg)}.items[data-v-2c1007a4]{position:absolute;top:64px;right:16px;left:16px;display:grid;grid-gap:1px;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)}.header[data-v-2c1007a4]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-2c1007a4]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-2c1007a4]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-2c1007a4]{transition:all .2s ease-out}.flyout-leave-active[data-v-2c1007a4]{transition:all .15s ease-in}.flyout-enter-from[data-v-2c1007a4],.flyout-leave-to[data-v-2c1007a4]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-3c3d80ab]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--vp-c-gutter);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-3c3d80ab]{position:fixed}.VPLocalNav.reached-top[data-v-3c3d80ab]{border-top-color:transparent}@media (min-width: 960px){.VPLocalNav[data-v-3c3d80ab]{display:none}}.menu[data-v-3c3d80ab]{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-3c3d80ab]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-3c3d80ab]{padding:0 32px}}.menu-icon[data-v-3c3d80ab]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-3c3d80ab]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-3c3d80ab]{padding:12px 32px 11px}}.VPSwitch[data-v-0b5e260c]{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-0b5e260c]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-0b5e260c]{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-0b5e260c]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-0b5e260c] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-0b5e260c] svg{fill:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-fdee46ce]{opacity:1}.moon[data-v-fdee46ce],.dark .sun[data-v-fdee46ce]{opacity:0}.dark .moon[data-v-fdee46ce]{opacity:1}.dark .VPSwitchAppearance[data-v-fdee46ce] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-f774fc1d]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-f774fc1d]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-71c5411b]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-71c5411b]{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-71c5411b]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-71c5411b]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-2bec9359]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-2bec9359]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-2bec9359]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-2bec9359]{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-7bffa9cd]{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-7bffa9cd] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-7bffa9cd] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-7bffa9cd] .group:last-child{padding-bottom:0}.VPMenu[data-v-7bffa9cd] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-7bffa9cd] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-7bffa9cd] .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-7bffa9cd] .action{padding-left:24px}.VPFlyout[data-v-1a2ceba0]{position:relative}.VPFlyout[data-v-1a2ceba0]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-1a2ceba0]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-1a2ceba0]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-1a2ceba0]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-1a2ceba0]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-1a2ceba0],.button[aria-expanded=true]+.menu[data-v-1a2ceba0]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-1a2ceba0]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-1a2ceba0]{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-1a2ceba0]{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-1a2ceba0]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-1a2ceba0]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-1a2ceba0]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-1a2ceba0]{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-efc53bd4]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-efc53bd4]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-efc53bd4]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-f2234a39]{display:flex;justify-content:center}.VPNavBarExtra[data-v-47bb42ad]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-47bb42ad]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-47bb42ad]{display:none}}.trans-title[data-v-47bb42ad]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-47bb42ad],.item.social-links[data-v-47bb42ad]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-47bb42ad]{min-width:176px}.appearance-action[data-v-47bb42ad]{margin-right:-2px}.social-links-list[data-v-47bb42ad]{margin:-4px -8px}.VPNavBarHamburger[data-v-670493dd]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-670493dd]{display:none}}.container[data-v-670493dd]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-670493dd]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-670493dd]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-670493dd]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-670493dd]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-670493dd]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-670493dd]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-670493dd],.VPNavBarHamburger.active:hover .middle[data-v-670493dd],.VPNavBarHamburger.active:hover .bottom[data-v-670493dd]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-670493dd],.middle[data-v-670493dd],.bottom[data-v-670493dd]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-670493dd]{top:0;left:0;transform:translate(0)}.middle[data-v-670493dd]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-670493dd]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-97d30ef6]{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-97d30ef6],.VPNavBarMenuLink[data-v-97d30ef6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-c6c3e6d4]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-c6c3e6d4]{display:flex}}/*! @docsearch/css 3.5.2 | 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-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-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;-moz-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}@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 1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.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;-moz-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:rgba(0,0,0,.2);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:rgba(0,0,0,.2);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;-moz-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}@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;-moz-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: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}.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-08b35e6f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-08b35e6f]{display:flex;align-items:center}}.title[data-v-2d6ff155]{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-2d6ff155]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-2d6ff155]{border-bottom-color:var(--vp-c-divider)}}[data-v-2d6ff155] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-3bf1c934]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-3bf1c934]{display:flex;align-items:center}}.title[data-v-3bf1c934]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-dfeca417]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap}@media (min-width: 768px){.VPNavBar[data-v-dfeca417]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-dfeca417]{padding:0}.VPNavBar[data-v-dfeca417]:not(.has-sidebar):not(.top){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-dfeca417]{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-dfeca417],.container>.content[data-v-dfeca417]{pointer-events:none}.container[data-v-dfeca417] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-dfeca417]{max-width:100%}}.title[data-v-dfeca417]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-dfeca417]{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-dfeca417]{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-dfeca417]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-dfeca417]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-dfeca417]{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-dfeca417]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.top) .content-body[data-v-dfeca417]{position:relative;background-color:var(--vp-nav-bg-color)}}@media (max-width: 767px){.content-body[data-v-dfeca417]{-moz-column-gap:.5rem;column-gap:.5rem}}.menu+.translations[data-v-dfeca417]:before,.menu+.appearance[data-v-dfeca417]:before,.menu+.social-links[data-v-dfeca417]:before,.translations+.appearance[data-v-dfeca417]:before,.appearance+.social-links[data-v-dfeca417]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-dfeca417]:before,.translations+.appearance[data-v-dfeca417]:before{margin-right:16px}.appearance+.social-links[data-v-dfeca417]:before{margin-left:16px}.social-links[data-v-dfeca417]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-dfeca417]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-dfeca417]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-dfeca417]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenAppearance[data-v-8d2d8cf1]{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-8d2d8cf1]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-083b71b4]{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-083b71b4]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-ed7bb82d]{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-ed7bb82d]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-836cddb8]{display:block}.title[data-v-836cddb8]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-31b21668]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-31b21668]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-31b21668]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-31b21668]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-31b21668]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-31b21668]{transform:rotate(45deg)}.button[data-v-31b21668]{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-31b21668]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-31b21668]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-31b21668]:first-child{padding-top:0}.group+.group[data-v-31b21668],.group+.item[data-v-31b21668]{padding-top:4px}.VPNavScreenTranslations[data-v-b72581fd]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-b72581fd]{height:auto}.title[data-v-b72581fd]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-b72581fd]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-b72581fd]{margin-right:8px}.icon.chevron[data-v-b72581fd]{margin-left:4px}.list[data-v-b72581fd]{padding:4px 0 0 24px}.link[data-v-b72581fd]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-5f4e75ae]{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-5f4e75ae],.VPNavScreen.fade-leave-active[data-v-5f4e75ae]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-5f4e75ae],.VPNavScreen.fade-leave-active .container[data-v-5f4e75ae]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-5f4e75ae],.VPNavScreen.fade-leave-to[data-v-5f4e75ae]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-5f4e75ae],.VPNavScreen.fade-leave-to .container[data-v-5f4e75ae]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-5f4e75ae]{display:none}}.container[data-v-5f4e75ae]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-5f4e75ae],.menu+.appearance[data-v-5f4e75ae],.translations+.appearance[data-v-5f4e75ae]{margin-top:24px}.menu+.social-links[data-v-5f4e75ae]{margin-top:16px}.appearance+.social-links[data-v-5f4e75ae]{margin-top:16px}.VPNav[data-v-a46e73f0]{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-a46e73f0]{position:fixed}}.VPSidebarItem.level-0[data-v-f0f37ff4]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-f0f37ff4]{padding-bottom:10px}.item[data-v-f0f37ff4]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-f0f37ff4]{cursor:pointer}.indicator[data-v-f0f37ff4]{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-f0f37ff4],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-f0f37ff4],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-f0f37ff4],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-f0f37ff4]{background-color:var(--vp-c-brand-1)}.link[data-v-f0f37ff4]{display:flex;align-items:center;flex-grow:1}.text[data-v-f0f37ff4]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-f0f37ff4]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-f0f37ff4],.VPSidebarItem.level-2 .text[data-v-f0f37ff4],.VPSidebarItem.level-3 .text[data-v-f0f37ff4],.VPSidebarItem.level-4 .text[data-v-f0f37ff4],.VPSidebarItem.level-5 .text[data-v-f0f37ff4]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-f0f37ff4]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-1.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-2.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-3.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-4.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-5.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-f0f37ff4]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-f0f37ff4]{color:var(--vp-c-brand-1)}.caret[data-v-f0f37ff4]{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-f0f37ff4]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-f0f37ff4]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-f0f37ff4]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-f0f37ff4]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-f0f37ff4],.VPSidebarItem.level-2 .items[data-v-f0f37ff4],.VPSidebarItem.level-3 .items[data-v-f0f37ff4],.VPSidebarItem.level-4 .items[data-v-f0f37ff4],.VPSidebarItem.level-5 .items[data-v-f0f37ff4]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-f0f37ff4]{display:none}.VPSidebar[data-v-45ef976a]{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-45ef976a]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-45ef976a]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-45ef976a]{z-index:1;padding-top:var(--vp-nav-height);padding-bottom:128px;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-45ef976a]{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-45ef976a]{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-45ef976a]{outline:0}.group+.group[data-v-45ef976a]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-45ef976a]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-b22defb4]{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-b22defb4]:focus{height:auto;width:auto;clip:auto;-webkit-clip-path:none;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-b22defb4]{top:14px;left:16px}}.Layout[data-v-527a0310]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-0cf72b3c]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-0cf72b3c]{margin:0 auto;max-width:1152px}.love[data-v-0cf72b3c]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-0cf72b3c]{width:28px;height:28px;fill:currentColor}.message[data-v-0cf72b3c]{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-0cf72b3c]{padding-top:32px}.action[data-v-0cf72b3c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-05fecbf1]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-05fecbf1]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-05fecbf1-s],.VPTeamMembers+.VPTeamPageSection[data-v-05fecbf1-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-05fecbf1-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-05fecbf1-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-05fecbf1-s],.VPTeamMembers+.VPTeamPageSection[data-v-05fecbf1-s]{margin-top:96px}}.VPTeamMembers[data-v-05fecbf1-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-05fecbf1-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-05fecbf1-s]{padding:0 64px}}.VPTeamPageTitle[data-v-6ce551d6]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-6ce551d6]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-6ce551d6]{padding:80px 64px 48px}}.title[data-v-6ce551d6]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-6ce551d6]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-6ce551d6]{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-6ce551d6]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-1ac32f26]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-1ac32f26]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-1ac32f26]{padding:0 64px}}.title[data-v-1ac32f26]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-1ac32f26]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-1ac32f26]{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-1ac32f26]{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-1ac32f26]{padding-top:40px}.VPTeamMembersItem[data-v-c1d54081]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-c1d54081]{padding:32px}.VPTeamMembersItem.small .data[data-v-c1d54081]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-c1d54081]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-c1d54081]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-c1d54081]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-c1d54081]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-c1d54081]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-c1d54081]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-c1d54081]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-c1d54081]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-c1d54081]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-c1d54081]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-c1d54081]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-c1d54081]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-c1d54081]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-c1d54081]{text-align:center}.avatar[data-v-c1d54081]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-c1d54081]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;-o-object-fit:cover;object-fit:cover}.name[data-v-c1d54081]{margin:0;font-weight:600}.affiliation[data-v-c1d54081]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-c1d54081]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-c1d54081]:hover{color:var(--vp-c-brand-1)}.desc[data-v-c1d54081]{margin:0 auto}.desc[data-v-c1d54081] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-c1d54081]{display:flex;justify-content:center;height:56px}.sp-link[data-v-c1d54081]{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-c1d54081]:hover,.sp .sp-link.link[data-v-c1d54081]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-c1d54081]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-3ca0e3f5]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-3ca0e3f5]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-3ca0e3f5]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-3ca0e3f5]{max-width:876px}.VPTeamMembers.medium .container[data-v-3ca0e3f5]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-3ca0e3f5]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-3ca0e3f5]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-3ca0e3f5]{max-width:760px}.container[data-v-3ca0e3f5]{display:grid;grid-gap:24px;gap:24px;margin:0 auto;max-width:1152px}/*! Do not put raw CSS code in this file */:root{--vp-font-family-base: "Space Grotesk", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-accent: #ab5ac7;--font-accent-light: #ab5ac7e3;--vp-font-family-mono: "Space Mono", Menlo, Monaco, Consolas, "Courier New", monospace}:root{--vp-c-brand: var(--font-accent);--vp-c-brand-light: var(--font-accent-light);--vp-c-brand-lighter: var(--font-accent);--vp-c-brand-lighter: rgba(31, 23, 255, .25);--vp-c-brand-dark: #4d45a8;--vp-c-brand-darker: #3a3381;--vp-c-sponsor: #fd1d7c}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:10px}::-webkit-scrollbar-thumb{background:#6d7faeb4;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#6d7fae}input[type=checkbox]{cursor:pointer;width:10px;height:10px;margin:10px;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid lightblue;box-shadow:#00000040 0 54px 55px,#0000001f 0 -12px 30px,#0000001f 0 4px 6px,#0000002b 0 12px 13px,#00000017 0 -3px 5px;background-clip:content-box;padding:3px}input,input:focus{border:none;border-radius:2pt;box-shadow:0 0 0 1pt gray;outline:none;transition:.1s}input[type=checkbox]:checked{background-color:#3899ff}input[type=checkbox]:focus{box-shadow:0 0 3pt 2pt #6495ed}label{font-size:18px;position:relative;top:-9px}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.custom-links{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity))}.custom-links:hover{text-decoration-line:underline}:is(.dark .custom-links){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.absolute{position:absolute}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mt-2{margin-top:.5rem}.flex{display:flex}.contents{display:contents}.hidden{display:none}.h-auto{height:auto}.w-3{width:.75rem}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.items-center{align-items:center}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.px-4{padding-left:1rem;padding-right:1rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pl-1{padding-left:.25rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tracking-tight{letter-spacing:-.025em}.text-\[\#ab5ac7\]{--tw-text-opacity: 1;color:rgb(171 90 199 / var(--tw-text-opacity))}.text-\[\#b63a61\]{--tw-text-opacity: 1;color:rgb(182 58 97 / var(--tw-text-opacity))}.text-\[\#e67e22\]{--tw-text-opacity: 1;color:rgb(230 126 34 / var(--tw-text-opacity))}.text-\[blue\]{--tw-text-opacity: 1;color:rgb(0 0 255 / var(--tw-text-opacity))}.text-\[green\]{--tw-text-opacity: 1;color:rgb(0 128 0 / var(--tw-text-opacity))}.text-\[orange\]{--tw-text-opacity: 1;color:rgb(255 165 0 / var(--tw-text-opacity))}.text-\[var\(--font-accent\)\]{color:var(--font-accent)}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-slate-900\/5{--tw-ring-color: rgb(15 23 42 / .05)}.drop-shadow-lg{--tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / .04)) drop-shadow(0 4px 3px rgb(0 0 0 / .1));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}:is(.dark .dark\:bg-slate-800){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity))}:is(.dark .dark\:text-\[\#ea4b7d\]){--tw-text-opacity: 1;color:rgb(234 75 125 / var(--tw-text-opacity))}:is(.dark .dark\:text-orange-500){--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}:is(.dark .dark\:text-slate-400){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}.VPLocalSearchBox[data-v-9cd6a060]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-9cd6a060]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-9cd6a060]{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:-moz-min-content;height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-9cd6a060]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-9cd6a060]{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-9cd6a060]{padding:0 8px}}.search-bar[data-v-9cd6a060]:focus-within{border-color:var(--vp-c-brand-1)}.search-icon[data-v-9cd6a060]{margin:8px}@media (max-width: 767px){.search-icon[data-v-9cd6a060]{display:none}}.search-input[data-v-9cd6a060]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-9cd6a060]{padding:6px 4px}}.search-actions[data-v-9cd6a060]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-9cd6a060]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-9cd6a060]{display:none}}.search-actions button[data-v-9cd6a060]{padding:8px}.search-actions button[data-v-9cd6a060]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-9cd6a060]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-9cd6a060]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-9cd6a060]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-9cd6a060]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-9cd6a060]{display:none}}.search-keyboard-shortcuts kbd[data-v-9cd6a060]{background:rgba(128,128,128,.1);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-9cd6a060]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-9cd6a060]{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-9cd6a060]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-9cd6a060]{margin:8px}}.titles[data-v-9cd6a060]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-9cd6a060]{display:flex;align-items:center;gap:4px}.title.main[data-v-9cd6a060]{font-weight:500}.title-icon[data-v-9cd6a060]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-9cd6a060]{opacity:.5}.result.selected[data-v-9cd6a060]{--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-9cd6a060]{position:relative}.excerpt[data-v-9cd6a060]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-9cd6a060]{opacity:1}.excerpt[data-v-9cd6a060] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-9cd6a060] mark,.excerpt[data-v-9cd6a060] 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-9cd6a060] .vp-code-group .tabs{display:none}.excerpt[data-v-9cd6a060] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-9cd6a060]{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-9cd6a060]{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-9cd6a060],.result.selected .title-icon[data-v-9cd6a060]{color:var(--vp-c-brand-1)!important}.no-results[data-v-9cd6a060]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-9cd6a060]{flex:none} +@import"https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700;800;900&display=swap";@import"https://fonts.googleapis.com/css2?family=Lato:wght@300;400;700;900&display=swap";@import"https://fonts.googleapis.com/css?family=Ubuntu:500";@import"https://fonts.googleapis.com/css?family=Space+Mono:regular,italic,700,700italic";@import"https://fonts.googleapis.com/css?family=Space+Grotesk:regular,italic,700,700italic";@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic.5f2c6c8c.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-cyrillic-ext.e75737ce.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 var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek.d5a6d92a.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-greek-ext.ab0619bc.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin.2ed14f66.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,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 var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-latin-ext.0030eebd.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:normal;font-named-instance:"Regular";src:url(/assets/inter-roman-vietnamese.14ce25a6.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic.ea42a392.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-cyrillic-ext.33bd5a8e.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 var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek.8f4463c4.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-greek-ext.4fbe9427.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin.bd3b6f56.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,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 var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-latin-ext.bd8920cc.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter var;font-weight:100 900;font-display:swap;font-style:italic;font-named-instance:"Italic";src:url(/assets/inter-italic-vietnamese.6ce511fb.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+1EA0-1EF9,U+20AB}@font-face{font-family:Chinese Quotes;src:local("PingFang SC Regular"),local("PingFang SC"),local("SimHei"),local("Source Han Sans SC");unicode-range:U+2018,U+2019,U+201C,U+201D}: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-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-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-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)}:root{--vp-font-family-base: "Chinese Quotes", "Inter var", "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}: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}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' height='20' width='20' stroke='rgba(128,128,128,1)' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' d='M9 5H7a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2M9 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M9 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m-6 9 2 2 4-4'/%3E%3C/svg%3E")}: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-green-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-green-1);--vp-code-line-diff-remove-color: var(--vp-c-red-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red-1);--vp-code-line-warning-color: var(--vp-c-yellow-soft);--vp-code-line-error-color: var(--vp-c-red-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-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-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-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-gray-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-brand-1);--vp-badge-tip-bg: var(--vp-c-brand-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:scroll!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);direction:ltr;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}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}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::-moz-placeholder,textarea::-moz-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}select{-webkit-appearance:none}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{display:inline-block;margin:auto 2px -2px}mjx-container>svg{margin:auto}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);-webkit-clip-path:inset(50%);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{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-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-brand-1)}.custom-block.tip a:hover{color:var(--vp-c-brand-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-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{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{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-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{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}.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-light{display:none}html:not(.dark) .vp-code-dark{display:none}.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;-moz-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{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;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:-moz-fit-content;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:.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:-moz-fit-content;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:""}.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-bottom:4px;text-align:center;letter-spacing:1px;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[data-v-4415f8bd]{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)}.vp-doc h1>.VPBadge[data-v-4415f8bd]{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge[data-v-4415f8bd]{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge[data-v-4415f8bd]{vertical-align:middle}.vp-doc h4>.VPBadge[data-v-4415f8bd],.vp-doc h5>.VPBadge[data-v-4415f8bd],.vp-doc h6>.VPBadge[data-v-4415f8bd]{vertical-align:middle;line-height:18px}.VPBadge.info[data-v-4415f8bd]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-4415f8bd]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-4415f8bd]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-4415f8bd]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-b2600058]{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-b2600058],.VPBackdrop.fade-leave-to[data-v-b2600058]{opacity:0}.VPBackdrop.fade-leave-active[data-v-b2600058]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-b2600058]{display:none}}.NotFound[data-v-572b3891]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-572b3891]{padding:96px 32px 168px}}.code[data-v-572b3891]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-572b3891]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-572b3891]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-572b3891]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-572b3891]{padding-top:20px}.link[data-v-572b3891]{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-572b3891]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-74479eb5]{position:relative;z-index:1}.nested[data-v-74479eb5]{padding-left:16px}.outline-link[data-v-74479eb5]{display:block;line-height:28px;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s;font-weight:400}.outline-link[data-v-74479eb5]:hover,.outline-link.active[data-v-74479eb5]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-74479eb5]{padding-left:13px}.VPDocAsideOutline[data-v-d8517c5e]{display:none}.VPDocAsideOutline.has-outline[data-v-d8517c5e]{display:block}.content[data-v-d8517c5e]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-d8517c5e]{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-d8517c5e]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-79cae1a0]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-79cae1a0]{flex-grow:1}.VPDocAside[data-v-79cae1a0] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-79cae1a0] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-79cae1a0] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-5be60f87]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-5be60f87]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-67de71aa]{margin-top:64px}.edit-info[data-v-67de71aa]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-67de71aa]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-67de71aa]{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-67de71aa]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-67de71aa]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-67de71aa]{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-67de71aa]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-67de71aa]{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-67de71aa]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-67de71aa]{margin-left:auto;text-align:right}.desc[data-v-67de71aa]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-67de71aa]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDocOutlineDropdown[data-v-3686ba1c]{margin-bottom:48px}.VPDocOutlineDropdown button[data-v-3686ba1c]{display:block;font-size:14px;font-weight:500;line-height:24px;border:1px solid var(--vp-c-border);padding:4px 12px;color:var(--vp-c-text-2);background-color:var(--vp-c-default-soft);border-radius:8px;transition:color .5s}.VPDocOutlineDropdown button[data-v-3686ba1c]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-3686ba1c]{color:var(--vp-c-text-1)}.icon[data-v-3686ba1c]{display:inline-block;vertical-align:middle;width:16px;height:16px;fill:currentColor}[data-v-3686ba1c] .outline-link{font-size:14px;font-weight:400}.open>.icon[data-v-3686ba1c]{transform:rotate(90deg)}.items[data-v-3686ba1c]{margin-top:12px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-281cfc61]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-281cfc61]{display:none}@media (min-width: 960px) and (max-width: 1279px){.VPDoc .VPDocOutlineDropdown[data-v-281cfc61]{display:block}}@media (min-width: 768px){.VPDoc[data-v-281cfc61]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-281cfc61]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-281cfc61]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-281cfc61]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-281cfc61]{display:flex;justify-content:center}.VPDoc .aside[data-v-281cfc61]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-281cfc61]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-281cfc61]{max-width:1104px}}.container[data-v-281cfc61]{margin:0 auto;width:100%}.aside[data-v-281cfc61]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-281cfc61]{order:1;padding-left:0;padding-left:initial;padding-right:32px}.aside-container[data-v-281cfc61]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 32px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-281cfc61]::-webkit-scrollbar{display:none}.aside-curtain[data-v-281cfc61]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-281cfc61]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 32px));padding-bottom:32px}.content[data-v-281cfc61]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-281cfc61]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-281cfc61]{order:1;margin:0;min-width:640px}}.content-container[data-v-281cfc61]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-281cfc61]{max-width:688px}.external-link-icon-enabled[data-v-281cfc61] :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.VPButton[data-v-de3c2b62]{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-de3c2b62]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-de3c2b62]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-de3c2b62]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-de3c2b62]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-de3c2b62]: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-de3c2b62]: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-de3c2b62]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-de3c2b62]: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-de3c2b62]: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-de3c2b62]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-de3c2b62]: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-de3c2b62]:active{border-color:var(--vp-button-sponsor-active-border);color:var(--vp-button-sponsor-active-text);background-color:var(--vp-button-sponsor-active-bg)}html:not(.dark) .VPImage.dark[data-v-4d414b82]{display:none}.dark .VPImage.light[data-v-4d414b82]{display:none}.VPHero[data-v-3d564967]{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-3d564967]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-3d564967]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-3d564967]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-3d564967]{flex-direction:row}}.main[data-v-3d564967]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-3d564967]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-3d564967]{text-align:left}.main[data-v-3d564967]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-3d564967]{max-width:592px}}.name[data-v-3d564967],.text[data-v-3d564967]{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-3d564967],.VPHero.has-image .text[data-v-3d564967]{margin:0 auto}.name[data-v-3d564967]{color:var(--vp-home-hero-name-color)}.clip[data-v-3d564967]{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-3d564967],.text[data-v-3d564967]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-3d564967],.text[data-v-3d564967]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-3d564967],.VPHero.has-image .text[data-v-3d564967]{margin:0}}.tagline[data-v-3d564967]{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-3d564967]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-3d564967]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-3d564967]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-3d564967]{margin:0}}.actions[data-v-3d564967]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-3d564967]{justify-content:center}@media (min-width: 640px){.actions[data-v-3d564967]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-3d564967]{justify-content:flex-start}}.action[data-v-3d564967]{flex-shrink:0;padding:6px}.image[data-v-3d564967]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-3d564967]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-3d564967]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-3d564967]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-3d564967]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-3d564967]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-3d564967]{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-3d564967]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-3d564967]{width:320px;height:320px}}[data-v-3d564967] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-3d564967] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-3d564967] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-c552d5c5]{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-c552d5c5]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-c552d5c5]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-c552d5c5]>.VPImage{margin-bottom:20px}.icon[data-v-c552d5c5]{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-c552d5c5]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-c552d5c5]{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-c552d5c5]{padding-top:8px}.link-text-value[data-v-c552d5c5]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-c552d5c5]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-1da4ff3d]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-1da4ff3d]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-1da4ff3d]{padding:0 64px}}.container[data-v-1da4ff3d]{margin:0 auto;max-width:1152px}.items[data-v-1da4ff3d]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-1da4ff3d]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-1da4ff3d],.item.grid-4[data-v-1da4ff3d],.item.grid-6[data-v-1da4ff3d]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-1da4ff3d],.item.grid-4[data-v-1da4ff3d]{width:50%}.item.grid-3[data-v-1da4ff3d],.item.grid-6[data-v-1da4ff3d]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-1da4ff3d]{width:25%}}.VPHome[data-v-8ebac4ee]{padding-bottom:96px}.VPHome[data-v-8ebac4ee] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-8ebac4ee]{padding-bottom:128px}}.VPContent[data-v-b7946bfc]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-b7946bfc]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-b7946bfc]{margin:0}@media (min-width: 960px){.VPContent[data-v-b7946bfc]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-b7946bfc]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-b7946bfc]{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-04a39284]{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-04a39284]{display:none}@media (min-width: 768px){.VPFooter[data-v-04a39284]{padding:32px}}.container[data-v-04a39284]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-04a39284],.copyright[data-v-04a39284]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-2c1007a4]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-2c1007a4]{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-2c1007a4]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-2c1007a4]{color:var(--vp-c-text-1)}.icon[data-v-2c1007a4]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-2c1007a4] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-2c1007a4]{transform:rotate(90deg)}.items[data-v-2c1007a4]{position:absolute;top:64px;right:16px;left:16px;display:grid;grid-gap:1px;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)}.header[data-v-2c1007a4]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-2c1007a4]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-2c1007a4]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-2c1007a4]{transition:all .2s ease-out}.flyout-leave-active[data-v-2c1007a4]{transition:all .15s ease-in}.flyout-enter-from[data-v-2c1007a4],.flyout-leave-to[data-v-2c1007a4]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-3c3d80ab]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--vp-c-gutter);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-3c3d80ab]{position:fixed}.VPLocalNav.reached-top[data-v-3c3d80ab]{border-top-color:transparent}@media (min-width: 960px){.VPLocalNav[data-v-3c3d80ab]{display:none}}.menu[data-v-3c3d80ab]{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-3c3d80ab]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-3c3d80ab]{padding:0 32px}}.menu-icon[data-v-3c3d80ab]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-3c3d80ab]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-3c3d80ab]{padding:12px 32px 11px}}.VPSwitch[data-v-0b5e260c]{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-0b5e260c]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-0b5e260c]{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-0b5e260c]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-0b5e260c] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-0b5e260c] svg{fill:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-fdee46ce]{opacity:1}.moon[data-v-fdee46ce],.dark .sun[data-v-fdee46ce]{opacity:0}.dark .moon[data-v-fdee46ce]{opacity:1}.dark .VPSwitchAppearance[data-v-fdee46ce] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-f774fc1d]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-f774fc1d]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-71c5411b]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-71c5411b]{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-71c5411b]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-71c5411b]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-2bec9359]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-2bec9359]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-2bec9359]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-2bec9359]{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-7bffa9cd]{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-7bffa9cd] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-7bffa9cd] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-7bffa9cd] .group:last-child{padding-bottom:0}.VPMenu[data-v-7bffa9cd] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-7bffa9cd] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-7bffa9cd] .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-7bffa9cd] .action{padding-left:24px}.VPFlyout[data-v-1a2ceba0]{position:relative}.VPFlyout[data-v-1a2ceba0]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-1a2ceba0]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-1a2ceba0]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-1a2ceba0]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-1a2ceba0]{color:var(--vp-c-brand-2)}.VPFlyout:hover .menu[data-v-1a2ceba0],.button[aria-expanded=true]+.menu[data-v-1a2ceba0]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-1a2ceba0]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-1a2ceba0]{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-1a2ceba0]{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-1a2ceba0]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-1a2ceba0]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-1a2ceba0]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-1a2ceba0]{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-efc53bd4]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-efc53bd4]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-efc53bd4]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-f2234a39]{display:flex;justify-content:center}.VPNavBarExtra[data-v-47bb42ad]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-47bb42ad]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-47bb42ad]{display:none}}.trans-title[data-v-47bb42ad]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-47bb42ad],.item.social-links[data-v-47bb42ad]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-47bb42ad]{min-width:176px}.appearance-action[data-v-47bb42ad]{margin-right:-2px}.social-links-list[data-v-47bb42ad]{margin:-4px -8px}.VPNavBarHamburger[data-v-670493dd]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-670493dd]{display:none}}.container[data-v-670493dd]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-670493dd]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-670493dd]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-670493dd]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-670493dd]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-670493dd]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-670493dd]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-670493dd],.VPNavBarHamburger.active:hover .middle[data-v-670493dd],.VPNavBarHamburger.active:hover .bottom[data-v-670493dd]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-670493dd],.middle[data-v-670493dd],.bottom[data-v-670493dd]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-670493dd]{top:0;left:0;transform:translate(0)}.middle[data-v-670493dd]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-670493dd]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-97d30ef6]{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-97d30ef6],.VPNavBarMenuLink[data-v-97d30ef6]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-c6c3e6d4]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-c6c3e6d4]{display:flex}}/*! @docsearch/css 3.5.2 | 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-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-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;-moz-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}@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 1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::-moz-placeholder{color:var(--docsearch-muted-color);opacity:1}.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;-moz-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:rgba(0,0,0,.2);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:rgba(0,0,0,.2);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;-moz-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}@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;-moz-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: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}.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-08b35e6f]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-08b35e6f]{display:flex;align-items:center}}.title[data-v-2d6ff155]{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-2d6ff155]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-2d6ff155]{border-bottom-color:var(--vp-c-divider)}}[data-v-2d6ff155] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-3bf1c934]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-3bf1c934]{display:flex;align-items:center}}.title[data-v-3bf1c934]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-dfeca417]{position:relative;border-bottom:1px solid transparent;padding:0 8px 0 24px;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap}@media (min-width: 768px){.VPNavBar[data-v-dfeca417]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-dfeca417]{padding:0}.VPNavBar[data-v-dfeca417]:not(.has-sidebar):not(.top){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-dfeca417]{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-dfeca417],.container>.content[data-v-dfeca417]{pointer-events:none}.container[data-v-dfeca417] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-dfeca417]{max-width:100%}}.title[data-v-dfeca417]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-dfeca417]{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-dfeca417]{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-dfeca417]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-dfeca417]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-dfeca417]{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-dfeca417]{display:flex;justify-content:flex-end;align-items:center;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.top) .content-body[data-v-dfeca417]{position:relative;background-color:var(--vp-nav-bg-color)}}@media (max-width: 767px){.content-body[data-v-dfeca417]{-moz-column-gap:.5rem;column-gap:.5rem}}.menu+.translations[data-v-dfeca417]:before,.menu+.appearance[data-v-dfeca417]:before,.menu+.social-links[data-v-dfeca417]:before,.translations+.appearance[data-v-dfeca417]:before,.appearance+.social-links[data-v-dfeca417]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-dfeca417]:before,.translations+.appearance[data-v-dfeca417]:before{margin-right:16px}.appearance+.social-links[data-v-dfeca417]:before{margin-left:16px}.social-links[data-v-dfeca417]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-dfeca417]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-dfeca417]:before{display:block;width:100%;height:32px;background:linear-gradient(var(--vp-c-bg),transparent 70%);content:""}}@media (min-width: 1440px){.VPNavBar.has-sidebar .curtain[data-v-dfeca417]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenAppearance[data-v-8d2d8cf1]{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-8d2d8cf1]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-083b71b4]{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-083b71b4]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-ed7bb82d]{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-ed7bb82d]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-836cddb8]{display:block}.title[data-v-836cddb8]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-31b21668]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-31b21668]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-31b21668]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-31b21668]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-31b21668]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-31b21668]{transform:rotate(45deg)}.button[data-v-31b21668]{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-31b21668]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-31b21668]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-31b21668]:first-child{padding-top:0}.group+.group[data-v-31b21668],.group+.item[data-v-31b21668]{padding-top:4px}.VPNavScreenTranslations[data-v-b72581fd]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-b72581fd]{height:auto}.title[data-v-b72581fd]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-b72581fd]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-b72581fd]{margin-right:8px}.icon.chevron[data-v-b72581fd]{margin-left:4px}.list[data-v-b72581fd]{padding:4px 0 0 24px}.link[data-v-b72581fd]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-5f4e75ae]{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-5f4e75ae],.VPNavScreen.fade-leave-active[data-v-5f4e75ae]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-5f4e75ae],.VPNavScreen.fade-leave-active .container[data-v-5f4e75ae]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-5f4e75ae],.VPNavScreen.fade-leave-to[data-v-5f4e75ae]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-5f4e75ae],.VPNavScreen.fade-leave-to .container[data-v-5f4e75ae]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-5f4e75ae]{display:none}}.container[data-v-5f4e75ae]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-5f4e75ae],.menu+.appearance[data-v-5f4e75ae],.translations+.appearance[data-v-5f4e75ae]{margin-top:24px}.menu+.social-links[data-v-5f4e75ae]{margin-top:16px}.appearance+.social-links[data-v-5f4e75ae]{margin-top:16px}.VPNav[data-v-a46e73f0]{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-a46e73f0]{position:fixed}}.VPSidebarItem.level-0[data-v-f0f37ff4]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-f0f37ff4]{padding-bottom:10px}.item[data-v-f0f37ff4]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-f0f37ff4]{cursor:pointer}.indicator[data-v-f0f37ff4]{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-f0f37ff4],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-f0f37ff4],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-f0f37ff4],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-f0f37ff4]{background-color:var(--vp-c-brand-1)}.link[data-v-f0f37ff4]{display:flex;align-items:center;flex-grow:1}.text[data-v-f0f37ff4]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-f0f37ff4]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-f0f37ff4],.VPSidebarItem.level-2 .text[data-v-f0f37ff4],.VPSidebarItem.level-3 .text[data-v-f0f37ff4],.VPSidebarItem.level-4 .text[data-v-f0f37ff4],.VPSidebarItem.level-5 .text[data-v-f0f37ff4]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-f0f37ff4],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-f0f37ff4]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-1.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-2.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-3.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-4.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-5.has-active>.item>.text[data-v-f0f37ff4],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-f0f37ff4],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-f0f37ff4]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-f0f37ff4],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-f0f37ff4]{color:var(--vp-c-brand-1)}.caret[data-v-f0f37ff4]{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-f0f37ff4]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-f0f37ff4]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-f0f37ff4]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-f0f37ff4]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-f0f37ff4],.VPSidebarItem.level-2 .items[data-v-f0f37ff4],.VPSidebarItem.level-3 .items[data-v-f0f37ff4],.VPSidebarItem.level-4 .items[data-v-f0f37ff4],.VPSidebarItem.level-5 .items[data-v-f0f37ff4]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-f0f37ff4]{display:none}.VPSidebar[data-v-45ef976a]{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-45ef976a]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-45ef976a]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-45ef976a]{z-index:1;padding-top:var(--vp-nav-height);padding-bottom:128px;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-45ef976a]{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-45ef976a]{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-45ef976a]{outline:0}.group+.group[data-v-45ef976a]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-45ef976a]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-b22defb4]{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-b22defb4]:focus{height:auto;width:auto;clip:auto;-webkit-clip-path:none;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-b22defb4]{top:14px;left:16px}}.Layout[data-v-527a0310]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-0cf72b3c]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-0cf72b3c]{margin:0 auto;max-width:1152px}.love[data-v-0cf72b3c]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-0cf72b3c]{width:28px;height:28px;fill:currentColor}.message[data-v-0cf72b3c]{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-0cf72b3c]{padding-top:32px}.action[data-v-0cf72b3c]{padding-top:40px;text-align:center}.VPTeamPage[data-v-05fecbf1]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-05fecbf1]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-05fecbf1-s],.VPTeamMembers+.VPTeamPageSection[data-v-05fecbf1-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-05fecbf1-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-05fecbf1-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-05fecbf1-s],.VPTeamMembers+.VPTeamPageSection[data-v-05fecbf1-s]{margin-top:96px}}.VPTeamMembers[data-v-05fecbf1-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-05fecbf1-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-05fecbf1-s]{padding:0 64px}}.VPTeamPageTitle[data-v-6ce551d6]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-6ce551d6]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-6ce551d6]{padding:80px 64px 48px}}.title[data-v-6ce551d6]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-6ce551d6]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-6ce551d6]{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-6ce551d6]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-1ac32f26]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-1ac32f26]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-1ac32f26]{padding:0 64px}}.title[data-v-1ac32f26]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-1ac32f26]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-1ac32f26]{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-1ac32f26]{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-1ac32f26]{padding-top:40px}.VPTeamMembersItem[data-v-c1d54081]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-c1d54081]{padding:32px}.VPTeamMembersItem.small .data[data-v-c1d54081]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-c1d54081]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-c1d54081]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-c1d54081]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-c1d54081]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-c1d54081]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-c1d54081]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-c1d54081]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-c1d54081]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-c1d54081]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-c1d54081]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-c1d54081]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-c1d54081]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-c1d54081]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-c1d54081]{text-align:center}.avatar[data-v-c1d54081]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-c1d54081]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;-o-object-fit:cover;object-fit:cover}.name[data-v-c1d54081]{margin:0;font-weight:600}.affiliation[data-v-c1d54081]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-c1d54081]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-c1d54081]:hover{color:var(--vp-c-brand-1)}.desc[data-v-c1d54081]{margin:0 auto}.desc[data-v-c1d54081] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-c1d54081]{display:flex;justify-content:center;height:56px}.sp-link[data-v-c1d54081]{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-c1d54081]:hover,.sp .sp-link.link[data-v-c1d54081]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-c1d54081]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-3ca0e3f5]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-3ca0e3f5]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-3ca0e3f5]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-3ca0e3f5]{max-width:876px}.VPTeamMembers.medium .container[data-v-3ca0e3f5]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-3ca0e3f5]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-3ca0e3f5]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-3ca0e3f5]{max-width:760px}.container[data-v-3ca0e3f5]{display:grid;grid-gap:24px;gap:24px;margin:0 auto;max-width:1152px}/*! Do not put raw CSS code in this file */:root{--vp-font-family-base: "Space Grotesk", "Inter var experimental", "Inter var", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-accent: #ab5ac7;--font-accent-light: #ab5ac7e3;--vp-font-family-mono: "Space Mono", Menlo, Monaco, Consolas, "Courier New", monospace}:root{--vp-c-brand: var(--font-accent);--vp-c-brand-light: var(--font-accent-light);--vp-c-brand-lighter: var(--font-accent);--vp-c-brand-lighter: rgba(31, 23, 255, .25);--vp-c-brand-dark: #4d45a8;--vp-c-brand-darker: #3a3381;--vp-c-sponsor: #fd1d7c;--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-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-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)}: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)}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, var(--vp-c-brand-darker) 30%, var(--font-accent) );--vp-home-hero-image-background-image: linear-gradient( -45deg, var(--font-accent-dark) 50%, var(--font-accent) 50% );--vp-home-hero-image-filter: blur(40px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(72px)}}:root{--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-brand-soft);--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand-1) !important}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{box-shadow:inset 0 0 5px gray;border-radius:10px}::-webkit-scrollbar-thumb{background:#6d7faeb4;border-radius:10px}::-webkit-scrollbar-thumb:hover{background:#6d7fae}input[type=checkbox]{cursor:pointer;width:10px;height:10px;margin:10px;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid lightblue;box-shadow:#00000040 0 54px 55px,#0000001f 0 -12px 30px,#0000001f 0 4px 6px,#0000002b 0 12px 13px,#00000017 0 -3px 5px;background-clip:content-box;padding:3px}input,input:focus{border:none;border-radius:2pt;box-shadow:0 0 0 1pt gray;outline:none;transition:.1s}input[type=checkbox]:checked{background-color:#3899ff}input[type=checkbox]:focus{box-shadow:0 0 3pt 2pt #6495ed}label{font-size:18px;position:relative;top:-9px}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.custom-links{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity))}.custom-links:hover{text-decoration-line:underline}:is(.dark .custom-links){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.absolute{position:absolute}.my-2{margin-top:.5rem;margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mt-2{margin-top:.5rem}.flex{display:flex}.contents{display:contents}.hidden{display:none}.h-auto{height:auto}.w-3{width:.75rem}.max-w-full{max-width:100%}.max-w-xs{max-width:20rem}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.items-center{align-items:center}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.75rem * var(--tw-space-x-reverse));margin-left:calc(.75rem * calc(1 - var(--tw-space-x-reverse)))}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.px-4{padding-left:1rem;padding-right:1rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pl-1{padding-left:.25rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tracking-tight{letter-spacing:-.025em}.text-\[\#ab5ac7\]{--tw-text-opacity: 1;color:rgb(171 90 199 / var(--tw-text-opacity))}.text-\[\#b63a61\]{--tw-text-opacity: 1;color:rgb(182 58 97 / var(--tw-text-opacity))}.text-\[\#e67e22\]{--tw-text-opacity: 1;color:rgb(230 126 34 / var(--tw-text-opacity))}.text-\[blue\]{--tw-text-opacity: 1;color:rgb(0 0 255 / var(--tw-text-opacity))}.text-\[green\]{--tw-text-opacity: 1;color:rgb(0 128 0 / var(--tw-text-opacity))}.text-\[orange\]{--tw-text-opacity: 1;color:rgb(255 165 0 / var(--tw-text-opacity))}.text-\[var\(--font-accent\)\]{color:var(--font-accent)}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-slate-900\/5{--tw-ring-color: rgb(15 23 42 / .05)}.drop-shadow-lg{--tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / .04)) drop-shadow(0 4px 3px rgb(0 0 0 / .1));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}:is(.dark .dark\:bg-slate-800){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity))}:is(.dark .dark\:text-\[\#ea4b7d\]){--tw-text-opacity: 1;color:rgb(234 75 125 / var(--tw-text-opacity))}:is(.dark .dark\:text-orange-500){--tw-text-opacity: 1;color:rgb(249 115 22 / var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}:is(.dark .dark\:text-slate-400){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity))}.VPLocalSearchBox[data-v-9cd6a060]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-9cd6a060]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-9cd6a060]{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:-moz-min-content;height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-9cd6a060]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-9cd6a060]{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-9cd6a060]{padding:0 8px}}.search-bar[data-v-9cd6a060]:focus-within{border-color:var(--vp-c-brand-1)}.search-icon[data-v-9cd6a060]{margin:8px}@media (max-width: 767px){.search-icon[data-v-9cd6a060]{display:none}}.search-input[data-v-9cd6a060]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-9cd6a060]{padding:6px 4px}}.search-actions[data-v-9cd6a060]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-9cd6a060]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-9cd6a060]{display:none}}.search-actions button[data-v-9cd6a060]{padding:8px}.search-actions button[data-v-9cd6a060]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-9cd6a060]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-9cd6a060]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-9cd6a060]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-9cd6a060]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-9cd6a060]{display:none}}.search-keyboard-shortcuts kbd[data-v-9cd6a060]{background:rgba(128,128,128,.1);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-9cd6a060]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-9cd6a060]{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-9cd6a060]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-9cd6a060]{margin:8px}}.titles[data-v-9cd6a060]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-9cd6a060]{display:flex;align-items:center;gap:4px}.title.main[data-v-9cd6a060]{font-weight:500}.title-icon[data-v-9cd6a060]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-9cd6a060]{opacity:.5}.result.selected[data-v-9cd6a060]{--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-9cd6a060]{position:relative}.excerpt[data-v-9cd6a060]{opacity:75%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;opacity:.5;margin-top:4px}.result.selected .excerpt[data-v-9cd6a060]{opacity:1}.excerpt[data-v-9cd6a060] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-9cd6a060] mark,.excerpt[data-v-9cd6a060] 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-9cd6a060] .vp-code-group .tabs{display:none}.excerpt[data-v-9cd6a060] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-9cd6a060]{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-9cd6a060]{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-9cd6a060],.result.selected .title-icon[data-v-9cd6a060]{color:var(--vp-c-brand-1)!important}.no-results[data-v-9cd6a060]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-9cd6a060]{flex:none} diff --git a/contact.html b/contact.html index 2220ebb..a16295a 100644 --- a/contact.html +++ b/contact.html @@ -5,7 +5,7 @@ EyeTrackVR Docs | EyeTrackVR Docs - + @@ -17,7 +17,7 @@
- + \ No newline at end of file diff --git a/dev_roadmap.html b/dev_roadmap.html index e4937d9..9dc2769 100644 --- a/dev_roadmap.html +++ b/dev_roadmap.html @@ -5,7 +5,7 @@ EyeTrackVR Development Roadmap | EyeTrackVR Docs - + @@ -18,7 +18,7 @@
Skip to content

Released under the MIT License.

- + \ No newline at end of file diff --git a/development/docs/dev_docs.html b/development/docs/dev_docs.html index 981ce4c..b7a7a62 100644 --- a/development/docs/dev_docs.html +++ b/development/docs/dev_docs.html @@ -5,7 +5,7 @@ Development Documentation for the EyeTrackVR Docs Site | EyeTrackVR Docs - + @@ -17,7 +17,7 @@
Skip to content

Development Documentation for the EyeTrackVR Docs Site

This is the documentation for the EyeTrackVR Docs site. It is built using VitePress.

Getting Started

Prerequisites

  • Node.js (v14.15.4 or higher)
  • Yarn (v1.22.10 or higher)
  • Git (v2.30.1 or higher)
  • VSCode (v1.56.2 or higher)

Installation

  1. Clone the repo

    sh
    git clone https://github.com/EyeTrackVR/EyeTrackVR-Docs.git
  2. Navigate to the vitepress folder

    sh
    cd vitepress
  3. Install Yarn packages

    sh
     yarn
  4. Start the dev server

    sh
    yarn dev
  5. Open the site in your browser

Contributing

Project Structure

  1. Familiarize yourself with the VitePress documentation.
  2. Then, move on to our project specific documentation below.

Standards

  • All documentation should be written in Markdown or Vue components.
  • All file names are snake case and lowercase letters.
  • Do not make naming changes to the vitepress folder.
  • Do not make major changes to the vitepress folder structure without proir consultation of team members.
  • For Vue componentes, follow the Vue3 docs.

Released under the MIT License.

- + \ No newline at end of file diff --git a/development/docs/pages.html b/development/docs/pages.html index 6ad61ac..5edec36 100644 --- a/development/docs/pages.html +++ b/development/docs/pages.html @@ -5,7 +5,7 @@ Pages | EyeTrackVR Docs - + @@ -25,7 +25,7 @@ { text: "My Page", link: "/my_folder/my_page" }, // Add this line - subdir then file ], },

Note

The link property does not require a file extension. Please do not add it.

Title Style

The title style is the style of the title that appears at the top of the page.

We like to keep this cohesive, so please use the following style:

md
# My Page {.text-[var(--font-accent)]}

This will give the title a nice orange colour.

The {} are required, and the .text-[#e67e22] is the colour using TailWindCSS classes. You can also use our built in CSS variables {.text-[var(--font-accent)]}. You will find these in the src/styles/theme.css file. You can change this to any colour you like, but please keep it consistent with the rest of the site.

Tip

This entire site supports TailWindCSS classes. You can find the documentation here.

All classes you wish to add, must be prefaced with a . when inside of the {}.

When using classes on HTML elements, you can use the class attribute. For example:

html
<h1 class="text-[#e67e22]">My Page</h1>

Editing a Page

To edit a page, you will need to edit the Markdown file in the vitepress/docs/src/pages folder.

- + \ No newline at end of file diff --git a/development/docs/standards.html b/development/docs/standards.html index eda746e..9807c03 100644 --- a/development/docs/standards.html +++ b/development/docs/standards.html @@ -5,7 +5,7 @@ Standards Guide | EyeTrackVR Docs - + @@ -25,7 +25,7 @@ - added new thing # some detail about the new thing BREAKING CHANGE: this is a breaking change #this line is optionaland only used if needed - + \ No newline at end of file diff --git a/firmware_guide/configure_firmware.html b/firmware_guide/configure_firmware.html index c9316bf..812809f 100644 --- a/firmware_guide/configure_firmware.html +++ b/firmware_guide/configure_firmware.html @@ -5,7 +5,7 @@ Configuring the firmware | EyeTrackVR Docs - + @@ -19,7 +19,7 @@
Skip to content

Configuring the firmware

Once you have opened the project, you should see something on the left side like this

'img'

Open the ini/user_config.ini file

'img'

INFO

These settings are applicable only when using Wi-Fi for communication with your computer. If you are using USB, you can skip to reading about Environments.

Replace the placeholder text with your correct SSID (WiFi access point name), and password respectfully.

INFO

Special characters such as ! and @ are not supported. If you have a special character in your password or ssid, you will need to change it.

Spaces are not supported either. If you have a space in either, you will need to change it.

The firmware supports AP mode, but it is not recommended. If you are using AP mode, you will need to set the enableadhoc to 1.

Then, you will need to set the ap_ssid to the name of your AP, and ap_password to the password of your AP.

You can choose to leave the ap_ssid and ap_password as defaults, but you will need to set the enableadhoc to 1.

Note: If you are enabling AP mode for both ESPs, you will need to set the ap_ssid and ap_password to different values for both ESPs. It is best to set AP mode only for one ESP, and leave the other ESP in STA mode. Connect the other ESP to the AP of the ESP in AP mode. Then connect your computer to the AP of the ESP in AP mode. This will allow you to connect to the ESP in AP mode, and the ESP in STA mode.

CAUTION

Make sure your wifi router has a 2.4 GHz band. While most do, this is not always the case. Setting each band (5GHz, and 2.4GHz) to different SSIDs is recommended, though not required.

Double check that you have correctly entered your WiFi credentials and that said wifi network has a 2.4GHz band.

Additonal configuration

mDNS

If you do not wish to manually keep track of the ESPs IP addresses and ports, you can enable the mDNS feature. This will allow you to connect to the ESPs using the following format: http://<some_name>.local. This will only work if you are connected to the same network as the ESPs, and if you have enabled mDNS on your computer. If you are using Windows, you can enable mDNS by following this guide.

OTA

The firmware supports OTA updates. This means that you can update the firmware without having to connect to the ESPs. To enable OTA updates, you will need to set the enableota to 1. Then, you will need to set the otapassword to the password you wish to use to update the firmware. You will need to use this password to update the firmware. If you do not wish to use a password, you can set the otapassword to nothing. This will allow you to update the firmware without a password. However, this is not recommended, as anyone on your network will be able to update the firmware.

You will also need to set the otaserverip to the IP address of the ESP you wish to update. This is the IP address of the ESP you wish to update. If you are using mDNS, you can use the mDNS name of the ESP you wish to update. For example, if you are updating the ESP with the dns set to http://esp32.local, you will need to set the otaserverip to http://esp32.local.

REST API

The firmware also supports a fully featured REST API. This means that you can control the ESPs using a REST API. This feature is enabled by defauly, and can not be turned off.

This feature is used more for advanced users, and is not required for basic operation.

The REST API was developed to be used by our new app (still in development). However, it can be used by any REST API client, you can not send POST requests to the ESPs using a browser though, so some REST API functionality can only be used by tools like Thunder Client or Postman.

The full REST API is documented here.

Environments

The firmware supports multiple environments. This means that we have full support for multiple types of ESPs. Each ESP is configured to be in a different environment. If you are using a different ESP, you will need to change the environment to the correct one.

Please reference the Firmware Enviroments Page for more information.

Coming Soon

We are working on a new app that will allow you to configure the firmware, flash the boards, and connect to Social VR Games using a GUI. This will make it easier to configure the firmware, and will allow you to configure the firmware without having to use/download VSCode or our platformio project. We are hard at work on this, but do not currently have a release date. Please check back frequently.

Now, move on to uploading the firmware

Released under the MIT License.

- + \ No newline at end of file diff --git a/firmware_guide/environments.html b/firmware_guide/environments.html index bba6427..942f681 100644 --- a/firmware_guide/environments.html +++ b/firmware_guide/environments.html @@ -5,7 +5,7 @@ Firmware Environments | EyeTrackVR Docs - + @@ -18,7 +18,7 @@
Skip to content

Firmware Environments

What is it?

A firmware environment is a way to store the custom firmware config for a specific device. This is useful if you want to have multiple devices with different firmware configs.

We use environments to store the firmware config for each device, so that you can easily switch between them.

Environments are broken up into two distinct parts:

  • The build type (e.g. debug, release)
  • The board type (e.g. espaithinker, esp32cam)

Build Types

We now have a couple of options letting us decide how we want to build the firmware.

  • Debug - The debug environment is the default environment and does not need to be specified. It has a lot of logging so it is useful for getting everything setup for the first time and to see what is going on.

  • _release - Has a lot less debugging, may also be missing some things available only in debug for debug purposes, this should be flashed when everything is working.

Examples:
xiaosenses3 - This is the debug environment.
xiaosenses3_release - This is the release environment for daily use.

Tip

We recommend starting with a debug environment, and then switching to release once everything is working. A debug environnement should not be used permanently.

Board Types

We currently support for several different boards, and we are working on adding more.

Warning

It is important to note that the esp32AIThinker environment is the default environment. Only switch your environment if you have another board or an environment is not working.

Most esp32Cams from Aliexpress will work with the esp32AIThinker environment, but some may require the esp32cam environment. Test the default environment first, and if it does not work, try the esp32cam environment.

Currently supported boards:

  • esp32AIThinker - This is the default environment. This is for the ESP32-AI-THINKER and generic alibaba/aliexpress/amazon esp cam boards.
  • esp32Cam - This is for the special ESP32-CAM, it is unlikely that you will need to use this environment.
  • esp32M5Stack - This is for ESP32M5Stack.
  • esp32WRover - This is for the ESP32WRover.
  • esp-eye - This is for the ESP-EYE (not the S3 variant).
  • wrooms3 - For FREENOVE-ESP32-S3 (wireless mode)
  • wrooms3QIO - For FREENOVE-ESP32-S3 (wireless mode, for boards with octal flash)
  • wrooms3USB - For FREENOVE-ESP32-S3 (wired mode)
  • wrooms3QIOUSB - For FREENOVE-ESP32-S3 (wired mode, for boards with octal flash)
  • xiaosenses3 - For SeedStudio's XAIO ESP32-S3 Sense (wireless mode)
  • xiaosenses3_USB - For SeedStudio's XAIO ESP32-S3 Sense (wired mode)

You can change the board enviroment by changing the default_envs argument in platformio.ini to a supported board like shown:

GIF showing a switch of board enviroments.

Released under the MIT License.

- + \ No newline at end of file diff --git a/firmware_guide/firmware.html b/firmware_guide/firmware.html index c38ce8f..511389b 100644 --- a/firmware_guide/firmware.html +++ b/firmware_guide/firmware.html @@ -5,7 +5,7 @@ What is this? | EyeTrackVR Docs - + @@ -17,7 +17,7 @@
Skip to content

What is this?

Firmware is the second part of the equation to get your trackers going. It lives on the ESP32 chip, and is responsible for streaming video data from the tracker.

What should I download and where?

Current testing has been on our own solution called OpenIris, found here. To check the status of the project, please visit the Development Road Map

How do download this?

Follow the steps described here

Released under the MIT License.

- + \ No newline at end of file diff --git a/firmware_guide/mdns.html b/firmware_guide/mdns.html index 7eeb86b..de6a8aa 100644 --- a/firmware_guide/mdns.html +++ b/firmware_guide/mdns.html @@ -5,7 +5,7 @@ MDNS | EyeTrackVR Docs - + @@ -17,7 +17,7 @@
Skip to content

MDNS

What is it?

mDNS is a protocol that allows you to connect to a device using a name instead of an IP address. This is useful if you do not know the IP address of the device, or if you do not want to keep track of the IP address of the device. This is also useful if you are using a device that does not have a static IP address.

In the mDNS protocol the IP address of the device can change, but the name of the device will always be the same. This means that you can connect to the device using the name of the device, even if the IP address of the device changes.

How to use it

Enable mDNS

The mDNS is enabled by default on the new firmware, and can not be disabled.

To use it, all you need to do is set the name of the device in the firmware config file.

This setting can be located under the [wifi] section of the ini/user_config.ini file.

ini
mdnsname = "openiristracker" # do not add .local

By default, the name of the device is openiristracker, however you can change it to whatever you want.

Change the name

Since you have two ESP32 devices, you need to make sure that the name of the device is different for each device. If you do not change the name of the device, you will not be able to connect to both devices at the same time.

Connect to the device

To connect to the device, you need to use the name of the device followed by .local. For example, if the name of the device is esp32, you can connect to the device using http://esp32.local.

Prerequisites Bonjour

Bonjour is required to use the mDNS protocol for windows and mac only. If you are using Windows, you can download Bonjour from here. If you are using macOS, Bonjour is already installed.

You can also get the fully tested Bonjour package from us here (for Windows only).

Troubleshooting

Can not connect to the device

If you can not connect to the device, make sure that the name of the device is correct. If the name of the device is correct, make sure that the device is connected to the network.

If the device is connected to the network, try to restart the device. If the device is still not connected, try to restart the router.

Released under the MIT License.

- + \ No newline at end of file diff --git a/firmware_guide/rest_api.html b/firmware_guide/rest_api.html index 2d0a701..981bfd9 100644 --- a/firmware_guide/rest_api.html +++ b/firmware_guide/rest_api.html @@ -5,7 +5,7 @@ REST API | EyeTrackVR Docs - + @@ -43,7 +43,7 @@ WIFI_POWER_2dBm = 8,// 2dBm WIFI_POWER_MINUS_1dBm = -4// -1dBm } wifi_power_t;
ParamDescription
txPowerThe power level to set.

Camera Params

Coming Soon

We are currently working on this section of documentation.

- + \ No newline at end of file diff --git a/firmware_guide/setup_vscode.html b/firmware_guide/setup_vscode.html index 6669b97..0ca1b6c 100644 --- a/firmware_guide/setup_vscode.html +++ b/firmware_guide/setup_vscode.html @@ -5,7 +5,7 @@ Setting up the environment | EyeTrackVR Docs - + @@ -18,7 +18,7 @@
Skip to content

Setting up the environment

This procedure will show how to prepare your system for uploading the firmware to your tracker.

1. Install Visual Studio Code

Download the latest Visual Studio Code and install it.

Download


'img'

Install


'img'

2. Install the drivers

In order to flash the firmware, you'll need some drivers, mainly the CH340 drivers, here's where to get them from:

https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers/all

3. Install PlatformIO IDE

Once Visual Studio Code is installed, open it and install PlatformIO IDE for VSCode, an extension that will allow you to connect to the tracker, build and upload the firmware.

'img'

4. Clone the firmware project

Make sure you close any current projects you have open or open a new window before moving forward with these steps.

  1. Go to https://github.com/EyeTrackVR/OpenIris and clone the latest version from the main branch.
    1. If you do not have git installed please install it from here.

    2. Open Git Bash.

'img'
  1. Change the directory to the directory that you want the firmware to be cloned. Ex: cd C:/
'img'
  1. Clone the repository by entering the command: git clone https://github.com/EyeTrackVR/OpenIris.git
'img'

For more info about cloning please refer to this documentation

Do not download as a zip - please only properly clone the project, take note of the path you run the clone command in, this is where the files will be downloaded. When we open it in PlatformIO later, this path will be needed.

  1. Open the firmware in VSCode by going to PlatformIO, selecting open, then navigating to OpenIris/ESP folder and opening it.
'img'

This is an adaptation from SlimeVR. Some Credit goes to the SlimeVR team adapted from here

Released under the MIT License.

- + \ No newline at end of file diff --git a/firmware_guide/update_platformio.html b/firmware_guide/update_platformio.html index cdff72f..388cfcf 100644 --- a/firmware_guide/update_platformio.html +++ b/firmware_guide/update_platformio.html @@ -5,7 +5,7 @@ Updating Platformio | EyeTrackVR Docs - + @@ -18,7 +18,7 @@
Skip to content

Updating Platformio

Sometimes, when building and uploading the firmware, you may run into bizarre, even-though the code is correct - platformio will refuse to build and instead will complain with some weird error.

It usually means that either PlatformIO, or ArduinoSDK got and update and that's the moment when this guide may come in handy.

Updating PlatformIO itself

There are two ways to update your platformio installation

Via CLI

You can update it easily by simply typing in one command into your terminal.

pio upgrade command in the terminal
  1. Open a terminal / command prompt
  2. Type pio upgrade and press enter
  3. Wait for it to finish
  4. Done

Via PlatformIO in Visual Studio Code

You can also update it using the platformio tab in your Visual Studio Code.

  1. Open VSC
  2. Click on that little and icon on the sidebar
Platformio logo button
  1. A side panel will open, there will be a couple of sections, one of them called Quick Access, open it.
Platformio logo Quick Access Section
  1. In Quick Access section, click on the Miscelleneous tab
Platformio miscellaneous section
  1. Then, click on the Upgrade PlatformIO Core
Platformio upgrade core button
  1. Wait for it to finnish and done!

Upgrading the SDK

You'll also need to upgrade the SDK from timem to do this

Upgrading the SDK via VSC

  1. Follow the guide above up until clicking on the Quick Access section.
  2. Instead, open the PIO Home and select Open
Platformio open home
  1. This will open a window for PlatformIO dashboard, in there, click on a Platforms button on the sidebar
Platformio platforms sidebar
  1. Once there, you should see a couple of tabs next to the side bard, things like Installed or Embedded. Click on Updates
Platformio platforms sections
  1. Locate a platform called Espressif 32 and click on Update to <version>
Platformio platforms update view
  1. Wait until it is done and that's it!

Released under the MIT License.

- + \ No newline at end of file diff --git a/firmware_guide/upload_and_update_firmware.html b/firmware_guide/upload_and_update_firmware.html index 0e0e90d..cf05ed5 100644 --- a/firmware_guide/upload_and_update_firmware.html +++ b/firmware_guide/upload_and_update_firmware.html @@ -5,7 +5,7 @@ Building and uploading the firmware manually | EyeTrackVR Docs - + @@ -23,7 +23,7 @@ otaserverip = "openiristrackerL.local" # here we use a custom mDNS name otapassword = "12345678" otaserverport = 3232
  1. Change to OTA env

To do that, in visual studio code, locate the uplaod button, next to it will be listed a couple of buttons and your current environment.

For example, if you have a working esp32AIThinker environment, you would change your environment to esp32AIThinker_OTA.

Click on it.

'An example of how the popup list of envs looks like'

This will open a list of all available environments, select the one that matches your board and has a _OTA suffix

'An example of how the button for selecting env looks like'
  1. Restart the ESPs, they must be power cycled
  2. Press the upload button to upload the firmware.

    img
  3. Do not touch esps or move them during OTA upload
  4. Wait around 1 minute.
  5. Repeat for as many trackers as you need.

Finding the IP address of your tracker

Connect your tracker to your PC and then open a serial monitor in VSC by pressing the plug icon.

'platformio serial monitor button'

Now, press the restart button on the esp itself. watch the monitor for output like this:

'img of platformio serial monitor'

The text, highlighted in green for demonstration, is the stream address of the camera. Take note of this for input into the software.

Keep in mind while testing and getting set up, the ESP can only have one client, to use the camera in the app, make sure you close the browser tab you tested it in.

Updating the firmware to the newest version

To update the firmware you'll need to follow a couple of steps.

  1. Open a terminal and enter the directory you've cloned OpenIris into, for example cd C:/OpenIris/

  2. Save your current changes to the config using git stash

  3. Download the newest changes from the repo using git pull

  4. Apply your saved changes so that you don't have to retype your WI-FI credentials using git stash apply

CAUTION

Skip this step if the update message denotes that the config had changed. If it does so, retype your credentials in the updated files.

4.1. If anything went wrong, you can reset everything to the default state using git reset --hard and then retyping your credentials

  1. Upload your firmware following steps from the uploading section

Troubleshooting

If you encountered an issue while following these steps check the FAQ.

If you don't find an answer to your question there ask in #questions channel in the discord, we will be happy to help.

Adapted from the SlimeVR docs, Some Credit goes to the SlimeVR team here

- + \ No newline at end of file diff --git a/getting_started/intro.html b/getting_started/intro.html index bdfb6cc..94b0d35 100644 --- a/getting_started/intro.html +++ b/getting_started/intro.html @@ -5,7 +5,7 @@ EyeTrackVR | EyeTrackVR Docs - + @@ -19,7 +19,7 @@
Skip to content

EyeTrackVR

Open source and affordable VR eye tracker platform for Social VR Games via OSC and UDP protocol.

Want to get started? Check out the getting started page and then the full build guide.

CAUTION

This project is in active development. However, it is working for most users.

About IR Emitter Safety

Please exercise caution when messing around with IR emitters.

IR can be dangerous to your eyes once at a certain power level. It is not recommended to use different emitters unless you know exactly what you are doing as it could result in harm to your eyes. If you doubt yourself, just do exactly what we do. Don't use different emitters, dont use differnt means of power, etc.

DANGER

It is important that you DO NOT BYPASS (OR NOT DO) ANY SAFETY FEATURES PUT IN PLACE. This can result in irreversible bodily harm.

The safety measures were put in place to REDUCE the potential failure risk. All further safety responsibilities are on the user. This includes visually checking with an IR camera that the brightness is correct and that you do not feel warmth or experience short-term effects after being exposed to the IR light (symptoms such as dark spots or dry/warm feeling eyes while actively using). While we strive to make EyeTrackVR as safe as possible, we do not hold any responsibility for damage done.

WARNING
Please pay attention

Make sure you are using non-focused emitters and no more than 5 mW/sr total power.

Want to see the safety data sheets?

Effect of infrared radiation on the lens

AN002_Details on photobiological safety of LED light sources

Training-library Nir Stds

ICNIRP: Guidelines of limits of exposure to broad-band incoherent optical radiation (0.38 to 3 µm)

Hardware

Please check out our parts list and hardware repo. for information regauring hardware.

Firmware

Our firmware called OpenIris is made by lorow found here.

Headset support

In theory, we are compatible with every VR headset. However, mounts may not have been made yet. Please take a look at our list of 3d printable mounts and see if your headset is on the list. If it is not listed, It is recommended that you try to make a mount, or wait for a skilled community member to create one.

Contact

Please join our discord for updates and any questions. We hope to see you there!

'discord banner'

Licenses

GitHub license

All software is under the MIT License. All documentation, including the Wiki, is under the Creative Commons CC-BY-SA-4.0 license.

Released under the MIT License.

- + \ No newline at end of file diff --git a/getting_started/led_safety.html b/getting_started/led_safety.html index 070e9a1..454aebc 100644 --- a/getting_started/led_safety.html +++ b/getting_started/led_safety.html @@ -5,7 +5,7 @@ V3 Hardware Safety Outline and Exposure Numbers: | EyeTrackVR Docs - + @@ -18,7 +18,7 @@
Skip to content

About IR Emitter Safety

Please exercise caution when messing around with IR emitters.

IR can be dangerous to your eyes once at a certain power level. It is not recommended to use different emitters unless you know exactly what you are doing as it could result in harm to your eyes. If you doubt yourself or are not understand something, just do exactly what we do. Don't use different emitters, don't use different means of power, etc.

DANGER

It is important that you DO NOT BYPASS (OR NOT DO) ANY SAFETY FEATURES PUT IN PLACE. This can result in irreversible bodily harm.

The safety measures were put in place to REDUCE the potential failure risk. All further safety responsibilities are on the user. This includes visually checking with an IR camera that the brightness is correct and that you do not feel warmth, excessive eye-strain or experience short-term effects after being exposed to the IR light (symptoms such as dark spots or dry/warm feeling eyes while actively using). While we strive to make EyeTrackVR as safe as possible, we do not hold any responsibility for damage done.

What we care about:

We care about power exposure "W" to the cornea, which we can normalize over the exposed area to Irradiance "mW/cm^2" This number gives us the amount of IR radiation being released into the normalized area. We don't really care about "mA", or "V" alone, as by themselves these do not give us the exposure levels which we need to ensure safety.

Irradiance also needs to take in to account distance of the light source (LED) as the further away you get from a source the weaker the intensity gets. (You can test this by looking at a light source from far away, and as you move closer, the brighter and more painful it is to look at) We do this by using Radiance "mW/cm2/sr" to normalize for the distance. The "sr" is a steradian. Think of it like a cone shape, getting bigger and broader as we move away from the source object.

The International Commission on Non-Ionizing Radiation Protection's Guidelines of limits of exposure to broad-band incoherent optical radiation (0.38 to 3 µm) states:

"To avoid thermal injury of the cornea and possible delayed effects on the lens of the eye (cataractogenesis), infrared radiation (780nm < > λ < > 3μm) should be limited to 100 W m⁻² (10 mW cm⁻²) for lengthy exposures (> 1000 s)"

So 10 mW/cm2 is the max recommended limit given by this source. In my opinion this is still quite high, you will definitely feel some warmth and likely eyestrain after a while.

It is known that when outside and not directly looking at the sun, your eyes get exposed to about 1 mW/cm2 or IR radiation. This is the target I set for hardware generally.

NOTE

This math is assuming the LED is directly in front of your pupil, and your pupil is not moving. In real world this is not the case. We have multiple LEDs around your eye, and your eye moves. When you look to the side, your pupil is not receiving all of the light from all LEDs and the distance grows as well. Properly calculating for this is hard and not worth the time. I chose to show that the "worst case scenario" is still well withing safety margins.

V3 Hardware Safety Outline and Exposure Numbers:

For all of this math we will assume the "worst" to ensure we are well within safety.

if powered with 5V, using 700 ohms of resistance, V3 Hardware will draw 0.00314... Amps. We will round up and convert this to 3.2mA.

(5V - 1.4V - 1.4V) / 700 ohm = 0.00314 ≈ 3.2mA

The LED datasheet lists the intensity at 20mA to be a minimum of 2 and max of 5. We will assume the worst and use 5mW/sr.

5 mW/sr * (3.2mA / 20mA) = 0.8 mW/sr

Now, we need to account for distance. My number is based on a worst case scenario of 1cm of distance. (typically is is higher on average.) We convert 1cm to 1cm2/sr

0.8 mW/sr / 1cm2/sr = 0.8 mW/cm2

Now, this is only for 1 LED, in the case of V3 we have 2 so we can:

0.8 mW/cm2 * 2 = 1.6 mW/cm2

This value is well below the limit, and close to normal sun exposure outside. If the LEDs were further than 1cm (which they typically are) the exposure would be even less.

V4 Hardware Safety Outline and Exposure Numbers:

For all of this math we will assume the "worst" to ensure we are well within safety.

V4 hardware is actively limited to ~2.4 mA

The LED datasheet lists the intensity at 20mA to be a minimum of 2 and max of 5. We will assume the worst and use 5mW/sr.

5 mW/sr * (2.4mA / 20mA) = 0.6 mW/sr

Now, we need to account for distance. My number is based on a worst case scenario of 1cm of distance. (typically is is higher on average.) We convert 1cm to 1cm2/sr

0.6 mW/sr / 1cm2/sr = 0.6 mW/cm2

Now, this is only for 1 LED, in the case of V4 we have 4 so we can:

0.6 mW/cm2 * 4 = 2.4 mW/cm2

This value is well below the limit, and not far from sun exposure. If the LEDs were further than 1cm (which they typically are) the exposure would be even less. And with typical eye movement they are less.

Released under the MIT License.

- + \ No newline at end of file diff --git a/getting_started/things_to_know.html b/getting_started/things_to_know.html index 70825fa..fe88323 100644 --- a/getting_started/things_to_know.html +++ b/getting_started/things_to_know.html @@ -5,7 +5,7 @@ Things To Know Before You Start | EyeTrackVR Docs - + @@ -17,7 +17,7 @@
Skip to content

Things To Know Before You Start

This page will be an overview of things to know and understand before you start this project

Software is not final

Bugs can and will occur which may hinder the experience or useability at times. Do not expect 100% reliable and perfect function. Not all features are fully developed yet.

Firmware may have user difficulties

Our firmware has not been tested widely so issues may creep up.

IR emitters are dangerous

If handled wrong or precautions are ignored you can and will cause damage to your eyes. Please make sure to only buy linked ones or ones with specs that match exactly. We will not be responsible for damaged caused if you go your own route.

Documentation may be incomplete

Important steps may be missing.

You will need to set up your avatar to use this

This will require some basic Unity knowledge and owning your own avatar. Note: 2.0 beta app uses VRC's Native eye tracking which does NOT require a special avatar

Once you have acknowledged the items above, move on to the Full Build Guide

Released under the MIT License.

- + \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 055a9ec..f03c060 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"about.md":"c167d8c9","archive_fox_ir_v2_build_instructions.md":"37294e54","firmware_guide_configure_firmware.md":"d87cb28a","development_docs_dev_docs.md":"88818b58","development_docs_pages.md":"69bf3e35","development_docs_standards.md":"413d5844","dev_roadmap.md":"c17da989","contact.md":"a2c6963a","firmware_guide_rest_api.md":"c9512bce","firmware_guide_setup_vscode.md":"17bb0fe1","firmware_guide_update_platformio.md":"9b9a64fd","firmware_guide_upload_and_update_firmware.md":"2c6d4eed","getting_started_intro.md":"f3812501","getting_started_led_safety.md":"ee0ec671","getting_started_things_to_know.md":"21105a37","how_to_build_creating_your_own_mount.md":"5fb1a297","how_to_build_parts_list.md":"d6d922fd","index.md":"ca39f1a7","misc_faq.md":"3dbf62c9","misc_vrc_avatar_setup.md":"bfdb6de4","software_guide_build_software.md":"10b4fcdc","how_to_build_full_build.md":"5bb31bfb","firmware_guide_firmware.md":"343c04a7","firmware_guide_mdns.md":"219d73d2","firmware_guide_environments.md":"4794ed72","software_guide_eyetrackvr_app_guide.md":"dcb1818d","software_guide_osc_setup.md":"bb0fc577"} +{"contact.md":"a2c6963a","development_docs_standards.md":"413d5844","firmware_guide_configure_firmware.md":"d87cb28a","firmware_guide_environments.md":"4794ed72","firmware_guide_firmware.md":"343c04a7","firmware_guide_mdns.md":"219d73d2","firmware_guide_rest_api.md":"c9512bce","firmware_guide_setup_vscode.md":"17bb0fe1","firmware_guide_update_platformio.md":"9b9a64fd","firmware_guide_upload_and_update_firmware.md":"2c6d4eed","getting_started_intro.md":"f3812501","getting_started_led_safety.md":"ee0ec671","how_to_build_creating_your_own_mount.md":"5fb1a297","index.md":"ca39f1a7","getting_started_things_to_know.md":"21105a37","how_to_build_parts_list.md":"d6d922fd","misc_vrc_avatar_setup.md":"bfdb6de4","software_guide_build_software.md":"10b4fcdc","misc_faq.md":"3dbf62c9","software_guide_osc_setup.md":"bb0fc577","archive_fox_ir_v2_build_instructions.md":"37294e54","development_docs_dev_docs.md":"88818b58","dev_roadmap.md":"c17da989","about.md":"c167d8c9","software_guide_eyetrackvr_app_guide.md":"dcb1818d","how_to_build_full_build.md":"5bb31bfb","development_docs_pages.md":"69bf3e35"} diff --git a/how_to_build/creating_your_own_mount.html b/how_to_build/creating_your_own_mount.html index d2370d0..8bd846f 100644 --- a/how_to_build/creating_your_own_mount.html +++ b/how_to_build/creating_your_own_mount.html @@ -5,7 +5,7 @@ Creating Your Own Mount | EyeTrackVR Docs - + @@ -17,7 +17,7 @@
Skip to content

Creating Your Own Mount

This page will include a basic rundown on how to create your own camera mount for a headset that may not have any existing community mounts

So, you have a headset that does not have any mounts or none that work well for you. Here I will show some simple steps to get some form of a mount working.

Step 1: Find a way to mount to your headsets lens

The easiest way to get started is to find a lens protector for your headset. Either go to a website like Thingiverse or just do a search for "3d printed lens protector for {your headset here}"

Example: Here is a lens protector for the Quest 1/2 and Rift S https://www.thingiverse.com/thing:3653631

Step 2: Find a camera mount

Now, you need a way to attach the camera. We have a basic design that qdot created (taken from his mount) on the hardware GitHub here

Alternatively, you can create your own mount if you have the skills.

Step 3: Place the camera mount where it will give a good camera angle

The "Ideal" location is a place that gives a good view of the pupil when looking to all extremes, the lower corners do a good job at getting there, or nearly there.

You want to put the camera as close to the headset's lens as possible to achieve the biggest view of the eye. I recommend looking at other headset mounts for inspiration.

Step 4: Mount your LEDs

You can either add parts to your mount for holding the LED boards or just glue them on. It's up to you and what works best for you, experiment!

Step 5: Test everything

It is unlikely you will get a perfect mount on the first try. Print, test, adjust, and repeat until you have a satisfactory mount. Good luck!

Step 6: Get your mounts listed

Send me the mount to be added to the docs here! You can upload it to Thingiverse or similar services, or just send me the .STLs via discord (Prohurtz#0001)

Released under the MIT License.

- + \ No newline at end of file diff --git a/how_to_build/full_build.html b/how_to_build/full_build.html index b188d4d..3ee2f5c 100644 --- a/how_to_build/full_build.html +++ b/how_to_build/full_build.html @@ -5,7 +5,7 @@ Build Guide | EyeTrackVR Docs - + @@ -20,7 +20,7 @@
Skip to content

Build Guide

This page will contain a step-by-step assembly guide

This guide provides a walkthrough on the assembly of a wireless V3 eye tracking. V4 specific final docs are WIP: V4 LED Solderless assemblly rough edit:

Sketch of V4 solderless wiring:

Sketch of V4 wireing

Credit: @seniorpringles, @g0ldjay via Discord

Sketch of solder assembbly of V4:

Sketch of V4 wire

Nevertheless, it's worth noting that these instructions are also mostly applicable to those who are using wired or V4 trackers.

Step 1: Make sure your have read the Things to know before you start guide

This will give you a basic overview of the project's status and what to expect currently.

Step 2: Order all the parts listed on our Parts list

Please take note of the fact that hardware still may change, although with more developments it seems like we are going to stick with current hardware.

Step 3: Wait for things to arrive

Long shipping times from China are f u n. Please allow anywhere from 2 weeks to 2 months for everything to arrive.

Step 4: Gather up all of your hardware

Make sure you have at least the following:

'img of components'

'ESPs, cams, a programmer and a USB connector'

Step 5: Install external antennas or shield ESP antenna with an antistatic bag

Some ESP-CAM boards have issues with signal integrity, there are 2 things you can do to help/solve the issues.

The first option is to use an external antenna.

This is the best solution when it comes to the final result. If you have Vive/Tundra trackers, this is a REQUIRED step. The interference from the trackers will make your ESP stream unusable. An antistatic bag does not help in this case. Unfortunately, removing the antenna is not super easy, you have to either move a resistor or, remove it and bridge 2 solder pads. The image attached below shows the orientation of the pads that need to be connected for which mode. You can not bridge all connections and have both antennas active at the same time. The 0-ohm resistor does not need to be on the board, you can simply bridge the connections.

Below is an example of bridging the connections and attaching an antenna.

'img of external antenna resistors'

The second option is to cover the ESP's antenna with an antistatic bag. This can help aid problems, and can completely solve them in some cases. Best of all, it is completely free! However, it should be noted that it performs worse than an external antenna and in certain cases will not solve the issue like if you have Vive trackers.

Step 6: Attach cameras to ESPs

Look at your ESP and locate the camera ribbon cable connector as circled below.

'img of camera socket'

Flip the gray part up to allow the cameras to be connected. Do not force it, or shove objects into it to open, fingernails are fine.

'img of camera clip'

Now slide in a camera, please note that the pins are facing down, you should only see the black part.

'img of camera cable'

Once the camera has been slid in, press the gray part of the connector back down. There will be a small amount of force but still be gentle. Note the ammount of black coming out of the connector.

'img of camera cable'

Step 7: Connect ESP to the programmer to flash

Why flash before you have it assembled? It's simple, to make sure they actually work before you spend time soldering to them.

Slide your ESP into the programmer, and note the USB port goes away from the ESP's camera.

Step 8: Configure Visual Studio Code and prepare to flash the firmware

Check out our guide on Setting up VS Code

Once VS Code is set up, move on to the next step.

Step 9: Plug in your ESP and flash the firmware

Our guide, Building and uploading the firmware manually has steps on how to do this. After it has flashed, make sure you get a video stream in your browser, then power it down and flash your next ESP.

Step 10: Connect your power wires to a USB Type-A board

WARNING

Powering from the programmer board will not work correctly. This delivers a lower voltage which results in dim LEDs and video artifacts. These are highly likely mess up tracking.

Get two pairs of wire, preferably two different colors, Cut them to length (56mm in my case) and twist together two for ground and two for 5V. Here I used speaker wire where the copper denotes positive and silver negative. Then, strip the wires to about 3mm of exposed wire.

Step 11: Cut wires for IR LEDs

To find the optimal length, take a piece of wire and a marker and mock up your wire route, and mark the wire, cut it, then make another at the same size for the other eye. You will need 3 different cuts of wire. 2 short ones for connecting the 2 PCBs per eye together, 2 Longer ones for power, or ground and 2 slightly longer ones for power or ground for the LED near the camera at the bottom.

Once cut, strip them to around 4mm of exposed wire.

Step 12: Twist the positive USB wire and positive IR LED wires together and tin them

Once twisted together add solder to keep them together. This makes the connection much easier.

Step 13: Solder the positive wire to ESP

Lay the wire on the outside of the 5V pin and apply solder.

Step 14: Solder the negative wire to ESP

Repeat Step 12 but with the negative wires.

INFO

As a user in our discord has learned, you can short the IO12 pin with the ground pin (GND) without issues.

In the below example I put it on the top of the pin, It will be a week-ish joint but that's where glue comes in handy.

Step 15: Wire up the 2nd ESP

Repeat steps 12-14 with the 2nd ESP.

Step 16: Prepare to solder IR LED PCBs

Get your magnifying glass out, it's time to solder very smol things.

Gather 4 PCBs, 4 IR LEDs, and either 4 ~350ohm.


357ohm resistors and V3 PCBs

Here are the PCB pin-out labels:


V3

LED labels:


The green markings and notched corners mark the positive sides of the LEDs pictured above.

If you have different LEDs, please consult their datasheet.

Some terminology related to them:

5V: 5-volt power in.

GND: Ground or power out.

AR: After-Resistor this is to be used as the power in on the 2nd PCB in series as resistors are not needed on the 2nd PCB since they are on the 1st one.

SNG: Single resistor, use this as 5V in if you are using only 1 ~700ohm resistor on V3 boards (not recommended).

Negative: This marks the negative side of the LED.

Positive: This marks the positive side of the LED.

Step 18: Solder resistors on PCB V3

You only need 1 PCB to have resistors per eye.

Tin the resistor pads. Note: in this example, I use too much solder, it should only be enough to lightly cover the pad.

Next, grab a resistor and hold it on the pads.

While holding the resistor add solder to your soldering iron and apply it to the resistor.

I like to do this by having a piece of my solder stick up in the air and then put it on my iron that way.

Flip the PCB and solder the other end.

Now repeat for the other one.

Solder LEDs on PCB V3

Tin the LED pads.

Orientate the LED and hold it in place.

Solder one end.

Flip around and solder the other end.

Wire up the PCBs V3

WARNING

Pay attention to the direction of the LEDs on the PCBs.

If the green dot is facing inwards toward the text like in the picture below:

Use the following diagram:

If the green dot is facing away from the text like the picture below:

Use the following diagram:

Step 19: 3D print mounts

Head to the 3D printed parts section of the parts list here.

Find which parts are for your headset and print them. Some may work better or worse, it is recommended to test all of them if there are multiple, print one of each kind. If none work, try making an edit yourself if you have the skills. If you have made a mount make sure to ping me, Prohurtz#0001, so I can add them to the list.

Having trouble getting them to fit? Try resizing the mounts up, or down a little to ensure a good fit.

There are 2 different types of mounts, how to secure the camera to each type will be documented below.

Type 1

This uses a method of sliding in the camera. Generally, this is the recommended mounting method as it generally requires no glue.

Place the camera into the mount

Slowly apply pressure inwards until the camera snaps into place.

NOTE

There is a good chance of breaking the mount when putting in the camera. If this happens you may be able to save the mount depending on where the break was. A small dab of hot glue around the camera is likely all that is needed.

Type 2

This uses the method of gluing the camera.

Apply a bit of glue to the bottom of the camera mount.

Place the camera on the mount.

IR LED mounting

This again differs from mount to mount.

In some cases, there are designated spots for the LEDs to go.

In others there are no specified spots, you will have to mess around to find what works best. This image shows the optimal/near-optimal position for the LEDs. Hot glue is your friend with this.

TIP

Use rubbing alcohol to easily remove hot glue.

Released under the MIT License.

- + \ No newline at end of file diff --git a/how_to_build/parts_list.html b/how_to_build/parts_list.html index eb988f4..c58438b 100644 --- a/how_to_build/parts_list.html +++ b/how_to_build/parts_list.html @@ -5,7 +5,7 @@ Parts List | EyeTrackVR Docs - + @@ -19,7 +19,7 @@
Skip to content

Parts List

CAUTION

Please note that no hardware has been fully set in stone, all purchases are at your loss if hardware changes.

NOTE

It is good practice to buy more than needed in some cases, namely cameras,programmers and ESPs. This reduces the risk of a DOA (dead on arrival) causing a delay.

ESP setup options:

DANGER

There are two primary categories of trackers supported: wireless and wired. It's super important that you really look at all your options and consider your use case before making a decision.

Option 1: Wireless over WiFi 2.4 GHz

This offers a good starting point as the ESP boards are cheaper than wired capable trackers. However, they can be a bit more temperamental and if you are using a wired headset, they start to make less sense.

Pros:

  • Wider user adoption and greater support
  • Low weight, less cables, easier to manage

Cons:

  • Requires two external antennas for optimal streaming quality
  • Requires WiFi 2.4 GHz router or access point in reasonable proximity
  • Risk of radio interference with FBT and other WiFi 2.4 GHz devices
  • ESP32-CAM uses more power and heats up due to radio module power needs

Option 2: Wired over USB Serial (in beta)

This is our latest setup recommended for users with wired headsets such as the Valve Index.

Pros:

  • Much better performance and higher framerates up to 70 FPS with lower latency
  • No conflicts with advanced FBT setups such as Vive or Tundra Trackers
  • Can be wireless or wired
  • Less soldering required

Cons:

  • Requires USB port i.e. on Valve Index and USB hub mounted on your headset
  • Can be more costly

Required parts

With that in mind, here are the required parts for the setup.

Tracker boards:

    • 2x XIAO ESP32-S3 Sense Modules
      Very small size, wireless and wired support, does not require an additional programmer or separate antennas: SeedStudio

    alternatively:

    • 2x Freenove ESP 32-S3 WROOM
      Much larger, price may be higher than the XIAOs, supports wired and wireless as well, does not need a separate programmer, does not support a separate antenna. Amazon
  • A cheaper, wireless only alternative:

    • 2x ESPCAM32 Modules - They are cheaper, requires a separate programmer board, supports only wireless streaming and may require some soldering for attaching separate antennas: AliExpress
      This board also requires a special programmer board in order to flash the firmware. You'll need only one: AliExpress for just programmers or Amazon for 3 ESP32-Cams and programmers without the proper cameras

    • 2x External antennas for ESPs Required if you're running vive/tundra full body tracking or having issues with streaming. See the full build guide on how to configure the ESP board for antenna use.

Cameras

Camera modules:

The cameras that come with the boards will not work, they have an IR filter inside.

The filter can be removed, but doing so may break your cameras. Here's how to do it: https://www.youtube.com/watch?v=QYH-FWvDbDc

DANGER

If you decide to remove the filter, wear eye protection while doing so, the removal of the filter will shatter it.

  • 2x OV2640 160° FOV IR / Night vers 75mm (850nm)

AliExpress

Amazon alternative (note that you will have to manually remove the IR filter)

Things worth noting:

  • There is an experimental option to purchase OV2640 120° FOV cameras and manually remove the IR filters. This can result in a clearer view of the eye, but it's not a default recommendation.

  • If the cameras are Dead on Arrival (DOA), keep in mind that you can swap the lenses with the ones that come with the stock cameras that were included with the ESP32 boards though, they do require extension cables.

  • Optional Ribbon extensions:

Certain mounts may require a cable extension (ex: MUTE's frunk mod) To use a mount like that you will need a cable and a connector for each camera. Headsets like the Quest 2 do not require extensions if the camera boards are mounted at the bottom of the headset, near the facial interface.

Extensions (select 0.5mm pitch type A) AliExpress (200mm for MUTE's)

Connectors (select 24P) Aliexpress

USB Hubs - for if you are building the wired version

  • 1x USB 3.0+ hub Ensure that it is of good quality, lightweight, compact in size, and I suggest including three ports - one for the face tracker and two for ESP32-S3 boards. Ensure that you acquire appropriate USB-A to USB-C adapters wherever required, such as for the Valve Index which has only one USB-A port.

  • 2x USB C cables (as short as possible) to connect both ESPs As the ESP32-S3 has USB-C connectors, you may require some USB-C to USB-A cables depending on your USB hub. It's worth noting that the HTC Face Tracker requires a USB-C port, so you may need to consider this requirement as well.

Wires and adapters

IR emitters

We recommend getting the official kits:

Alternatively you can source the parts for V3 yourself:

DANGER

If they look like something you would find in a TV remote, do NOT use them. Even if you think you can alter them THEY WILL NOT WORK AND PUT YOU AT RISK. If you aren't exactly sure what you are doing, buy them from the LCSC or Digikey link.

DO NOT BUY FOCUSED ONES!

  • 4x Unfocused SMD IR emitters

    NOTE

    The smaller ones can not be soldered at temps above 245C or they will burn. Low temp solder is recommended.

  • 4x IR emitter PCBs (highly recommended) Gerber files and schematics located here.

  • 4x 350ohm 1206 SMD resistors for IR emitters (If you are not using PCBs for the emitters then buying regular through-hole resistors is acceptable)

  • 357 ohm Digikey here

  • 348 ohm LCSC here

This ensures you get the correct IR emitter parts. If you are a Patreon please check out discount codes available to you, and also check out unit pricing.

3D Printed Mounts

Mounts with a next to them are the recommended mounts for the respected hmd. This is based on user feedback on what works best for most people.

NOTE

You'll need both - a mount for the IR emitters and a mount for the camera boards, some files include both, some don't.

Misc parts/tools

AliExpress (Generic)
Amazon (Generic)

  • 2x-4x Heatsinks (Optional) - for the ESP32-CAM AliExpress (14mm for ESP, 8mm for voltage regulator)

Other Headsets

If you own another headset not listed above, that means there are no mounts designed for them yet. If you have basic skills in modeling or think up a solution to mount cams and emitters, please try to make a mount and then let us in the discord know so it can be added here. Any headset that can fit the camera is potentially compatible. If you are willing, give it a shot to design a mount for the rest of the community.

Check out our basic guide on making your own mount here.

TIP

If you have a headset mount that is not listed above, please let us know in the discord so it can be added here.

Released under the MIT License.

- + \ No newline at end of file diff --git a/index.html b/index.html index e26ee1a..3a1406e 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ EyeTrackVR Docs | EyeTrackVR Docs - + @@ -18,7 +18,7 @@
Skip to content

EyeTrackVR Docs

Open-source and affordable VR eye tracking.

For Social VR Games via OSC and UDP protocol.

ETVR logo

Released under the MIT License.

- + \ No newline at end of file diff --git a/misc/faq.html b/misc/faq.html index 67d50f1..2009e5b 100644 --- a/misc/faq.html +++ b/misc/faq.html @@ -5,7 +5,7 @@ Frequently Asked Questions | EyeTrackVR Docs - + @@ -18,7 +18,7 @@
Skip to content

Frequently Asked Questions



Released under the MIT License.

- + \ No newline at end of file diff --git a/misc/vrc_avatar_setup.html b/misc/vrc_avatar_setup.html index 633e87b..05dccbe 100644 --- a/misc/vrc_avatar_setup.html +++ b/misc/vrc_avatar_setup.html @@ -5,7 +5,7 @@ How to set up your avatar for eye tracking: | EyeTrackVR Docs - + @@ -18,7 +18,7 @@
Skip to content

How to set up your avatar for eye tracking:

Here is an avatar setup video created by a contributor:

Another good resource is the VRC Face Tracking Wiki and their Discord.

We currently use the following paramaters

LeftEyeX

RightEyeX

EyesY

LeftEyeLidExpandedSqueeze

RightEyeLidExpandedSqueeze

NOTE

We currently only support float parameters, please adjust your setup accordingly.

Released under the MIT License.

- + \ No newline at end of file diff --git a/software_guide/build_software.html b/software_guide/build_software.html index 1c0a743..ab706b8 100644 --- a/software_guide/build_software.html +++ b/software_guide/build_software.html @@ -5,7 +5,7 @@ Build the app from source | EyeTrackVR Docs - + @@ -19,7 +19,7 @@
Skip to content

Build the app from source

This guide will show how to build the app from source

NOTE

This is NOT a required step, you do not need to build the app from source.

Requirements

Install Python

EyeTrackVR is currently using Python 3.11.0 Before you continue, please install it.

Installing Poetry

Since version 0.1.7 of EyeTrackVR, we have been using Poetry to manage app dependencies. To build the app, you must first install Poetry to fetch the required dependencies.

To install Poetry open Windows Powershell and run the following command (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

Poetry Documentation

Install the required Python modules

After cloning the project and installing Poetry, open a command prompt in the EyeTrackApp folder. Then run the command: poetry install

This should install all of the required modules.

Build the app

Now, you should be ready to build the app. With a command prompt open in the EyeTrackApp folder, run the command poetry run pyinstaller eyetrackapp.spec

Give it time to build the app. Once done, the app should be under dist/eyetrackapp

Released under the MIT License.

- + \ No newline at end of file diff --git a/software_guide/eyetrackvr_app_guide.html b/software_guide/eyetrackvr_app_guide.html index 0dc9190..6e2ebe0 100644 --- a/software_guide/eyetrackvr_app_guide.html +++ b/software_guide/eyetrackvr_app_guide.html @@ -5,7 +5,7 @@ How to install, run and adjust the EyeTrackVR app. | EyeTrackVR Docs - + @@ -19,7 +19,7 @@
Skip to content

How to install, run and adjust the EyeTrackVR app.

Step 1: Download the EyeTrackVR Installer and install the EyeTrackVR app

Go to the latest GitHub release here and download the Setup.exe file.

Follow the prompts and the app should be installed.

Step 2: Run the EyeTrackVR app

If the Create Desktop Shortcut option was checked you should see an icon on your desktop, double click it to run.

You then should be greeted with a GUI that looks like this:

'img'

Step 3: Getting familiar with settings and terminology

Let's go over some basic terminology you will find in the app.

Starting from the top:

Right eye

Shows the right eye feed and settings only.

Left eye

Shows the left eye feed and settings only.

Both eyes

Shows both eyes' feed and settings.

Camera Address

This is where you enter the IP address of your camera. Alternatively, it can be used to put the cam number for wired cameras or pass in a video file.

Tracking Mode

This changes the GUI to the tracking mode where it outputs values.

Cropping Mode

This is where you will crop out your eye.

Threshold

This is used to cut out things that aren't dark like your pupil.

Rotation

For our method to work best, you want your eye to be level. Use this slider to adjust it to where that is the case.

Restart Calibrationn

This will start a calibration mode for your eye where you look to all extremes.

Recenter Eye

This will recenter your eye to whatever point you are looking at.

Step 4: Adding your cameras to the software and configuring them

Wireless configuration

Power your ESPs and find what the IP address is for your right eye. This can be done by opening both Cameras in a browser and then holding your finger over your right eye camera.

Copy that IP address and then close the browser tab with it open.

Enter that IP address into the app's Camera Address field.

Press the Save and Restart Tracking button.

Wired configuration (experimental)

Note this is a Beta app feature only. Please use the latest Open Beta in the Discord.

Find your ESPs in Device Manager and figure out their COM port numbers i. e. COM4.

Enter that COM port number into the app's Camera Address field.

Press the Save and Restart Tracking button.

Setting up ROI

Don't see your camera feed? That's because we haven't set an ROI.

'img'

See the Awating Eye Cropping Settings text?

Now press the Cropping Mode button. You should see a feed of your camera.

Put your headset on and use an application to see your desktop. (Virtual desktop, SteamVR desktop, etc.)

You should see something like this:

'img'

:O It's my eye!

Now, Draw a rectangle that selects your eye.

A good example of an ROI

'img'

Head back over to the Tracking mode.

We will now adjust our rotation by moving the Rotation slider.

From this:

'img'

It's crooked!

To this:

'img'

Much better!

Now we will adjust our threshold.

Continuing with your headset on, move the slider all the way up. start slowly backing it off until mainly only your pupil is being visualized in the threshold viewer.

Example of a threshold being too low:

'img'

Much better!

Example of too high of a threshold:

'img'

Much better!

Example of a good threshold:

'img'

Much better!

Repeat everything in this step for your left eye.

Step 5: Calibrating your eyes

Once your eye is trackable by the software we need to calibrate it.

Press the Restart Calibration button and look around. The important part is that you look to all extremes, all the way up, left, etc. Once you have done so, wait for the Mode to say Tracking

The next step is to center your eye.

Look straight forward and press the Recenter Eye button.

Your eye is now fully calibrated.

Repeat for your other eye.

NOTE

To best center both eyes, look at one spot and hit the 'Recenter Eye' button for each eye without moving your eyes.

See anything outdated on this guide? Let me know! Prohurtz#0001

Released under the MIT License.

- + \ No newline at end of file diff --git a/software_guide/osc_setup.html b/software_guide/osc_setup.html index 7ab2f9c..3416fcd 100644 --- a/software_guide/osc_setup.html +++ b/software_guide/osc_setup.html @@ -5,7 +5,7 @@ Setting up recalibration and recentering from VRChat. | EyeTrackVR Docs - + @@ -19,7 +19,7 @@
Skip to content

Setting up recalibration and recentering from VRChat.

ETVR has a mechanism that allows you to recalibrate and recenter your tracking without the need to interact with the app directly, here's how to setup your avatar to make use of OSC to trigger this from within VRC itself.

NOTE

Note, while this page explains how to do it from the point of view of vrchat, it can be done in Neos and CVR too, all the app listens to are two OSC messages.

Setting up your parameters

Adding parameters

You'll need to add two parameters to your Parameters config, those being:

  • etvr_recalibrate: Bool
  • etvr_recenter: Bool

Both of them do not have to be synced, meaning they won't increase your total memory count.

To do this, in Unity, select your avatar on the scene and find Avatar Descriptor in the inspector. In it, find the section named "expressions", expand it and click on the file assigned to the "parameters" field, that's your Parameters config.

Screenshot showing expressions section of vrc avatar descriptor

Clicking on it will highligh the associated asset in the asset browser, click on the highlighted file to get its content to show in the inspector panel. Now, in the inspector click on the Add button to add the parameters mentioned above, both of them need to be of type Bool, they don't need to be synced nor saved.

Screenshot showing adding parameters to parameter menu
Screenshot showing the params that need to be added

That's it for the parameters.

Adding buttons to the menu

Now, you will need to add actual buttons for them in your gesture menu.

The expressions section mentioned above also contains the menu, you can use that to either add the buttons there directly or create a small submenu to make it less cluttered, here we will add them directly.

Screenshot showing expressions section of vrc avatar descriptor

Once you have the menu file opened in the inspector, click on the "add control" button. This will add an empty action slot, expand it.

Screenshot showing the the empty controls field

You'll see a bunch of fields, like name, icon, type and parameter. Firstly, let's give it a friendly name like "recalibrate eyes" or "recenter tracking" depending on the action you want to assign to them.

Leave the type as is - as a button, it's more convenient as it bounces back into the off state by itself.

Now, in the parameter section, click on the [None] and select one of the parameters you have created in the previous section.

Screenshot showing the the controls setup

Repeat the steps for the other one.

Once done simply build and upload the updated version of your avatar.

And that's it, you now should be able to recenter and recalibrate your tracking form inside of VRC!

Reseting the OSC config in case the parameters don't work

Sometimes VRChat won't regenerate the config files that it to communicate the changes to anyone that's listening, to fix this it's enough to simply delete the auto generated configuration files and let VRC remake them.

They are stored under

C:\Users\<user>\AppData\LocalLow\VRChat\VRChat\OSC\<your user uuid>\Avatars\

Deleting the contents of the Avatars directory will resolve the issue.

Other platforms

Like mentioned in the note, this functionality is not limited to VRC.

The app itself listens to OSC messages sent on port 9001 to two addresses:

  • /avatar/parameters/etvr_recenter
  • /avatar/parameters/etvr_recalibrate

It only needs to receive a Bool value of True to trigger the recenter and calibration.

The port and the adresses can be changed in the app settings, if need be.

Released under the MIT License.

- + \ No newline at end of file