diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..a32132d --- /dev/null +++ b/404.html @@ -0,0 +1,19 @@ + + +
+ + +Some API may return a list of items. In this case, the response will be a List
object:
FIELD | TYPE | DESCRIPTION |
---|---|---|
data | array | list of items |
next | string | token for the next page |
You can use the next
token to get the next page of items. If next
is nullable, it means that there are no more items.
FIELD | TYPE | DESCRIPTION |
---|---|---|
id | string | channel ID |
name | string | channel name |
FIELD | TYPE | DESCRIPTION |
---|---|---|
channel_id | string | channel ID |
Get a channel by ID. Returns a channel object.
FIELD | TYPE | DESCRIPTION |
---|---|---|
guild_id | string | guild ID |
next | string | pagination token |
Get channels in a guild. Returns a list of channel objects.
',2);function f(P,p,I,g,m,C){const n=o("badge");return r(),i("div",null,[s,t("ul",null,[t("li",null,[l(n,null,{default:h(()=>[e("POST")]),_:1}),e(),_])]),u,t("ul",null,[t("li",null,[l(n,null,{default:h(()=>[e("POST")]),_:1}),e(),b])]),T])}const x=d(c,[["render",f]]);export{D as __pageData,x as default}; diff --git a/assets/en-US_resources_channel.md.72cdadc5.lean.js b/assets/en-US_resources_channel.md.72cdadc5.lean.js new file mode 100644 index 0000000..ddafbb8 --- /dev/null +++ b/assets/en-US_resources_channel.md.72cdadc5.lean.js @@ -0,0 +1 @@ +import{_ as d,t as o,v as r,x as i,A as t,G as l,K as h,N as e,U as a}from"./chunks/framework.187e34d2.js";const D=JSON.parse('{"title":"Channel","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/channel.md","filePath":"en-US/resources/channel.md"}'),c={name:"en-US/resources/channel.md"},s=a("",6),_=t("code",null,"/v1/channel.get",-1),u=a("",3),b=t("code",null,"/v1/channel.list",-1),T=a("",2);function f(P,p,I,g,m,C){const n=o("badge");return r(),i("div",null,[s,t("ul",null,[t("li",null,[l(n,null,{default:h(()=>[e("POST")]),_:1}),e(),_])]),u,t("ul",null,[t("li",null,[l(n,null,{default:h(()=>[e("POST")]),_:1}),e(),b])]),T])}const x=d(c,[["render",f]]);export{D as __pageData,x as default}; diff --git a/assets/en-US_resources_guild.md.c46197de.js b/assets/en-US_resources_guild.md.c46197de.js new file mode 100644 index 0000000..9497c86 --- /dev/null +++ b/assets/en-US_resources_guild.md.c46197de.js @@ -0,0 +1 @@ +import{_ as o,t as r,v as n,x as s,A as t,G as i,K as l,N as e,U as a}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"Guild","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/guild.md","filePath":"en-US/resources/guild.md"}'),u={name:"en-US/resources/guild.md"},h=a('FIELD | TYPE | DESCRIPTION |
---|---|---|
id | string | guild ID |
name | string | guild name |
FIELD | TYPE | DESCRIPTION |
---|---|---|
guild_id | string | guild ID |
Get a guild by ID. Returns a guild object.
FIELD | TYPE | DESCRIPTION |
---|---|---|
next | string | pagination token |
Get guilds where the current user is a member. Returns a list of partial guild objects.
string
请求 IDboolean
是否通过请求string
备注信息Promise<void>
处理来自群组的邀请。
',5);function m(p,T,I,P,f,S){const d=r("badge");return n(),s("div",null,[h,t("ul",null,[t("li",null,[i(d,null,{default:l(()=>[e("POST")]),_:1}),e(),_])]),c,t("ul",null,[t("li",null,[i(d,null,{default:l(()=>[e("POST")]),_:1}),e(),g])]),b])}const D=o(u,[["render",m]]);export{x as __pageData,D as default}; diff --git a/assets/en-US_resources_guild.md.c46197de.lean.js b/assets/en-US_resources_guild.md.c46197de.lean.js new file mode 100644 index 0000000..c362891 --- /dev/null +++ b/assets/en-US_resources_guild.md.c46197de.lean.js @@ -0,0 +1 @@ +import{_ as o,t as r,v as n,x as s,A as t,G as i,K as l,N as e,U as a}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"Guild","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/guild.md","filePath":"en-US/resources/guild.md"}'),u={name:"en-US/resources/guild.md"},h=a("",6),_=t("code",null,"/v1/guild.get",-1),c=a("",3),g=t("code",null,"/v1/guild.list",-1),b=a("",5);function m(p,T,I,P,f,S){const d=r("badge");return n(),s("div",null,[h,t("ul",null,[t("li",null,[i(d,null,{default:l(()=>[e("POST")]),_:1}),e(),_])]),c,t("ul",null,[t("li",null,[i(d,null,{default:l(()=>[e("POST")]),_:1}),e(),g])]),b])}const D=o(u,[["render",m]]);export{x as __pageData,D as default}; diff --git a/assets/en-US_resources_member.md.8bb1da4c.js b/assets/en-US_resources_member.md.8bb1da4c.js new file mode 100644 index 0000000..2cabb29 --- /dev/null +++ b/assets/en-US_resources_member.md.8bb1da4c.js @@ -0,0 +1,5 @@ +import{_ as e,v as t,x as o,U as s}from"./chunks/framework.187e34d2.js";const b=JSON.parse('{"title":"群组成员 (GuildMember)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/member.md","filePath":"en-US/resources/member.md"}'),a={name:"en-US/resources/member.md"},r=s(`interface GuildMember {
+ user: User
+ nick?: string
+ avatar?: string
+}
string
群组 IDstring
用户 IDPromise<GuildMember>
群成员信息获取群成员信息。
string
群组 IDstring
分页令牌Promise<List<GuildMember>>
群成员列表获取群成员列表。
string
群组 IDstring
用户 IDboolean
是否永久踢出 (用户无法再次加入群组)Promise<void>
将某个用户踢出群组。
string
群组 IDstring
用户 IDnumber
禁言时长 (毫秒)string
禁言说明Promise<void>
将某个用户禁言。如果传入的禁言时长为 0
则表示解除禁言。
string
请求 IDboolean
是否通过请求string
备注信息Promise<void>
处理加群请求。
`,19),i=[r];function n(l,d,c,u,p,m){return t(),o("div",null,i)}const h=e(a,[["render",n]]);export{b as __pageData,h as default}; diff --git a/assets/en-US_resources_member.md.8bb1da4c.lean.js b/assets/en-US_resources_member.md.8bb1da4c.lean.js new file mode 100644 index 0000000..89feec5 --- /dev/null +++ b/assets/en-US_resources_member.md.8bb1da4c.lean.js @@ -0,0 +1 @@ +import{_ as e,v as t,x as o,U as s}from"./chunks/framework.187e34d2.js";const b=JSON.parse('{"title":"群组成员 (GuildMember)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/member.md","filePath":"en-US/resources/member.md"}'),a={name:"en-US/resources/member.md"},r=s("",19),i=[r];function n(l,d,c,u,p,m){return t(),o("div",null,i)}const h=e(a,[["render",n]]);export{b as __pageData,h as default}; diff --git a/assets/en-US_resources_message.md.f008c101.js b/assets/en-US_resources_message.md.f008c101.js new file mode 100644 index 0000000..d0d69eb --- /dev/null +++ b/assets/en-US_resources_message.md.f008c101.js @@ -0,0 +1,8 @@ +import{_ as e,v as s,x as t,U as a}from"./chunks/framework.187e34d2.js";const m=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/message.md","filePath":"en-US/resources/message.md"}'),n={name:"en-US/resources/message.md"},o=a(`interface Message {
+ isDirect: boolean
+ channelId: string
+ messageId: string
+ userId: string
+ content: string
+ timestamp?: number
+}
string
频道 IDFragment
要发送的内容string
群组 IDPromise<string[]>
发送的消息 ID向特定频道发送消息。
WARNING
只要你能够获取到会话对象,你就不应使用此 API,而应该使用 session.send()
。一些平台会将主动发送的消息同被动接收后回复的消息区分开来,甚至可能限制主动消息的发送,因此使用 session.send()
总是有更好的可靠性。
TIP
bot.sendMessage()
既可以发送群聊消息,也可以发送私聊消息。当发送私聊消息时,其与 bot.sendPrivateMessage()
的区别在于前者传入的是频道 ID,而后者传入的是用户 ID。
string
对方 IDFragment
要发送的内容Promise<string[]>
发送的消息 ID向特定用户发送私聊消息。
string
频道 IDstring
消息 IDPromise<Message>
获取特定消息。
string
频道 IDstring
消息 IDPromise<void>
撤回特定消息。
string
频道 IDstring
消息 IDFragment
要发送的内容Promise<void>
修改特定消息。
string
频道 IDstring
分页令牌Promise<List<Message>>
消息列表获取频道消息列表。
`,24),l=[o];function i(r,c,d,p,g,h){return s(),t("div",null,l)}const I=e(n,[["render",i]]);export{m as __pageData,I as default}; diff --git a/assets/en-US_resources_message.md.f008c101.lean.js b/assets/en-US_resources_message.md.f008c101.lean.js new file mode 100644 index 0000000..c7ff00d --- /dev/null +++ b/assets/en-US_resources_message.md.f008c101.lean.js @@ -0,0 +1 @@ +import{_ as e,v as s,x as t,U as a}from"./chunks/framework.187e34d2.js";const m=JSON.parse('{"title":"消息 (Message)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/message.md","filePath":"en-US/resources/message.md"}'),n={name:"en-US/resources/message.md"},o=a("",24),l=[o];function i(r,c,d,p,g,h){return s(),t("div",null,l)}const I=e(n,[["render",i]]);export{m as __pageData,I as default}; diff --git a/assets/en-US_resources_reaction.md.2b20af79.js b/assets/en-US_resources_reaction.md.2b20af79.js new file mode 100644 index 0000000..4d11b39 --- /dev/null +++ b/assets/en-US_resources_reaction.md.2b20af79.js @@ -0,0 +1 @@ +import{_ as a,t as n,v as i,x as r,A as t,N as e,G as s,K as c,U as d}from"./chunks/framework.187e34d2.js";const j=JSON.parse('{"title":"表态 (Reaction) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/reaction.md","filePath":"en-US/resources/reaction.md"}'),l={name:"en-US/resources/reaction.md"},g={id:"表态-实验性",tabindex:"-1"},h=t("a",{class:"header-anchor",href:"#表态-实验性","aria-label":'Permalink to "表态 (Reaction)string
频道 IDstring
消息 IDstring
表态名称Promise<void>
向特定消息添加表态。
string
频道 IDstring
消息 IDstring
表态名称string
用户 IDPromise<void>
从特定消息删除某个用户添加的特定表态。如果没有传入用户 ID 则表示删除自己的表态。
string
频道 IDstring
消息 IDstring
表态名称Promise<void>
从特定消息清除某个特定表态。如果没有传入表态名称则表示清除所有表态。
string
频道 IDstring
消息 IDstring
表态名称string
分页令牌Promise<List<User>>
获取添加特定消息的特定表态的用户列表。
',13);function I(b,_,u,p,P,f){const o=n("badge");return i(),r("div",null,[t("h1",g,[e("表态 (Reaction) "),s(o,{type:"warning"},{default:c(()=>[e("实验性")]),_:1}),e(),h]),m])}const D=a(l,[["render",I]]);export{j as __pageData,D as default}; diff --git a/assets/en-US_resources_reaction.md.2b20af79.lean.js b/assets/en-US_resources_reaction.md.2b20af79.lean.js new file mode 100644 index 0000000..0e70a9e --- /dev/null +++ b/assets/en-US_resources_reaction.md.2b20af79.lean.js @@ -0,0 +1 @@ +import{_ as a,t as n,v as i,x as r,A as t,N as e,G as s,K as c,U as d}from"./chunks/framework.187e34d2.js";const j=JSON.parse('{"title":"表态 (Reaction) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/reaction.md","filePath":"en-US/resources/reaction.md"}'),l={name:"en-US/resources/reaction.md"},g={id:"表态-实验性",tabindex:"-1"},h=t("a",{class:"header-anchor",href:"#表态-实验性","aria-label":'Permalink to "表态 (Reaction)export interface GuildRole {
+ id: string
+ name: string
+ color: number
+ position: number
+}
string
群组 IDstring
用户 IDstring
角色 IDPromise<void>
设置群组内用户的角色。
string
群组 IDstring
用户 IDstring
角色 IDPromise<void>
取消群组内用户的角色。
string
群组 IDstring
分页令牌Promise<List<GuildRole>>
角色列表获取群组角色列表。
string
群组 IDPartial<GuildRole>
角色信息Promise<string>
角色 ID创建群组角色。
string
群组 IDstring
角色 IDPartial<GuildRole>
角色信息Promise<void>
修改群组角色。
string
群组 IDstring
角色 IDPromise<void>
删除群组角色。
`,21);function h(k,b,I,m,v,y){const t=a("badge");return s(),i("div",null,[o("h1",u,[e("群组角色 (GuildRole) "),r(t,{type:"warning"},{default:n(()=>[e("实验性")]),_:1}),e(),g]),p])}const f=l(c,[["render",h]]);export{x as __pageData,f as default}; diff --git a/assets/en-US_resources_role.md.42105578.lean.js b/assets/en-US_resources_role.md.42105578.lean.js new file mode 100644 index 0000000..5b11f6f --- /dev/null +++ b/assets/en-US_resources_role.md.42105578.lean.js @@ -0,0 +1 @@ +import{_ as l,t as a,v as s,x as i,A as o,N as e,G as r,K as n,U as d}from"./chunks/framework.187e34d2.js";const x=JSON.parse('{"title":"群组角色 (GuildRole) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/role.md","filePath":"en-US/resources/role.md"}'),c={name:"en-US/resources/role.md"},u={id:"群组角色-实验性",tabindex:"-1"},g=o("a",{class:"header-anchor",href:"#群组角色-实验性","aria-label":'Permalink to "群组角色 (GuildRole)export interface User {
+ id: string
+ name: string
+ avatar?: string
+}
Promise<User>
用户信息获取机器人自己的信息。
string
用户 IDPromise<User>
用户信息获取用户信息。
string
分页令牌Promise<List<User>>
好友列表获取机器人的好友列表。
string
请求 IDboolean
是否通过请求string
备注信息Promise<void>
处理好友请求。
`,16),r=[n];function i(l,c,p,d,h,k){return t(),s("div",null,r)}const b=e(o,[["render",i]]);export{g as __pageData,b as default}; diff --git a/assets/en-US_resources_user.md.0eb0bfd1.lean.js b/assets/en-US_resources_user.md.0eb0bfd1.lean.js new file mode 100644 index 0000000..6b0b271 --- /dev/null +++ b/assets/en-US_resources_user.md.0eb0bfd1.lean.js @@ -0,0 +1 @@ +import{_ as e,v as t,x as s,U as a}from"./chunks/framework.187e34d2.js";const g=JSON.parse('{"title":"用户 (User)","description":"","frontmatter":{},"headers":[],"relativePath":"en-US/resources/user.md","filePath":"en-US/resources/user.md"}'),o={name:"en-US/resources/user.md"},n=a("",16),r=[n];function i(l,c,p,d,h,k){return t(),s("div",null,r)}const b=e(o,[["render",i]]);export{g as __pageData,b as default}; diff --git a/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 b/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 new file mode 100644 index 0000000..2a68729 Binary files /dev/null and b/assets/inter-italic-cyrillic-ext.33bd5a8e.woff2 differ diff --git a/assets/inter-italic-cyrillic.ea42a392.woff2 b/assets/inter-italic-cyrillic.ea42a392.woff2 new file mode 100644 index 0000000..f640351 Binary files /dev/null and b/assets/inter-italic-cyrillic.ea42a392.woff2 differ diff --git a/assets/inter-italic-greek-ext.4fbe9427.woff2 b/assets/inter-italic-greek-ext.4fbe9427.woff2 new file mode 100644 index 0000000..0021896 Binary files /dev/null and b/assets/inter-italic-greek-ext.4fbe9427.woff2 differ diff --git a/assets/inter-italic-greek.8f4463c4.woff2 b/assets/inter-italic-greek.8f4463c4.woff2 new file mode 100644 index 0000000..71c265f Binary files /dev/null and b/assets/inter-italic-greek.8f4463c4.woff2 differ diff --git a/assets/inter-italic-latin-ext.bd8920cc.woff2 b/assets/inter-italic-latin-ext.bd8920cc.woff2 new file mode 100644 index 0000000..9c1b944 Binary files /dev/null and b/assets/inter-italic-latin-ext.bd8920cc.woff2 differ diff --git a/assets/inter-italic-latin.bd3b6f56.woff2 b/assets/inter-italic-latin.bd3b6f56.woff2 new file mode 100644 index 0000000..01fcf20 Binary files /dev/null and b/assets/inter-italic-latin.bd3b6f56.woff2 differ diff --git a/assets/inter-italic-vietnamese.6ce511fb.woff2 b/assets/inter-italic-vietnamese.6ce511fb.woff2 new file mode 100644 index 0000000..e4f788e Binary files /dev/null and b/assets/inter-italic-vietnamese.6ce511fb.woff2 differ diff --git a/assets/inter-roman-cyrillic-ext.e75737ce.woff2 b/assets/inter-roman-cyrillic-ext.e75737ce.woff2 new file mode 100644 index 0000000..28593cc Binary files /dev/null and b/assets/inter-roman-cyrillic-ext.e75737ce.woff2 differ diff --git a/assets/inter-roman-cyrillic.5f2c6c8c.woff2 b/assets/inter-roman-cyrillic.5f2c6c8c.woff2 new file mode 100644 index 0000000..a20adc1 Binary files /dev/null and b/assets/inter-roman-cyrillic.5f2c6c8c.woff2 differ diff --git a/assets/inter-roman-greek-ext.ab0619bc.woff2 b/assets/inter-roman-greek-ext.ab0619bc.woff2 new file mode 100644 index 0000000..e3b0be7 Binary files /dev/null and b/assets/inter-roman-greek-ext.ab0619bc.woff2 differ diff --git a/assets/inter-roman-greek.d5a6d92a.woff2 b/assets/inter-roman-greek.d5a6d92a.woff2 new file mode 100644 index 0000000..f790e04 Binary files /dev/null and b/assets/inter-roman-greek.d5a6d92a.woff2 differ diff --git a/assets/inter-roman-latin-ext.0030eebd.woff2 b/assets/inter-roman-latin-ext.0030eebd.woff2 new file mode 100644 index 0000000..715bd90 Binary files /dev/null and b/assets/inter-roman-latin-ext.0030eebd.woff2 differ diff --git a/assets/inter-roman-latin.2ed14f66.woff2 b/assets/inter-roman-latin.2ed14f66.woff2 new file mode 100644 index 0000000..a540b7a Binary files /dev/null and b/assets/inter-roman-latin.2ed14f66.woff2 differ diff --git a/assets/inter-roman-vietnamese.14ce25a6.woff2 b/assets/inter-roman-vietnamese.14ce25a6.woff2 new file mode 100644 index 0000000..5a9f9cb Binary files /dev/null and b/assets/inter-roman-vietnamese.14ce25a6.woff2 differ diff --git a/assets/style.0add57fd.css b/assets/style.0add57fd.css new file mode 100644 index 0000000..1462afb --- /dev/null +++ b/assets/style.0add57fd.css @@ -0,0 +1 @@ +.root[data-v-463da30f]{position:relative;z-index:1}.nested[data-v-463da30f]{padding-left:16px}.outline-link[data-v-463da30f]{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-463da30f]:hover,.outline-link.active[data-v-463da30f]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-463da30f]{padding-left:13px}.VPDocAsideOutline[data-v-c834746b]{display:none}.VPDocAsideOutline.has-outline[data-v-c834746b]{display:block}.content[data-v-c834746b]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-c834746b]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:1px;height:18px;background-color:var(--vp-c-brand);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-c834746b]{letter-spacing:.4px;line-height:28px;font-size:13px;font-weight:600}.VPDocAside[data-v-cb998dce]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-cb998dce]{flex-grow:1}.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-cb998dce] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-cb998dce] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-b89b6307]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-b89b6307]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-5774f702]{margin-top:64px}.edit-info[data-v-5774f702]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-5774f702]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-5774f702]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.edit-link-button[data-v-5774f702]:hover{color:var(--vp-c-brand-dark)}.edit-link-icon[data-v-5774f702]{margin-right:8px;width:14px;height:14px;fill:currentColor}.prev-next[data-v-5774f702]{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-5774f702]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-5774f702]{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-5774f702]:hover{border-color:var(--vp-c-brand)}.pager-link.next[data-v-5774f702]{margin-left:auto;text-align:right}.desc[data-v-5774f702]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-5774f702]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:color .25s}.VPDocOutlineDropdown[data-v-0bc40447]{margin-bottom:48px}.VPDocOutlineDropdown button[data-v-0bc40447]{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-mute);border-radius:8px;transition:color .5s}.VPDocOutlineDropdown button[data-v-0bc40447]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPDocOutlineDropdown button.open[data-v-0bc40447]{color:var(--vp-c-text-1)}.icon[data-v-0bc40447]{display:inline-block;vertical-align:middle;width:16px;height:16px;fill:currentColor}[data-v-0bc40447] .outline-link{font-size:14px;font-weight:400}.open>.icon[data-v-0bc40447]{transform:rotate(90deg)}.items[data-v-0bc40447]{margin-top:12px;border-left:1px solid var(--vp-c-divider)}.VPDoc[data-v-a3c25e27]{padding:32px 24px 96px;width:100%}.VPDoc .VPDocOutlineDropdown[data-v-a3c25e27]{display:none}@media (min-width: 960px) and (max-width: 1279px){.VPDoc .VPDocOutlineDropdown[data-v-a3c25e27]{display:block}}@media (min-width: 768px){.VPDoc[data-v-a3c25e27]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-a3c25e27]{padding:32px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-a3c25e27]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-a3c25e27]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-a3c25e27]{display:flex;justify-content:center}.VPDoc .aside[data-v-a3c25e27]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-a3c25e27]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-a3c25e27]{max-width:1104px}}.container[data-v-a3c25e27]{margin:0 auto;width:100%}.aside[data-v-a3c25e27]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-a3c25e27]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-a3c25e27]{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-a3c25e27]::-webkit-scrollbar{display:none}.aside-curtain[data-v-a3c25e27]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-a3c25e27]{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-a3c25e27]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-a3c25e27]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-a3c25e27]{order:1;margin:0;min-width:640px}}.content-container[data-v-a3c25e27]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-a3c25e27]{max-width:688px}.external-link-icon-enabled[data-v-a3c25e27] :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}@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-gray: #8e8e93;--vp-c-text-light-1: rgba(60, 60, 67);--vp-c-text-light-2: rgba(60, 60, 67, .75);--vp-c-text-light-3: rgba(60, 60, 67, .33);--vp-c-text-dark-1: rgba(255, 255, 245, .86);--vp-c-text-dark-2: rgba(235, 235, 245, .6);--vp-c-text-dark-3: rgba(235, 235, 245, .38);--vp-c-sponsor: #db2777}:root{--vp-c-bg: #ffffff;--vp-c-bg-elv: #ffffff;--vp-c-bg-elv-up: #ffffff;--vp-c-bg-elv-down: #f6f6f7;--vp-c-bg-elv-mute: #f6f6f7;--vp-c-bg-soft: #f6f6f7;--vp-c-bg-soft-up: #f9f9fa;--vp-c-bg-soft-down: #e3e3e5;--vp-c-bg-soft-mute: #e3e3e5;--vp-c-bg-alt: #f6f6f7;--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white);--vp-c-text-1: var(--vp-c-text-light-1);--vp-c-text-2: var(--vp-c-text-light-2);--vp-c-text-3: var(--vp-c-text-light-3);--vp-c-text-inverse-1: var(--vp-c-text-dark-1);--vp-c-text-inverse-2: var(--vp-c-text-dark-2);--vp-c-text-inverse-3: var(--vp-c-text-dark-3);--vp-c-text-code: #476582;--vp-c-mute: #eeeef0;--vp-c-mute-light: #f3f3f9;--vp-c-mute-lighter: #f9f9fa;--vp-c-mute-dark: #e3e3e5;--vp-c-mute-darker: #d7d7d9;--vp-c-brand: #4565d8;--vp-c-brand-light: #708fff;--vp-c-brand-lighter: #a4b2ff;--vp-c-brand-lightest: #ecefff;--vp-c-brand-dark: #4565d8;--vp-c-brand-darker: #23459f;--vp-c-brand-darkest: #132f59;--vp-c-brand-dimm-1: rgba(112, 143, 255, .05);--vp-c-brand-dimm-2: rgba(112, 143, 255, .2);--vp-c-brand-dimm-3: rgba(112, 143, 255, .5);--vp-c-green: #10b981;--vp-c-green-light: #34d399;--vp-c-green-lighter: #6ee7b7;--vp-c-green-dark: #059669;--vp-c-green-darker: #047857;--vp-c-green-dimm-1: rgba(16, 185, 129, .05);--vp-c-green-dimm-2: rgba(16, 185, 129, .2);--vp-c-green-dimm-3: rgba(16, 185, 129, .5);--vp-c-yellow: #d97706;--vp-c-yellow-light: #f59e0b;--vp-c-yellow-lighter: #fbbf24;--vp-c-yellow-lightest: #fcd34d;--vp-c-yellow-dark: #b45309;--vp-c-yellow-darker: #92400e;--vp-c-yellow-darkest: #6c3d08;--vp-c-yellow-dimm-1: rgba(234, 179, 8, .05);--vp-c-yellow-dimm-2: rgba(234, 179, 8, .2);--vp-c-yellow-dimm-3: rgba(234, 179, 8, .5);--vp-c-red: #f43f5e;--vp-c-red-light: #fb7185;--vp-c-red-lighter: #fda4af;--vp-c-red-lightest: #fdd6e0;--vp-c-red-dark: #e11d48;--vp-c-red-darker: #be123c;--vp-c-red-darkest: #9f1239;--vp-c-red-dimm-1: rgba(244, 63, 94, .05);--vp-c-red-dimm-2: rgba(244, 63, 94, .2);--vp-c-red-dimm-3: rgba(244, 63, 94, .5)}.dark{--vp-c-bg: #1e1e20;--vp-c-bg-elv: #252529;--vp-c-bg-elv-up: #323238;--vp-c-bg-elv-down: #1e1e20;--vp-c-bg-elv-mute: #323238;--vp-c-bg-soft: #252529;--vp-c-bg-soft-up: #323238;--vp-c-bg-soft-down: #1e1e20;--vp-c-bg-soft-mute: #323238;--vp-c-bg-alt: #161618;--vp-c-border: rgba(82, 82, 89, .68);--vp-c-divider: rgba(82, 82, 89, .32);--vp-c-gutter: #000000;--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black);--vp-c-text-1: var(--vp-c-text-dark-1);--vp-c-text-2: var(--vp-c-text-dark-2);--vp-c-text-3: var(--vp-c-text-dark-3);--vp-c-text-inverse-1: var(--vp-c-text-light-1);--vp-c-text-inverse-2: var(--vp-c-text-light-2);--vp-c-text-inverse-3: var(--vp-c-text-light-3);--vp-c-text-code: #c9def1;--vp-c-mute: #323238;--vp-c-mute-light: #3a3a3c;--vp-c-mute-lighter: #505053;--vp-c-mute-dark: #222226;--vp-c-mute-darker: #505053;--vp-c-brand: #708fff;--vp-c-brand-light: #a4b2ff;--vp-c-brand-lighter: #a4c8ff;--vp-c-brand-lightest: #ecefff;--vp-c-brand-dark: #4565d8;--vp-c-brand-darker: #23459f;--vp-c-brand-darkest: #132f59;--vp-c-brand-dimm-1: rgba(112, 143, 255, .05);--vp-c-brand-dimm-2: rgba(112, 143, 255, .2);--vp-c-brand-dimm-3: rgba(112, 143, 255, .5);--vp-c-green: #10b981;--vp-c-green-light: #34d399;--vp-c-green-lighter: #6ee7b7;--vp-c-green-lightest: #a7f3d0;--vp-c-green-dark: #059669;--vp-c-green-darker: #047857;--vp-c-green-darkest: #065f46;--vp-c-green-dimm-1: rgba(16, 185, 129, .05);--vp-c-green-dimm-2: rgba(16, 185, 129, .2);--vp-c-green-dimm-3: rgba(16, 185, 129, .5);--vp-c-yellow: #d1a336;--vp-c-yellow-light: #f8e3a1;--vp-c-yellow-lighter: #fff0c0;--vp-c-yellow-lightest: #fff7dc;--vp-c-yellow-dark: #b45309;--vp-c-yellow-darker: #92400e;--vp-c-yellow-darkest: #6c3d08;--vp-c-yellow-dimm-1: rgba(234, 179, 8, .05);--vp-c-yellow-dimm-2: rgba(234, 179, 8, .2);--vp-c-yellow-dimm-3: rgba(234, 179, 8, .5);--vp-c-red: #f43f5e;--vp-c-red-light: #fb7185;--vp-c-red-lighter: #fda4af;--vp-c-red-lightest: #fdd6e0;--vp-c-red-dark: #e11d48;--vp-c-red-darker: #be123c;--vp-c-red-darkest: #9f1239;--vp-c-red-dimm-1: rgba(244, 63, 94, .05);--vp-c-red-dimm-2: rgba(244, 63, 94, .2);--vp-c-red-dimm-3: rgba(244, 63, 94, .5)}: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-local-nav: 10;--vp-z-index-nav: 20;--vp-z-index-layout-top: 30;--vp-z-index-backdrop: 40;--vp-z-index-sidebar: 50;--vp-z-index-footer: 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-c-code-dimm: var(--vp-c-text-dark-3);--vp-code-block-color: var(--vp-c-text-dark-1);--vp-code-block-bg: #161618;--vp-code-block-bg-light: #1e1e20;--vp-code-block-divider-color: #000000;--vp-code-line-highlight-color: rgba(0, 0, 0, .5);--vp-code-line-number-color: var(--vp-c-code-dimm);--vp-code-line-diff-add-color: var(--vp-c-green-dimm-2);--vp-code-line-diff-add-symbol-color: var(--vp-c-green);--vp-code-line-diff-remove-color: var(--vp-c-red-dimm-2);--vp-code-line-diff-remove-symbol-color: var(--vp-c-red);--vp-code-line-warning-color: var(--vp-c-yellow-dimm-2);--vp-code-line-error-color: var(--vp-c-red-dimm-2);--vp-code-copy-code-border-color: transparent;--vp-code-copy-code-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-code-block-bg-light);--vp-code-copy-code-active-text: var(--vp-c-text-dark-2);--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-dark-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-text-color: var(--vp-c-text-dark-1);--vp-code-tab-active-bar-color: var(--vp-c-brand)}.dark{--vp-code-block-bg: #161618}:root:not(.dark) .vp-adaptive-theme{--vp-c-code-dimm: var(--vp-c-text-2);--vp-code-block-color: var(--vp-c-text-1);--vp-code-block-bg: #f8f8f8;--vp-code-block-divider-color: var(--vp-c-divider);--vp-code-line-highlight-color: #ececec;--vp-code-line-number-color: var(--vp-c-code-dimm);--vp-code-copy-code-bg: #e2e2e2;--vp-code-copy-code-hover-bg: #dcdcdc;--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-tab-divider: var(--vp-c-divider);--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)}:root{--vp-button-brand-border: var(--vp-c-brand);--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-dark);--vp-button-brand-hover-border: var(--vp-c-brand-light);--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-darker);--vp-button-brand-active-border: var(--vp-c-brand-light);--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-darkest);--vp-button-alt-border: var(--vp-c-border);--vp-button-alt-text: var(--vp-c-neutral);--vp-button-alt-bg: var(--vp-c-mute);--vp-button-alt-hover-border: var(--vp-c-border);--vp-button-alt-hover-text: var(--vp-c-neutral);--vp-button-alt-hover-bg: var(--vp-c-mute-dark);--vp-button-alt-active-border: var(--vp-c-border);--vp-button-alt-active-text: var(--vp-c-neutral);--vp-button-alt-active-bg: var(--vp-c-mute-darker);--vp-button-sponsor-border: var(--vp-c-gray-light-3);--vp-button-sponsor-text: var(--vp-c-text-light-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}.dark{--vp-button-sponsor-border: var(--vp-c-gray-dark-1);--vp-button-sponsor-text: var(--vp-c-text-dark-2)}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: var(--vp-c-border);--vp-custom-block-info-text: var(--vp-c-text-2);--vp-custom-block-info-bg: var(--vp-c-bg-soft);--vp-custom-block-info-code-bg: var(--vp-c-mute);--vp-custom-block-tip-border: var(--vp-c-brand);--vp-custom-block-tip-text: var(--vp-c-brand);--vp-custom-block-tip-bg: var(--vp-c-bg-soft);--vp-custom-block-tip-code-bg: var(--vp-c-mute);--vp-custom-block-warning-border: var(--vp-c-yellow);--vp-custom-block-warning-text: var(--vp-c-yellow);--vp-custom-block-warning-bg: var(--vp-c-bg-soft);--vp-custom-block-warning-code-bg: var(--vp-c-mute);--vp-custom-block-danger-border: var(--vp-c-red);--vp-custom-block-danger-text: var(--vp-c-red);--vp-custom-block-danger-bg: var(--vp-c-bg-soft);--vp-custom-block-danger-code-bg: var(--vp-c-mute);--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-details-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-hover-border-color: var(--vp-c-gray);--vp-input-switch-bg-color: var(--vp-c-mute)}: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}: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);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: var(--vp-c-border);--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-mute);--vp-badge-tip-border: var(--vp-c-brand);--vp-badge-tip-text: var(--vp-c-brand);--vp-badge-tip-bg: var(--vp-c-brand-dimm-1);--vp-badge-warning-border: var(--vp-c-yellow);--vp-badge-warning-text: var(--vp-c-yellow);--vp-badge-warning-bg: var(--vp-c-yellow-dimm-1);--vp-badge-danger-border: var(--vp-c-red);--vp-badge-danger-text: var(--vp-c-red);--vp-badge-danger-bg: var(--vp-c-red-dimm-1)}: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);--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);--vp-local-search-highlight-bg: var(--vp-c-green-lighter);--vp-local-search-highlight-text: var(--vp-c-black)}*,: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}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.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 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 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 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 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 dotted;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)}.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:1px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;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)}.vp-doc a:hover{text-decoration:underline dotted;text-underline-offset:2px}.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 a{color:inherit;font-weight:600}.vp-doc .custom-block code{font-size:var(--vp-custom-block-code-font-size);font-weight:700;color:inherit}.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)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;color:var(--vp-c-text-code);background-color:var(--vp-c-mute);transition:color .5s,background-color .5s}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code{font-size:.9em}.vp-doc a>code{color:var(--vp-c-brand)}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;left:-65px;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;width:64px;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:"Copied"}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;color:var(--vp-c-code-dimm);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-bg-soft-down)}.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-7a7936a3]{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:600;transform:translateY(-2px)}.vp-doc h1>.VPBadge[data-v-7a7936a3]{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge[data-v-7a7936a3]{margin-top:3px;line-height:20px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge[data-v-7a7936a3]{line-height:20px;vertical-align:middle}.vp-doc h4>.VPBadge[data-v-7a7936a3],.vp-doc h5>.VPBadge[data-v-7a7936a3],.vp-doc h6>.VPBadge[data-v-7a7936a3]{vertical-align:middle;line-height:18px}.VPBadge.info[data-v-7a7936a3]{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip[data-v-7a7936a3]{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning[data-v-7a7936a3]{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger[data-v-7a7936a3]{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-54a304ca]{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-54a304ca],.VPBackdrop.fade-leave-to[data-v-54a304ca]{opacity:0}.VPBackdrop.fade-leave-active[data-v-54a304ca]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-54a304ca]{display:none}}.NotFound[data-v-1bc323a9]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-1bc323a9]{padding:96px 32px 168px}}.code[data-v-1bc323a9]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-1bc323a9]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-1bc323a9]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-1bc323a9]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-1bc323a9]{padding-top:20px}.link[data-v-1bc323a9]{display:inline-block;border:1px solid var(--vp-c-brand);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand);transition:border-color .25s,color .25s}.link[data-v-1bc323a9]:hover{border-color:var(--vp-c-brand-dark);color:var(--vp-c-brand-dark)}.VPButton[data-v-fa1633a1]{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-fa1633a1]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-fa1633a1]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-fa1633a1]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-fa1633a1]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-fa1633a1]: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-fa1633a1]: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-fa1633a1]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-fa1633a1]: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-fa1633a1]: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-fa1633a1]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-fa1633a1]: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-fa1633a1]: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-ab19afbb]{display:none}.dark .VPImage.light[data-v-ab19afbb]{display:none}.VPHero[data-v-5a3e9999]{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-5a3e9999]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-5a3e9999]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-5a3e9999]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-5a3e9999]{flex-direction:row}}.main[data-v-5a3e9999]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-5a3e9999]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-5a3e9999]{text-align:left}}@media (min-width: 960px){.main[data-v-5a3e9999]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-5a3e9999]{max-width:592px}}.name[data-v-5a3e9999],.text[data-v-5a3e9999]{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-5a3e9999],.VPHero.has-image .text[data-v-5a3e9999]{margin:0 auto}.name[data-v-5a3e9999]{color:var(--vp-home-hero-name-color)}.clip[data-v-5a3e9999]{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-5a3e9999],.text[data-v-5a3e9999]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-5a3e9999],.text[data-v-5a3e9999]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-5a3e9999],.VPHero.has-image .text[data-v-5a3e9999]{margin:0}}.tagline[data-v-5a3e9999]{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-5a3e9999]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-5a3e9999]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-5a3e9999]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-5a3e9999]{margin:0}}.actions[data-v-5a3e9999]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-5a3e9999]{justify-content:center}@media (min-width: 640px){.actions[data-v-5a3e9999]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-5a3e9999]{justify-content:flex-start}}.action[data-v-5a3e9999]{flex-shrink:0;padding:6px}.image[data-v-5a3e9999]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-5a3e9999]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-5a3e9999]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-5a3e9999]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-5a3e9999]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-5a3e9999]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-5a3e9999]{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-5a3e9999]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-5a3e9999]{width:320px;height:320px}}[data-v-5a3e9999] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-5a3e9999] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-5a3e9999] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-aeb6d69c]{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-aeb6d69c]:hover{border-color:var(--vp-c-brand);background-color:var(--vp-c-bg-soft-up)}.box[data-v-aeb6d69c]{display:flex;flex-direction:column;padding:24px;height:100%}.VPFeature[data-v-aeb6d69c] .VPImage{margin-bottom:20px}.icon[data-v-aeb6d69c]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-bg-soft-down);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-aeb6d69c]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-aeb6d69c]{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-aeb6d69c]{padding-top:8px}.link-text-value[data-v-aeb6d69c]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand)}.link-text-icon[data-v-aeb6d69c]{display:inline-block;margin-left:6px;width:14px;height:14px;fill:currentColor}.VPFeatures[data-v-7e232fde]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-7e232fde]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-7e232fde]{padding:0 64px}}.container[data-v-7e232fde]{margin:0 auto;max-width:1152px}.items[data-v-7e232fde]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-7e232fde]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-7e232fde],.item.grid-4[data-v-7e232fde],.item.grid-6[data-v-7e232fde]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-7e232fde],.item.grid-4[data-v-7e232fde]{width:50%}.item.grid-3[data-v-7e232fde],.item.grid-6[data-v-7e232fde]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-7e232fde]{width:25%}}.VPHome[data-v-20eabd3a]{padding-bottom:96px}.VPHome[data-v-20eabd3a] .VPHomeSponsors{margin-top:112px;margin-bottom:-128px}@media (min-width: 768px){.VPHome[data-v-20eabd3a]{padding-bottom:128px}}.VPContent[data-v-3cf691b6]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-3cf691b6]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-3cf691b6]{margin:0}@media (min-width: 960px){.VPContent[data-v-3cf691b6]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-3cf691b6]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-3cf691b6]{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-e4279f1c]{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-e4279f1c]{display:none}@media (min-width: 768px){.VPFooter[data-v-e4279f1c]{padding:32px}}.container[data-v-e4279f1c]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-e4279f1c],.copyright[data-v-e4279f1c]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-e8ae7d87]{padding:12px 20px 11px}.VPLocalNavOutlineDropdown button[data-v-e8ae7d87]{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-e8ae7d87]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-e8ae7d87]{color:var(--vp-c-text-1)}.icon[data-v-e8ae7d87]{display:inline-block;vertical-align:middle;margin-left:2px;width:14px;height:14px;fill:currentColor}[data-v-e8ae7d87] .outline-link{font-size:14px;padding:2px 0}.open>.icon[data-v-e8ae7d87]{transform:rotate(90deg)}.items[data-v-e8ae7d87]{position:absolute;top:64px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}.header[data-v-e8ae7d87]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-e8ae7d87]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand)}.outline[data-v-e8ae7d87]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-e8ae7d87]{transition:all .2s ease-out}.flyout-leave-active[data-v-e8ae7d87]{transition:all .15s ease-in}.flyout-enter-from[data-v-e8ae7d87],.flyout-leave-to[data-v-e8ae7d87]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-693d654a]{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-693d654a]{position:fixed}.VPLocalNav.reached-top[data-v-693d654a]{border-top-color:transparent}@media (min-width: 960px){.VPLocalNav[data-v-693d654a]{display:none}}.menu[data-v-693d654a]{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-693d654a]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-693d654a]{padding:0 32px}}.menu-icon[data-v-693d654a]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPOutlineDropdown[data-v-693d654a]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-693d654a]{padding:12px 32px 11px}}.VPSwitch[data-v-92d8f6fb]{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}.VPSwitch[data-v-92d8f6fb]:hover{border-color:var(--vp-input-hover-border-color)}.check[data-v-92d8f6fb]{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}.icon[data-v-92d8f6fb]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-92d8f6fb] svg{position:absolute;top:3px;left:3px;width:12px;height:12px;fill:var(--vp-c-text-2)}.dark .icon[data-v-92d8f6fb] svg{fill:var(--vp-c-text-1);transition:opacity .25s}.sun[data-v-a99ed743]{opacity:1}.moon[data-v-a99ed743],.dark .sun[data-v-a99ed743]{opacity:0}.dark .moon[data-v-a99ed743]{opacity:1}.dark .VPSwitchAppearance[data-v-a99ed743] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-5e9f0637]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-5e9f0637]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-2a4d50e5]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-2a4d50e5]{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-2a4d50e5]:hover{color:var(--vp-c-brand);background-color:var(--vp-c-bg-elv-mute)}.link.active[data-v-2a4d50e5]{color:var(--vp-c-brand)}.VPMenuGroup[data-v-a6b0397c]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-a6b0397c]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-a6b0397c]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-a6b0397c]{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-e42ed9b3]{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-e42ed9b3] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-e42ed9b3] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-e42ed9b3] .group:last-child{padding-bottom:0}.VPMenu[data-v-e42ed9b3] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-e42ed9b3] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-e42ed9b3] .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-e42ed9b3] .action{padding-left:24px}.VPFlyout[data-v-6b19ffdd]{position:relative}.VPFlyout[data-v-6b19ffdd]:hover{color:var(--vp-c-brand);transition:color .25s}.VPFlyout:hover .text[data-v-6b19ffdd]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-6b19ffdd]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-6b19ffdd]{color:var(--vp-c-brand)}.VPFlyout.active:hover .text[data-v-6b19ffdd]{color:var(--vp-c-brand-dark)}.VPFlyout:hover .menu[data-v-6b19ffdd],.button[aria-expanded=true]+.menu[data-v-6b19ffdd]{opacity:1;visibility:visible;transform:translateY(0)}.button[aria-expanded=false]+.menu[data-v-6b19ffdd]{opacity:0;visibility:hidden;transform:translateY(0)}.button[data-v-6b19ffdd]{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-6b19ffdd]{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-6b19ffdd]{margin-right:0;width:16px;height:16px;fill:currentColor}.text-icon[data-v-6b19ffdd]{margin-left:4px;width:14px;height:14px;fill:currentColor}.icon[data-v-6b19ffdd]{width:20px;height:20px;fill:currentColor;transition:fill .25s}.menu[data-v-6b19ffdd]{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-16cf740a]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-16cf740a]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-16cf740a]>svg{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-e71e869c]{display:flex;justify-content:center}.VPNavBarExtra[data-v-c8c2ae4b]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-c8c2ae4b]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-c8c2ae4b]{display:none}}.trans-title[data-v-c8c2ae4b]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-c8c2ae4b],.item.social-links[data-v-c8c2ae4b]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-c8c2ae4b]{min-width:176px}.appearance-action[data-v-c8c2ae4b]{margin-right:-2px}.social-links-list[data-v-c8c2ae4b]{margin:-4px -8px}.VPNavBarHamburger[data-v-6bee1efd]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-6bee1efd]{display:none}}.container[data-v-6bee1efd]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-6bee1efd]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-6bee1efd]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-6bee1efd]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-6bee1efd],.VPNavBarHamburger.active:hover .middle[data-v-6bee1efd],.VPNavBarHamburger.active:hover .bottom[data-v-6bee1efd]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-6bee1efd],.middle[data-v-6bee1efd],.bottom[data-v-6bee1efd]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-6bee1efd]{top:0;left:0;transform:translate(0)}.middle[data-v-6bee1efd]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-6bee1efd]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-e5ab8091]{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-e5ab8091],.VPNavBarMenuLink[data-v-e5ab8091]:hover{color:var(--vp-c-brand)}.VPNavBarMenu[data-v-f732b5d0]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-f732b5d0]{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;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;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background: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;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;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.DocSearch{--docsearch-primary-color: var(--vp-c-brand);--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 .DocSearch{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-bg-soft-mute);--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);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:1px;letter-spacing:-12px;color:transparent}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:var(--vp-meta-key);font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.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);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-bg-soft-mute)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-ef6192dc]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-ef6192dc]{display:flex;align-items:center}}.title[data-v-f9bd3b79]{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-f9bd3b79]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-f9bd3b79]{border-bottom-color:var(--vp-c-divider)}}[data-v-f9bd3b79] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-ff4524ae]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-ff4524ae]{display:flex;align-items:center}}.title[data-v-ff4524ae]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-c8ceaf10]{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-c8ceaf10]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar[data-v-c8ceaf10]{padding:0}.VPNavBar[data-v-c8ceaf10]:not(.has-sidebar):not(.top){border-bottom-color:var(--vp-c-gutter);background-color:var(--vp-nav-bg-color)}}.container[data-v-c8ceaf10]{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-c8ceaf10],.container>.content[data-v-c8ceaf10]{pointer-events:none}.container[data-v-c8ceaf10] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-c8ceaf10]{max-width:100%}}.title[data-v-c8ceaf10]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-c8ceaf10]{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-c8ceaf10]{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-c8ceaf10]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-c8ceaf10]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-c8ceaf10]{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-c8ceaf10]{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-c8ceaf10]{position:relative;background-color:var(--vp-nav-bg-color)}}@media (max-width: 767px){.content-body[data-v-c8ceaf10]{column-gap:.5rem}}.menu+.translations[data-v-c8ceaf10]:before,.menu+.appearance[data-v-c8ceaf10]:before,.menu+.social-links[data-v-c8ceaf10]:before,.translations+.appearance[data-v-c8ceaf10]:before,.appearance+.social-links[data-v-c8ceaf10]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-c8ceaf10]:before,.translations+.appearance[data-v-c8ceaf10]:before{margin-right:16px}.appearance+.social-links[data-v-c8ceaf10]:before{margin-left:16px}.social-links[data-v-c8ceaf10]{margin-right:-8px}@media (min-width: 960px){.VPNavBar.has-sidebar .curtain[data-v-c8ceaf10]{position:absolute;right:0;bottom:-31px;width:calc(100% - var(--vp-sidebar-width));height:32px}.VPNavBar.has-sidebar .curtain[data-v-c8ceaf10]: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-c8ceaf10]{width:calc(100% - ((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width)))}}.VPNavScreenMenuLink[data-v-08b49756]{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-08b49756]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupLink[data-v-97083fb3]{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-97083fb3]:hover{color:var(--vp-c-brand)}.VPNavScreenMenuGroupSection[data-v-f60dbfa7]{display:block}.title[data-v-f60dbfa7]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-10e00a88]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-10e00a88]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-10e00a88]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-10e00a88]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-10e00a88]{padding-bottom:6px;color:var(--vp-c-brand)}.VPNavScreenMenuGroup.open .button-icon[data-v-10e00a88]{transform:rotate(45deg)}.button[data-v-10e00a88]{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-10e00a88]:hover{color:var(--vp-c-brand)}.button-icon[data-v-10e00a88]{width:14px;height:14px;fill:var(--vp-c-text-2);transition:fill .5s,transform .25s}.group[data-v-10e00a88]:first-child{padding-top:0}.group+.group[data-v-10e00a88],.group+.item[data-v-10e00a88]{padding-top:4px}.VPNavScreenAppearance[data-v-0dc5cf49]{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-0dc5cf49]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenTranslations[data-v-41505286]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-41505286]{height:auto}.title[data-v-41505286]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-41505286]{width:16px;height:16px;fill:currentColor}.icon.lang[data-v-41505286]{margin-right:8px}.icon.chevron[data-v-41505286]{margin-left:4px}.list[data-v-41505286]{padding:4px 0 0 24px}.link[data-v-41505286]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-dc785598]{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-dc785598],.VPNavScreen.fade-leave-active[data-v-dc785598]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-dc785598],.VPNavScreen.fade-leave-active .container[data-v-dc785598]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-dc785598],.VPNavScreen.fade-leave-to[data-v-dc785598]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-dc785598],.VPNavScreen.fade-leave-to .container[data-v-dc785598]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-dc785598]{display:none}}.container[data-v-dc785598]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-dc785598],.menu+.appearance[data-v-dc785598],.translations+.appearance[data-v-dc785598]{margin-top:24px}.menu+.social-links[data-v-dc785598]{margin-top:16px}.appearance+.social-links[data-v-dc785598]{margin-top:16px}.VPNav[data-v-5bdc5df3]{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-5bdc5df3]{position:fixed}}.VPSidebarItem.level-0[data-v-c356ab37]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-c356ab37]{padding-bottom:10px}.item[data-v-c356ab37]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-c356ab37]{cursor:pointer}.indicator[data-v-c356ab37]{position:absolute;top:6px;bottom:6px;left:-17px;width:1px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-c356ab37],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-c356ab37],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-c356ab37],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-c356ab37]{background-color:var(--vp-c-brand)}.link[data-v-c356ab37]{display:flex;align-items:center;flex-grow:1}.text[data-v-c356ab37]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-c356ab37]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-c356ab37],.VPSidebarItem.level-2 .text[data-v-c356ab37],.VPSidebarItem.level-3 .text[data-v-c356ab37],.VPSidebarItem.level-4 .text[data-v-c356ab37],.VPSidebarItem.level-5 .text[data-v-c356ab37]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-c356ab37],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-c356ab37]{color:var(--vp-c-brand)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-1.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-2.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-3.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-4.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-5.has-active>.item>.text[data-v-c356ab37],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-c356ab37],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-c356ab37]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-c356ab37],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-c356ab37]{color:var(--vp-c-brand)}.caret[data-v-c356ab37]{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-c356ab37]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-c356ab37]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-c356ab37]{width:18px;height:18px;fill:currentColor;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-c356ab37]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-c356ab37],.VPSidebarItem.level-2 .items[data-v-c356ab37],.VPSidebarItem.level-3 .items[data-v-c356ab37],.VPSidebarItem.level-4 .items[data-v-c356ab37],.VPSidebarItem.level-5 .items[data-v-c356ab37]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-c356ab37]{display:none}.VPSidebar[data-v-b04a928c]{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-b04a928c]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-b04a928c]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-b04a928c]{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-b04a928c]{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-b04a928c]{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-b04a928c]{outline:0}.group+.group[data-v-b04a928c]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-b04a928c]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSkipLink[data-v-9c8615dd]{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);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-9c8615dd]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-9c8615dd]{top:14px;left:16px}}.Layout[data-v-324e8308]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-978bd032]{border-top:1px solid var(--vp-c-gutter);padding:88px 24px 96px;background-color:var(--vp-c-bg)}.container[data-v-978bd032]{margin:0 auto;max-width:1152px}.love[data-v-978bd032]{margin:0 auto;width:28px;height:28px;color:var(--vp-c-text-3)}.icon[data-v-978bd032]{width:28px;height:28px;fill:currentColor}.message[data-v-978bd032]{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-978bd032]{padding-top:32px}.action[data-v-978bd032]{padding-top:40px;text-align:center}.VPTeamPage[data-v-b1cfd8dc]{padding-bottom:96px}@media (min-width: 768px){.VPTeamPage[data-v-b1cfd8dc]{padding-bottom:128px}}.VPTeamPageSection+.VPTeamPageSection[data-v-b1cfd8dc-s],.VPTeamMembers+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-b1cfd8dc-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-b1cfd8dc-s],.VPTeamMembers+.VPTeamPageSection[data-v-b1cfd8dc-s]{margin-top:96px}}.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-b1cfd8dc-s]{padding:0 64px}}.VPTeamPageTitle[data-v-46c5e327]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-46c5e327]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-46c5e327]{padding:80px 64px 48px}}.title[data-v-46c5e327]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-46c5e327]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-46c5e327]{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-46c5e327]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-3bf2e850]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-3bf2e850]{padding:0 64px}}.title[data-v-3bf2e850]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-3bf2e850]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-3bf2e850]{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-3bf2e850]{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-3bf2e850]{padding-top:40px}.VPTeamMembersItem[data-v-b0e83e62]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-b0e83e62]{padding:32px}.VPTeamMembersItem.small .data[data-v-b0e83e62]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-b0e83e62]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-b0e83e62]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-b0e83e62]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-b0e83e62]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-b0e83e62]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-b0e83e62]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-b0e83e62]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-b0e83e62]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-b0e83e62]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-b0e83e62]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-b0e83e62]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-b0e83e62]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-b0e83e62]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-b0e83e62]{text-align:center}.avatar[data-v-b0e83e62]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-b0e83e62]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-b0e83e62]{margin:0;font-weight:600}.affiliation[data-v-b0e83e62]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-b0e83e62]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-b0e83e62]:hover{color:var(--vp-c-brand)}.desc[data-v-b0e83e62]{margin:0 auto}.desc[data-v-b0e83e62] a{font-weight:500;color:var(--vp-c-brand);text-decoration-style:dotted;transition:color .25s}.links[data-v-b0e83e62]{display:flex;justify-content:center;height:56px}.sp-link[data-v-b0e83e62]{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-b0e83e62]:hover,.sp .sp-link.link[data-v-b0e83e62]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-b0e83e62]{margin-right:8px;width:16px;height:16px;fill:currentColor}.VPTeamMembers.small .container[data-v-6927e48e]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-6927e48e]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-6927e48e]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-6927e48e]{max-width:876px}.VPTeamMembers.medium .container[data-v-6927e48e]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-6927e48e]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-6927e48e]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-6927e48e]{max-width:760px}.container[data-v-6927e48e]{display:grid;gap:24px;margin:0 auto;max-width:1152px}.adapter-table{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:1rem 1rem}.adapter-table a.adapter{display:flex;align-items:center;justify-content:center;width:100%;height:4rem;border-radius:12px;background-color:var(--vp-c-bg-soft);transition:all .3s ease;text-decoration:none;color:var(--vp-c-text);cursor:pointer;-webkit-user-select:none;user-select:none}.adapter-table .adapter:hover{background-color:var(--vp-c-bg-alt)}.el-scrollbar{--el-text-color-secondary: #909399;--el-scrollbar-opacity: .3;--el-scrollbar-bg-color: var(--el-text-color-secondary);--el-scrollbar-hover-opacity: .5;--el-scrollbar-hover-bg-color: var(--el-text-color-secondary);--el-transition-duration: .3s}.el-scrollbar{overflow:hidden;position:relative;height:100%}.el-scrollbar__wrap{overflow:auto;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color, var(--el-text-color-secondary));transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity, .3)}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color, var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity, .5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.badge[data-v-247eb287]{display:inline-block;font-size:14px;height:20px;line-height:16px;border-radius:3px;padding:2px 6px;color:var(--vp-badge-text);vertical-align:baseline}.badge.tip[data-v-247eb287]{background-color:var(--vp-badge-tip-bg)}.badge.warning[data-v-247eb287]{background-color:var(--vp-badge-warning-bg)}.badge.danger[data-v-247eb287]{background-color:var(--vp-badge-danger-bg)}h1 .badge[data-v-247eb287],h2 .badge[data-v-247eb287],h3 .badge[data-v-247eb287],h4 .badge[data-v-247eb287],h5 .badge[data-v-247eb287],h6 .badge[data-v-247eb287]{vertical-align:top}.badge+.badge[data-v-247eb287]{margin-left:5px}.spoiler[data-v-a373c1e6]{border-radius:4px;padding:1px 3px;margin:0 3px;text-shadow:none;transition:color .2s linear;background-color:var(--vp-custom-block-tip-text)}.spoiler[data-v-a373c1e6]:hover{color:var(--vp-c-bg)}.chat-message{position:relative;margin:1rem 0;opacity:0;transform:translate(-20%);transition:transform .3s ease-out,opacity .3s ease}.chat-message.shown{opacity:1;transform:translate(0)}.chat-message .avatar{width:2.8rem;height:2.8rem;position:absolute;border-radius:100%;transform:translateY(-1px);-webkit-user-select:none;user-select:none;pointer-events:none;text-align:center;line-height:2.8rem;font-size:1.6rem;color:#fff;font-family:Comic Sans MS}.chat-message .nickname{-webkit-user-select:none;user-select:none;position:relative;margin:0 0 .4rem 4.2rem;font-weight:700;font-size:.9rem}.chat-message:not(.no-padding) .message-box{padding:.5rem .7rem}.chat-message .message-box{position:relative;margin-left:4.2rem;width:fit-content;border-radius:.5rem;background-color:var(--vp-c-bg);word-break:break-all;line-height:26px!important}.chat-message .message-box>img{border-radius:.5rem}.chat-message .message-box img{vertical-align:middle}.chat-message .message-box p>img{margin:.2rem 0}.chat-message .message-box:before{content:"";position:absolute;right:100%;top:0;width:12px;height:12px;border:0 solid transparent;border-bottom-width:8px;border-bottom-color:currentColor;border-radius:0 0 0 32px;color:var(--vp-c-bg)}.chat-message .message-box p{margin:0!important;line-height:26px!important}.chat-message .message-box p.indent-1{padding-left:1rem}.chat-message .message-box p.indent-2{padding-left:2rem}.chat-message .message-box blockquote{font-size:.9rem;margin:0 0 .2rem;background-color:#f3f6f9;border:none;border-radius:.5rem;padding:.2rem .6rem;background-color:var(--vp-c-bg-alt);color:var(--vp-c-text-2)}.panel-view{position:relative;border-radius:6px;margin:1rem 0;overflow:auto hidden;background-color:var(--vp-c-bg-alt)}.panel-view.manager,.panel-view.container{background-color:#032f62}.panel-view .controls{display:initial;position:absolute;top:.8rem;width:100%}.panel-view .circle{position:absolute;top:2px;width:12px;height:12px;border-radius:6px}.panel-view .circle.red{left:17px;background-color:#ff5f56}.panel-view .circle.yellow{left:36px;background-color:#ffbd2e}.panel-view .circle.green{left:55px;background-color:#27c93f}.panel-view .title{text-align:center;width:100%;font-size:.9rem;line-height:1rem}.panel-view .title .tab{color:gray;cursor:pointer;transition:.3s ease}.panel-view .title .tab.active{color:#fff;cursor:default}.panel-view .title .title-text:not(:last-child):after{color:gray;content:" - "}.panel-view .title .tab+.tab:before{cursor:default;content:" | ";color:gray}.panel-view .content{padding:.2rem 1.2rem}.panel-view .content>p{font-size:.8rem;color:#909399;text-align:center}.panel-view.mini .controls{display:none}.panel-view:not(.mini) .content{padding-top:2rem}.tab-select{margin-top:16px}.tab-select .header span{display:inline-block;padding:4px 16px;font-size:12px;font-weight:500;cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--vp-c-text-2);background-color:var(--vp-code-block-bg);border-bottom:1px solid var(--vp-c-bg)}.tab-select .header span.active{color:var(--vp-c-text-1)}.tab-select .header span:first-child{border-top-left-radius:8px;border-bottom-left-radius:8px}.tab-select .header span:last-child{border-top-right-radius:8px;border-bottom-right-radius:8px}.tab-select .header span+span{border-left:1px solid var(--vp-c-bg)}@media (max-width: 639px){.tab-select.code .header{margin:0 -24px}}.tab-select.code .header span:first-child{border-bottom-left-radius:0}.tab-select.code .header span:last-child{border-bottom-right-radius:0}.tab-select.code .header+div{margin-top:0!important;border-top-left-radius:0!important}.tab-select.code .header+div span.lang{display:none}.VPSidebar{position:fixed!important;padding:0 32px;top:var(--vp-layout-top-height, 0px);bottom:0;left:0;z-index:var(--vp-z-index-sidebar);width:calc(100vw - 64px);max-width:320px;background-color:var(--vp-c-bg);opacity:0;box-shadow:var(--vp-c-shadow-3);overflow-x:hidden;overflow-y:auto;transform:translate(-100%);transition:opacity .5s,transform .25s ease}.vp-sidebar-view{padding:32px 0 64px;overflow-x:hidden}.VPSidebar.open{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar{z-index:1;width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-c-bg-alt);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}.vp-sidebar-view{padding-top:var(--vp-nav-height);padding-bottom:32px}}@media (min-width: 1440px){.VPSidebar{padding-left:max(32px,(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{margin-top:calc(var(--vp-nav-height) * -1);height:var(--vp-nav-height)}.el-scrollbar .VPSidebar{height:calc(100% - 64px);top:64px}}.vp-sidebar-nav{outline:0}.vp-sidebar-nav>.group+.group{margin-top:16px}.group+.group{border-top:1px solid var(--vp-c-divider);padding-top:16px}@media (min-width: 960px){.group{padding-top:16px;width:calc(var(--vp-sidebar-width) - 64px)}}.group .VPSidebarItem.level-0{padding-bottom:0}.group .VPSidebarItem.level-0>.item>.text{padding:0;margin:4px 0}.Layout[data-v-7f463d15]{display:flex;flex-direction:column;min-height:100vh}.VPContent[data-v-7f463d15]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.has-sidebar[data-v-7f463d15]{margin:0}@media (min-width: 960px){.VPContent[data-v-7f463d15]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-7f463d15]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-7f463d15]{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2);padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.VPSidebarItem.is-link{margin:4px 0}.VPSidebarItem .items{overflow:hidden}.VPSidebarItem .items:first-child .VPSidebarItem.is-link:first-child{padding-top:4px;padding-bottom:4px;line-height:24px;font-size:14px;margin:0}.VPSidebarItem .items:first-child .VPSidebarItem.is-link:first-child p.text{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem .items:first-child .VPSidebarItem.is-link:first-child.is-active p.text{color:var(--vp-c-brand)}.VPSidebarItem .item p.text{padding:0}@media (min-width: 1440px){.VPNavBar.has-sidebar .container .content{padding-right:0}.VPNavBar.has-sidebar .container .content .content-body{padding-right:calc((100vw - var(--vp-layout-max-width)) / 2 + 32px)}}@media (min-width: 960px){.VPNavBar.has-sidebar .title{background-color:var(--vp-sidebar-bg-color)}}:root{--shiki-token-text: #000000;--shiki-token-constant: #005CC5;--shiki-token-number: #005CC5;--shiki-token-string: #22863A;--shiki-token-comment: #6A737D;--shiki-token-keyword: #D73A49;--shiki-token-parameter: #E36209;--shiki-token-function: #6F42C1;--shiki-token-operator: #D73A49;--shiki-token-punctuation: #032F62;--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-lang: var(--vp-c-text-light-3);--vp-code-line-highlight-color: #0000000A}html.dark{--shiki-token-text: #ABB2BF;--shiki-token-constant: #E5C07B;--shiki-token-number: #D19A66;--shiki-token-string: #98C379;--shiki-token-comment: #7F848E;--shiki-token-keyword: #C678DD;--shiki-token-parameter: #E06C75;--shiki-token-function: #61AFEF;--shiki-token-operator: #56B6C2;--shiki-token-punctuation: #ABB2BF;--vp-code-line-highlight-color: #000000A0}html.dark{--vp-code-lang: var(--vp-c-text-dark-3)}.vp-doc [class*=language-]>span.lang{color:var(--vp-code-lang)}.vp-doc ol,.vp-doc ul{line-height:1.75;padding-left:1.5rem}.vp-doc li+li{margin-top:0}.vp-doc th,.vp-doc td{padding:.6em 1em}.vp-doc li>ol,.vp-doc li>ul{margin-top:0}.vp-doc h3+h3{margin-top:1rem}.vp-doc div[class*=language-]+div[class*=language-]{margin-top:0}.vp-doc blockquote>p{font-size:15px;line-height:1.7}.vp-doc .custom-block{font-size:15px;padding:1px 1.5rem;border-width:0;border-radius:0;border-left-width:4px;border-left-style:solid;position:relative}.vp-doc .custom-block .custom-block-title{display:none}.vp-doc .custom-block p{margin:1rem 0;line-height:1.7}.vp-doc .custom-block div[class*=language-]{margin:1rem 0}.vp-doc .custom-block:before{content:"!";position:absolute;top:20px;left:-12px;color:#fff;width:20px;height:20px;border-radius:100%;text-align:center;line-height:21px;font-weight:700;font-family:Dosis,Source Sans Pro,Helvetica Neue,Arial,sans-serif;font-size:14px}.vp-doc .custom-block.info:before{background-color:var(--vp-custom-block-info-border)}.vp-doc .custom-block.tip:before{background-color:var(--vp-custom-block-tip-border)}.vp-doc .custom-block.warning:before{background-color:var(--vp-custom-block-warning-border)}.vp-doc .custom-block.danger:before{background-color:var(--vp-custom-block-danger-border)}html:not(.dark) .dark-only{display:none}html.dark .light-only{display:none}:root{--vp-c-brand-light: #6553C5;--vp-c-brand-lighter: #7666CC;--vp-c-brand-dark: #5545A1;--vp-c-brand-darker: #524785;--vp-c-brand-dimm: #4A3D8F10;--vp-c-brand: #5440BF;--vp-c-brand-alt: #8F17E6;--vp-nav-height: 64px}html.dark{--vp-c-brand: #8F7DE8;--vp-c-brand-light: #705CD6;--vp-c-brand-lighter: #5440BF;--vp-c-brand-dark: #A293EC;--vp-c-brand-darker: #B4A8F0;--vp-c-brand-dimm: #B4A8F010;--vp-c-brand-alt: #C079F2}:root{--vp-c-red-dimm-1: var(--vp-c-red-dark);--vp-c-red-dimm-2: var(--vp-c-red-darker);--vp-c-yellow-dimm-1: var(--vp-c-yellow-dark);--vp-c-yellow-dimm-2: var(--vp-c-yellow-darker);--vp-custom-block-tip-border: var(--vp-c-brand-light);--vp-custom-block-tip-text: var(--vp-c-brand-darker);--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);--vp-badge-text: var(--vp-c-text-dark-1);--vp-badge-tip-bg: var(--vp-c-brand);--vp-badge-warning-bg: var(--vp-c-yellow-darker);--vp-badge-danger-bg: var(--vp-c-red-darker)}.DocSearch{--docsearch-primary-color: var(--vp-c-brand) !important}.el-scrollbar__bar{z-index:50}blockquote.route .badge{border-top-right-radius:0;border-bottom-right-radius:0}blockquote.route code{display:inline-flex;align-items:center;vertical-align:middle;height:20px;border-top-left-radius:0;border-bottom-left-radius:0}.home[data-v-b7c0548e]{position:absolute;width:100%;top:0;left:0;height:100vh;overflow-y:auto;display:grid;grid-template-rows:repeat(1,100vh)}.footer[data-v-b7c0548e]{position:absolute;bottom:0;left:0;width:100%;text-align:center;padding:1rem 0;font-size:.8rem;color:var(--vp-text-light);text-decoration:none;transition:color .3s ease}.footer[data-v-b7c0548e]:hover{color:var(--vp-text)}.screen[data-v-b7c0548e]{padding:6rem;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center}h1[data-v-b7c0548e]{font-size:3rem;line-height:1.5}.desc[data-v-b7c0548e]{color:var(--vp-text-light);text-transform:uppercase;text-align:center;line-height:2;margin:1rem 0}.actions[data-v-b7c0548e]{margin:1.5rem 0;display:flex;flex-wrap:wrap;gap:2.2rem;justify-content:center}@media (max-width: 600px){.actions[data-v-b7c0548e]{margin:4rem 0 0;flex-direction:column}}.actions .action-button[data-v-b7c0548e]{flex:1 0 auto;-webkit-user-select:none;user-select:none;display:inline-block;font-size:1.05rem;line-height:1.4;padding:.5rem 2.2rem;border-width:2px;border-style:solid;border-radius:2rem;transition:color .3s ease,background-color .3s ease,border-color .3s ease;box-sizing:border-box;cursor:pointer}@media (max-width: 600px){.actions .action-button[data-v-b7c0548e]{padding:.5rem 4rem}}.actions .action-button.secondary[data-v-b7c0548e]{color:var(--vp-button-brand-hover-bg);border-color:var(--vp-button-brand-bg)}.actions .action-button.secondary[data-v-b7c0548e]:hover{color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)} diff --git a/assets/zh-CN_advanced_admin.md.846d77e2.js b/assets/zh-CN_advanced_admin.md.846d77e2.js new file mode 100644 index 0000000..0573e34 --- /dev/null +++ b/assets/zh-CN_advanced_admin.md.846d77e2.js @@ -0,0 +1 @@ +import{_ as s,t as c,v as n,x as l,A as e,N as a,G as t,K as d,U as i}from"./chunks/framework.187e34d2.js";const C=JSON.parse('{"title":"管理接口 可选 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/advanced/admin.md","filePath":"zh-CN/advanced/admin.md"}'),r={name:"zh-CN/advanced/admin.md"},_={id:"管理接口-可选-实验性",tabindex:"-1"},h=e("a",{class:"header-anchor",href:"#管理接口-可选-实验性","aria-label":'Permalink to "管理接口TIP
这是一个可选功能。
WARNING
这是一个实验性功能。
管理 API 包含了与 SDK 状态相关、与具体的平台无关的操作,例如创建和移除 WebHook 等。
管理 API 通过 /{path}/{version}/admin/{method}
路由提供。通信方式与 HTTP API 类似,但不需要 X-Platform
和 X-Self-ID
请求头。
TIP
这是一个可选功能。
Satori 提供了访问任意平台内部接口的能力。这意味着,你可以大多数情况下编写通用代码,并在需要的时候使用内部接口来实现平台特定功能。
内部 API 通过 /{path}/{version}/internal/{method}
路由提供。通信方式与 HTTP API 类似。
一个合法的请求示例形如:
POST /v1/internal/get_channel
+Content-Type: application/json
+Authorization: Bearer 1234567890
+X-Platform: discord
+X-Self-ID: 1234567890
+
+["1234567890"]
内部事件是一类特殊的事件对象。它的结构如下:
字段 | 类型 | 说明 |
---|---|---|
id | number | 事件 ID |
type | string | 事件类型,固定为 internal |
platform | string | 接收者的平台名称 |
self_id | string | 接收者的平台账号 |
timestamp | number | 事件的时间戳 |
_type | string | 内部事件类型 |
_data | object | 内部事件数据 |
Satori 是一个通用的聊天协议。我们希望 Satori 能够抹平不同聊天平台之间的差异,让开发者以更低的成本开发出跨平台、可扩展、高性能的聊天应用。
Satori 的名称来源于游戏东方 Project 中的角色 古明地觉 (Komeiji Satori)。古明地觉能够以心灵感应的方式与各种动物交流,取这个名字是希望 Satori 能够成为各个聊天平台之间的桥梁。
Satori 的开发团队长期从事聊天机器人开发,熟悉各种聊天平台的通信方式。经过长达 4 年的发展,Satori 有了健全的设计和完善的实现。目前,Satori 官方提供了超过 15 个聊天平台的适配器,完全覆盖了世界上主流的聊天平台:
这些适配器不仅为你带来了开箱即用的体验,也从实际上证明了 Satori 协议的通用性和扩展性。
不必担心使用 Satori 后会失去对聊天平台的控制。得益于 Satori 的内部接口机制,你完全可以大多数情况下编写通用代码,并在需要的时候使用内部接口来实现平台特定功能。
此外,Satori 还为规模化的场景提供了全套的解决方案。小到个人电脑上的聊天机器人,大到分布式集群上的聊天平台后端,Satori 都能满足你的需求。
',8),i=[o];function c(p,d,l,n,_,h){return t(),e("div",null,i)}const m=a(s,[["render",c]]);export{u as __pageData,m as default}; diff --git a/assets/zh-CN_introduction.md.935b9161.lean.js b/assets/zh-CN_introduction.md.935b9161.lean.js new file mode 100644 index 0000000..f8515b1 --- /dev/null +++ b/assets/zh-CN_introduction.md.935b9161.lean.js @@ -0,0 +1 @@ +import{_ as a,v as t,x as e,U as r}from"./chunks/framework.187e34d2.js";const u=JSON.parse('{"title":"介绍","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/introduction.md","filePath":"zh-CN/introduction.md"}'),s={name:"zh-CN/introduction.md"},o=r("",8),i=[o];function c(p,d,l,n,_,h){return t(),e("div",null,i)}const m=a(s,[["render",c]]);export{u as __pageData,m as default}; diff --git a/assets/zh-CN_protocol_api.md.88942d02.js b/assets/zh-CN_protocol_api.md.88942d02.js new file mode 100644 index 0000000..1a0e6c9 --- /dev/null +++ b/assets/zh-CN_protocol_api.md.88942d02.js @@ -0,0 +1,7 @@ +import{_ as t,v as a,x as e,U as o}from"./chunks/framework.187e34d2.js";const _=JSON.parse('{"title":"API","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/api.md","filePath":"zh-CN/protocol/api.md"}'),d={name:"zh-CN/protocol/api.md"},n=o(`Satori 协议规定了一套基于 HTTP 的 API 服务,用于发送消息和调用其他功能。
这是一套 HTTP RPC 风格的 API,所有 URL 的形式均为 /{path}/{version}/{resource}.{method}
。其中,path
为部署路径 (可以为空),version
为 API 的版本号,resource
是资源类型,method
为方法名。
目前 Satori 仅有 v1 一个版本。
所有 API 的请求都使用 POST,参数以 application/json
的形式编码在请求体中。返回值也是 JSON 格式。
请求头中需要包含 X-Platform
和 X-Self-ID
字段,分别表示平台名称和平台账号。
一个合法的请求示例形如:
POST /v1/channel.get
+Content-Type: application/json
+Authorization: Bearer 1234567890
+X-Platform: discord
+X-Self-ID: 1234567890
+
+{"channel_id": "1234567890"}
状态码 | 描述 |
---|---|
200 (OK) | 请求成功 |
400 (BAD REQUEST) | 请求格式错误 |
401 (UNAUTHORIZED) | 缺失鉴权 |
403 (FORBIDDEN) | 权限不足 |
404 (NOT FOUND) | 资源不存在 |
405 (METHOD NOT ALLOWED) | 请求方法不支持 |
5XX (SERVER ERROR) | 服务器错误 |
鉴权通过 HTTP API 中的 Authorization
请求头来实现。其中涉及的鉴权令牌由 SDK 分发,本协议不做任何限制。
如果 SDK 没有配置鉴权,则应用无需提供上述请求头。
部分 API 可能会返回一组数据。这种情况下,响应会是一个 List
对象:
字段 | 类型 | 描述 |
---|---|---|
data | array | 数据 |
next | string? | 下一页的令牌 |
你可以使用 next
令牌来获取下一页的数据。如果 next
为空,则表示没有更多数据了。
除了标准的资源 API 外,Satori 还提供了一些扩展 API,用于获取特定的数据。
/{path}/{version}/admin
的子路由用于访问 SDK 相关接口,请参见 管理 API。/{path}/{version}/internal
的子路由用于访问平台内部接口,请参见 内部 API。基本元素是最常见的消息元素,它们能够在大多数平台上正常显示,是组成消息的基本单位。
一段纯文本。
属性 | 类型 | 范围 | 描述 |
---|---|---|---|
id | string? | 收发 | 目标用户的 ID |
name | string? | 收发 | 目标用户的名称 |
role | string? | 收发 | 目标角色 |
type | string? | 收发 | 特殊操作,例如 all 表示 @全体成员,here 表示 @在线成员 |
<at>
元素用于提及某个或某些用户。
属性 | 类型 | 范围 | 描述 |
---|---|---|---|
id | string | 收发 | 目标频道的 ID |
name | string? | 收发 | 目标频道的名称 |
<sharp>
元素用于提及某个频道。
属性 | 类型 | 范围 | 描述 |
---|---|---|---|
href | string | 收发 | 链接的 URL |
<a>
元素用于显示一个链接。当平台不支持链接时,建议显示为 content (href)
的形式。
资源消息元素表示文本中存在的资源文件。不同的平台对资源文件的支持存在较大的差异。发送时只需提供 src
。如果某个平台不支持特定的资源类型,适配器应该用 src
代替。如果某个平台不支持将资源消息元素和其他消息元素同时发送,适配器应该分多条发送,并返回最后一条消息的 ID。
属性 | 类型 | 范围 | 描述 |
---|---|---|---|
src | string | 收发 | 资源的 URL |
cache | boolean? | 发 | 是否使用已缓存的文件 |
timeout | string? | 发 | 下载文件的最长时间 (毫秒) |
除了上述通用属性外,还支持下面的属性:
属性 | 类型 | 范围 | 描述 |
---|---|---|---|
width | number? | 收 | 图片的宽度 |
height | number? | 收 | 图片的高度 |
<img>
元素用于表示图片。
参见上述通用属性。
<audio>
元素用于表示语音。
参见上述通用属性。
<video>
元素用于表示视频。
参见上述通用属性。
<file>
元素用于表示文件。
修饰元素用于修饰其中的内容。如果对应的平台不支持对应的元素,可以忽略这个元素本身,正常渲染其中的子元素。
<b>
或 <strong>
元素用于将其中的内容以粗体显示。
<i>
或 <em>
元素用于将其中的内容以斜体显示。
<u>
或 <ins>
元素用于为其中的内容附加下划线。
<s>
或 <del>
元素用于为其中的内容附加删除线。
<spl>
元素用于将其中的内容标记为剧透 (默认会被隐藏,点击后才显示)。
<code>
元素用于将其中的内容以等宽字体显示 (通常还会有特定的背景色)。
<sup>
元素用于将其中的内容以上标显示。
<sub>
元素用于将其中的内容以下标显示。
<br>
元素表示一个独立的换行。
<p>
元素表示一个段落。在渲染时,它与相邻的元素之间会确保有一个换行。
属性 | 类型 | 范围 | 描述 |
---|---|---|---|
id | string? | 发 | 消息的 ID |
forward | boolean? | 发 | 是否为转发消息 |
<message>
元素的基本用法是表示一条消息。子元素对应于消息的内容。如果其没有子元素,则消息不会被发送。
当出现 <message>
元素时,之前的元素会被立即视为一条消息被发送。因此下面的两种写法是等价的:
<!-- 第一种写法:发送两条消息 -->
+<message>hello</message>
+<message>world</message>
+
+<!-- 第二种写法:用一条空消息隔开两段文本,实际上仍然会发送两条消息 -->
+hello<message/>world
部分平台允许你模拟其他用户发送消息:
<message>
+ <author user-id="123123123" nickname="Alice" avatar="url"/>
+ hello world
+</message>
在支持转发的平台上,你可以使用 forward
配合 id
属性来转发一条消息:
<message id="123456789" forward/>
在支持合并转发的平台上,你可以使用带有 forward
属性的 <message>
元素嵌套其他 <message>
元素来实现合并转发:
<message forward>
+ <message id="123456789"/>
+ <message id="987654321"/>
+ <!-- 合并转发里也可以嵌套模拟其他用户发送的消息 -->
+ <message>
+ <author user-id="123123123" nickname="Alice" avatar="url"/>
+ hello world
+ </message>
+</message>
元信息元素通常不会被渲染,但会影响到消息的发送行为。
<quote>
元素用于表示对消息引用。它的子元素会被渲染为引用的内容。理论上所有 <message>
元素的特性也可以用于 <quote>
元素,包括子元素 (构造引用消息) 和 forward
属性 (引用合并转发)。然而目前似乎并没有平台提供了这样的支持。
属性 | 类型 | 范围 | 描述 |
---|---|---|---|
user-id | string? | 发 | 用户 ID |
nickname | string? | 发 | 昵称 |
avatar | string? | 发 | 头像 URL |
<author>
元素用于表示消息的作者。它的子元素会被渲染为作者的名字。
Satori 协议规定了两套事件服务,分别基于 WebSocket 和 WebHook。你可以根据自己的需要进行选择。
字段 | 类型 | 描述 |
---|---|---|
id | number | 事件 ID |
type | string | 事件类型 |
platform | string | 接收者的平台名称 |
self_id | string | 接收者的平台账号 |
timestamp | number | 事件的时间戳 |
channel | Channel? | 事件所属的频道 |
guild | Guild? | 事件所属的群组 |
login | Login? | 事件的登录信息 |
member | GuildMember? | 事件的目标成员 |
message | Message? | 事件的消息 |
operator | User? | 事件的操作者 |
role | GuildRole? | 事件的目标角色 |
user | User? | 事件的目标用户 |
事件中的各属性遵循 资源提升 规则。
WebSocket 服务用于在 Satori SDK 与应用之间维护一个持久的、有状态的链接。通过这个链接,Satori 应用可以实时接收 SDK 推送的事件。
WebSocket 服务的地址为 /{path}/{version}/events
。其中,path
为部署路径 (可以为空),version
为 API 的版本号。
目前 Satori 仅有 v1 一个版本。
总的来说,Satori 应用需要在连接后遵循以下步骤:
IDENTIFY
信令,用于鉴权和恢复会话;READY
信令,并开启事件推送;PING
信令;PONG
信令;EVENT
信令,用于接收事件。信令的数据结构如下:
字段 | 类型 | 描述 |
---|---|---|
op | number | 信令类型 |
body | object? | 信令数据 |
信令类型如下:
名称 | 值 | 方向 | 描述 |
---|---|---|---|
EVENT | 0 | 接收 | 事件 |
PING | 1 | 发送 | 心跳 |
PONG | 2 | 接收 | 心跳回复 |
IDENTIFY | 3 | 发送 | 鉴权 |
READY | 4 | 接收 | 鉴权回复 |
IDENTIFY
信令的 body
数据结构如下:
字段 | 类型 | 描述 |
---|---|---|
token | string? | 鉴权令牌 |
sequence | number? | 序列号 |
READY
信令的 body
数据结构如下:
字段 | 类型 | 描述 |
---|---|---|
logins | Login[] | 登录信息 |
EVENT
信令的 body
数据结构参见 Event。
WebSocket 鉴权通过 IDENTIFY 信令的 token
字段来实现。其中涉及的鉴权令牌由 SDK 分发,本协议不做任何限制。
如果 SDK 没有配置鉴权,则应用无需提供上述字段。
当连接短暂中断时,Satori 应用可以通过 IDENTIFY
信令的 sequence
字段来恢复会话。sequence
字段的值为上一次连接中最后一个接收到的 EVENT
信令的 id
字段。会话恢复后,SDK 会向应用推送所有在断开连接期间发生的事件。
TIP
这是一个可选功能。
WebHook 服务是指,Satori SDK 在接收到平台事件时,向应用提供的 HTTP 地址推送事件。一个 SDK 应当可以配置多个 WebHook,并允许应用对发送者进行鉴权。这些 WebHook 的配置方式由 SDK 自身决定,本协议规范化了一组 管理接口,但不做强制要求。
事件推送以 POST 的形式进行,参数以 application/json
的形式编码在请求体中。数据结构参见 Event。
应用收到 WebHook 请求时,如果能够顺利鉴权并处理请求,应当返回 2XX 的状态码。如果鉴权失败,应当返回 4XX 的状态码。如果处理失败,应当返回 5XX 的状态码。
TIP
这里的鉴权与 API 与 WebSocket 中的鉴权逻辑类似,但方向相反。
Satori 应用可以要求 SDK 在发送 WebHook 请求时附带一个 Authorization
请求头,格式为 Bearer {token}
。其中,token
由应用进行分发。
Satori 协议的通信方式分为两块:
在我们开始之前,先来了解一些与 Satori 相关的核心概念。
SDK 是指实现了 Satori 协议的软件。应用 (Application) 是指接入了 Satori 协议的软件。应用通过与 SDK 通信,以实现聊天平台的功能。
平台 (Platform) 是指聊天平台,比如 Discord、Telegram 等。同一平台内的用户间具有相互发送消息的能力,而不同平台的用户间则没有。对于 Rocket Chat 这一类可自建的聊天平台而言,每个独立的自建服务器都视为不同的平台。
消息 (Message) 是字面意义上的消息。通常是文本或富文本格式的,有时也会包含图片、语音等媒体资源。在 Koishi 中,消息通过消息元素进行统一编码。
频道 (Channel) 是消息的集合。一个频道包含了具备时间、逻辑顺序的一系列消息。频道又分为私聊频道和群聊频道,其中私聊频道有且仅有两人参与,而群聊频道可以有任意多人参与。
群组 (Guild) 是平台用户的集合。一个群组通常会同时包含一组用户和频道,并通过权限机制让其中的部分用户进行管理。在部分平台中,群组和群聊频道的概念恰好是重合的 (例如 QQ):一个群组内有且仅有一个群聊频道。私聊频道不属于任何群组。
由于不同平台实现的差异,Satori 协议中的大部分字段都是可选的。可选字段的类型后面会有一个 ?
标记。
对于任意可选字段,相关 API 调用的结果中可能不含该字段,也可能该字段的值为 null
。其中,前者表示该 API 并未提供这一字段,但可能由其他 API 提供;后者表示该 API 提供了这一字段,但其值为 null
。
Satori 协议中的资源是指一类具有确定结构的对象。例如,用户、频道、消息 等都是资源。部分事件和 API 的返回值中会包含这些资源对象。
资源对象的某个字段可以是另一个资源对象,例如消息对象中的 user
字段就是一个用户对象。当资源对象出现多级嵌套时,内层的资源将会被统一提升到最外层。例如,当接收到消息事件时,事件体中可以访问到 message
, member
, user
, channel
等资源,但 message
中就不再存在 member
和 user
字段了。
Satori 中的消息使用消息元素 (Message Element) 进行编码。消息元素的语法与 XHTML 类似。
消息元素的语法与 HTML 类似,但是不完全相同。
你可以在消息元素内使用任何字符。不过部分特殊字符需要转义:
原始字符 | 转义写法 |
---|---|
" | " |
& | & |
< | < |
> | > |
根据上下文的不同,有些字符可能不需要被转义或使用其他的转义方式。
除此以外,你可以使用十进制或十六进制转义任何字符。例如 '
也可以被书写成 '
或 '
。
使用一对尖括号包裹元素名,加上可选的属性、闭合指示符,就构成了一个标签。
元素名由小写字母、数字和连字符组成,且必须以字母开头。在元素名前后添加 /
表示这是一个结束标签或自闭合标签,没有 /
符号时则表示这是一个起始标签:
<tag>
一个起始标签</tag>
一个结束标签<tag/>
一个自闭合标签起始或自闭合标签的元素名后接受可选的属性列表。每个属性必须形如以下形式:
key
key="value"
(此时 value
中的 "
需要被转义)key='value'
(此时 value
中的 '
需要被转义)下面是一段示例:
<tag foo="1" bar/>
一个元素要么是自闭合标签,要么由一对同名的起始标签和结束标签构成。元素的内容指起始标签和结束标签中间的部分,可以包含文本内容或其他元素。对于自闭合标签,元素的内容为空。下面是一段示例:
<parent>
+ text content
+ <child/>
+</parent>
当存在未配对的元素时,将自动视为文本内容的一部分。文本内容前后如果存在包含换行符的连续空白字符,则会被忽略。这意味着下面两段代码是等价的:
<tag>
+ <foo> bar
+ <!-- comment -->
+</tag>
<tag><foo> bar</tag>
使用成对的 <!--
和 -->
插入一段注释。注释中的部分不会被渲染。
一些平台会使用 ID 标识资源文件 (例如 Lark)。当你接收到来自平台的消息时,拿到的是资源 ID 而非资源链接。此时你需要将资源 ID 转换为资源链接,才能构造合法的资源元素。
TIP
Telegram 是另一种特殊情况。尽管其提供的资源链接是可用的,但这个链接中会明文包含机器人令牌,并非可以公开使用的链接。因此 Telegram 和其他类似平台也适用于这一节的内容。
TIP
一种不推荐的做法是直接下载资源,并转存为 data:
链接放入消息中。之所以不推荐,是因为这种做法有两大致命缺点:
data:
会导致消息体积大幅增加,极大影响消息处理的性能。对于这种情况,我们建议使用实现资源反向代理。SDK 额外提供一个用于访问资源的路由 (类似 /v1/assets/xxx
),将资源 ID 映射到资源链接,并编码到消息元素中。这样一来,上面提到的两个问题也就都解决了。
关于 Satori 内置的消息元素,请参考 标准元素。
`,33),n=[l];function r(p,c,i,d,h,k){return e(),a("div",null,n)}const g=t(o,[["render",r]]);export{y as __pageData,g as default}; diff --git a/assets/zh-CN_protocol_message.md.de31f79b.lean.js b/assets/zh-CN_protocol_message.md.de31f79b.lean.js new file mode 100644 index 0000000..4adc9a9 --- /dev/null +++ b/assets/zh-CN_protocol_message.md.de31f79b.lean.js @@ -0,0 +1 @@ +import{_ as t,v as e,x as a,U as s}from"./chunks/framework.187e34d2.js";const y=JSON.parse('{"title":"消息编码","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/protocol/message.md","filePath":"zh-CN/protocol/message.md"}'),o={name:"zh-CN/protocol/message.md"},l=s("",33),n=[l];function r(p,c,i,d,h,k){return e(),a("div",null,n)}const g=t(o,[["render",r]]);export{y as __pageData,g as default}; diff --git a/assets/zh-CN_resources_channel.md.08cf6283.js b/assets/zh-CN_resources_channel.md.08cf6283.js new file mode 100644 index 0000000..21d6e0c --- /dev/null +++ b/assets/zh-CN_resources_channel.md.08cf6283.js @@ -0,0 +1 @@ +import{_ as r,t as l,v as o,x as _,A as t,G as d,K as h,U as e,N as n}from"./chunks/framework.187e34d2.js";const B=JSON.parse('{"title":"频道 (Channel)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/channel.md","filePath":"zh-CN/resources/channel.md"}'),s={name:"zh-CN/resources/channel.md"},c=e('字段 | 类型 | 描述 |
---|---|---|
id | string | 频道 ID |
type | Channel.Type | 频道类型 |
name | string? | 频道名称 |
parent_id | string? | 父频道 ID |
名称 | 值 | 描述 |
---|---|---|
TEXT | 0 | 文本频道 |
VOICE | 1 | 语音频道 |
CATEGORY | 2 | 分类频道 |
DIRECT | 3 | 私聊频道 |
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
根据 ID 获取频道。返回一个 Channel 对象。
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
next | string | 分页令牌 |
获取群组中的全部频道。返回一个 Channel 的 分页列表。
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
data | Channel | 频道数据 |
创建群组频道。返回一个 Channel 对象。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
data | Channel | 频道数据 |
修改群组频道。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
删除群组频道。
字段 | 类型 | 描述 |
---|---|---|
user_id | string | 用户 ID |
guild_id | string? | 群组 ID |
创建一个私聊频道。返回一个 Channel 对象。
',2);function x(N,E,O,R,v,$){const a=l("badge");return o(),_("div",null,[c,t("blockquote",i,[d(a,null,{default:h(()=>[n("POST")]),_:1}),u]),b,t("blockquote",T,[d(a,null,{default:h(()=>[n("POST")]),_:1}),p]),C,t("blockquote",P,[d(a,null,{default:h(()=>[n("POST")]),_:1}),f]),S,t("blockquote",q,[d(a,null,{default:h(()=>[n("POST")]),_:1}),I]),A,t("blockquote",m,[d(a,null,{default:h(()=>[n("POST")]),_:1}),y]),k,t("blockquote",D,[d(a,null,{default:h(()=>[n("POST")]),_:1}),V]),g])}const G=r(s,[["render",x]]);export{B as __pageData,G as default}; diff --git a/assets/zh-CN_resources_channel.md.08cf6283.lean.js b/assets/zh-CN_resources_channel.md.08cf6283.lean.js new file mode 100644 index 0000000..4f3b14c --- /dev/null +++ b/assets/zh-CN_resources_channel.md.08cf6283.lean.js @@ -0,0 +1 @@ +import{_ as r,t as l,v as o,x as _,A as t,G as d,K as h,U as e,N as n}from"./chunks/framework.187e34d2.js";const B=JSON.parse('{"title":"频道 (Channel)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/channel.md","filePath":"zh-CN/resources/channel.md"}'),s={name:"zh-CN/resources/channel.md"},c=e("",8),i={class:"route"},u=t("code",null,"/channel.get",-1),b=e("",3),T={class:"route"},p=t("code",null,"/channel.list",-1),C=e("",3),P={class:"route"},f=t("code",null,"/channel.create",-1),S=e("",3),q={class:"route"},I=t("code",null,"/channel.update",-1),A=e("",3),m={class:"route"},y=t("code",null,"/channel.delete",-1),k=e("",3),D={class:"route"},V=t("code",null,"/user.channel.create",-1),g=e("",2);function x(N,E,O,R,v,$){const a=l("badge");return o(),_("div",null,[c,t("blockquote",i,[d(a,null,{default:h(()=>[n("POST")]),_:1}),u]),b,t("blockquote",T,[d(a,null,{default:h(()=>[n("POST")]),_:1}),p]),C,t("blockquote",P,[d(a,null,{default:h(()=>[n("POST")]),_:1}),f]),S,t("blockquote",q,[d(a,null,{default:h(()=>[n("POST")]),_:1}),I]),A,t("blockquote",m,[d(a,null,{default:h(()=>[n("POST")]),_:1}),y]),k,t("blockquote",D,[d(a,null,{default:h(()=>[n("POST")]),_:1}),V]),g])}const G=r(s,[["render",x]]);export{B as __pageData,G as default}; diff --git a/assets/zh-CN_resources_guild.md.2ea04972.js b/assets/zh-CN_resources_guild.md.2ea04972.js new file mode 100644 index 0000000..b8f0309 --- /dev/null +++ b/assets/zh-CN_resources_guild.md.2ea04972.js @@ -0,0 +1 @@ +import{_ as l,t as i,v as h,x as s,A as t,G as a,K as r,U as d,N as o}from"./chunks/framework.187e34d2.js";const V=JSON.parse('{"title":"群组 (Guild)","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/guild.md","filePath":"zh-CN/resources/guild.md"}'),u={name:"zh-CN/resources/guild.md"},_=d('字段 | 类型 | 描述 |
---|---|---|
id | string | 群组 ID |
name | string? | 群组名称 |
avatar | string? | 群组头像 |
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
根据 ID 获取。返回一个 Guild 对象。
字段 | 类型 | 描述 |
---|---|---|
next | string | 分页令牌 |
获取当前用户加入的全部群组。返回一个 Guild 的 分页列表。
字段 | 类型 | 描述 |
---|---|---|
message_id | string | 请求 ID |
approve | boolean | 是否通过请求 |
comment | string | 备注信息 |
处理来自群组的邀请。
加入群组时触发。必需资源:guild
。
群组被修改时触发。必需资源:guild
。
退出群组时触发。必需资源:guild
。
接收到新的入群邀请时触发。必需资源:guild
。
字段 | 类型 | 描述 |
---|---|---|
user | User? | 用户对象 |
self_id | string? | 平台账号 |
platform | string? | 平台名称 |
status | Status | 登录状态 |
名称 | 值 | 描述 |
---|---|---|
OFFLINE | 0 | 离线 |
ONLINE | 1 | 在线 |
CONNECT | 2 | 连接中 |
DISCONNECT | 3 | 断开连接 |
RECONNECT | 4 | 重新连接 |
获取登录信息。返回一个 Login
对象。
登录被创建时触发。必需资源:login
。
登录被删除时触发。必需资源:login
。
登录信息更新时触发。必需资源:login
。
字段 | 类型 | 描述 |
---|---|---|
user | User? | 用户对象 |
nick | string? | 用户在群组中的名称 |
avatar | string? | 用户在群组中的头像 |
joined_at | number? | 加入时间 |
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
user_id | string | 用户 ID |
获取群成员信息。返回一个 GuildMember 对象。
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
next | string | 分页令牌 |
获取群成员列表。返回一个 GuildMember 的 分页列表。
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
user_id | string | 用户 ID |
permanent | boolean? | 是否永久踢出 (无法再次加入群组) |
将某个用户踢出群组。
字段 | 类型 | 描述 |
---|---|---|
message_id | string | 请求 ID |
approve | boolean | 是否通过请求 |
comment | string? | 备注信息 |
处理加群请求。
群组成员增加时触发。必需资源:guild
,member
,user
。
群组成员信息更新时触发。必需资源:guild
,member
,user
。
群组成员移除时触发。必需资源:guild
,member
,user
。
接收到新的加群请求时触发。必需资源:guild
,member
,user
。
字段 | 类型 | 描述 |
---|---|---|
id | string | 消息 ID |
content | string | 消息内容 |
channel | Channel? | 频道对象 |
guild | Guild? | 群组对象 |
member | Member? | 成员对象 |
user | User? | 用户对象 |
created_at | number? | 消息发送的时间戳 |
updated_at | number? | 消息修改的时间戳 |
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
content | string | 消息内容 |
发送消息。返回一个 Message
对象构成的数组。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
message_id | string | 消息 ID |
获取特定消息。返回一个 Message
对象。必需资源:channel
,user
。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
message_id | string | 消息 ID |
撤回特定消息。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
message_id | string | 消息 ID |
content | string | 消息内容 |
编辑特定消息。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
next | string | 分页令牌 |
获取频道消息列表。返回一个 Message
的 分页列表。必需资源:channel
,user
。
当消息被创建时触发。必需资源:channel
,message
,user
。
当消息被编辑时触发。必需资源:channel
,message
,user
。
当消息被删除时触发。必需资源:channel
,message
,user
。
WARNING
这是一个实验性功能。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
message_id | string | 消息 ID |
emoji | string | 表态名称 |
向特定消息添加表态。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
message_id | string | 消息 ID |
emoji | string | 表态名称 |
user_id | string? | 用户 ID |
从特定消息删除某个用户添加的特定表态。如果没有传入用户 ID 则表示删除自己的表态。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
message_id | string | 消息 ID |
emoji | string? | 表态名称 |
从特定消息清除某个特定表态。如果没有传入表态名称则表示清除所有表态。
字段 | 类型 | 描述 |
---|---|---|
channel_id | string | 频道 ID |
message_id | string | 消息 ID |
emoji | string | 表态名称 |
next | string? | 分页令牌 |
获取添加特定消息的特定表态的用户列表。返回一个 User
的 分页列表。
当表态被添加时触发。
当表态被移除时触发。
',7);function x(D,N,C,V,v,y){const d=n("badge");return s(),_("div",null,[t("h1",c,[e("表态 (Reaction) "),a(d,{type:"warning"},{default:r(()=>[e("实验性")]),_:1}),e(),l]),u,t("blockquote",b,[a(d,null,{default:r(()=>[e("POST")]),_:1}),m]),p,t("blockquote",T,[a(d,null,{default:r(()=>[e("POST")]),_:1}),P]),g,t("blockquote",f,[a(d,null,{default:r(()=>[e("POST")]),_:1}),I]),S,t("blockquote",q,[a(d,null,{default:r(()=>[e("POST")]),_:1}),A]),k])}const O=i(h,[["render",x]]);export{E as __pageData,O as default}; diff --git a/assets/zh-CN_resources_reaction.md.beaf7bc2.lean.js b/assets/zh-CN_resources_reaction.md.beaf7bc2.lean.js new file mode 100644 index 0000000..822eac6 --- /dev/null +++ b/assets/zh-CN_resources_reaction.md.beaf7bc2.lean.js @@ -0,0 +1 @@ +import{_ as i,t as n,v as s,x as _,A as t,N as e,G as a,K as r,U as o}from"./chunks/framework.187e34d2.js";const E=JSON.parse('{"title":"表态 (Reaction) 实验性","description":"","frontmatter":{},"headers":[],"relativePath":"zh-CN/resources/reaction.md","filePath":"zh-CN/resources/reaction.md"}'),h={name:"zh-CN/resources/reaction.md"},c={id:"表态-实验性",tabindex:"-1"},l=t("a",{class:"header-anchor",href:"#表态-实验性","aria-label":'Permalink to "表态 (Reaction)字段 | 类型 | 描述 |
---|---|---|
id | string | 角色 ID |
name | string? | 角色名称 |
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
user_id | string | 用户 ID |
role_id | string | 角色 ID |
设置群组内用户的角色。
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
user_id | string | 用户 ID |
role_id | string | 角色 ID |
取消群组内用户的角色。
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
next | string? | 分页令牌 |
获取群组角色列表。返回一个 GuildRole 的 分页列表。
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
role | GuildRole | 角色数据 |
创建群组角色。返回一个 GuildRole 对象。
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
role_id | string | 角色 ID |
role | GuildRole | 角色数据 |
修改群组角色。
字段 | 类型 | 描述 |
---|---|---|
guild_id | string | 群组 ID |
role_id | string | 角色 ID |
删除群组角色。
群组角色被创建时触发。必需资源:guild
,role
。
群组角色被修改时触发。必需资源:guild
,role
。
群组角色被删除时触发。必需资源:guild
,role
。
字段 | 类型 | 描述 |
---|---|---|
id | string | 用户 ID |
name | string? | 用户名称 |
nick | string? | 用户昵称 |
avatar | string? | 用户头像 |
is_bot | boolean? | 是否为机器人 |
字段 | 类型 | 描述 |
---|---|---|
user_id | string | 用户 ID |
获取用户信息。返回一个 User
对象。
字段 | 类型 | 描述 |
---|---|---|
next | string? | 分页令牌 |
字段 | 类型 | 描述 |
---|---|---|
message_id | string | 请求 ID |
approve | boolean | 是否通过请求 |
comment | string? | 备注信息 |
处理好友申请。
接收到新的好友申请时触发。必需资源:user
。