@gkd-kit/docs 0.0.1740389384270 → 0.0.1742911643788

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/.vitepress/dist/404.html +7 -7
  2. package/.vitepress/dist/api/index.html +11 -11
  3. package/.vitepress/dist/api/interfaces/RawApp.html +11 -11
  4. package/.vitepress/dist/api/interfaces/RawAppGroup.html +13 -13
  5. package/.vitepress/dist/api/interfaces/RawAppRule.html +12 -12
  6. package/.vitepress/dist/api/interfaces/RawAppRuleProps.html +11 -11
  7. package/.vitepress/dist/api/interfaces/RawCategory.html +11 -11
  8. package/.vitepress/dist/api/interfaces/RawCommonProps.html +12 -12
  9. package/.vitepress/dist/api/interfaces/RawGlobalApp.html +11 -11
  10. package/.vitepress/dist/api/interfaces/RawGlobalGroup.html +12 -12
  11. package/.vitepress/dist/api/interfaces/RawGlobalRule.html +12 -12
  12. package/.vitepress/dist/api/interfaces/RawGlobalRuleProps.html +11 -11
  13. package/.vitepress/dist/api/interfaces/RawGroupProps.html +12 -12
  14. package/.vitepress/dist/api/interfaces/RawRuleProps.html +13 -13
  15. package/.vitepress/dist/api/interfaces/RawSubscription.html +12 -12
  16. package/.vitepress/dist/api/type-aliases/IArray.html +12 -12
  17. package/.vitepress/dist/api/type-aliases/Integer.html +12 -12
  18. package/.vitepress/dist/api/type-aliases/Position.html +13 -13
  19. package/.vitepress/dist/assets/{api_index.md.DpXyfY1L.js → api_index.md.DB_w2cey.js} +1 -1
  20. package/.vitepress/dist/assets/api_index.md.DB_w2cey.lean.js +1 -0
  21. package/.vitepress/dist/assets/api_interfaces_RawApp.md.CTnq2WiW.js +1 -0
  22. package/.vitepress/dist/assets/api_interfaces_RawApp.md.CTnq2WiW.lean.js +1 -0
  23. package/.vitepress/dist/assets/{api_interfaces_RawAppGroup.md.DgTybHUK.js → api_interfaces_RawAppGroup.md.DeOrVzkI.js} +3 -3
  24. package/.vitepress/dist/assets/api_interfaces_RawAppGroup.md.DeOrVzkI.lean.js +1 -0
  25. package/.vitepress/dist/assets/api_interfaces_RawAppRule.md.CaSIiKJ8.js +1 -0
  26. package/.vitepress/dist/assets/api_interfaces_RawAppRule.md.CaSIiKJ8.lean.js +1 -0
  27. package/.vitepress/dist/assets/api_interfaces_RawAppRuleProps.md.D5XxRSmH.js +1 -0
  28. package/.vitepress/dist/assets/api_interfaces_RawAppRuleProps.md.D5XxRSmH.lean.js +1 -0
  29. package/.vitepress/dist/assets/{api_interfaces_RawCategory.md.CQlDJU2a.js → api_interfaces_RawCategory.md.Cv6VE73e.js} +1 -1
  30. package/.vitepress/dist/assets/api_interfaces_RawCategory.md.Cv6VE73e.lean.js +1 -0
  31. package/.vitepress/dist/assets/{api_interfaces_RawCommonProps.md.C7Bm8Aiw.js → api_interfaces_RawCommonProps.md.Dywu8fpX.js} +1 -1
  32. package/.vitepress/dist/assets/api_interfaces_RawCommonProps.md.Dywu8fpX.lean.js +1 -0
  33. package/.vitepress/dist/assets/api_interfaces_RawGlobalApp.md.DyPFRZ6b.js +1 -0
  34. package/.vitepress/dist/assets/api_interfaces_RawGlobalApp.md.DyPFRZ6b.lean.js +1 -0
  35. package/.vitepress/dist/assets/{api_interfaces_RawGlobalGroup.md.BauiRmV2.js → api_interfaces_RawGlobalGroup.md.BTcn1RNf.js} +2 -2
  36. package/.vitepress/dist/assets/api_interfaces_RawGlobalGroup.md.BTcn1RNf.lean.js +1 -0
  37. package/.vitepress/dist/assets/api_interfaces_RawGlobalRule.md.DmFbn207.js +1 -0
  38. package/.vitepress/dist/assets/api_interfaces_RawGlobalRule.md.DmFbn207.lean.js +1 -0
  39. package/.vitepress/dist/assets/{api_interfaces_RawGlobalRuleProps.md.CqorLHIT.js → api_interfaces_RawGlobalRuleProps.md.C2utoZwf.js} +1 -1
  40. package/.vitepress/dist/assets/api_interfaces_RawGlobalRuleProps.md.C2utoZwf.lean.js +1 -0
  41. package/.vitepress/dist/assets/api_interfaces_RawGroupProps.md.DGdIY6jc.js +5 -0
  42. package/.vitepress/dist/assets/api_interfaces_RawGroupProps.md.DGdIY6jc.lean.js +1 -0
  43. package/.vitepress/dist/assets/api_interfaces_RawRuleProps.md.BeJmto3S.js +1 -0
  44. package/.vitepress/dist/assets/api_interfaces_RawRuleProps.md.BeJmto3S.lean.js +1 -0
  45. package/.vitepress/dist/assets/api_interfaces_RawSubscription.md.ChAwg0_e.js +4 -0
  46. package/.vitepress/dist/assets/api_interfaces_RawSubscription.md.ChAwg0_e.lean.js +1 -0
  47. package/.vitepress/dist/assets/{api_type-aliases_IArray.md.BlW_x7iw.js → api_type-aliases_IArray.md.DhdFWlPl.js} +2 -2
  48. package/.vitepress/dist/assets/api_type-aliases_IArray.md.DhdFWlPl.lean.js +1 -0
  49. package/.vitepress/dist/assets/api_type-aliases_Integer.md.Bb4L6vkN.js +2 -0
  50. package/.vitepress/dist/assets/api_type-aliases_Integer.md.Bb4L6vkN.lean.js +1 -0
  51. package/.vitepress/dist/assets/{api_type-aliases_Position.md.DStZhezQ.js → api_type-aliases_Position.md.C-0Px-8F.js} +3 -3
  52. package/.vitepress/dist/assets/api_type-aliases_Position.md.C-0Px-8F.lean.js +1 -0
  53. package/.vitepress/dist/assets/app.o_sUh2oI.js +1 -0
  54. package/.vitepress/dist/assets/chunks/@localSearchIndexroot.DljsD5Nb.js +1 -0
  55. package/.vitepress/dist/assets/chunks/VPLocalSearchBox.D0GDmLGU.js +8 -0
  56. package/.vitepress/dist/assets/chunks/framework.DZAoeHqG.js +18 -0
  57. package/.vitepress/dist/assets/chunks/{index.C1Bdhwia.js → index.eafjZOuh.js} +1 -1
  58. package/.vitepress/dist/assets/chunks/theme.BAwWIamP.js +1 -0
  59. package/.vitepress/dist/assets/guide_example.md.B-n5AnGJ.js +1 -0
  60. package/.vitepress/dist/assets/guide_example.md.B-n5AnGJ.lean.js +1 -0
  61. package/.vitepress/dist/assets/{guide_external.md.BYQbwSVH.js → guide_external.md.DN-Dc8oh.js} +1 -1
  62. package/.vitepress/dist/assets/guide_external.md.DN-Dc8oh.lean.js +1 -0
  63. package/.vitepress/dist/assets/{guide_faq.md.G1jBh_KV.js → guide_faq.md.Bhk0Dsbx.js} +2 -2
  64. package/.vitepress/dist/assets/guide_faq.md.Bhk0Dsbx.lean.js +1 -0
  65. package/.vitepress/dist/assets/{guide_index.md.C7GLdPgp.js → guide_index.md.RRNOsPui.js} +1 -1
  66. package/.vitepress/dist/assets/guide_index.md.RRNOsPui.lean.js +1 -0
  67. package/.vitepress/dist/assets/{guide_node.md.BVAwTDa8.js → guide_node.md.CoFdxI9m.js} +1 -1
  68. package/.vitepress/dist/assets/guide_node.md.CoFdxI9m.lean.js +1 -0
  69. package/.vitepress/dist/assets/{guide_optimize.md.BMxjfii4.js → guide_optimize.md.Dj3Z6TH8.js} +1 -1
  70. package/.vitepress/dist/assets/guide_optimize.md.Dj3Z6TH8.lean.js +1 -0
  71. package/.vitepress/dist/assets/guide_selector.md.CvQfog2k.js +12 -0
  72. package/.vitepress/dist/assets/guide_selector.md.CvQfog2k.lean.js +1 -0
  73. package/.vitepress/dist/assets/{guide_snapshot.md.Bjv1qhvm.js → guide_snapshot.md.DXpu6Ryw.js} +1 -1
  74. package/.vitepress/dist/assets/guide_snapshot.md.DXpu6Ryw.lean.js +1 -0
  75. package/.vitepress/dist/assets/{guide_subscription.md.CCNu855K.js → guide_subscription.md.pNbImJCR.js} +2 -2
  76. package/.vitepress/dist/assets/guide_subscription.md.pNbImJCR.lean.js +1 -0
  77. package/.vitepress/dist/assets/{guide_what-is-gkd.md.DRbXQUmE.js → guide_what-is-gkd.md.CJz65J9V.js} +1 -1
  78. package/.vitepress/dist/assets/guide_what-is-gkd.md.CJz65J9V.lean.js +1 -0
  79. package/.vitepress/dist/assets/{index.md.B0kYlYCN.js → index.md.Tcc7OJDq.js} +1 -1
  80. package/.vitepress/dist/assets/{index.md.B0kYlYCN.lean.js → index.md.Tcc7OJDq.lean.js} +1 -1
  81. package/.vitepress/dist/assets/style.Bk5hZ1ui.css +1 -0
  82. package/.vitepress/dist/guide/example.html +11 -11
  83. package/.vitepress/dist/guide/external.html +11 -11
  84. package/.vitepress/dist/guide/faq.html +12 -12
  85. package/.vitepress/dist/guide/index.html +11 -11
  86. package/.vitepress/dist/guide/node.html +11 -11
  87. package/.vitepress/dist/guide/optimize.html +11 -11
  88. package/.vitepress/dist/guide/selector.html +12 -12
  89. package/.vitepress/dist/guide/snapshot.html +11 -11
  90. package/.vitepress/dist/guide/subscription.html +12 -12
  91. package/.vitepress/dist/guide/what-is-gkd.html +11 -11
  92. package/.vitepress/dist/hashmap.json +1 -1
  93. package/.vitepress/dist/index.html +11 -11
  94. package/package.json +1 -1
  95. package/.vitepress/dist/assets/api_index.md.DpXyfY1L.lean.js +0 -1
  96. package/.vitepress/dist/assets/api_interfaces_RawApp.md.BpGr9CnK.js +0 -1
  97. package/.vitepress/dist/assets/api_interfaces_RawApp.md.BpGr9CnK.lean.js +0 -1
  98. package/.vitepress/dist/assets/api_interfaces_RawAppGroup.md.DgTybHUK.lean.js +0 -22
  99. package/.vitepress/dist/assets/api_interfaces_RawAppRule.md.DXz0HCLH.js +0 -1
  100. package/.vitepress/dist/assets/api_interfaces_RawAppRule.md.DXz0HCLH.lean.js +0 -1
  101. package/.vitepress/dist/assets/api_interfaces_RawAppRuleProps.md.CmoqHafA.js +0 -1
  102. package/.vitepress/dist/assets/api_interfaces_RawAppRuleProps.md.CmoqHafA.lean.js +0 -1
  103. package/.vitepress/dist/assets/api_interfaces_RawCategory.md.CQlDJU2a.lean.js +0 -1
  104. package/.vitepress/dist/assets/api_interfaces_RawCommonProps.md.C7Bm8Aiw.lean.js +0 -5
  105. package/.vitepress/dist/assets/api_interfaces_RawGlobalApp.md.DLvGUcr3.js +0 -1
  106. package/.vitepress/dist/assets/api_interfaces_RawGlobalApp.md.DLvGUcr3.lean.js +0 -1
  107. package/.vitepress/dist/assets/api_interfaces_RawGlobalGroup.md.BauiRmV2.lean.js +0 -5
  108. package/.vitepress/dist/assets/api_interfaces_RawGlobalRule.md.CkRXFpc0.js +0 -1
  109. package/.vitepress/dist/assets/api_interfaces_RawGlobalRule.md.CkRXFpc0.lean.js +0 -1
  110. package/.vitepress/dist/assets/api_interfaces_RawGlobalRuleProps.md.CqorLHIT.lean.js +0 -1
  111. package/.vitepress/dist/assets/api_interfaces_RawGroupProps.md.BKxdlrTw.js +0 -5
  112. package/.vitepress/dist/assets/api_interfaces_RawGroupProps.md.BKxdlrTw.lean.js +0 -5
  113. package/.vitepress/dist/assets/api_interfaces_RawRuleProps.md.Xpur0e3V.js +0 -1
  114. package/.vitepress/dist/assets/api_interfaces_RawRuleProps.md.Xpur0e3V.lean.js +0 -1
  115. package/.vitepress/dist/assets/api_interfaces_RawSubscription.md.D6PNqAht.js +0 -4
  116. package/.vitepress/dist/assets/api_interfaces_RawSubscription.md.D6PNqAht.lean.js +0 -4
  117. package/.vitepress/dist/assets/api_type-aliases_IArray.md.BlW_x7iw.lean.js +0 -4
  118. package/.vitepress/dist/assets/api_type-aliases_Integer.md.Cn7gzSLN.js +0 -2
  119. package/.vitepress/dist/assets/api_type-aliases_Integer.md.Cn7gzSLN.lean.js +0 -2
  120. package/.vitepress/dist/assets/api_type-aliases_Position.md.DStZhezQ.lean.js +0 -13
  121. package/.vitepress/dist/assets/app.BlYJSDlU.js +0 -1
  122. package/.vitepress/dist/assets/chunks/@localSearchIndexroot.DNPlGQAg.js +0 -1
  123. package/.vitepress/dist/assets/chunks/VPLocalSearchBox.BsXpenaw.js +0 -7
  124. package/.vitepress/dist/assets/chunks/framework.CAQWXItu.js +0 -18
  125. package/.vitepress/dist/assets/chunks/theme.D9KtKvxc.js +0 -1
  126. package/.vitepress/dist/assets/guide_example.md.Bz6abpEb.js +0 -1
  127. package/.vitepress/dist/assets/guide_example.md.Bz6abpEb.lean.js +0 -1
  128. package/.vitepress/dist/assets/guide_external.md.BYQbwSVH.lean.js +0 -1
  129. package/.vitepress/dist/assets/guide_faq.md.G1jBh_KV.lean.js +0 -21
  130. package/.vitepress/dist/assets/guide_index.md.C7GLdPgp.lean.js +0 -1
  131. package/.vitepress/dist/assets/guide_node.md.BVAwTDa8.lean.js +0 -1
  132. package/.vitepress/dist/assets/guide_optimize.md.BMxjfii4.lean.js +0 -1
  133. package/.vitepress/dist/assets/guide_selector.md.Bnk7LyDB.js +0 -12
  134. package/.vitepress/dist/assets/guide_selector.md.Bnk7LyDB.lean.js +0 -12
  135. package/.vitepress/dist/assets/guide_snapshot.md.Bjv1qhvm.lean.js +0 -1
  136. package/.vitepress/dist/assets/guide_subscription.md.CCNu855K.lean.js +0 -50
  137. package/.vitepress/dist/assets/guide_what-is-gkd.md.DRbXQUmE.lean.js +0 -1
  138. package/.vitepress/dist/assets/style.D-L8y6Dh.css +0 -1
@@ -1,12 +0,0 @@
1
- import{_ as s,B as n,c,ab as l,j as t,G as a,w as r,o as p}from"./chunks/framework.CAQWXItu.js";const A=JSON.parse('{"title":"选择器","description":"","frontmatter":{},"headers":[],"relativePath":"guide/selector.md","filePath":"guide/selector.md","lastUpdated":1740237462000}'),g={name:"guide/selector.md"},h={class:"vp-raw"},x={tabindex:"0"},u={style:{"text-align":"center"}},y={style:{"text-align":"center"}},k={style:{"text-align":"center"}},b={style:{"text-align":"center"}},m={style:{"text-align":"center"}};function v(E,e,f,q,B,C){const i=n("IdentifierField"),d=n("GImg"),o=n("NImageGroup");return p(),c("div",null,[e[16]||(e[16]=l('<h1 id="title" tabindex="-1">选择器 <a class="header-anchor" href="#title" aria-label="Permalink to &quot;选择器 {#title}&quot;">​</a></h1><p>一个类似 CSS 选择器的选择器, 能联系节点上下文信息, 更容易也更精确找到目标节点</p><h2 id="why" tabindex="-1">为什么需要选择器 <a class="header-anchor" href="#why" aria-label="Permalink to &quot;为什么需要选择器 {#why}&quot;">​</a></h2><p>我们的目的是查询获取屏幕上的某个节点, 最简单的情况下, 目标节点已经有唯一的 id/text 标识</p><p>这时只需要配置 id/text 就能简单执行点击, 但实际情况很多节点都缺失了这些信息, 无法简单查询获取</p><p>节点还存在很多额外信息没有被利用到, 节点所有属性可以在 <a href="https://i.gkd.li/i/14045424" target="_blank" rel="noreferrer">快照-14045424</a> 的属性面板看到</p><p>另一种常见的情况是节点没有有效属性, 这时我们需要根据周围的节点去定位</p><p>选择器就是为了解决这些问题而开发的, 下面是对选择器语法的详细介绍</p><div class="tip custom-block github-alert"><p class="custom-block-title">提示</p><p>本文是从 <strong>抽象语法树(AST)</strong> 的角度去完备地介绍选择器结构<br> 如果你是初学者, 建议你直接看 <a href="./example">选择器-示例</a></p></div><h2 id="syntax" tabindex="-1">语法 <a class="header-anchor" href="#syntax" aria-label="Permalink to &quot;语法 {#syntax}&quot;">​</a></h2><p>与 CSS 类似, 一个选择器由 属性选择器 和 关系选择器 交叉组成, 并且开头末尾必须是 属性选择器</p><p>示例 <code>div &gt; img</code> 的结构是 <code>属性选择器 关系选择器 属性选择器</code>, 它表示选择父节点是 <code>div</code> 的 <code>img</code> 节点, 这与 <a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/Child_combinator" target="_blank" rel="noreferrer">相同 CSS 语法</a> 语义一致</p><p>另外 属性选择器 和 关系选择器 之间必须<strong>强制</strong>用 空白字符(空格/换行/回车/制表) 隔开</p><p>即 <code>div&gt;img</code> 非法, 必须写成 <code>div &gt; img</code></p><p>下面分别介绍 <a href="#attr">属性选择器</a> 和 <a href="#connect">关系选择器</a></p><h2 id="attr" tabindex="-1">属性选择 <a class="header-anchor" href="#attr" aria-label="Permalink to &quot;属性选择 {#attr}&quot;">​</a></h2><p>它和 CSS 语法的 属性选择器很相似, 但更强大, 如下是一个示例</p><p><code>@TextView[a=1][b^=&#39;2&#39;][c*=&#39;a&#39;||d.length&gt;7&amp;&amp;e=false][!(f=true)][g.plus(1)&gt;0]</code></p><p><code>@</code> 表示选择此节点, 一条规则最后属性选择器 <code>@</code> 生效, 如果没有 <code>@</code>, 取最后一个属性选择器</p><p><code>TextView</code> 代表节点的 name 属性, 而且与 CSS 相似, <code>*</code> 表示匹配任意属性</p><p>由于该选择器主要用于 Android 平台, 节点的 name 都是 java 类如 android.text.TextView 这种形式</p><p>为了方便书写规则, 上述 <code>TextView</code> 等价 <code>[name=&#39;TextView&#39;||name$=&#39;.TextView&#39;]</code></p><p><code>[]</code> 内部是一个 逻辑表达式/布尔表达式/取反表达式</p><ul><li>逻辑表达式 -&gt; <code>name=&#39;TextView&#39;||name$=&#39;.TextView&#39;</code></li><li>布尔表达式 -&gt; <code>name=&#39;TextView&#39;</code></li><li>取反表达式 -&gt; <code>!(name$=&#39;TextView&#39;)</code>, <code>!(name=&#39;TextView&#39;||name$=&#39;.TextView&#39;)</code></li></ul><p>注意 取反表达式中的 <code>!</code> 后面必须是 <code>(...)</code>, <code>!!(...)</code> 是非法的</p><p>逻辑表达式 有两个操作符 <code>||</code> 和 <code>&amp;&amp;</code>. <code>&amp;&amp;</code> 优先级更高</p><p>即 <code>[a&gt;1||b&gt;1&amp;&amp;c&gt;1||d&gt;1]</code> 等价于 <code>[a&gt;1||(b&gt;1&amp;&amp;c&gt;1)||d&gt;1]</code></p><p>并列的 <code>[]</code> 视为使用 <code>&amp;&amp;</code> 的逻辑表达式, 即 <code>[a=1][b=1]</code> 等价于 <code>[a=1&amp;&amp;b=1]</code></p><p>布尔表达式 由 <code>左值 操作符 右值</code> 构成, 左值/右值 是一个 值表达式</p><p>下面分别介绍 <a href="#value-exp">值表达式</a> 和 <a href="#attr-operator">操作符</a></p><h2 id="value-exp" tabindex="-1">值表达式 <a class="header-anchor" href="#value-exp" aria-label="Permalink to &quot;值表达式 {#value-exp}&quot;">​</a></h2><p>值表达式分两类: 变量 和 字面量, 下图是关系表格</p>',32)),e[17]||(e[17]=t("table",null,[t("thead",null,[t("tr",null,[t("th",{colspan:"2"},[t("div",{"text-center":""},"值表达式")]),t("th",null,"示例")])]),t("tbody",null,[t("tr",null,[t("td",{rowspan:"3"},"变量"),t("td",null,"标识符"),t("td",null,[t("code",null," a ")])]),t("tr",null,[t("td",null,"成员表达式"),t("td",null,[t("code",null,"a.b")])]),t("tr",null,[t("td",null,"调用表达式"),t("td",null,[t("code",null,"a(b,c)")])]),t("tr",null,[t("td",{rowspan:"4"},"字面量"),t("td",null,"null"),t("td",null,[t("code",null,"null")])]),t("tr",null,[t("td",null,"boolean"),t("td",null,[t("code",null,"false")])]),t("tr",null,[t("td",null,"int"),t("td",null,[t("code",null,"114514")])]),t("tr",null,[t("td",null,"string"),t("td",null,[t("code",null,"'ikun'")])])])],-1)),e[18]||(e[18]=l('<p>每个值表达式都有其类型, 可细分为两类</p><p>基础类型: <code>null</code> <code>boolean</code> <code>int</code> <code>string</code></p><p>对象类型: <code>object</code></p><p>对象类型可细分为 <code>context</code> 和 <code>node</code> 两种类型</p><p>比如选择器 <code>[parent=null]</code> 代表选择一个父节点是 null 的节点, 即根节点</p><p>上面的 <code>parent</code> 属于 值表达式/变量/标识符, 类型是 <code>node</code></p><p><code>context</code> 类型指代当前节点的上下文, 当想使用不属于 <code>node</code> 上的属性方法时就需要 <code>context</code></p><p>你可以在 <a href="./node">选择器-属性方法</a> 查看所有类型和对应属性方法</p><h3 id="var" tabindex="-1">变量 <a class="header-anchor" href="#var" aria-label="Permalink to &quot;变量 {#var}&quot;">​</a></h3><p>首先需要了解 <strong>标识符</strong>: 正则匹配 <code>^[_a-zA-Z][a-zA-Z0-9_]*$</code> 并且不是 <code>null</code>/<code>true</code>/<code>false</code> 的字符串</p><p>示例合法变量名: <code>a</code> <code>ikun</code> <code>manbaout</code>, 下面可输入字符测试否是合法</p>',11)),t("div",h,[a(i)]),e[19]||(e[19]=l('<hr><p>接下来了解 <strong>成员表达式</strong> <code>a.b</code>, 它被 <code>.</code> 分为两个部分, 前部分是另一个变量, 后部分是一个标识符作为属性</p><p>同理 <code>a.b.c</code> 也是一个 成员表达式, 其中 <code>a.b</code> 是它的变量部分, <code>c</code> 是一个合法的标识符作为属性</p><p>根据上面标识符的规则, <code>a.1</code>, <code>a.null</code>, <code>a.true</code> 都是非法成员表达式</p><hr><p>最后了解 <strong>调用表达式</strong> <code>a(b,c)</code>, 它由两个部分构成, <code>(</code> 的左侧 <code>a</code> 是一个变量作为 调用者</p><p><code>(b,c)</code> 作为调用参数(值类型), 调用参数数量可以是 0 或任意个, 即 <code>a()</code> 也是合法的</p><p>合法的其它例子: <code>a.b(c,d).e(f).g(1,2,true)</code></p><p>需要注意调用者不能是 调用表达式, 即 <code>a()()</code> 非法</p><h3 id="literal" tabindex="-1">字面量 <a class="header-anchor" href="#literal" aria-label="Permalink to &quot;字面量 {#literal}&quot;">​</a></h3><p>根据上面的表格, 字面量有 4 种: <code>null</code>, <code>boolean</code>, <code>int</code>, <code>string</code></p><ul><li>null</li><li>boolean 使用 <code>true</code>/<code>false</code></li><li>int 匹配 <code>^-?[0-9]$</code>, 即十进制整数, 示例 <code>-1</code>,<code>0</code>,<code>1</code>, 不支持 <code>+1</code> 这种写法</li><li>string 使用 &#39; ` &quot; 之一成对包裹, 内部字符转义使用 <code>\\</code><br> 所有的转义字符示例 <code>\\\\</code>, <code>\\&#39;</code>, <code>\\&quot;</code>, <code>\\`</code>, <code>\\n</code>, <code>\\r</code>, <code>\\t</code>, <code>\\b</code>, <code>\\xfF</code>, <code>\\uffFF</code><br> 不支持多行字符, 处于 <code>[0, 0x1F]</code> 的控制字符必须使用转义字符表示</li></ul><p>此外使用 string 时需要了解 <a href="#nest-escape">嵌套转义字符</a> 以避免出现错误</p><h2 id="attr-operator" tabindex="-1">操作符 <a class="header-anchor" href="#attr-operator" aria-label="Permalink to &quot;操作符 {#attr-operator}&quot;">​</a></h2><p>操作符 用于连接两个 值表达式</p><table tabindex="0"><thead><tr><th style="text-align:center;">操作符</th><th style="text-align:center;">名称</th><th style="text-align:center;">说明</th></tr></thead><tbody><tr><td style="text-align:center;">=</td><td style="text-align:center;">equal</td><td style="text-align:center;">等于</td></tr><tr><td style="text-align:center;">!=</td><td style="text-align:center;">notEqual</td><td style="text-align:center;">不等于</td></tr><tr><td style="text-align:center;">&gt;</td><td style="text-align:center;">more</td><td style="text-align:center;">大于</td></tr><tr><td style="text-align:center;">&gt;=</td><td style="text-align:center;">moreEqual</td><td style="text-align:center;">大于或等于</td></tr><tr><td style="text-align:center;">&lt;</td><td style="text-align:center;">less</td><td style="text-align:center;">小于</td></tr><tr><td style="text-align:center;">&lt;=</td><td style="text-align:center;">lessEqual</td><td style="text-align:center;">小于或等于</td></tr><tr><td style="text-align:center;">^=</td><td style="text-align:center;">startsWith</td><td style="text-align:center;">以...开头</td></tr><tr><td style="text-align:center;">!^=</td><td style="text-align:center;">notStartsWith</td><td style="text-align:center;">不以...开头</td></tr><tr><td style="text-align:center;">*=</td><td style="text-align:center;">contains</td><td style="text-align:center;">包含...</td></tr><tr><td style="text-align:center;">!*=</td><td style="text-align:center;">notContains</td><td style="text-align:center;">不包含...</td></tr><tr><td style="text-align:center;">$=</td><td style="text-align:center;">endsWith</td><td style="text-align:center;">以...结尾</td></tr><tr><td style="text-align:center;">!$=</td><td style="text-align:center;">notEndsWith</td><td style="text-align:center;">不以...结尾</td></tr><tr><td style="text-align:center;">~=</td><td style="text-align:center;">matches</td><td style="text-align:center;">正则匹配...</td></tr><tr><td style="text-align:center;">!~=</td><td style="text-align:center;">notMatches</td><td style="text-align:center;">正则不匹配...</td></tr></tbody></table><p>附加说明: <code>matches</code>/<code>notMatches</code> 要求 值 必须是合法的 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html" target="_blank" rel="noreferrer">Java/Kotlin 正则表达式</a>, 否则提示语法错误</p><p>并且 <code>matches</code>/<code>notMatches</code> 右侧的值只能是 字面量/字符串</p><p>操作符只能使用在对应的类型的值, 比如 <code>a&gt;&#39;&#39;</code> 类型不匹配, 将提示 <code>非法类型</code></p><p>下面表格中 <code>-</code> 表示类型不匹配</p><table tabindex="0"><thead><tr><th style="text-align:center;"></th><th style="text-align:center;">null</th><th style="text-align:center;">boolean</th><th style="text-align:center;">int</th><th style="text-align:center;">string</th></tr></thead><tbody><tr><td style="text-align:center;">=</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!=</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">&gt;</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;">&gt;=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;">&lt;</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;">&lt;=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td><td style="text-align:center;">-</td></tr><tr><td style="text-align:center;">^=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!^=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">*=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!*=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">$=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!$=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">~=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr><tr><td style="text-align:center;">!~=</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">-</td><td style="text-align:center;">✔</td></tr></tbody></table><p>除 <code>=</code>/<code>!=</code> 以外的操作符, 当节点属性是 null 时表达式为 <code>false</code></p><ul><li>a &gt; 233</li><li>a &gt;= 233</li><li>a &lt; 233</li><li>a &lt;= 233</li><li>a ^= &#39;xxx&#39;</li><li>a !^= &#39;xxx&#39;</li><li>a *= &#39;xxx&#39;</li><li>a !* &#39;xxx&#39;</li><li>a $= &#39;xxx&#39;</li><li>a !$= &#39;xxx&#39;</li><li>a ~= &#39;xxx&#39;</li><li>a !~= &#39;xxx&#39;</li></ul><p>即当 a 是 <code>null</code> 时以上表达式为 <code>false</code></p><p>你可能会对 <code>a !$= &#39;xxx&#39;</code> 在 a 是 <code>null</code> 表达式为 <code>false</code> 感到奇怪</p><p>那你可以换一种写法使用 <code>a=null || a!$=&#39;xxx&#39;</code> 或 <code>!(a$=&#39;xxx&#39;)</code></p><h2 id="connect" tabindex="-1">关系选择 <a class="header-anchor" href="#connect" aria-label="Permalink to &quot;关系选择 {#connect}&quot;">​</a></h2><p>关系选择器 由 关系操作符 和 关系表达式 构成, 用于连接两个属性选择器</p><p>简单示例: <code>div &gt; a</code>, 它 表示/约束 两个节点之间的关系, 下面介绍 <a href="#connect-operator">关系操作符</a> 和 <a href="#connect-exp">关系表达式</a></p><h3 id="connect-exp" tabindex="-1">关系表达式 <a class="header-anchor" href="#connect-exp" aria-label="Permalink to &quot;关系表达式 {#connect-exp}&quot;">​</a></h3><p>关系表达式 表示查找节点的范围, 有两种</p><ul><li>元组表达式 <code>(a1,a2,a3,a_n)</code>, 其中 a1, a2, a3, a_n 是常量有序递增正整数, 示例 <code>(1)</code>, <code>(2,3,5)</code></li><li>多项式表达式 <code>(an+b)</code>, 其中 a 和 b 是常量整数, 它是元组表达式的另一种表示, 这个元组的数满足集合 <code>{an+b|an+b&gt;=1,n&gt;=1}</code> 如果集合为空集则表达式非法<br> 当 a&lt;=0 时, 它具有等价的元组表达式<br> 示例 <code>(-n+4)</code> 等价于 <code>(1,2,3)</code><br> 示例 <code>(-3n+10)</code> 等价于 <code>(1,4,7)</code><br> 当 a&gt;0 时, 它表示无限的元组表达式<br> 示例 <code>(n)</code>, 它表示 <code>(1,2,3,...)</code> 一个无限的元组<br> 示例 <code>(2n-1)</code>, 它表示 <code>(1,3,5,...)</code> 一个无限的元组</li></ul><h3 id="connect-operator" tabindex="-1">关系操作符 <a class="header-anchor" href="#connect-operator" aria-label="Permalink to &quot;关系操作符 {#connect-operator}&quot;">​</a></h3><p>关系操作符 表示查找节点的方向, 有 6 种关系操作符</p><ul><li>前 5 种为 <code>+</code>, <code>-</code>, <code>&gt;</code>, <code>&lt;</code>, <code>&lt;&lt;</code>, 表示节点的相对位置</li></ul>',35)),a(o,null,{default:r(()=>[t("table",x,[e[15]||(e[15]=t("thead",null,[t("tr",null,[t("th",{style:{"text-align":"center"}},"操作符"),t("th",{style:{"text-align":"center"}},"名称"),t("th",{style:{"text-align":"center"}},"图例"),t("th",{style:{"text-align":"center"}},"选择器")])],-1)),t("tbody",null,[t("tr",null,[e[0]||(e[0]=t("td",{style:{"text-align":"center"}},"+",-1)),e[1]||(e[1]=t("td",{style:{"text-align":"center"}},"前置兄弟节点",-1)),t("td",u,[a(d,{src:"0020.png",width:"250"})]),e[2]||(e[2]=t("td",{style:{"text-align":"center"}},[t("a",{href:"https://i.gkd.li/i/14045424?gkd=KiArIFtfaWQ9MzNd",target:"_blank",rel:"noreferrer"},"* + [_id=33]")],-1))]),t("tr",null,[e[3]||(e[3]=t("td",{style:{"text-align":"center"}},"-",-1)),e[4]||(e[4]=t("td",{style:{"text-align":"center"}},"后置兄弟节点",-1)),t("td",y,[a(d,{src:"0021.png",width:"250"})]),e[5]||(e[5]=t("td",{style:{"text-align":"center"}},[t("a",{href:"https://i.gkd.li/i/14045424?gkd=KiAtIFtfaWQ9MzJd",target:"_blank",rel:"noreferrer"},"* - [_id=32]")],-1))]),t("tr",null,[e[6]||(e[6]=t("td",{style:{"text-align":"center"}},">",-1)),e[7]||(e[7]=t("td",{style:{"text-align":"center"}},"祖先节点",-1)),t("td",k,[a(d,{src:"0022.png",width:"250"})]),e[8]||(e[8]=t("td",{style:{"text-align":"center"}},[t("a",{href:"https://i.gkd.li/i/14045424?gkd=KiA-IFtfaWQ9OTBd",target:"_blank",rel:"noreferrer"},"* > [_id=90]")],-1))]),t("tr",null,[e[9]||(e[9]=t("td",{style:{"text-align":"center"}},"<",-1)),e[10]||(e[10]=t("td",{style:{"text-align":"center"}},"直接子节点",-1)),t("td",b,[a(d,{src:"0023.png",width:"250"})]),e[11]||(e[11]=t("td",{style:{"text-align":"center"}},[t("a",{href:"https://i.gkd.li/i/14045424?gkd=KiA8IFtfaWQ9ODld",target:"_blank",rel:"noreferrer"},"* < [_id=89]")],-1))]),t("tr",null,[e[12]||(e[12]=t("td",{style:{"text-align":"center"}},"<<",-1)),e[13]||(e[13]=t("td",{style:{"text-align":"center"}},"子孙节点(深度先序)",-1)),t("td",m,[a(d,{src:"0024.png",width:"250"})]),e[14]||(e[14]=t("td",{style:{"text-align":"center"}},[t("a",{href:"https://i.gkd.li/i/14045424?gkd=KiA8PDIgW19pZD0yOV0",target:"_blank",rel:"noreferrer"},"* <<2 [_id=29]")],-1))])])])]),_:1}),e[20]||(e[20]=l('<ul><li>另外一种为 <code>-&gt;</code>, 用于查询过程中, 表示当前节点的之前节点</li></ul><p>比如 <code>C -&gt;1 B &gt; A</code>, 由 A 找到 B 后, 此时的 C 就是 B 的之前节点即 A, 这适合想快速去之前节点重新查询关系的场景</p><p>将 关系操作符 和 关系表达式 连接起来就得到了 关系选择器</p><p><code>A +(a1,a2,a3,a_n) B</code> : A 是 B 的前置兄弟节点, 并且 A.index 满足 B.index-(a_m), 其中 a_m 是元组的任意一个数字</p><p><code>A -(a1,a2,a3,a_n) B</code> : A 是 B 的后置兄弟节点, 并且 A.index 满足 B.index+(a_m)</p><p><code>A &gt;(a1,a2,a3,a_n) B</code> : A 是 B 的祖先节点, 并且 A.depth 满足 B.depth-(a_m), 根节点的 depth=0</p><p><code>A &lt;(a1,a2,a3,a_n) B</code> : A 是 B 的直接子节点, 并且 A.index 满足 a_m-1</p><p><code>A &lt;&lt;(a1,a2,a3,a_n) B</code> : A 是 B 的子孙节点, 并且 A.order 满足 a_m-1, A.order 是深度优先先序遍历的索引</p><p><code>N -&gt;(a1,a2,a3,a_n) B &gt; A</code>, N 是 B 的之前(右侧)的已查询节点, 并且 N.index 满足 B.index-(a_m), index 顺序为 (n,n-1,...,2,1,0)</p><h3 id="connect-shortcut" tabindex="-1">表达式简写 <a class="header-anchor" href="#connect-shortcut" aria-label="Permalink to &quot;表达式简写 {#connect-shortcut}&quot;">​</a></h3><p>一般情况下, 并不需要写严格完整的表达式, 使用简化写法更方便快捷</p><p>下面是一些特殊情况下的简写表示</p><p>当 a=0 或 b=0 时, 括号可以省略, 以 <code>+</code> 为例</p><ul><li><code>A +(3n+0) B</code> -&gt; <code>A +(3n) B</code> -&gt; <code>A +3n B</code></li><li><code>A +(0n+3) B</code> -&gt; <code>A +(+3) B</code> -&gt; <code>A +3 B</code></li></ul><p>当 a=0 且 b=1 时, an+b 可以省略, 以 <code>+</code> 为例</p><ul><li><code>A +(0n+1) B</code> -&gt; <code>A + B</code></li></ul><p>此外 <code>A + B</code>,<code>A &gt; B</code> 都与等价的 CSS 语法语义相同</p><p>当 a=1 且 b=0 且操作符是 <code>&gt;</code>, 可以进一步简写, 比如</p><ul><li><code>A &gt;(1n+0) B</code> -&gt; <code>A &gt;n B</code> -&gt; <code>A B</code></li></ul><p>这与等价的 CSS 语法语义相同</p><h2 id="advanced" tabindex="-1">进阶 <a class="header-anchor" href="#advanced" aria-label="Permalink to &quot;进阶 {#advanced}&quot;">​</a></h2><p>正如上述的 <a href="#attr">属性选择</a> 一样, 选择器也可以组合为 逻辑表达式/取反表达式</p><p>只有一个格式要求: 单个选择器必须强制使用 <code>()</code> 包裹</p><ul><li><p>一般选择器 -&gt; <code>A + B</code> 或 <code>(A + B)</code></p></li><li><p>逻辑或表达式 -&gt; <code>(A + B) || (M &gt; N)</code>, 表示匹配节点满足 <code>A + B</code> 或 <code>M &gt; N</code></p><p>匹配结果遵循 <code>||</code> 的短路原则, 优先判断左侧的 <code>A + B</code>, 如果满足 <code>A + B</code> 那就是 <code>B</code>. 不满足 <code>A + B</code> 时, 判断右侧表达式, 如果满足 <code>M &gt; N</code> 那就是 <code>N</code>, 当然也可以在内部使用 <code>@</code> 自定义目标节点</p></li><li><p>逻辑且表达式 -&gt; <code>(A + B) &amp;&amp; (M &gt; N)</code>, 表示匹配节点满足 <code>A + B</code> 和 <code>M &gt; N</code>, 结果取右侧表达式结果, 结果为 <code>N</code>, 当然也可以在内部使用 <code>@</code> 自定义目标节点</p></li><li><p>取反表达式 -&gt; <code>!(A + B)</code>, 表示匹配节点应不满足 <code>A + B</code>, 需要注意的是 <code>!(@A + B)</code> 中的 <code>@</code> 是无效的, 它的匹配结果只能是末尾节点 <code>B</code></p></li></ul><p>此外 逻辑且表达式 的优先级更高, 即 <code>(A + B) || (C + B) &amp;&amp; (M &gt; N)</code> 等价于 <code>(A + B) || ((C + B) &amp;&amp; (M &gt; N))</code></p><h2 id="example" tabindex="-1">示例 <a class="header-anchor" href="#example" aria-label="Permalink to &quot;示例 {#example}&quot;">​</a></h2><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>@LinearLayout &gt; TextView[id=`com.byted.pangle:id/tt_item_tv`][text=`不感兴趣`]</span></span></code></pre></div><p>选择器从末尾开始查找, 首先找到 id=`com.byted.pangle:id/tt_item_tv` 和 text=`不感兴趣` 的 TextView, 并且父节点是 LinearLayout 的节点</p><p>此时我们得到两个节点 [LinearLayout, TextView] 根据 <code>@</code> 知道目标节点是 LinearLayout</p><p>实际上它与</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>TextView[id=`com.byted.pangle:id/tt_item_tv`][text=`不感兴趣`] &lt;n LinearLayout</span></span></code></pre></div><p>的目标匹配节点是等价的, 但是在查询算法时间复杂度上, 后者更慢</p><p>如下是网页无障碍快照审查工具, 使用它的搜索框的选择器查询可以实时测试编写的选择器</p><ul><li><a href="https://i.gkd.li/i/14045424" target="_blank" rel="noreferrer">快照-14045424</a></li><li><a href="https://i.gkd.li/i/14034770" target="_blank" rel="noreferrer">快照-14034770</a></li><li><a href="https://i.gkd.li/i/14031920" target="_blank" rel="noreferrer">快照-14031920</a></li><li><a href="https://i.gkd.li/i/14018243" target="_blank" rel="noreferrer">快照-14018243</a></li><li><a href="https://i.gkd.li/i/14011298" target="_blank" rel="noreferrer">快照-14011298</a></li><li><a href="https://i.gkd.li/i/13999908" target="_blank" rel="noreferrer">快照-13999908</a></li></ul><h2 id="note" tabindex="-1">一些注意 <a class="header-anchor" href="#note" aria-label="Permalink to &quot;一些注意 {#note}&quot;">​</a></h2><h3 id="match-order" tabindex="-1">匹配顺序 <a class="header-anchor" href="#match-order" aria-label="Permalink to &quot;匹配顺序 {#match-order}&quot;">​</a></h3><p>选择器的匹配顺序是 <strong>从右往左匹配</strong></p><p>例如 <code>FrameLayout &gt; TextView</code>, 它是先从 根节点/事件节点 找到 <code>TextView</code>, 然后再判断 parent 是不是 <code>FrameLayout</code></p><p>并不是先找到 <code>FrameLayout</code> 然后再判断 child 是否有 <code>TextView</code></p><p>同时在 <a href="https://i.gkd.li/i/15747758?gkd=RnJhbWVMYXlvdXQgPiBUZXh0Vmlldw" target="_blank" rel="noreferrer">选择器路径视图</a> 也会标明匹配顺序和查找方向</p><h3 id="regex-optimization" tabindex="-1">正则表达式优化 <a class="header-anchor" href="#regex-optimization" aria-label="Permalink to &quot;正则表达式优化 {#regex-optimization}&quot;">​</a></h3><p>对 <code>matches</code>/<code>notMatches</code> 的优化: 如果正则表达式满足下面的条件, 选择器将使用内置的简单的函数匹配, 而不是真正地去运行一个正则表达式</p><ul><li><code>[text~=&quot;(?is)abc.*&quot;]</code> -&gt; <code>startsWith(&#39;abc&#39;, ignoreCase = true)</code></li><li><code>[text~=&quot;(?is).*abc.*&quot;]</code> -&gt; <code>contains(&#39;abc&#39;, ignoreCase = true)</code></li><li><code>[text~=&quot;(?is).*abc&quot;]</code> -&gt; <code>endsWith(&#39;abc&#39;, ignoreCase = true)</code></li><li><code>[text!~=&quot;(?is)abc.*&quot;]</code> -&gt; <code>notStartsWith(&#39;abc&#39;, ignoreCase = true)</code></li><li><code>[text!~=&quot;(?is).*abc.*&quot;]</code> -&gt; <code>notContains(&#39;abc&#39;, ignoreCase = true)</code></li><li><code>[text!~=&quot;(?is).*abc&quot;]</code> -&gt; <code>notEndsWith(&#39;abc&#39;, ignoreCase = true)</code></li></ul><p>上面的 <code>abc</code> 指代不包含 <code>\\^$.?*|+()[]{}</code> 这类特殊正则字符的任意字符串, 如 <code>ikun</code> 符合, <code>ikun?</code> 不符合, <code>ignoreCase = true</code> 表示忽略大小写</p><p>简单来说就是如果你只想忽略大小写去简单匹配或不匹配一些字符串, 那么直接使用上面的格式</p><h3 id="regex-multiplatform" tabindex="-1">正则表达式一致性 <a class="header-anchor" href="#regex-multiplatform" aria-label="Permalink to &quot;正则表达式一致性 {#regex-multiplatform}&quot;">​</a></h3><p>由于 选择器 需要同时满足 浏览器/Js(审查工具), Android/Java(GKD) 运行, 而这两个平台的正则表达式的底层实现和语法表示略有不同</p><p>因此为了在 Js 端实现和 Java 一致的正则表达式规范, 网页审查工具借助 <a href="https://kotlinlang.org/docs/wasm-overview.html" target="_blank" rel="noreferrer">Kotlin Wasm</a> 将正则表达式的 matches 函数接口编译为 wasm 提供给 Js 调用</p><p>Kotlin Wasm 需要你的浏览器支持 <a href="https://developer.chrome.com/blog/wasmgc?hl=zh-cn" target="_blank" rel="noreferrer">WasmGC</a>, 也就是版本需要满足下列条件</p>',49)),a(d,{src:"0025.png"}),e[21]||(e[21]=l(`<p>如果你在 nodejs 使用 gkd 选择器, 需要 node&gt;=22 版本</p><p>如果你的 浏览器/nodejs 版本不满足, 正则表达式将自动回退到 Js 端实现, 以下是在 Js 端使用正则表达式需要注意的地方</p><p>比如上面的正则表达式优化例子中开头的 <code>(?is)</code> 是 Java 正则表达式的 inline flags 语法, 但实际上 Js 并不支持这样写, 只是选择器内部做了一些兼容让它支持</p><p>并且选择器的 Js 端只兼容在开头的 flags, 在内部的 flags 不支持, 此外 Java 和 Js 支持的 flags 也有不同, 某些特殊的表达式表现也不一致</p><p>总之不要使用太过复杂(多复杂我也不知道)的正则表达式, 某些正则表达式有可能在审查工具上匹配, 但是在 GKD 上不匹配</p><p>如果你能确保正则表达式在 Js 和 Java/Kotlin 的匹配行为一致, 那就没问题</p><p>总之两种情况</p><ul><li>高版本 浏览器/nodejs 可以使用 <strong>完整一致</strong> 的正则表达式</li><li>低版本 浏览器/nodejs 使用 <strong>小范围不完整不一致</strong> 的正则表达式</li></ul><p>如果你的选择器没有使用正则表达式则不用关心此问题</p><h3 id="nest-escape" tabindex="-1">嵌套转义字符 <a class="header-anchor" href="#nest-escape" aria-label="Permalink to &quot;嵌套转义字符 {#nest-escape}&quot;">​</a></h3><p>转义字符一般用于表示不能直接显示具体特殊意义的字符</p><p>对于 GKD 的选择器而言, 转义字符使用示例如下</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>TextView[text=&quot;\\\\\\n&quot;]</span></span></code></pre></div><p>这表示选择一个 TextView, 它的 text 长度为 2, 开头是 <code>\\</code>, 末尾是换行</p><p>这和平常写的代码里面的 string 声明用法一模一样</p><p>但是选择器最终放在规则的字段里面, 也就是这个选择器字符串处于 JSON 的 string 内</p><p>如果你想当然地直接手动复制插入到编辑器里出现下面这种规则</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
2
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;TextView[text=&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
3
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>由于 JSON 也有自己的转义, 规则与 GKD 的转义基本一致, 因此你的实际选择器实际变成了</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>TextView[text=&quot;\\</span></span>
4
- <span class="line"><span>&quot;]</span></span></code></pre></div><p>这明显是一个非法的选择器</p><p>解决方式也很简单, 手动插入的时候将你的 <code>\\</code> 变成 <code>\\\\</code>, 正确的规则如下</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
5
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;TextView[text=&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">n&quot;]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
6
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>这是普通字符串的情况, 如果你使用 <code>~=</code>/<code>!~=</code>, 则还需要多转义一次, 因为正则表达式也有自己的转义字符</p><p>比如我们想匹配一个 TextView 并且 text 是任意一个数字, 我们想当然地用 <code>\\d</code>, 所以你可能会写</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>TextView[text~=&quot;\\d&quot;]</span></span></code></pre></div><p>但是你在网页审查工具输入并回车搜索会提示 非法选择器, 这是因为 <code>\\d</code> 处于 GKD 的 string 内, 会被转义一次, 正确的用法是写 <code>\\\\d</code></p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>TextView[text~=&quot;\\\\d&quot;]</span></span></code></pre></div><p>实际上这部分等价的 Kotlin/Java 代码可以简单是</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>Regex(&quot;\\\\d&quot;).matches(text)</span></span></code></pre></div><p>接下来把选择器放到规则里面, 根据上面的描述, 规则应该是</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
7
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;TextView[text~=&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">d&quot;]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
8
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>如果想用正则匹配一个 <code>\\</code> 字符, 最终规则应该写成</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
9
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;TextView[text~=&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
10
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>实现和上面相同的结果, 即用 <code>=</code> 匹配一个 <code>\\</code> 字符, 最终规则应该写成</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
11
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;TextView[text=&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">\\\\\\\\</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
12
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>类似的问题 <a href="https://github.com/gkd-kit/gkd/issues/603" target="_blank" rel="noreferrer">gkd-kit/gkd#603</a></p>`,37))])}const w=s(g,[["render",v]]);export{A as __pageData,w as default};
@@ -1 +0,0 @@
1
- import{_ as r,B as l,c as p,ab as n,j as t,a,G as o,w as d,o as h}from"./chunks/framework.CAQWXItu.js";const x=JSON.parse('{"title":"快照审查","description":"","frontmatter":{},"headers":[],"relativePath":"guide/snapshot.md","filePath":"guide/snapshot.md","lastUpdated":1740237462000}'),u={name:"guide/snapshot.md"};function b(c,e,g,k,m,f){const i=l("GImg"),s=l("NImageGroup");return h(),p("div",null,[e[12]||(e[12]=n('<h1 id="title" tabindex="-1">快照审查 <a class="header-anchor" href="#title" aria-label="Permalink to &quot;快照审查 {#title}&quot;">​</a></h1><p>关于快照的一些知识</p><h2 id="what-is-snapshot" tabindex="-1">什么是快照 <a class="header-anchor" href="#what-is-snapshot" aria-label="Permalink to &quot;什么是快照 {#what-is-snapshot}&quot;">​</a></h2><p>快照是一个 zip 文件, 保存了设备在某个时间点的状态, 包含以下内容</p><ul><li>截图</li><li>设备信息</li><li>界面信息</li><li>无障碍节点信息</li></ul><p>以前开发者和用户必须下载指定应用然后到指定界面使用类似 autojs 之类的工具才能审查界面</p><p>有了快照之后, 用户只需要在指定页面抓取快照分享给开发者即可</p><p>另外对于某些出现频率极低的界面, 快照也能直接保留这些界面的状态, 无需每次等待出现</p><h2 id="capture-snapshot" tabindex="-1">抓取/捕获快照 <a class="header-anchor" href="#capture-snapshot" aria-label="Permalink to &quot;抓取/捕获快照 {#capture-snapshot}&quot;">​</a></h2><p>在 GKD 内可以通过多种方式抓取快照, 需要一些前置条件</p><p>抓取快照时必须<strong>开启无障碍权限</strong>, 否则无法获取 界面信息 和 无障碍节点信息</p><p>如果你的设备满足 Android&gt;=11, GKD 可以通过 无障碍权限 获取截图, 否则需要额外开启截屏服务</p><p>到 <code>主页-设置-高级模式-截屏服务</code> 开启即可</p><p>当 Android&lt;=10 且不开启截屏服务时 GKD 会使用 同尺寸透明图片 作为截图保存到快照里</p><p>以下是抓取快照的方式</p><h3 id="by-button" tabindex="-1">通过悬浮窗按钮 <a class="header-anchor" href="#by-button" aria-label="Permalink to &quot;通过悬浮窗按钮 {#by-button}&quot;">​</a></h3><p>打开 <code>主页-设置-高级模式-悬浮窗服务</code> 后界面会出现一个可拖动的按钮, 在任意界面点击这个按钮即可抓取快照</p><h3 id="by-tile" tabindex="-1">通过快捷开关 <a class="header-anchor" href="#by-tile" aria-label="Permalink to &quot;通过快捷开关 {#by-tile}&quot;">​</a></h3><p>下拉打开状态栏, 左右滑动切换到有图标的界面, 点击添加或编辑, 在应用快捷开关找到 <code>捕获快照</code>, 图标和上面介绍的悬浮窗按钮一样</p><p>添加这个快捷开关到状态栏界面, 添加完毕后在任意界面下拉状态栏点击这个图标即可抓取快照</p><h3 id="by-screenshot" tabindex="-1">通过截屏快照 <a class="header-anchor" href="#by-screenshot" aria-label="Permalink to &quot;通过截屏快照 {#by-screenshot}&quot;">​</a></h3><p>打开 <code>主页-设置-高级模式-截屏快照</code>, 某些手机截屏时会发出特殊的事件, GKD 可以抓取这些事件后触发抓取快照</p><h3 id="by-inspect" tabindex="-1">通过审查工具 <a class="header-anchor" href="#by-inspect" aria-label="Permalink to &quot;通过审查工具 {#by-inspect}&quot;">​</a></h3><p>首先打开 <code>主页-设置-高级模式-HTTP服务</code>, 在 <a href="https://i.gkd.li/device" target="_blank" rel="noreferrer">连接设备</a> 输入刚刚出现的地址后连接</p><p>连接成功后点击右侧的 <code>快照</code> 按钮即可抓取快照</p><h3 id="by-invoke-service" tabindex="-1">通过调用服务 <a class="header-anchor" href="#by-invoke-service" aria-label="Permalink to &quot;通过调用服务 {#by-invoke-service}&quot;">​</a></h3><p>GKD 内部暴露了一个服务, 外部应用(某些快捷手势应用)可以启动这个服务, 启动后将抓取当前界面的快照, 它的路径是</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>li.songe.gkd.debug.SnapshotActionService</span></span></code></pre></div><p>通过这个服务, 你可以通过自定义手势来捕获快照, 可在 <a href="https://github.com/gkd-kit/gkd/issues/253" target="_blank" rel="noreferrer">gkd-kit/gkd#253</a> 了解更多</p><h2 id="how-to-upload" tabindex="-1">上传原理 <a class="header-anchor" href="#how-to-upload" aria-label="Permalink to &quot;上传原理 {#how-to-upload}&quot;">​</a></h2><p>当你使用审查工具生成分享链接时, 审查工具会自动帮你上传文件到 Github 后得到链接</p><p>相当于自动化以下行为</p><ul><li>从审查工具下载快照为 file.zip 文件到电脑上</li><li>登录 Github 并转到任意能上传文件或者评论的公开页面</li><li>将刚刚的文件拖动进输入框, 文件链接会自动生成</li></ul><p>当在 GKD 内生成链接时也是一样的原理, 不同之处在于</p><p>网页版的审查工具直接通过 <a href="https://github.com/gkd-kit/network-extension" target="_blank" rel="noreferrer">油猴脚本</a> 获取上传凭证</p><p>而 GKD 内需要手动输入上传凭证, 也就是需要手动输入 Github Cookie</p><p>可通过如下步骤获取 Github Cookie</p><h3 id="get-cookie-on-pc" tabindex="-1">在电脑上获取 <a class="header-anchor" href="#get-cookie-on-pc" aria-label="Permalink to &quot;在电脑上获取 {#get-cookie-on-pc}&quot;">​</a></h3>',38)),t("ul",null,[e[1]||(e[1]=t("li",null,[a("在浏览器打开 "),t("a",{href:"https://github.com",target:"_blank",rel:"noreferrer"},"Github"),a(" 登录账号")],-1)),e[2]||(e[2]=t("li",null,[a("在 "),t("a",{href:"https://github.com",target:"_blank",rel:"noreferrer"},"https://github.com"),a(" 使用 f12 打开调试面板, 选中 网络-文档 后按 f5 刷新页面, 会出来一条 "),t("code",null,"github.com"),a(" 的记录")],-1)),t("li",null,[e[0]||(e[0]=a("点击这条记录, 选中 标头-请求标头-Cookie 的右侧文字, 按下 Ctrl+C 复制即可")),o(i,{src:"0034.png"})]),e[3]||(e[3]=t("li",null,"复制成功后, 到 GKD 内 高级设置-快照-Github Cookie 编辑填入保存即可",-1))]),e[13]||(e[13]=t("h3",{id:"get-cookie-on-phone",tabindex:"-1"},[a("在手机上获取 "),t("a",{class:"header-anchor",href:"#get-cookie-on-phone","aria-label":'Permalink to "在手机上获取 {#get-cookie-on-phone}"'},"​")],-1)),t("ul",null,[e[9]||(e[9]=t("li",null,[a("下载安装 "),t("a",{href:"https://viayoo.com",target:"_blank",rel:"noreferrer"},"Via"),a(" 浏览器")],-1)),e[10]||(e[10]=t("li",null,[a("在浏览器打开 "),t("a",{href:"https://github.com",target:"_blank",rel:"noreferrer"},"Github"),a(" 登录账号")],-1)),t("li",null,[e[5]||(e[5]=a("点击顶部地址栏左侧的图标, 在出现的菜单中点击 ")),e[6]||(e[6]=t("code",null,"查看 Cookies",-1)),e[7]||(e[7]=a(", 出现的弹窗后点击 ")),e[8]||(e[8]=t("code",null,"复制文本",-1)),o(s,null,{default:d(()=>[o(i,{src:"0035.png",class:"w-[45%]"}),e[4]||(e[4]=a()),o(i,{src:"0036.png",class:"w-[45%]"})]),_:1})]),e[11]||(e[11]=t("li",null,"复制成功后, 到 GKD 内 高级设置-快照-Github Cookie 编辑填入保存即可",-1))]),e[14]||(e[14]=n('<h2 id="rm-privacy-info" tabindex="-1">去除隐私信息 <a class="header-anchor" href="#rm-privacy-info" aria-label="Permalink to &quot;去除隐私信息 {#rm-privacy-info}&quot;">​</a></h2><p>当抓取快照时, 图片中可能含有人的名字等敏感信息, 可能需要去除这些信息</p><p>在 GKD 的快照记录界面, 你可以先将快照图片保存到相册, 然后在相册做打马赛克之类的编辑, 之后回到记录界面替换截图即可</p><p>如果敏感信息是文字保留在快照里的节点信息上, 你需要将快照 zip 文件解压缩, 内部有一个 json 文件</p><p>节点信息就在 nodes 数组字段上, 可以直接使用文本替换为等价数量的 <code>*</code>, 修改文件后重新压缩为 zip 重新导入快照即可</p><h2 id="share-note" tabindex="-1">分享须知 <a class="header-anchor" href="#share-note" aria-label="Permalink to &quot;分享须知 {#share-note}&quot;">​</a></h2><p>快照文件是 zip 格式, 你可以直接分享发送文件给其他人</p><p>通过链接分享时, 某些用户喜欢直接复制地址栏链接</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>https://i.gkd.li/snapshot/1734099604908</span></span></code></pre></div><p>这是错误的分享方式, 地址栏复制的链接只能在当前用户浏览器上打开</p><p>其它设备打开这种本地链接只会显示 <code>快照缺失</code></p><p>正确的分享方式是快照页面右上角分享生成的链接</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>https://i.gkd.li/i/18135562</span></span></code></pre></div>',13))])}const y=r(u,[["render",b]]);export{x as __pageData,y as default};
@@ -1,50 +0,0 @@
1
- import{_ as t,B as h,c as e,ab as a,G as n,j as p,a as l,o as k}from"./chunks/framework.CAQWXItu.js";const u=JSON.parse('{"title":"订阅规则","description":"","frontmatter":{},"headers":[],"relativePath":"guide/subscription.md","filePath":"guide/subscription.md","lastUpdated":1740237462000}'),E={name:"guide/subscription.md"};function r(d,s,g,o,F,y){const i=h("GImg");return k(),e("div",null,[s[0]||(s[0]=a(`<h1 id="title" tabindex="-1">订阅规则 <a class="header-anchor" href="#title" aria-label="Permalink to &quot;订阅规则 {#title}&quot;">​</a></h1><p>GKD 的本地规则和远程规则都是订阅, 它们的格式完全一致, 不同之处在于本地订阅用户可以自行更改, 远程规则需要自动更新</p><p>订阅使用 <a href="https://json5.org/" target="_blank" rel="noreferrer">JSON5</a> 语法, JSON5 是 JSON 的兼容扩展, 它无需键引号, 支持注释</p><p>如下便是一个最简单的空规则的订阅文件的内容</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;">// gkd.json5</span></span>
2
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
3
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> id</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">233</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
4
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;Subscription&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
5
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> version</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
6
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> author</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;author&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
7
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> updateUrl</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;https://gist.github.com/lisonge/3f5693182ad4ef5e307be760dba22bcb/raw/gkd.json5&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
8
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> checkUpdateUrl</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;https://gist.github.com/lisonge/3f5693182ad4ef5e307be760dba22bcb/raw/gkd.json5&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
9
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> supportUri</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;https://gkd.li/&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
10
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> categories</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [],</span></span>
11
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> globalGroups</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [],</span></span>
12
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> apps</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [],</span></span>
13
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p>同时你也可以通过下面的链接来添加它</p><div class="language-txt vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">txt</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>https://gist.github.com/lisonge/3f5693182ad4ef5e307be760dba22bcb/raw/gkd.json5</span></span></code></pre></div><p>上面配置的各项字段的说明注释可在 <a href="/api/interfaces/RawSubscription">API</a> 查看</p><h2 id="local-input" tabindex="-1">本地自定义输入 <a class="header-anchor" href="#local-input" aria-label="Permalink to &quot;本地自定义输入 {#local-input}&quot;">​</a></h2><p>下面介绍在 GKD 的规则输入框分别能输入什么类型规则</p><h3 id="app-rule" tabindex="-1">应用规则 <a class="header-anchor" href="#app-rule" aria-label="Permalink to &quot;应用规则 {#app-rule}&quot;">​</a></h3><p>位置: 首页-订阅-本地订阅-应用规则</p>`,12)),n(i,{src:"https://e.gkd.li/76d0bc58-de43-416d-9454-f980e8075660","max-w":"[min(375px,100%)]"}),s[1]||(s[1]=a(`<p>此处可添加 <a href="/api/interfaces/RawApp">应用规则</a>, 如下是一个简单的规则示例, 它由 <a href="https://i.gkd.li/i/13070251?gkd=VGV4dFZpZXdbaWQ9ImNvbS56aGlodS5hbmRyb2lkOmlkL2J0bl9za2lwIl0" target="_blank" rel="noreferrer">快照-13070251</a> 而来</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
14
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> id</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;com.zhihu.android&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
15
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;知乎&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
16
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> groups</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
17
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
18
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
19
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;开屏广告&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
20
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: { </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;TextView[id=&quot;com.zhihu.android:id/btn_skip&quot;]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
21
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> snapshotUrls</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;https://i.gkd.li/i/13070251&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">],</span></span>
22
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
23
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
24
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="app-group-rule" tabindex="-1">应用规则组 <a class="header-anchor" href="#app-group-rule" aria-label="Permalink to &quot;应用规则组 {#app-group-rule}&quot;">​</a></h3><p>位置: 首页-订阅-本地订阅-应用规则-应用</p>`,4)),n(i,{src:"https://e.gkd.li/6497fe09-b019-46b9-8157-d4b21809b4fc","max-w":"[min(375px,100%)]"}),s[2]||(s[2]=a(`<p>此处可添加 <a href="/api/interfaces/RawAppGroup">应用规则组</a>, 如下是一个简单的规则示例, 它由 <a href="https://i.gkd.li/i/14310618?gkd=W3ZpZD0iaW1nX2Nsb3NlIl0" target="_blank" rel="noreferrer">快照-14310618</a> 而来</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
25
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
26
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;全屏广告-会员活动弹窗&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
27
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
28
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
29
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
30
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> fastQuery</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
31
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> activityIds</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;com.blued.android.core.ui.TransparentActivity&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
32
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;[vid=&quot;img_close&quot;]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
33
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> snapshotUrls</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;https://i.gkd.li/i/14310618&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
34
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
35
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
36
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="app-group-rule-disable" tabindex="-1">应用规则组编辑禁用 <a class="header-anchor" href="#app-group-rule-disable" aria-label="Permalink to &quot;应用规则组编辑禁用 {#app-group-rule-disable}&quot;">​</a></h3><p>位置: 首页-订阅-本地订阅-应用规则-应用-规则组右侧三个点-编辑禁用</p>`,4)),n(i,{src:"https://e.gkd.li/8af0bc31-8a23-4342-b2f3-7a9378f9e094","max-w":"[min(375px,100%)]"}),s[3]||(s[3]=a(`<p>此处可添加需要禁用的 <a href="/api/interfaces/RawAppRule#activityids">activityid</a>, 如下是一个简单的 activityid 示例</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">com.tencent.mm.plugin.sns.ui.SnsTimeLineUI</span></span>
37
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">com.tencent.mm.plugin.sns.ui.improve.ImproveSnsTimelineUI</span></span></code></pre></div><h3 id="global-rule" tabindex="-1">全局规则 <a class="header-anchor" href="#global-rule" aria-label="Permalink to &quot;全局规则 {#global-rule}&quot;">​</a></h3><p>位置: 首页-订阅-本地订阅-全局规则</p>`,4)),n(i,{src:"https://e.gkd.li/f51545c0-d3aa-4ec7-87eb-adf927023640","max-w":"[min(375px,100%)]"}),s[4]||(s[4]=a(`<p>此处可添加 <a href="/api/interfaces/RawGlobalRule">全局规则</a>, 如下是一个简单的规则示例</p><div class="language-json5 vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json5</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
38
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
39
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;开屏广告&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
40
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> fastQuery</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
41
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matchTime</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">10000</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
42
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> actionMaximum</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
43
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> resetMatch</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;app&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
44
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rules</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
45
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
46
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> key</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">0</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
47
- <span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> matches</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&#39;[text*=&quot;跳过&quot;][text.length&lt;10][visibleToUser=true]&#39;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
48
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> },</span></span>
49
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
50
- <span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h3 id="category-rule" tabindex="-1">规则类别 <a class="header-anchor" href="#category-rule" aria-label="Permalink to &quot;规则类别 {#category-rule}&quot;">​</a></h3><p>位置: 首页-订阅-本地订阅-规则类别</p>`,4)),n(i,{src:"https://e.gkd.li/6784867c-4fa9-4a06-abf7-b332ba2945de","max-w":"[min(375px,100%)]"}),s[5]||(s[5]=p("p",null,[l("此处可添加 "),p("a",{href:"/api/interfaces/RawCategory"},"规则类别"),l(", 在输入框中输入类别名称点击确认即可")],-1)),s[6]||(s[6]=p("p",null,"TODO",-1))])}const b=t(E,[["render",r]]);export{u as __pageData,b as default};
@@ -1 +0,0 @@
1
- import{_ as t,B as s,c as n,ab as o,G as r,o as i}from"./chunks/framework.CAQWXItu.js";const f=JSON.parse('{"title":"GKD 是什么?","description":"","frontmatter":{},"headers":[],"relativePath":"guide/what-is-gkd.md","filePath":"guide/what-is-gkd.md","lastUpdated":1740237462000}'),l={name:"guide/what-is-gkd.md"};function p(d,e,c,h,g,u){const a=s("ImageTable");return i(),n("div",null,[e[0]||(e[0]=o('<h1 id="title" tabindex="-1">GKD 是什么? <a class="header-anchor" href="#title" aria-label="Permalink to &quot;GKD 是什么? {#title}&quot;">​</a></h1><p>GKD 是一款基于无障碍,高级选择器,订阅规则的自定义屏幕点击 Android 应用</p><h2 id="use-cases" tabindex="-1">使用场景 <a class="header-anchor" href="#use-cases" aria-label="Permalink to &quot;使用场景 {#use-cases}&quot;">​</a></h2><p>通过自定义规则, 在指定界面, 满足指定条件(如屏幕上存在特定文字)时, 点击特定的节点或位置或执行其他操作</p><ul><li><p><strong>快捷操作</strong></p><p>帮助你简化一些重复的流程, 如某些软件自动确认电脑登录</p></li><li><p><strong>跳过流程</strong></p><p>某些软件可能在启动时存在一些烦人的流程, 这个软件可以帮助你点击跳过这个流程</p></li></ul><h2 id="screenshot" tabindex="-1">截图 <a class="header-anchor" href="#screenshot" aria-label="Permalink to &quot;截图 {#screenshot}&quot;">​</a></h2>',6)),r(a,{images:[["0026.png","0027.png","0028.png","0029.png"],["0030.png","0031.png","0032.png","0033.png"]]})])}const _=t(l,[["render",p]]);export{f as __pageData,_ as default};
@@ -1 +0,0 @@
1
- *,:before,:after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgb(0 0 0 / 0);--un-ring-shadow:0 0 rgb(0 0 0 / 0);--un-shadow-inset: ;--un-shadow:0 0 rgb(0 0 0 / 0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgb(147 197 253 / .5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none,[pointer-events-none=""]{pointer-events:none}.visible{visibility:visible}.absolute,[absolute=""]{position:absolute}.fixed,[fixed=""]{position:fixed}.relative,[relative=""]{position:relative}.sticky{position:sticky}.bottom-0,[bottom-0=""]{bottom:0}.bottom-2px,[bottom-2px=""]{bottom:2px}.left-0,[left-0=""]{left:0}.right-0,[right-0=""]{right:0}.right-2px,[right-2px=""]{right:2px}.top-0,[top-0=""]{top:0}[left~="1/1"]{left:100%}.z-100,[z-100=""]{z-index:100}.grid{display:grid}.m14\.386{margin:3.5965rem}.me{margin-inline-end:1rem}.mt-4px,[mt-4px=""]{margin-top:4px}.inline{display:inline}.block{display:block}.inline-block{display:inline-block}.hidden{display:none}.size-16px,[size-16px=""]{width:16px;height:16px}.h-8px,[h-8px=""]{height:8px}.h-9{height:2.25rem}.h-full,[h-full=""]{height:100%}.h1{height:.25rem}.h2{height:.5rem}.h3{height:.75rem}.h4{height:1rem}.h5{height:1.25rem}.h6{height:1.5rem}.w-\[45\%\]{width:45%}.w-8px,[w-8px=""]{width:8px}.w-full,[w-full=""]{width:100%}[max-w~="[min(375px,100%)]"]{max-width:min(375px,100%)}.flex,[flex=""]{display:flex}.flex-shrink{flex-shrink:1}.flex-grow{flex-grow:1}.flex-wrap{flex-wrap:wrap}.table{display:table}.transform{transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin,[animate-spin=""]{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.cursor-progress{cursor:progress}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.items-center,[items-center=""]{align-items:center}.b,.border,[b=""]{border-width:1px}.file\:border-0::file-selector-button{border-width:0px}.rounded-md{border-radius:.375rem}.bg-transparent{background-color:transparent}[bg~="#909399"]{--un-bg-opacity:1;background-color:rgb(144 147 153 / var(--un-bg-opacity))}.file\:bg-transparent::file-selector-button{background-color:transparent}[stroke-width~="2"]{stroke-width:2px}.px{padding-left:1rem;padding-right:1rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pl-4px,[pl-4px=""]{padding-left:4px}[text-center=""]{text-align:center}.text-sm{font-size:.875rem;line-height:1.25rem}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.color-red{--un-text-opacity:1;color:rgb(248 113 113 / var(--un-text-opacity))}.file\:font-medium::file-selector-button{font-weight:500}.underline{text-decoration-line:underline}.opacity-0{opacity:0}.opacity-30,[opacity-30=""]{opacity:.3}.opacity-50,[opacity-50=""],[hover\:opacity~="50"]:hover{opacity:.5}.disabled\:opacity-50:disabled{opacity:.5}.shadow-sm{--un-shadow:var(--un-shadow-inset) 0 1px 2px 0 var(--un-shadow-color, rgb(0 0 0 / .05));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.outline{outline-style:solid}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--un-ring-width:1px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.blur{--un-blur:blur(8px);filter:var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia)}.filter{filter:var(--un-blur) var(--un-brightness) var(--un-contrast) var(--un-drop-shadow) var(--un-grayscale) var(--un-hue-rotate) var(--un-invert) var(--un-saturate) var(--un-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.ease{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-roman-cyrillic.C5lxZ8CY.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-roman-greek-ext.CqjqNYQ-.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-roman-greek.BBVDIX6e.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-roman-vietnamese.BjW4sHH5.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-roman-latin-ext.4ZJIpNVo.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-roman-latin.Di8DUHzh.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-italic-cyrillic-ext.r48I6akx.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-italic-cyrillic.By2_1cv3.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-italic-greek-ext.1u6EdAuj.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-italic-greek.DJ8dCoTZ.woff2) format("woff2");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-italic-vietnamese.BSbpV94h.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-italic-latin-ext.CN1xVJS-.woff2) format("woff2");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:italic;font-weight:100 900;font-display:swap;src:url(https://registry.npmmirror.com/@gkd-kit/docs/0.0.1740389384270/files/.vitepress/dist/assets/inter-italic-latin.C2AdPX0b.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Punctuation SC;font-weight:400;src:local("PingFang SC Regular"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:500;src:local("PingFang SC Medium"),local("Noto Sans CJK SC"),local("Microsoft YaHei");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:600;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}@font-face{font-family:Punctuation SC;font-weight:700;src:local("PingFang SC Semibold"),local("Noto Sans CJK SC Bold"),local("Microsoft YaHei Bold");unicode-range:U+201C,U+201D,U+2018,U+2019,U+2E3A,U+2014,U+2013,U+2026,U+00B7,U+007E,U+002F}:root{--vp-c-white: #ffffff;--vp-c-black: #000000;--vp-c-neutral: var(--vp-c-black);--vp-c-neutral-inverse: var(--vp-c-white)}.dark{--vp-c-neutral: var(--vp-c-white);--vp-c-neutral-inverse: var(--vp-c-black)}:root{--vp-c-gray-1: #dddde3;--vp-c-gray-2: #e4e4e9;--vp-c-gray-3: #ebebef;--vp-c-gray-soft: rgba(142, 150, 170, .14);--vp-c-indigo-1: #3451b2;--vp-c-indigo-2: #3a5ccc;--vp-c-indigo-3: #5672cd;--vp-c-indigo-soft: rgba(100, 108, 255, .14);--vp-c-purple-1: #6f42c1;--vp-c-purple-2: #7e4cc9;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .14);--vp-c-green-1: #18794e;--vp-c-green-2: #299764;--vp-c-green-3: #30a46c;--vp-c-green-soft: rgba(16, 185, 129, .14);--vp-c-yellow-1: #915930;--vp-c-yellow-2: #946300;--vp-c-yellow-3: #9f6a00;--vp-c-yellow-soft: rgba(234, 179, 8, .14);--vp-c-red-1: #b8272c;--vp-c-red-2: #d5393e;--vp-c-red-3: #e0575b;--vp-c-red-soft: rgba(244, 63, 94, .14);--vp-c-sponsor: #db2777}.dark{--vp-c-gray-1: #515c67;--vp-c-gray-2: #414853;--vp-c-gray-3: #32363f;--vp-c-gray-soft: rgba(101, 117, 133, .16);--vp-c-indigo-1: #a8b1ff;--vp-c-indigo-2: #5c73e7;--vp-c-indigo-3: #3e63dd;--vp-c-indigo-soft: rgba(100, 108, 255, .16);--vp-c-purple-1: #c8abfa;--vp-c-purple-2: #a879e6;--vp-c-purple-3: #8e5cd9;--vp-c-purple-soft: rgba(159, 122, 234, .16);--vp-c-green-1: #3dd68c;--vp-c-green-2: #30a46c;--vp-c-green-3: #298459;--vp-c-green-soft: rgba(16, 185, 129, .16);--vp-c-yellow-1: #f9b44e;--vp-c-yellow-2: #da8b17;--vp-c-yellow-3: #a46a0a;--vp-c-yellow-soft: rgba(234, 179, 8, .16);--vp-c-red-1: #f66f81;--vp-c-red-2: #f14158;--vp-c-red-3: #b62a3c;--vp-c-red-soft: rgba(244, 63, 94, .16)}:root{--vp-c-bg: #ffffff;--vp-c-bg-alt: #f6f6f7;--vp-c-bg-elv: #ffffff;--vp-c-bg-soft: #f6f6f7}.dark{--vp-c-bg: #1b1b1f;--vp-c-bg-alt: #161618;--vp-c-bg-elv: #202127;--vp-c-bg-soft: #202127}:root{--vp-c-border: #c2c2c4;--vp-c-divider: #e2e2e3;--vp-c-gutter: #e2e2e3}.dark{--vp-c-border: #3c3f44;--vp-c-divider: #2e2e32;--vp-c-gutter: #000000}:root{--vp-c-text-1: rgba(60, 60, 67);--vp-c-text-2: rgba(60, 60, 67, .78);--vp-c-text-3: rgba(60, 60, 67, .56)}.dark{--vp-c-text-1: rgba(255, 255, 245, .86);--vp-c-text-2: rgba(235, 235, 245, .6);--vp-c-text-3: rgba(235, 235, 245, .38)}:root{--vp-c-default-1: var(--vp-c-gray-1);--vp-c-default-2: var(--vp-c-gray-2);--vp-c-default-3: var(--vp-c-gray-3);--vp-c-default-soft: var(--vp-c-gray-soft);--vp-c-brand-1: var(--vp-c-indigo-1);--vp-c-brand-2: var(--vp-c-indigo-2);--vp-c-brand-3: var(--vp-c-indigo-3);--vp-c-brand-soft: var(--vp-c-indigo-soft);--vp-c-brand: var(--vp-c-brand-1);--vp-c-tip-1: var(--vp-c-brand-1);--vp-c-tip-2: var(--vp-c-brand-2);--vp-c-tip-3: var(--vp-c-brand-3);--vp-c-tip-soft: var(--vp-c-brand-soft);--vp-c-note-1: var(--vp-c-brand-1);--vp-c-note-2: var(--vp-c-brand-2);--vp-c-note-3: var(--vp-c-brand-3);--vp-c-note-soft: var(--vp-c-brand-soft);--vp-c-success-1: var(--vp-c-green-1);--vp-c-success-2: var(--vp-c-green-2);--vp-c-success-3: var(--vp-c-green-3);--vp-c-success-soft: var(--vp-c-green-soft);--vp-c-important-1: var(--vp-c-purple-1);--vp-c-important-2: var(--vp-c-purple-2);--vp-c-important-3: var(--vp-c-purple-3);--vp-c-important-soft: var(--vp-c-purple-soft);--vp-c-warning-1: var(--vp-c-yellow-1);--vp-c-warning-2: var(--vp-c-yellow-2);--vp-c-warning-3: var(--vp-c-yellow-3);--vp-c-warning-soft: var(--vp-c-yellow-soft);--vp-c-danger-1: var(--vp-c-red-1);--vp-c-danger-2: var(--vp-c-red-2);--vp-c-danger-3: var(--vp-c-red-3);--vp-c-danger-soft: var(--vp-c-red-soft);--vp-c-caution-1: var(--vp-c-red-1);--vp-c-caution-2: var(--vp-c-red-2);--vp-c-caution-3: var(--vp-c-red-3);--vp-c-caution-soft: var(--vp-c-red-soft)}:root{--vp-font-family-base: "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--vp-font-family-mono: ui-monospace, "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;font-optical-sizing:auto}:root:where(:lang(zh)){--vp-font-family-base: "Punctuation SC", "Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"}:root{--vp-shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--vp-shadow-2: 0 3px 12px rgba(0, 0, 0, .07), 0 1px 4px rgba(0, 0, 0, .07);--vp-shadow-3: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);--vp-shadow-4: 0 14px 44px rgba(0, 0, 0, .12), 0 3px 9px rgba(0, 0, 0, .12);--vp-shadow-5: 0 18px 56px rgba(0, 0, 0, .16), 0 4px 12px rgba(0, 0, 0, .16)}:root{--vp-z-index-footer: 10;--vp-z-index-local-nav: 20;--vp-z-index-nav: 30;--vp-z-index-layout-top: 40;--vp-z-index-backdrop: 50;--vp-z-index-sidebar: 60}@media (min-width: 960px){:root{--vp-z-index-sidebar: 25}}:root{--vp-layout-max-width: 1440px}:root{--vp-header-anchor-symbol: "#"}:root{--vp-code-line-height: 1.7;--vp-code-font-size: .875em;--vp-code-color: var(--vp-c-brand-1);--vp-code-link-color: var(--vp-c-brand-1);--vp-code-link-hover-color: var(--vp-c-brand-2);--vp-code-bg: var(--vp-c-default-soft);--vp-code-block-color: var(--vp-c-text-2);--vp-code-block-bg: var(--vp-c-bg-alt);--vp-code-block-divider-color: var(--vp-c-gutter);--vp-code-lang-color: var(--vp-c-text-3);--vp-code-line-highlight-color: var(--vp-c-default-soft);--vp-code-line-number-color: var(--vp-c-text-3);--vp-code-line-diff-add-color: var(--vp-c-success-soft);--vp-code-line-diff-add-symbol-color: var(--vp-c-success-1);--vp-code-line-diff-remove-color: var(--vp-c-danger-soft);--vp-code-line-diff-remove-symbol-color: var(--vp-c-danger-1);--vp-code-line-warning-color: var(--vp-c-warning-soft);--vp-code-line-error-color: var(--vp-c-danger-soft);--vp-code-copy-code-border-color: var(--vp-c-divider);--vp-code-copy-code-bg: var(--vp-c-bg-soft);--vp-code-copy-code-hover-border-color: var(--vp-c-divider);--vp-code-copy-code-hover-bg: var(--vp-c-bg);--vp-code-copy-code-active-text: var(--vp-c-text-2);--vp-code-copy-copied-text-content: "Copied";--vp-code-tab-divider: var(--vp-code-block-divider-color);--vp-code-tab-text-color: var(--vp-c-text-2);--vp-code-tab-bg: var(--vp-code-block-bg);--vp-code-tab-hover-text-color: var(--vp-c-text-1);--vp-code-tab-active-text-color: var(--vp-c-text-1);--vp-code-tab-active-bar-color: var(--vp-c-brand-1)}:root{--vp-button-brand-border: transparent;--vp-button-brand-text: var(--vp-c-white);--vp-button-brand-bg: var(--vp-c-brand-3);--vp-button-brand-hover-border: transparent;--vp-button-brand-hover-text: var(--vp-c-white);--vp-button-brand-hover-bg: var(--vp-c-brand-2);--vp-button-brand-active-border: transparent;--vp-button-brand-active-text: var(--vp-c-white);--vp-button-brand-active-bg: var(--vp-c-brand-1);--vp-button-alt-border: transparent;--vp-button-alt-text: var(--vp-c-text-1);--vp-button-alt-bg: var(--vp-c-default-3);--vp-button-alt-hover-border: transparent;--vp-button-alt-hover-text: var(--vp-c-text-1);--vp-button-alt-hover-bg: var(--vp-c-default-2);--vp-button-alt-active-border: transparent;--vp-button-alt-active-text: var(--vp-c-text-1);--vp-button-alt-active-bg: var(--vp-c-default-1);--vp-button-sponsor-border: var(--vp-c-text-2);--vp-button-sponsor-text: var(--vp-c-text-2);--vp-button-sponsor-bg: transparent;--vp-button-sponsor-hover-border: var(--vp-c-sponsor);--vp-button-sponsor-hover-text: var(--vp-c-sponsor);--vp-button-sponsor-hover-bg: transparent;--vp-button-sponsor-active-border: var(--vp-c-sponsor);--vp-button-sponsor-active-text: var(--vp-c-sponsor);--vp-button-sponsor-active-bg: transparent}:root{--vp-custom-block-font-size: 14px;--vp-custom-block-code-font-size: 13px;--vp-custom-block-info-border: transparent;--vp-custom-block-info-text: var(--vp-c-text-1);--vp-custom-block-info-bg: var(--vp-c-default-soft);--vp-custom-block-info-code-bg: var(--vp-c-default-soft);--vp-custom-block-note-border: transparent;--vp-custom-block-note-text: var(--vp-c-text-1);--vp-custom-block-note-bg: var(--vp-c-default-soft);--vp-custom-block-note-code-bg: var(--vp-c-default-soft);--vp-custom-block-tip-border: transparent;--vp-custom-block-tip-text: var(--vp-c-text-1);--vp-custom-block-tip-bg: var(--vp-c-tip-soft);--vp-custom-block-tip-code-bg: var(--vp-c-tip-soft);--vp-custom-block-important-border: transparent;--vp-custom-block-important-text: var(--vp-c-text-1);--vp-custom-block-important-bg: var(--vp-c-important-soft);--vp-custom-block-important-code-bg: var(--vp-c-important-soft);--vp-custom-block-warning-border: transparent;--vp-custom-block-warning-text: var(--vp-c-text-1);--vp-custom-block-warning-bg: var(--vp-c-warning-soft);--vp-custom-block-warning-code-bg: var(--vp-c-warning-soft);--vp-custom-block-danger-border: transparent;--vp-custom-block-danger-text: var(--vp-c-text-1);--vp-custom-block-danger-bg: var(--vp-c-danger-soft);--vp-custom-block-danger-code-bg: var(--vp-c-danger-soft);--vp-custom-block-caution-border: transparent;--vp-custom-block-caution-text: var(--vp-c-text-1);--vp-custom-block-caution-bg: var(--vp-c-caution-soft);--vp-custom-block-caution-code-bg: var(--vp-c-caution-soft);--vp-custom-block-details-border: var(--vp-custom-block-info-border);--vp-custom-block-details-text: var(--vp-custom-block-info-text);--vp-custom-block-details-bg: var(--vp-custom-block-info-bg);--vp-custom-block-details-code-bg: var(--vp-custom-block-info-code-bg)}:root{--vp-input-border-color: var(--vp-c-border);--vp-input-bg-color: var(--vp-c-bg-alt);--vp-input-switch-bg-color: var(--vp-c-default-soft)}:root{--vp-nav-height: 64px;--vp-nav-bg-color: var(--vp-c-bg);--vp-nav-screen-bg-color: var(--vp-c-bg);--vp-nav-logo-height: 24px}.hide-nav{--vp-nav-height: 0px}.hide-nav .VPSidebar{--vp-nav-height: 22px}:root{--vp-local-nav-bg-color: var(--vp-c-bg)}:root{--vp-sidebar-width: 272px;--vp-sidebar-bg-color: var(--vp-c-bg-alt)}:root{--vp-backdrop-bg-color: rgba(0, 0, 0, .6)}:root{--vp-home-hero-name-color: var(--vp-c-brand-1);--vp-home-hero-name-background: transparent;--vp-home-hero-image-background-image: none;--vp-home-hero-image-filter: none}:root{--vp-badge-info-border: transparent;--vp-badge-info-text: var(--vp-c-text-2);--vp-badge-info-bg: var(--vp-c-default-soft);--vp-badge-tip-border: transparent;--vp-badge-tip-text: var(--vp-c-tip-1);--vp-badge-tip-bg: var(--vp-c-tip-soft);--vp-badge-warning-border: transparent;--vp-badge-warning-text: var(--vp-c-warning-1);--vp-badge-warning-bg: var(--vp-c-warning-soft);--vp-badge-danger-border: transparent;--vp-badge-danger-text: var(--vp-c-danger-1);--vp-badge-danger-bg: var(--vp-c-danger-soft)}:root{--vp-carbon-ads-text-color: var(--vp-c-text-1);--vp-carbon-ads-poweredby-color: var(--vp-c-text-2);--vp-carbon-ads-bg-color: var(--vp-c-bg-soft);--vp-carbon-ads-hover-text-color: var(--vp-c-brand-1);--vp-carbon-ads-hover-poweredby-color: var(--vp-c-text-1)}:root{--vp-local-search-bg: var(--vp-c-bg);--vp-local-search-result-bg: var(--vp-c-bg);--vp-local-search-result-border: var(--vp-c-divider);--vp-local-search-result-selected-bg: var(--vp-c-bg);--vp-local-search-result-selected-border: var(--vp-c-brand-1);--vp-local-search-highlight-bg: var(--vp-c-brand-1);--vp-local-search-highlight-text: var(--vp-c-neutral-inverse)}@media (prefers-reduced-motion: reduce){*,:before,:after{animation-delay:-1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important;background-attachment:initial!important;scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important}}*,:before,:after{box-sizing:border-box}html{line-height:1.4;font-size:16px;-webkit-text-size-adjust:100%}html.dark{color-scheme:dark}body{margin:0;width:100%;min-width:320px;min-height:100vh;line-height:24px;font-family:var(--vp-font-family-base);font-size:16px;font-weight:400;color:var(--vp-c-text-1);background-color:var(--vp-c-bg);font-synthesis:style;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{display:block}h1,h2,h3,h4,h5,h6{margin:0;line-height:24px;font-size:16px;font-weight:400}p{margin:0}strong,b{font-weight:600}a,area,button,[role=button],input,label,select,summary,textarea{touch-action:manipulation}a{color:inherit;text-decoration:inherit}ol,ul{list-style:none;margin:0;padding:0}blockquote{margin:0}pre,code,kbd,samp{font-family:var(--vp-font-family-mono)}img,svg,video,canvas,audio,iframe,embed,object{display:block}figure{margin:0}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{border:0;padding:0;line-height:inherit;color:inherit}button{padding:0;font-family:inherit;background-color:transparent;background-image:none}button:enabled,[role=button]:enabled{cursor:pointer}button:focus,button:focus-visible{outline:1px dotted;outline:4px auto -webkit-focus-ring-color}button:focus:not(:focus-visible){outline:none!important}input:focus,textarea:focus,select:focus{outline:none}table{border-collapse:collapse}input{background-color:transparent}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--vp-c-text-3)}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--vp-c-text-3)}input::placeholder,textarea::placeholder{color:var(--vp-c-text-3)}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}textarea{resize:vertical}select{-webkit-appearance:none}fieldset{margin:0;padding:0}h1,h2,h3,h4,h5,h6,li,p{overflow-wrap:break-word}vite-error-overlay{z-index:9999}mjx-container{overflow-x:auto}mjx-container>svg{display:inline-block;margin:auto}[class^=vpi-],[class*=" vpi-"],.vp-icon{width:1em;height:1em}[class^=vpi-].bg,[class*=" vpi-"].bg,.vp-icon.bg{background-size:100% 100%;background-color:transparent}[class^=vpi-]:not(.bg),[class*=" vpi-"]:not(.bg),.vp-icon:not(.bg){-webkit-mask:var(--icon) no-repeat;mask:var(--icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;background-color:currentColor;color:inherit}.vpi-align-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M21 6H3M15 12H3M17 18H3'/%3E%3C/svg%3E")}.vpi-arrow-right,.vpi-arrow-down,.vpi-arrow-left,.vpi-arrow-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5l7 7-7 7'/%3E%3C/svg%3E")}.vpi-chevron-right,.vpi-chevron-down,.vpi-chevron-left,.vpi-chevron-up{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.vpi-chevron-down,.vpi-arrow-down{transform:rotate(90deg)}.vpi-chevron-left,.vpi-arrow-left{transform:rotate(180deg)}.vpi-chevron-up,.vpi-arrow-up{transform:rotate(-90deg)}.vpi-square-pen{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7'/%3E%3Cpath d='M18.375 2.625a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4Z'/%3E%3C/svg%3E")}.vpi-plus{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M5 12h14M12 5v14'/%3E%3C/svg%3E")}.vpi-sun{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41'/%3E%3C/svg%3E")}.vpi-moon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'/%3E%3C/svg%3E")}.vpi-more-horizontal{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='1'/%3E%3Ccircle cx='19' cy='12' r='1'/%3E%3Ccircle cx='5' cy='12' r='1'/%3E%3C/svg%3E")}.vpi-languages{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m5 8 6 6M4 14l6-6 2-3M2 5h12M7 2h1M22 22l-5-10-5 10M14 18h6'/%3E%3C/svg%3E")}.vpi-heart{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z'/%3E%3C/svg%3E")}.vpi-search{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cpath d='m21 21-4.3-4.3'/%3E%3C/svg%3E")}.vpi-layout-list{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='7' height='7' x='3' y='3' rx='1'/%3E%3Crect width='7' height='7' x='3' y='14' rx='1'/%3E%3Cpath d='M14 4h7M14 9h7M14 15h7M14 20h7'/%3E%3C/svg%3E")}.vpi-delete{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 5H9l-7 7 7 7h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2ZM18 9l-6 6M12 9l6 6'/%3E%3C/svg%3E")}.vpi-corner-down-left{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 10-5 5 5 5'/%3E%3Cpath d='M20 4v7a4 4 0 0 1-4 4H4'/%3E%3C/svg%3E")}:root{--vp-icon-copy: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3C/svg%3E");--vp-icon-copied: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='rgba(128,128,128,1)' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Crect width='8' height='4' x='8' y='2' rx='1' ry='1'/%3E%3Cpath d='M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2'/%3E%3Cpath d='m9 14 2 2 4-4'/%3E%3C/svg%3E")}.visually-hidden{position:absolute;width:1px;height:1px;white-space:nowrap;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden}.custom-block{border:1px solid transparent;border-radius:8px;padding:16px 16px 8px;line-height:24px;font-size:var(--vp-custom-block-font-size);color:var(--vp-c-text-2)}.custom-block.info{border-color:var(--vp-custom-block-info-border);color:var(--vp-custom-block-info-text);background-color:var(--vp-custom-block-info-bg)}.custom-block.info a,.custom-block.info code{color:var(--vp-c-brand-1)}.custom-block.info a:hover,.custom-block.info a:hover>code{color:var(--vp-c-brand-2)}.custom-block.info code{background-color:var(--vp-custom-block-info-code-bg)}.custom-block.note{border-color:var(--vp-custom-block-note-border);color:var(--vp-custom-block-note-text);background-color:var(--vp-custom-block-note-bg)}.custom-block.note a,.custom-block.note code{color:var(--vp-c-brand-1)}.custom-block.note a:hover,.custom-block.note a:hover>code{color:var(--vp-c-brand-2)}.custom-block.note code{background-color:var(--vp-custom-block-note-code-bg)}.custom-block.tip{border-color:var(--vp-custom-block-tip-border);color:var(--vp-custom-block-tip-text);background-color:var(--vp-custom-block-tip-bg)}.custom-block.tip a,.custom-block.tip code{color:var(--vp-c-tip-1)}.custom-block.tip a:hover,.custom-block.tip a:hover>code{color:var(--vp-c-tip-2)}.custom-block.tip code{background-color:var(--vp-custom-block-tip-code-bg)}.custom-block.important{border-color:var(--vp-custom-block-important-border);color:var(--vp-custom-block-important-text);background-color:var(--vp-custom-block-important-bg)}.custom-block.important a,.custom-block.important code{color:var(--vp-c-important-1)}.custom-block.important a:hover,.custom-block.important a:hover>code{color:var(--vp-c-important-2)}.custom-block.important code{background-color:var(--vp-custom-block-important-code-bg)}.custom-block.warning{border-color:var(--vp-custom-block-warning-border);color:var(--vp-custom-block-warning-text);background-color:var(--vp-custom-block-warning-bg)}.custom-block.warning a,.custom-block.warning code{color:var(--vp-c-warning-1)}.custom-block.warning a:hover,.custom-block.warning a:hover>code{color:var(--vp-c-warning-2)}.custom-block.warning code{background-color:var(--vp-custom-block-warning-code-bg)}.custom-block.danger{border-color:var(--vp-custom-block-danger-border);color:var(--vp-custom-block-danger-text);background-color:var(--vp-custom-block-danger-bg)}.custom-block.danger a,.custom-block.danger code{color:var(--vp-c-danger-1)}.custom-block.danger a:hover,.custom-block.danger a:hover>code{color:var(--vp-c-danger-2)}.custom-block.danger code{background-color:var(--vp-custom-block-danger-code-bg)}.custom-block.caution{border-color:var(--vp-custom-block-caution-border);color:var(--vp-custom-block-caution-text);background-color:var(--vp-custom-block-caution-bg)}.custom-block.caution a,.custom-block.caution code{color:var(--vp-c-caution-1)}.custom-block.caution a:hover,.custom-block.caution a:hover>code{color:var(--vp-c-caution-2)}.custom-block.caution code{background-color:var(--vp-custom-block-caution-code-bg)}.custom-block.details{border-color:var(--vp-custom-block-details-border);color:var(--vp-custom-block-details-text);background-color:var(--vp-custom-block-details-bg)}.custom-block.details a{color:var(--vp-c-brand-1)}.custom-block.details a:hover,.custom-block.details a:hover>code{color:var(--vp-c-brand-2)}.custom-block.details code{background-color:var(--vp-custom-block-details-code-bg)}.custom-block-title{font-weight:600}.custom-block p+p{margin:8px 0}.custom-block.details summary{margin:0 0 8px;font-weight:700;cursor:pointer;-webkit-user-select:none;user-select:none}.custom-block.details summary+p{margin:8px 0}.custom-block a{color:inherit;font-weight:600;text-decoration:underline;text-underline-offset:2px;transition:opacity .25s}.custom-block a:hover{opacity:.75}.custom-block code{font-size:var(--vp-custom-block-code-font-size)}.custom-block.custom-block th,.custom-block.custom-block blockquote>p{font-size:var(--vp-custom-block-font-size);color:inherit}.dark .vp-code span{color:var(--shiki-dark, inherit)}html:not(.dark) .vp-code span{color:var(--shiki-light, inherit)}.vp-code-group{margin-top:16px}.vp-code-group .tabs{position:relative;display:flex;margin-right:-24px;margin-left:-24px;padding:0 12px;background-color:var(--vp-code-tab-bg);overflow-x:auto;overflow-y:hidden;box-shadow:inset 0 -1px var(--vp-code-tab-divider)}@media (min-width: 640px){.vp-code-group .tabs{margin-right:0;margin-left:0;border-radius:8px 8px 0 0}}.vp-code-group .tabs input{position:fixed;opacity:0;pointer-events:none}.vp-code-group .tabs label{position:relative;display:inline-block;border-bottom:1px solid transparent;padding:0 12px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-code-tab-text-color);white-space:nowrap;cursor:pointer;transition:color .25s}.vp-code-group .tabs label:after{position:absolute;right:8px;bottom:-1px;left:8px;z-index:1;height:2px;border-radius:2px;content:"";background-color:transparent;transition:background-color .25s}.vp-code-group label:hover{color:var(--vp-code-tab-hover-text-color)}.vp-code-group input:checked+label{color:var(--vp-code-tab-active-text-color)}.vp-code-group input:checked+label:after{background-color:var(--vp-code-tab-active-bar-color)}.vp-code-group div[class*=language-],.vp-block{display:none;margin-top:0!important;border-top-left-radius:0!important;border-top-right-radius:0!important}.vp-code-group div[class*=language-].active,.vp-block.active{display:block}.vp-block{padding:20px 24px}.vp-doc h1,.vp-doc h2,.vp-doc h3,.vp-doc h4,.vp-doc h5,.vp-doc h6{position:relative;font-weight:600;outline:none}.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:28px}.vp-doc h2{margin:48px 0 16px;border-top:1px solid var(--vp-c-divider);padding-top:24px;letter-spacing:-.02em;line-height:32px;font-size:24px}.vp-doc h3{margin:32px 0 0;letter-spacing:-.01em;line-height:28px;font-size:20px}.vp-doc h4{margin:24px 0 0;letter-spacing:-.01em;line-height:24px;font-size:18px}.vp-doc .header-anchor{position:absolute;top:0;left:0;margin-left:-.87em;font-weight:500;-webkit-user-select:none;user-select:none;opacity:0;text-decoration:none;transition:color .25s,opacity .25s}.vp-doc .header-anchor:before{content:var(--vp-header-anchor-symbol)}.vp-doc h1:hover .header-anchor,.vp-doc h1 .header-anchor:focus,.vp-doc h2:hover .header-anchor,.vp-doc h2 .header-anchor:focus,.vp-doc h3:hover .header-anchor,.vp-doc h3 .header-anchor:focus,.vp-doc h4:hover .header-anchor,.vp-doc h4 .header-anchor:focus,.vp-doc h5:hover .header-anchor,.vp-doc h5 .header-anchor:focus,.vp-doc h6:hover .header-anchor,.vp-doc h6 .header-anchor:focus{opacity:1}@media (min-width: 768px){.vp-doc h1{letter-spacing:-.02em;line-height:40px;font-size:32px}}.vp-doc h2 .header-anchor{top:24px}.vp-doc p,.vp-doc summary{margin:16px 0}.vp-doc p{line-height:28px}.vp-doc blockquote{margin:16px 0;border-left:2px solid var(--vp-c-divider);padding-left:16px;transition:border-color .5s;color:var(--vp-c-text-2)}.vp-doc blockquote>p{margin:0;font-size:16px;transition:color .5s}.vp-doc a{font-weight:500;color:var(--vp-c-brand-1);text-decoration:underline;text-underline-offset:2px;transition:color .25s,opacity .25s}.vp-doc a:hover{color:var(--vp-c-brand-2)}.vp-doc strong{font-weight:600}.vp-doc ul,.vp-doc ol{padding-left:1.25rem;margin:16px 0}.vp-doc ul{list-style:disc}.vp-doc ol{list-style:decimal}.vp-doc li+li{margin-top:8px}.vp-doc li>ol,.vp-doc li>ul{margin:8px 0 0}.vp-doc table{display:block;border-collapse:collapse;margin:20px 0;overflow-x:auto}.vp-doc tr{background-color:var(--vp-c-bg);border-top:1px solid var(--vp-c-divider);transition:background-color .5s}.vp-doc tr:nth-child(2n){background-color:var(--vp-c-bg-soft)}.vp-doc th,.vp-doc td{border:1px solid var(--vp-c-divider);padding:8px 16px}.vp-doc th{text-align:left;font-size:14px;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-doc td{font-size:14px}.vp-doc hr{margin:16px 0;border:none;border-top:1px solid var(--vp-c-divider)}.vp-doc .custom-block{margin:16px 0}.vp-doc .custom-block p{margin:8px 0;line-height:24px}.vp-doc .custom-block p:first-child{margin:0}.vp-doc .custom-block div[class*=language-]{margin:8px 0;border-radius:8px}.vp-doc .custom-block div[class*=language-] code{font-weight:400;background-color:transparent}.vp-doc .custom-block .vp-code-group .tabs{margin:0;border-radius:8px 8px 0 0}.vp-doc :not(pre,h1,h2,h3,h4,h5,h6)>code{font-size:var(--vp-code-font-size);color:var(--vp-code-color)}.vp-doc :not(pre)>code{border-radius:4px;padding:3px 6px;background-color:var(--vp-code-bg);transition:color .25s,background-color .5s}.vp-doc a>code{color:var(--vp-code-link-color)}.vp-doc a:hover>code{color:var(--vp-code-link-hover-color)}.vp-doc h1>code,.vp-doc h2>code,.vp-doc h3>code,.vp-doc h4>code{font-size:.9em}.vp-doc div[class*=language-],.vp-block{position:relative;margin:16px -24px;background-color:var(--vp-code-block-bg);overflow-x:auto;transition:background-color .5s}@media (min-width: 640px){.vp-doc div[class*=language-],.vp-block{border-radius:8px;margin:16px 0}}@media (max-width: 639px){.vp-doc li div[class*=language-]{border-radius:8px 0 0 8px}}.vp-doc div[class*=language-]+div[class*=language-],.vp-doc div[class$=-api]+div[class*=language-],.vp-doc div[class*=language-]+div[class$=-api]>div[class*=language-]{margin-top:-8px}.vp-doc [class*=language-] pre,.vp-doc [class*=language-] code{direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}.vp-doc [class*=language-] pre{position:relative;z-index:1;margin:0;padding:20px 0;background:transparent;overflow-x:auto}.vp-doc [class*=language-] code{display:block;padding:0 24px;width:fit-content;min-width:100%;line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-block-color);transition:color .5s}.vp-doc [class*=language-] code .highlighted{background-color:var(--vp-code-line-highlight-color);transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .highlighted.error{background-color:var(--vp-code-line-error-color)}.vp-doc [class*=language-] code .highlighted.warning{background-color:var(--vp-code-line-warning-color)}.vp-doc [class*=language-] code .diff{transition:background-color .5s;margin:0 -24px;padding:0 24px;width:calc(100% + 48px);display:inline-block}.vp-doc [class*=language-] code .diff:before{position:absolute;left:10px}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){filter:blur(.095rem);opacity:.4;transition:filter .35s,opacity .35s}.vp-doc [class*=language-] .has-focused-lines .line:not(.has-focus){opacity:.7;transition:filter .35s,opacity .35s}.vp-doc [class*=language-]:hover .has-focused-lines .line:not(.has-focus){filter:blur(0);opacity:1}.vp-doc [class*=language-] code .diff.remove{background-color:var(--vp-code-line-diff-remove-color);opacity:.7}.vp-doc [class*=language-] code .diff.remove:before{content:"-";color:var(--vp-code-line-diff-remove-symbol-color)}.vp-doc [class*=language-] code .diff.add{background-color:var(--vp-code-line-diff-add-color)}.vp-doc [class*=language-] code .diff.add:before{content:"+";color:var(--vp-code-line-diff-add-symbol-color)}.vp-doc div[class*=language-].line-numbers-mode{padding-left:32px}.vp-doc .line-numbers-wrapper{position:absolute;top:0;bottom:0;left:0;z-index:3;border-right:1px solid var(--vp-code-block-divider-color);padding-top:20px;width:32px;text-align:center;font-family:var(--vp-font-family-mono);line-height:var(--vp-code-line-height);font-size:var(--vp-code-font-size);color:var(--vp-code-line-number-color);transition:border-color .5s,color .5s}.vp-doc [class*=language-]>button.copy{direction:ltr;position:absolute;top:12px;right:12px;z-index:3;border:1px solid var(--vp-code-copy-code-border-color);border-radius:4px;width:40px;height:40px;background-color:var(--vp-code-copy-code-bg);opacity:0;cursor:pointer;background-image:var(--vp-icon-copy);background-position:50%;background-size:20px;background-repeat:no-repeat;transition:border-color .25s,background-color .25s,opacity .25s}.vp-doc [class*=language-]:hover>button.copy,.vp-doc [class*=language-]>button.copy:focus{opacity:1}.vp-doc [class*=language-]>button.copy:hover,.vp-doc [class*=language-]>button.copy.copied{border-color:var(--vp-code-copy-code-hover-border-color);background-color:var(--vp-code-copy-code-hover-bg)}.vp-doc [class*=language-]>button.copy.copied,.vp-doc [class*=language-]>button.copy:hover.copied{border-radius:0 4px 4px 0;background-color:var(--vp-code-copy-code-hover-bg);background-image:var(--vp-icon-copied)}.vp-doc [class*=language-]>button.copy.copied:before,.vp-doc [class*=language-]>button.copy:hover.copied:before{position:relative;top:-1px;transform:translate(calc(-100% - 1px));display:flex;justify-content:center;align-items:center;border:1px solid var(--vp-code-copy-code-hover-border-color);border-right:0;border-radius:4px 0 0 4px;padding:0 10px;width:fit-content;height:40px;text-align:center;font-size:12px;font-weight:500;color:var(--vp-code-copy-code-active-text);background-color:var(--vp-code-copy-code-hover-bg);white-space:nowrap;content:var(--vp-code-copy-copied-text-content)}.vp-doc [class*=language-]>span.lang{position:absolute;top:2px;right:8px;z-index:2;font-size:12px;font-weight:500;-webkit-user-select:none;user-select:none;color:var(--vp-code-lang-color);transition:color .4s,opacity .4s}.vp-doc [class*=language-]:hover>button.copy+span.lang,.vp-doc [class*=language-]>button.copy:focus+span.lang{opacity:0}.vp-doc .VPTeamMembers{margin-top:24px}.vp-doc .VPTeamMembers.small.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}.vp-doc .VPTeamMembers.small.count-2 .container,.vp-doc .VPTeamMembers.small.count-3 .container{max-width:100%!important}.vp-doc .VPTeamMembers.medium.count-1 .container{margin:0!important;max-width:calc((100% - 24px)/2)!important}:is(.vp-external-link-icon,.vp-doc a[href*="://"],.vp-doc a[target=_blank]):not(.no-icon):after{display:inline-block;margin-top:-1px;margin-left:4px;width:11px;height:11px;background:currentColor;color:var(--vp-c-text-3);flex-shrink:0;--icon: url("data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath d='M0 0h24v24H0V0z' fill='none' /%3E%3Cpath d='M9 5v2h6.59L4 18.59 5.41 20 17 8.41V15h2V5H9z' /%3E%3C/svg%3E");-webkit-mask-image:var(--icon);mask-image:var(--icon)}.vp-external-link-icon:after{content:""}.external-link-icon-enabled :is(.vp-doc a[href*="://"],.vp-doc a[target=_blank]):after{content:"";color:currentColor}.vp-sponsor{border-radius:16px;overflow:hidden}.vp-sponsor.aside{border-radius:12px}.vp-sponsor-section+.vp-sponsor-section{margin-top:4px}.vp-sponsor-tier{margin:0 0 4px!important;text-align:center;letter-spacing:1px!important;line-height:24px;width:100%;font-weight:600;color:var(--vp-c-text-2);background-color:var(--vp-c-bg-soft)}.vp-sponsor.normal .vp-sponsor-tier{padding:13px 0 11px;font-size:14px}.vp-sponsor.aside .vp-sponsor-tier{padding:9px 0 7px;font-size:12px}.vp-sponsor-grid+.vp-sponsor-tier{margin-top:4px}.vp-sponsor-grid{display:flex;flex-wrap:wrap;gap:4px}.vp-sponsor-grid.xmini .vp-sponsor-grid-link{height:64px}.vp-sponsor-grid.xmini .vp-sponsor-grid-image{max-width:64px;max-height:22px}.vp-sponsor-grid.mini .vp-sponsor-grid-link{height:72px}.vp-sponsor-grid.mini .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.small .vp-sponsor-grid-link{height:96px}.vp-sponsor-grid.small .vp-sponsor-grid-image{max-width:96px;max-height:24px}.vp-sponsor-grid.medium .vp-sponsor-grid-link{height:112px}.vp-sponsor-grid.medium .vp-sponsor-grid-image{max-width:120px;max-height:36px}.vp-sponsor-grid.big .vp-sponsor-grid-link{height:184px}.vp-sponsor-grid.big .vp-sponsor-grid-image{max-width:192px;max-height:56px}.vp-sponsor-grid[data-vp-grid="2"] .vp-sponsor-grid-item{width:calc((100% - 4px)/2)}.vp-sponsor-grid[data-vp-grid="3"] .vp-sponsor-grid-item{width:calc((100% - 4px * 2) / 3)}.vp-sponsor-grid[data-vp-grid="4"] .vp-sponsor-grid-item{width:calc((100% - 12px)/4)}.vp-sponsor-grid[data-vp-grid="5"] .vp-sponsor-grid-item{width:calc((100% - 16px)/5)}.vp-sponsor-grid[data-vp-grid="6"] .vp-sponsor-grid-item{width:calc((100% - 4px * 5) / 6)}.vp-sponsor-grid-item{flex-shrink:0;width:100%;background-color:var(--vp-c-bg-soft);transition:background-color .25s}.vp-sponsor-grid-item:hover{background-color:var(--vp-c-default-soft)}.vp-sponsor-grid-item:hover .vp-sponsor-grid-image{filter:grayscale(0) invert(0)}.vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.dark .vp-sponsor-grid-item:hover{background-color:var(--vp-c-white)}.dark .vp-sponsor-grid-item.empty:hover{background-color:var(--vp-c-bg-soft)}.vp-sponsor-grid-link{display:flex}.vp-sponsor-grid-box{display:flex;justify-content:center;align-items:center;width:100%}.vp-sponsor-grid-image{max-width:100%;filter:grayscale(1);transition:filter .25s}.dark .vp-sponsor-grid-image{filter:grayscale(1) invert(1)}.VPBadge{display:inline-block;margin-left:2px;border:1px solid transparent;border-radius:12px;padding:0 10px;line-height:22px;font-size:12px;font-weight:500;transform:translateY(-2px)}.VPBadge.small{padding:0 6px;line-height:18px;font-size:10px;transform:translateY(-8px)}.VPDocFooter .VPBadge{display:none}.vp-doc h1>.VPBadge{margin-top:4px;vertical-align:top}.vp-doc h2>.VPBadge{margin-top:3px;padding:0 8px;vertical-align:top}.vp-doc h3>.VPBadge{vertical-align:middle}.vp-doc h4>.VPBadge,.vp-doc h5>.VPBadge,.vp-doc h6>.VPBadge{vertical-align:middle;line-height:18px}.VPBadge.info{border-color:var(--vp-badge-info-border);color:var(--vp-badge-info-text);background-color:var(--vp-badge-info-bg)}.VPBadge.tip{border-color:var(--vp-badge-tip-border);color:var(--vp-badge-tip-text);background-color:var(--vp-badge-tip-bg)}.VPBadge.warning{border-color:var(--vp-badge-warning-border);color:var(--vp-badge-warning-text);background-color:var(--vp-badge-warning-bg)}.VPBadge.danger{border-color:var(--vp-badge-danger-border);color:var(--vp-badge-danger-text);background-color:var(--vp-badge-danger-bg)}.VPBackdrop[data-v-9cfff747]{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-9cfff747],.VPBackdrop.fade-leave-to[data-v-9cfff747]{opacity:0}.VPBackdrop.fade-leave-active[data-v-9cfff747]{transition-duration:.25s}@media (min-width: 1280px){.VPBackdrop[data-v-9cfff747]{display:none}}.NotFound[data-v-d7fd9302]{padding:64px 24px 96px;text-align:center}@media (min-width: 768px){.NotFound[data-v-d7fd9302]{padding:96px 32px 168px}}.code[data-v-d7fd9302]{line-height:64px;font-size:64px;font-weight:600}.title[data-v-d7fd9302]{padding-top:12px;letter-spacing:2px;line-height:20px;font-size:20px;font-weight:700}.divider[data-v-d7fd9302]{margin:24px auto 18px;width:64px;height:1px;background-color:var(--vp-c-divider)}.quote[data-v-d7fd9302]{margin:0 auto;max-width:256px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.action[data-v-d7fd9302]{padding-top:20px}.link[data-v-d7fd9302]{display:inline-block;border:1px solid var(--vp-c-brand-1);border-radius:16px;padding:3px 16px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:border-color .25s,color .25s}.link[data-v-d7fd9302]:hover{border-color:var(--vp-c-brand-2);color:var(--vp-c-brand-2)}.root[data-v-bea9854b]{position:relative;z-index:1}.nested[data-v-bea9854b]{padding-right:16px;padding-left:16px}.outline-link[data-v-bea9854b]{display:block;line-height:32px;font-size:14px;font-weight:400;color:var(--vp-c-text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .5s}.outline-link[data-v-bea9854b]:hover,.outline-link.active[data-v-bea9854b]{color:var(--vp-c-text-1);transition:color .25s}.outline-link.nested[data-v-bea9854b]{padding-left:13px}.VPDocAsideOutline[data-v-4dc19a90]{display:none}.VPDocAsideOutline.has-outline[data-v-4dc19a90]{display:block}.content[data-v-4dc19a90]{position:relative;border-left:1px solid var(--vp-c-divider);padding-left:16px;font-size:13px;font-weight:500}.outline-marker[data-v-4dc19a90]{position:absolute;top:32px;left:-1px;z-index:0;opacity:0;width:2px;border-radius:2px;height:18px;background-color:var(--vp-c-brand-1);transition:top .25s cubic-bezier(0,1,.5,1),background-color .5s,opacity .25s}.outline-title[data-v-4dc19a90]{line-height:32px;font-size:14px;font-weight:600}.VPDocAside[data-v-4663ac98]{display:flex;flex-direction:column;flex-grow:1}.spacer[data-v-4663ac98]{flex-grow:1}.VPDocAside[data-v-4663ac98] .spacer+.VPDocAsideSponsors,.VPDocAside[data-v-4663ac98] .spacer+.VPDocAsideCarbonAds{margin-top:24px}.VPDocAside[data-v-4663ac98] .VPDocAsideSponsors+.VPDocAsideCarbonAds{margin-top:16px}.VPLastUpdated[data-v-9dc76e74]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}@media (min-width: 640px){.VPLastUpdated[data-v-9dc76e74]{line-height:32px;font-size:14px;font-weight:500}}.VPDocFooter[data-v-44e029fd]{margin-top:64px}.edit-info[data-v-44e029fd]{padding-bottom:18px}@media (min-width: 640px){.edit-info[data-v-44e029fd]{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px}}.edit-link-button[data-v-44e029fd]{display:flex;align-items:center;border:0;line-height:32px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.edit-link-button[data-v-44e029fd]:hover{color:var(--vp-c-brand-2)}.edit-link-icon[data-v-44e029fd]{margin-right:8px}.prev-next[data-v-44e029fd]{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-44e029fd]{grid-template-columns:repeat(2,1fr);grid-column-gap:16px}}.pager-link[data-v-44e029fd]{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-44e029fd]:hover{border-color:var(--vp-c-brand-1)}.pager-link.next[data-v-44e029fd]{margin-left:auto;text-align:right}.desc[data-v-44e029fd]{display:block;line-height:20px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.title[data-v-44e029fd]{display:block;line-height:20px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1);transition:color .25s}.VPDoc[data-v-6265044e]{padding:32px 24px 96px;width:100%}@media (min-width: 768px){.VPDoc[data-v-6265044e]{padding:48px 32px 128px}}@media (min-width: 960px){.VPDoc[data-v-6265044e]{padding:48px 32px 0}.VPDoc:not(.has-sidebar) .container[data-v-6265044e]{display:flex;justify-content:center;max-width:992px}.VPDoc:not(.has-sidebar) .content[data-v-6265044e]{max-width:752px}}@media (min-width: 1280px){.VPDoc .container[data-v-6265044e]{display:flex;justify-content:center}.VPDoc .aside[data-v-6265044e]{display:block}}@media (min-width: 1440px){.VPDoc:not(.has-sidebar) .content[data-v-6265044e]{max-width:784px}.VPDoc:not(.has-sidebar) .container[data-v-6265044e]{max-width:1104px}}.container[data-v-6265044e]{margin:0 auto;width:100%}.aside[data-v-6265044e]{position:relative;display:none;order:2;flex-grow:1;padding-left:32px;width:100%;max-width:256px}.left-aside[data-v-6265044e]{order:1;padding-left:unset;padding-right:32px}.aside-container[data-v-6265044e]{position:fixed;top:0;padding-top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + var(--vp-doc-top-height, 0px) + 48px);width:224px;height:100vh;overflow-x:hidden;overflow-y:auto;scrollbar-width:none}.aside-container[data-v-6265044e]::-webkit-scrollbar{display:none}.aside-curtain[data-v-6265044e]{position:fixed;bottom:0;z-index:10;width:224px;height:32px;background:linear-gradient(transparent,var(--vp-c-bg) 70%)}.aside-content[data-v-6265044e]{display:flex;flex-direction:column;min-height:calc(100vh - (var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 48px));padding-bottom:32px}.content[data-v-6265044e]{position:relative;margin:0 auto;width:100%}@media (min-width: 960px){.content[data-v-6265044e]{padding:0 32px 128px}}@media (min-width: 1280px){.content[data-v-6265044e]{order:1;margin:0;min-width:640px}}.content-container[data-v-6265044e]{margin:0 auto}.VPDoc.has-aside .content-container[data-v-6265044e]{max-width:688px}.VPButton[data-v-b97fe867]{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-b97fe867]:active{transition:color .1s,border-color .1s,background-color .1s}.VPButton.medium[data-v-b97fe867]{border-radius:20px;padding:0 20px;line-height:38px;font-size:14px}.VPButton.big[data-v-b97fe867]{border-radius:24px;padding:0 24px;line-height:46px;font-size:16px}.VPButton.brand[data-v-b97fe867]{border-color:var(--vp-button-brand-border);color:var(--vp-button-brand-text);background-color:var(--vp-button-brand-bg)}.VPButton.brand[data-v-b97fe867]: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-b97fe867]: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-b97fe867]{border-color:var(--vp-button-alt-border);color:var(--vp-button-alt-text);background-color:var(--vp-button-alt-bg)}.VPButton.alt[data-v-b97fe867]: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-b97fe867]: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-b97fe867]{border-color:var(--vp-button-sponsor-border);color:var(--vp-button-sponsor-text);background-color:var(--vp-button-sponsor-bg)}.VPButton.sponsor[data-v-b97fe867]: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-b97fe867]: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-a7f8766e]{display:none}.dark .VPImage.light[data-v-a7f8766e]{display:none}.VPHero[data-v-83a27608]{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-83a27608]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 48px 64px}}@media (min-width: 960px){.VPHero[data-v-83a27608]{padding:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 80px) 64px 64px}}.container[data-v-83a27608]{display:flex;flex-direction:column;margin:0 auto;max-width:1152px}@media (min-width: 960px){.container[data-v-83a27608]{flex-direction:row}}.main[data-v-83a27608]{position:relative;z-index:10;order:2;flex-grow:1;flex-shrink:0}.VPHero.has-image .container[data-v-83a27608]{text-align:center}@media (min-width: 960px){.VPHero.has-image .container[data-v-83a27608]{text-align:left}}@media (min-width: 960px){.main[data-v-83a27608]{order:1;width:calc((100% / 3) * 2)}.VPHero.has-image .main[data-v-83a27608]{max-width:592px}}.name[data-v-83a27608],.text[data-v-83a27608]{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-83a27608],.VPHero.has-image .text[data-v-83a27608]{margin:0 auto}.name[data-v-83a27608]{color:var(--vp-home-hero-name-color)}.clip[data-v-83a27608]{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-83a27608],.text[data-v-83a27608]{max-width:576px;line-height:56px;font-size:48px}}@media (min-width: 960px){.name[data-v-83a27608],.text[data-v-83a27608]{line-height:64px;font-size:56px}.VPHero.has-image .name[data-v-83a27608],.VPHero.has-image .text[data-v-83a27608]{margin:0}}.tagline[data-v-83a27608]{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-83a27608]{margin:0 auto}@media (min-width: 640px){.tagline[data-v-83a27608]{padding-top:12px;max-width:576px;line-height:32px;font-size:20px}}@media (min-width: 960px){.tagline[data-v-83a27608]{line-height:36px;font-size:24px}.VPHero.has-image .tagline[data-v-83a27608]{margin:0}}.actions[data-v-83a27608]{display:flex;flex-wrap:wrap;margin:-6px;padding-top:24px}.VPHero.has-image .actions[data-v-83a27608]{justify-content:center}@media (min-width: 640px){.actions[data-v-83a27608]{padding-top:32px}}@media (min-width: 960px){.VPHero.has-image .actions[data-v-83a27608]{justify-content:flex-start}}.action[data-v-83a27608]{flex-shrink:0;padding:6px}.image[data-v-83a27608]{order:1;margin:-76px -24px -48px}@media (min-width: 640px){.image[data-v-83a27608]{margin:-108px -24px -48px}}@media (min-width: 960px){.image[data-v-83a27608]{flex-grow:1;order:2;margin:0;min-height:100%}}.image-container[data-v-83a27608]{position:relative;margin:0 auto;width:320px;height:320px}@media (min-width: 640px){.image-container[data-v-83a27608]{width:392px;height:392px}}@media (min-width: 960px){.image-container[data-v-83a27608]{display:flex;justify-content:center;align-items:center;width:100%;height:100%;transform:translate(-32px,-32px)}}.image-bg[data-v-83a27608]{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-83a27608]{width:256px;height:256px}}@media (min-width: 960px){.image-bg[data-v-83a27608]{width:320px;height:320px}}[data-v-83a27608] .image-src{position:absolute;top:50%;left:50%;max-width:192px;max-height:192px;transform:translate(-50%,-50%)}@media (min-width: 640px){[data-v-83a27608] .image-src{max-width:256px;max-height:256px}}@media (min-width: 960px){[data-v-83a27608] .image-src{max-width:320px;max-height:320px}}.VPFeature[data-v-c03a6154]{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-c03a6154]:hover{border-color:var(--vp-c-brand-1)}.box[data-v-c03a6154]{display:flex;flex-direction:column;padding:24px;height:100%}.box[data-v-c03a6154]>.VPImage{margin-bottom:20px}.icon[data-v-c03a6154]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;border-radius:6px;background-color:var(--vp-c-default-soft);width:48px;height:48px;font-size:24px;transition:background-color .25s}.title[data-v-c03a6154]{line-height:24px;font-size:16px;font-weight:600}.details[data-v-c03a6154]{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-c03a6154]{padding-top:8px}.link-text-value[data-v-c03a6154]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.link-text-icon[data-v-c03a6154]{margin-left:6px}.VPFeatures[data-v-e79e033c]{position:relative;padding:0 24px}@media (min-width: 640px){.VPFeatures[data-v-e79e033c]{padding:0 48px}}@media (min-width: 960px){.VPFeatures[data-v-e79e033c]{padding:0 64px}}.container[data-v-e79e033c]{margin:0 auto;max-width:1152px}.items[data-v-e79e033c]{display:flex;flex-wrap:wrap;margin:-8px}.item[data-v-e79e033c]{padding:8px;width:100%}@media (min-width: 640px){.item.grid-2[data-v-e79e033c],.item.grid-4[data-v-e79e033c],.item.grid-6[data-v-e79e033c]{width:50%}}@media (min-width: 768px){.item.grid-2[data-v-e79e033c],.item.grid-4[data-v-e79e033c]{width:50%}.item.grid-3[data-v-e79e033c],.item.grid-6[data-v-e79e033c]{width:calc(100% / 3)}}@media (min-width: 960px){.item.grid-4[data-v-e79e033c]{width:25%}}.container[data-v-727701b5]{margin:auto;width:100%;max-width:1280px;padding:0 24px}@media (min-width: 640px){.container[data-v-727701b5]{padding:0 48px}}@media (min-width: 960px){.container[data-v-727701b5]{width:100%;padding:0 64px}}.vp-doc[data-v-727701b5] .VPHomeSponsors,.vp-doc[data-v-727701b5] .VPTeamPage{margin-left:var(--vp-offset, calc(50% - 50vw) );margin-right:var(--vp-offset, calc(50% - 50vw) )}.vp-doc[data-v-727701b5] .VPHomeSponsors h2{border-top:none;letter-spacing:normal}.vp-doc[data-v-727701b5] .VPHomeSponsors a,.vp-doc[data-v-727701b5] .VPTeamPage a{text-decoration:none}.VPHome[data-v-4eb032f4]{margin-bottom:96px}@media (min-width: 768px){.VPHome[data-v-4eb032f4]{margin-bottom:128px}}.VPContent[data-v-843bb5d0]{flex-grow:1;flex-shrink:0;margin:var(--vp-layout-top-height, 0px) auto 0;width:100%}.VPContent.is-home[data-v-843bb5d0]{width:100%;max-width:100%}.VPContent.has-sidebar[data-v-843bb5d0]{margin:0}@media (min-width: 960px){.VPContent[data-v-843bb5d0]{padding-top:var(--vp-nav-height)}.VPContent.has-sidebar[data-v-843bb5d0]{margin:var(--vp-layout-top-height, 0px) 0 0;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPContent.has-sidebar[data-v-843bb5d0]{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-a4fe24cd]{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-a4fe24cd]{display:none}.VPFooter[data-v-a4fe24cd] a{text-decoration-line:underline;text-underline-offset:2px;transition:color .25s}.VPFooter[data-v-a4fe24cd] a:hover{color:var(--vp-c-text-1)}@media (min-width: 768px){.VPFooter[data-v-a4fe24cd]{padding:32px}}.container[data-v-a4fe24cd]{margin:0 auto;max-width:var(--vp-layout-max-width);text-align:center}.message[data-v-a4fe24cd],.copyright[data-v-a4fe24cd]{line-height:24px;font-size:14px;font-weight:500;color:var(--vp-c-text-2)}.VPLocalNavOutlineDropdown[data-v-89c07c84]{padding:12px 20px 11px}@media (min-width: 960px){.VPLocalNavOutlineDropdown[data-v-89c07c84]{padding:12px 36px 11px}}.VPLocalNavOutlineDropdown button[data-v-89c07c84]{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-89c07c84]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPLocalNavOutlineDropdown button.open[data-v-89c07c84]{color:var(--vp-c-text-1)}.icon[data-v-89c07c84]{display:inline-block;vertical-align:middle;margin-left:2px;font-size:14px;transform:rotate(0);transition:transform .25s}@media (min-width: 960px){.VPLocalNavOutlineDropdown button[data-v-89c07c84]{font-size:14px}.icon[data-v-89c07c84]{font-size:16px}}.open>.icon[data-v-89c07c84]{transform:rotate(90deg)}.items[data-v-89c07c84]{position:absolute;top:40px;right:16px;left:16px;display:grid;gap:1px;border:1px solid var(--vp-c-border);border-radius:8px;background-color:var(--vp-c-gutter);max-height:calc(var(--vp-vh, 100vh) - 86px);overflow:hidden auto;box-shadow:var(--vp-shadow-3)}@media (min-width: 960px){.items[data-v-89c07c84]{right:auto;left:calc(var(--vp-sidebar-width) + 32px);width:320px}}.header[data-v-89c07c84]{background-color:var(--vp-c-bg-soft)}.top-link[data-v-89c07c84]{display:block;padding:0 16px;line-height:48px;font-size:14px;font-weight:500;color:var(--vp-c-brand-1)}.outline[data-v-89c07c84]{padding:8px 0;background-color:var(--vp-c-bg-soft)}.flyout-enter-active[data-v-89c07c84]{transition:all .2s ease-out}.flyout-leave-active[data-v-89c07c84]{transition:all .15s ease-in}.flyout-enter-from[data-v-89c07c84],.flyout-leave-to[data-v-89c07c84]{opacity:0;transform:translateY(-16px)}.VPLocalNav[data-v-e7c33232]{position:sticky;top:0;left:0;z-index:var(--vp-z-index-local-nav);border-bottom:1px solid var(--vp-c-gutter);padding-top:var(--vp-layout-top-height, 0px);width:100%;background-color:var(--vp-local-nav-bg-color)}.VPLocalNav.fixed[data-v-e7c33232]{position:fixed}@media (min-width: 960px){.VPLocalNav[data-v-e7c33232]{top:var(--vp-nav-height)}.VPLocalNav.has-sidebar[data-v-e7c33232]{padding-left:var(--vp-sidebar-width)}.VPLocalNav.empty[data-v-e7c33232]{display:none}}@media (min-width: 1280px){.VPLocalNav[data-v-e7c33232]{display:none}}@media (min-width: 1440px){.VPLocalNav.has-sidebar[data-v-e7c33232]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.container[data-v-e7c33232]{display:flex;justify-content:space-between;align-items:center}.menu[data-v-e7c33232]{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-e7c33232]:hover{color:var(--vp-c-text-1);transition:color .25s}@media (min-width: 768px){.menu[data-v-e7c33232]{padding:0 32px}}@media (min-width: 960px){.menu[data-v-e7c33232]{display:none}}.menu-icon[data-v-e7c33232]{margin-right:8px;font-size:14px}.VPOutlineDropdown[data-v-e7c33232]{padding:12px 24px 11px}@media (min-width: 768px){.VPOutlineDropdown[data-v-e7c33232]{padding:12px 32px 11px}}.VPSwitch[data-v-896d67d2]{position:relative;border-radius:11px;display:block;width:40px;height:22px;flex-shrink:0;border:1px solid var(--vp-input-border-color);background-color:var(--vp-input-switch-bg-color);transition:border-color .25s!important}.VPSwitch[data-v-896d67d2]:hover{border-color:var(--vp-c-brand-1)}.check[data-v-896d67d2]{position:absolute;top:1px;left:1px;width:18px;height:18px;border-radius:50%;background-color:var(--vp-c-neutral-inverse);box-shadow:var(--vp-shadow-1);transition:transform .25s!important}.icon[data-v-896d67d2]{position:relative;display:block;width:18px;height:18px;border-radius:50%;overflow:hidden}.icon[data-v-896d67d2] [class^=vpi-]{position:absolute;top:3px;left:3px;width:12px;height:12px;color:var(--vp-c-text-2)}.dark .icon[data-v-896d67d2] [class^=vpi-]{color:var(--vp-c-text-1);transition:opacity .25s!important}.sun[data-v-449eae30]{opacity:1}.moon[data-v-449eae30],.dark .sun[data-v-449eae30]{opacity:0}.dark .moon[data-v-449eae30]{opacity:1}.dark .VPSwitchAppearance[data-v-449eae30] .check{transform:translate(18px)}.VPNavBarAppearance[data-v-22499e50]{display:none}@media (min-width: 1280px){.VPNavBarAppearance[data-v-22499e50]{display:flex;align-items:center}}.VPMenuGroup+.VPMenuLink[data-v-223e936f]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.link[data-v-223e936f]{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-223e936f]:hover{color:var(--vp-c-brand-1);background-color:var(--vp-c-default-soft)}.link.active[data-v-223e936f]{color:var(--vp-c-brand-1)}.VPMenuGroup[data-v-94aeba64]{margin:12px -12px 0;border-top:1px solid var(--vp-c-divider);padding:12px 12px 0}.VPMenuGroup[data-v-94aeba64]:first-child{margin-top:0;border-top:0;padding-top:0}.VPMenuGroup+.VPMenuGroup[data-v-94aeba64]{margin-top:12px;border-top:1px solid var(--vp-c-divider)}.title[data-v-94aeba64]{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-fff044a3]{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-fff044a3] .group{margin:0 -12px;padding:0 12px 12px}.VPMenu[data-v-fff044a3] .group+.group{border-top:1px solid var(--vp-c-divider);padding:11px 12px 12px}.VPMenu[data-v-fff044a3] .group:last-child{padding-bottom:0}.VPMenu[data-v-fff044a3] .group+.item{border-top:1px solid var(--vp-c-divider);padding:11px 16px 0}.VPMenu[data-v-fff044a3] .item{padding:0 16px;white-space:nowrap}.VPMenu[data-v-fff044a3] .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-fff044a3] .action{padding-left:24px}.VPFlyout[data-v-b5ec1e6c]{position:relative}.VPFlyout[data-v-b5ec1e6c]:hover{color:var(--vp-c-brand-1);transition:color .25s}.VPFlyout:hover .text[data-v-b5ec1e6c]{color:var(--vp-c-text-2)}.VPFlyout:hover .icon[data-v-b5ec1e6c]{fill:var(--vp-c-text-2)}.VPFlyout.active .text[data-v-b5ec1e6c]{color:var(--vp-c-brand-1)}.VPFlyout.active:hover .text[data-v-b5ec1e6c]{color:var(--vp-c-brand-2)}.button[aria-expanded=false]+.menu[data-v-b5ec1e6c]{opacity:0;visibility:hidden;transform:translateY(0)}.VPFlyout:hover .menu[data-v-b5ec1e6c],.button[aria-expanded=true]+.menu[data-v-b5ec1e6c]{opacity:1;visibility:visible;transform:translateY(0)}.button[data-v-b5ec1e6c]{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-b5ec1e6c]{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-b5ec1e6c]{margin-right:0;font-size:16px}.text-icon[data-v-b5ec1e6c]{margin-left:4px;font-size:14px}.icon[data-v-b5ec1e6c]{font-size:20px;transition:fill .25s}.menu[data-v-b5ec1e6c]{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-587ea451]{display:flex;justify-content:center;align-items:center;width:36px;height:36px;color:var(--vp-c-text-2);transition:color .5s}.VPSocialLink[data-v-587ea451]:hover{color:var(--vp-c-text-1);transition:color .25s}.VPSocialLink[data-v-587ea451]>svg,.VPSocialLink[data-v-587ea451]>[class^=vpi-social-]{width:20px;height:20px;fill:currentColor}.VPSocialLinks[data-v-400d4683]{display:flex;justify-content:center}.VPNavBarExtra[data-v-69830b87]{display:none;margin-right:-12px}@media (min-width: 768px){.VPNavBarExtra[data-v-69830b87]{display:block}}@media (min-width: 1280px){.VPNavBarExtra[data-v-69830b87]{display:none}}.trans-title[data-v-69830b87]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.item.appearance[data-v-69830b87],.item.social-links[data-v-69830b87]{display:flex;align-items:center;padding:0 12px}.item.appearance[data-v-69830b87]{min-width:176px}.appearance-action[data-v-69830b87]{margin-right:-2px}.social-links-list[data-v-69830b87]{margin:-4px -8px}.VPNavBarHamburger[data-v-02e70d84]{display:flex;justify-content:center;align-items:center;width:48px;height:var(--vp-nav-height)}@media (min-width: 768px){.VPNavBarHamburger[data-v-02e70d84]{display:none}}.container[data-v-02e70d84]{position:relative;width:16px;height:14px;overflow:hidden}.VPNavBarHamburger:hover .top[data-v-02e70d84]{top:0;left:0;transform:translate(4px)}.VPNavBarHamburger:hover .middle[data-v-02e70d84]{top:6px;left:0;transform:translate(0)}.VPNavBarHamburger:hover .bottom[data-v-02e70d84]{top:12px;left:0;transform:translate(8px)}.VPNavBarHamburger.active .top[data-v-02e70d84]{top:6px;transform:translate(0) rotate(225deg)}.VPNavBarHamburger.active .middle[data-v-02e70d84]{top:6px;transform:translate(16px)}.VPNavBarHamburger.active .bottom[data-v-02e70d84]{top:6px;transform:translate(0) rotate(135deg)}.VPNavBarHamburger.active:hover .top[data-v-02e70d84],.VPNavBarHamburger.active:hover .middle[data-v-02e70d84],.VPNavBarHamburger.active:hover .bottom[data-v-02e70d84]{background-color:var(--vp-c-text-2);transition:top .25s,background-color .25s,transform .25s}.top[data-v-02e70d84],.middle[data-v-02e70d84],.bottom[data-v-02e70d84]{position:absolute;width:16px;height:2px;background-color:var(--vp-c-text-1);transition:top .25s,background-color .5s,transform .25s}.top[data-v-02e70d84]{top:0;left:0;transform:translate(0)}.middle[data-v-02e70d84]{top:6px;left:0;transform:translate(8px)}.bottom[data-v-02e70d84]{top:12px;left:0;transform:translate(4px)}.VPNavBarMenuLink[data-v-60a4bcda]{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-60a4bcda],.VPNavBarMenuLink[data-v-60a4bcda]:hover{color:var(--vp-c-brand-1)}.VPNavBarMenu[data-v-b96fcd2b]{display:none}@media (min-width: 768px){.VPNavBarMenu[data-v-b96fcd2b]{display:flex}}/*! @docsearch/css 3.7.0 | MIT License | © Algolia, Inc. and contributors | https://docsearch.algolia.com */:root{--docsearch-primary-color:#5468ff;--docsearch-text-color:#1c1e21;--docsearch-spacing:12px;--docsearch-icon-stroke-width:1.4;--docsearch-highlight-color:var(--docsearch-primary-color);--docsearch-muted-color:#969faf;--docsearch-container-background:rgba(101,108,133,.8);--docsearch-logo-color:#5468ff;--docsearch-modal-width:560px;--docsearch-modal-height:600px;--docsearch-modal-background:#f5f6f7;--docsearch-modal-shadow:inset 1px 1px 0 0 hsla(0,0%,100%,.5),0 3px 8px 0 #555a64;--docsearch-searchbox-height:56px;--docsearch-searchbox-background:#ebedf0;--docsearch-searchbox-focus-background:#fff;--docsearch-searchbox-shadow:inset 0 0 0 2px var(--docsearch-primary-color);--docsearch-hit-height:56px;--docsearch-hit-color:#444950;--docsearch-hit-active-color:#fff;--docsearch-hit-background:#fff;--docsearch-hit-shadow:0 1px 3px 0 #d4d9e1;--docsearch-key-gradient:linear-gradient(-225deg,#d5dbe4,#f8f8f8);--docsearch-key-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 2px 1px rgba(30,35,90,.4);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #cdcde6,inset 0 0 1px 1px #fff,0 1px 1px 0 rgba(30,35,90,.4);--docsearch-footer-height:44px;--docsearch-footer-background:#fff;--docsearch-footer-shadow:0 -1px 0 0 #e0e3e8,0 -3px 6px 0 rgba(69,98,155,.12)}html[data-theme=dark]{--docsearch-text-color:#f5f6f7;--docsearch-container-background:rgba(9,10,17,.8);--docsearch-modal-background:#15172a;--docsearch-modal-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--docsearch-searchbox-background:#090a11;--docsearch-searchbox-focus-background:#000;--docsearch-hit-color:#bec3c9;--docsearch-hit-shadow:none;--docsearch-hit-background:#090a11;--docsearch-key-gradient:linear-gradient(-26.5deg,#565872,#31355b);--docsearch-key-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 2px 2px 0 rgba(3,4,9,.3);--docsearch-key-pressed-shadow:inset 0 -2px 0 0 #282d55,inset 0 0 1px 1px #51577d,0 1px 1px 0 #0304094d;--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:0;border-radius:3px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 2px;position:relative;top:-1px;width:20px}.DocSearch-Button-Key--pressed{box-shadow:var(--docsearch-key-pressed-shadow);transform:translate3d(0,1px,0)}@media (max-width:768px){.DocSearch-Button-Keys,.DocSearch-Button-Placeholder{display:none}}.DocSearch--active{overflow:hidden!important}.DocSearch-Container,.DocSearch-Container *{box-sizing:border-box}.DocSearch-Container{background-color:var(--docsearch-container-background);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:200}.DocSearch-Container a{text-decoration:none}.DocSearch-Link{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;font:inherit;margin:0;padding:0}.DocSearch-Modal{background:var(--docsearch-modal-background);border-radius:6px;box-shadow:var(--docsearch-modal-shadow);flex-direction:column;margin:60px auto auto;max-width:var(--docsearch-modal-width);position:relative}.DocSearch-SearchBar{display:flex;padding:var(--docsearch-spacing) var(--docsearch-spacing) 0}.DocSearch-Form{align-items:center;background:var(--docsearch-searchbox-focus-background);border-radius:4px;box-shadow:var(--docsearch-searchbox-shadow);display:flex;height:var(--docsearch-searchbox-height);margin:0;padding:0 var(--docsearch-spacing);position:relative;width:100%}.DocSearch-Input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;border:0;color:var(--docsearch-text-color);flex:1;font:inherit;font-size:1.2em;height:100%;outline:none;padding:0 0 0 8px;width:80%}.DocSearch-Input::placeholder{color:var(--docsearch-muted-color);opacity:1}.DocSearch-Input::-webkit-search-cancel-button,.DocSearch-Input::-webkit-search-decoration,.DocSearch-Input::-webkit-search-results-button,.DocSearch-Input::-webkit-search-results-decoration{display:none}.DocSearch-LoadingIndicator,.DocSearch-MagnifierLabel,.DocSearch-Reset{margin:0;padding:0}.DocSearch-MagnifierLabel,.DocSearch-Reset{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}.DocSearch-Container--Stalled .DocSearch-MagnifierLabel,.DocSearch-LoadingIndicator{display:none}.DocSearch-Container--Stalled .DocSearch-LoadingIndicator{align-items:center;color:var(--docsearch-highlight-color);display:flex;justify-content:center}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Reset{animation:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;right:0;stroke-width:var(--docsearch-icon-stroke-width)}}.DocSearch-Reset{animation:fade-in .1s ease-in forwards;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:var(--docsearch-icon-color);cursor:pointer;padding:2px;right:0;stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Reset[hidden]{display:none}.DocSearch-Reset:hover{color:var(--docsearch-highlight-color)}.DocSearch-LoadingIndicator svg,.DocSearch-MagnifierLabel svg{height:24px;width:24px}.DocSearch-Cancel{display:none}.DocSearch-Dropdown{max-height:calc(var(--docsearch-modal-height) - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height));min-height:var(--docsearch-spacing);overflow-y:auto;overflow-y:overlay;padding:0 var(--docsearch-spacing);scrollbar-color:var(--docsearch-muted-color) var(--docsearch-modal-background);scrollbar-width:thin}.DocSearch-Dropdown::-webkit-scrollbar{width:12px}.DocSearch-Dropdown::-webkit-scrollbar-track{background:transparent}.DocSearch-Dropdown::-webkit-scrollbar-thumb{background-color:var(--docsearch-muted-color);border:3px solid var(--docsearch-modal-background);border-radius:20px}.DocSearch-Dropdown ul{list-style:none;margin:0;padding:0}.DocSearch-Label{font-size:.75em;line-height:1.6em}.DocSearch-Help,.DocSearch-Label{color:var(--docsearch-muted-color)}.DocSearch-Help{font-size:.9em;margin:0;-webkit-user-select:none;user-select:none}.DocSearch-Title{font-size:1.2em}.DocSearch-Logo a{display:flex}.DocSearch-Logo svg{color:var(--docsearch-logo-color);margin-left:8px}.DocSearch-Hits:last-of-type{margin-bottom:24px}.DocSearch-Hits mark{background:none;color:var(--docsearch-highlight-color)}.DocSearch-HitsFooter{color:var(--docsearch-muted-color);display:flex;font-size:.85em;justify-content:center;margin-bottom:var(--docsearch-spacing);padding:var(--docsearch-spacing)}.DocSearch-HitsFooter a{border-bottom:1px solid;color:inherit}.DocSearch-Hit{border-radius:4px;display:flex;padding-bottom:4px;position:relative}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--deleting{transition:none}}.DocSearch-Hit--deleting{opacity:0;transition:all .25s linear}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit--favoriting{transition:none}}.DocSearch-Hit--favoriting{transform:scale(0);transform-origin:top center;transition:all .25s linear;transition-delay:.25s}.DocSearch-Hit a{background:var(--docsearch-hit-background);border-radius:4px;box-shadow:var(--docsearch-hit-shadow);display:block;padding-left:var(--docsearch-spacing);width:100%}.DocSearch-Hit-source{background:var(--docsearch-modal-background);color:var(--docsearch-highlight-color);font-size:.85em;font-weight:600;line-height:32px;margin:0 -4px;padding:8px 4px 0;position:sticky;top:0;z-index:10}.DocSearch-Hit-Tree{color:var(--docsearch-muted-color);height:var(--docsearch-hit-height);opacity:.5;stroke-width:var(--docsearch-icon-stroke-width);width:24px}.DocSearch-Hit[aria-selected=true] a{background-color:var(--docsearch-highlight-color)}.DocSearch-Hit[aria-selected=true] mark{text-decoration:underline}.DocSearch-Hit-Container{align-items:center;color:var(--docsearch-hit-color);display:flex;flex-direction:row;height:var(--docsearch-hit-height);padding:0 var(--docsearch-spacing) 0 0}.DocSearch-Hit-icon{height:20px;width:20px}.DocSearch-Hit-action,.DocSearch-Hit-icon{color:var(--docsearch-muted-color);stroke-width:var(--docsearch-icon-stroke-width)}.DocSearch-Hit-action{align-items:center;display:flex;height:22px;width:22px}.DocSearch-Hit-action svg{display:block;height:18px;width:18px}.DocSearch-Hit-action+.DocSearch-Hit-action{margin-left:6px}.DocSearch-Hit-action-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:50%;color:inherit;cursor:pointer;padding:2px}svg.DocSearch-Hit-Select-Icon{display:none}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Select-Icon{display:block}.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:background-color .1s ease-in}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{transition:none}}.DocSearch-Hit-action-button:focus path,.DocSearch-Hit-action-button:hover path{fill:#fff}.DocSearch-Hit-content-wrapper{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;line-height:1.2em;margin:0 8px;overflow-x:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;width:80%}.DocSearch-Hit-title{font-size:.9em}.DocSearch-Hit-path{color:var(--docsearch-muted-color);font-size:.75em}.DocSearch-Hit[aria-selected=true] .DocSearch-Hit-Tree,.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] mark{color:var(--docsearch-hit-active-color)!important}@media screen and (prefers-reduced-motion:reduce){.DocSearch-Hit-action-button:focus,.DocSearch-Hit-action-button:hover{background:#0003;transition:none}}.DocSearch-ErrorScreen,.DocSearch-NoResults,.DocSearch-StartScreen{font-size:.9em;margin:0 auto;padding:36px 0;text-align:center;width:80%}.DocSearch-Screen-Icon{color:var(--docsearch-muted-color);padding-bottom:12px}.DocSearch-NoResults-Prefill-List{display:inline-block;padding-bottom:24px;text-align:left}.DocSearch-NoResults-Prefill-List ul{display:inline-block;padding:8px 0 0}.DocSearch-NoResults-Prefill-List li{list-style-position:inside;list-style-type:"» "}.DocSearch-Prefill{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;border-radius:1em;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;font-size:1em;font-weight:700;padding:0}.DocSearch-Prefill:focus,.DocSearch-Prefill:hover{outline:none;text-decoration:underline}.DocSearch-Footer{align-items:center;background:var(--docsearch-footer-background);border-radius:0 0 8px 8px;box-shadow:var(--docsearch-footer-shadow);display:flex;flex-direction:row-reverse;flex-shrink:0;height:var(--docsearch-footer-height);justify-content:space-between;padding:0 var(--docsearch-spacing);position:relative;-webkit-user-select:none;user-select:none;width:100%;z-index:300}.DocSearch-Commands{color:var(--docsearch-muted-color);display:flex;list-style:none;margin:0;padding:0}.DocSearch-Commands li{align-items:center;display:flex}.DocSearch-Commands li:not(:last-of-type){margin-right:.8em}.DocSearch-Commands-Key{align-items:center;background:var(--docsearch-key-gradient);border:0;border-radius:2px;box-shadow:var(--docsearch-key-shadow);color:var(--docsearch-muted-color);display:flex;height:18px;justify-content:center;margin-right:.4em;padding:0 0 1px;width:20px}.DocSearch-VisuallyHiddenForAccessibility{clip:rect(0 0 0 0);clip-path:inset(50%);height:1px;overflow:hidden;position:absolute;white-space:nowrap;width:1px}@media (max-width:768px){:root{--docsearch-spacing:10px;--docsearch-footer-height:40px}.DocSearch-Dropdown{height:100%}.DocSearch-Container{height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);position:absolute}.DocSearch-Footer{border-radius:0;bottom:0;position:absolute}.DocSearch-Hit-content-wrapper{display:flex;position:relative;width:80%}.DocSearch-Modal{border-radius:0;box-shadow:none;height:100vh;height:-webkit-fill-available;height:calc(var(--docsearch-vh, 1vh)*100);margin:0;max-width:100%;width:100%}.DocSearch-Dropdown{max-height:calc(var(--docsearch-vh, 1vh)*100 - var(--docsearch-searchbox-height) - var(--docsearch-spacing) - var(--docsearch-footer-height))}.DocSearch-Cancel{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;color:var(--docsearch-highlight-color);cursor:pointer;display:inline-block;flex:none;font:inherit;font-size:1em;font-weight:500;margin-left:var(--docsearch-spacing);outline:none;overflow:hidden;padding:0;-webkit-user-select:none;user-select:none;white-space:nowrap}.DocSearch-Commands,.DocSearch-Hit-Tree{display:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}[class*=DocSearch]{--docsearch-primary-color: var(--vp-c-brand-1);--docsearch-highlight-color: var(--docsearch-primary-color);--docsearch-text-color: var(--vp-c-text-1);--docsearch-muted-color: var(--vp-c-text-2);--docsearch-searchbox-shadow: none;--docsearch-searchbox-background: transparent;--docsearch-searchbox-focus-background: transparent;--docsearch-key-gradient: transparent;--docsearch-key-shadow: none;--docsearch-modal-background: var(--vp-c-bg-soft);--docsearch-footer-background: var(--vp-c-bg)}.dark [class*=DocSearch]{--docsearch-modal-shadow: none;--docsearch-footer-shadow: none;--docsearch-logo-color: var(--vp-c-text-2);--docsearch-hit-background: var(--vp-c-default-soft);--docsearch-hit-color: var(--vp-c-text-2);--docsearch-hit-shadow: none}.DocSearch-Button{display:flex;justify-content:center;align-items:center;margin:0;padding:0;width:48px;height:55px;background:transparent;transition:border-color .25s}.DocSearch-Button:hover{background:transparent}.DocSearch-Button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}.DocSearch-Button-Key--pressed{transform:none;box-shadow:none}.DocSearch-Button:focus:not(:focus-visible){outline:none!important}@media (min-width: 768px){.DocSearch-Button{justify-content:flex-start;border:1px solid transparent;border-radius:8px;padding:0 10px 0 12px;width:100%;height:40px;background-color:var(--vp-c-bg-alt)}.DocSearch-Button:hover{border-color:var(--vp-c-brand-1);background:var(--vp-c-bg-alt)}}.DocSearch-Button .DocSearch-Button-Container{display:flex;align-items:center}.DocSearch-Button .DocSearch-Search-Icon{position:relative;width:16px;height:16px;color:var(--vp-c-text-1);fill:currentColor;transition:color .5s}.DocSearch-Button:hover .DocSearch-Search-Icon{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Search-Icon{top:1px;margin-right:8px;width:14px;height:14px;color:var(--vp-c-text-2)}}.DocSearch-Button .DocSearch-Button-Placeholder{display:none;margin-top:2px;padding:0 16px 0 0;font-size:13px;font-weight:500;color:var(--vp-c-text-2);transition:color .5s}.DocSearch-Button:hover .DocSearch-Button-Placeholder{color:var(--vp-c-text-1)}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Placeholder{display:inline-block}}.DocSearch-Button .DocSearch-Button-Keys{direction:ltr;display:none;min-width:auto}@media (min-width: 768px){.DocSearch-Button .DocSearch-Button-Keys{display:flex;align-items:center}}.DocSearch-Button .DocSearch-Button-Key{display:block;margin:2px 0 0;border:1px solid var(--vp-c-divider);border-right:none;border-radius:4px 0 0 4px;padding-left:6px;min-width:0;width:auto;height:22px;line-height:22px;font-family:var(--vp-font-family-base);font-size:12px;font-weight:500;transition:color .5s,border-color .5s}.DocSearch-Button .DocSearch-Button-Key+.DocSearch-Button-Key{border-right:1px solid var(--vp-c-divider);border-left:none;border-radius:0 4px 4px 0;padding-left:2px;padding-right:6px}.DocSearch-Button .DocSearch-Button-Key:first-child{font-size:0!important}.DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"Ctrl";font-size:12px;letter-spacing:normal;color:var(--docsearch-muted-color)}.mac .DocSearch-Button .DocSearch-Button-Key:first-child:after{content:"⌘"}.DocSearch-Button .DocSearch-Button-Key:first-child>*{display:none}.DocSearch-Search-Icon{--icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' stroke-width='1.6' viewBox='0 0 20 20'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m14.386 14.386 4.088 4.088-4.088-4.088A7.533 7.533 0 1 1 3.733 3.733a7.533 7.533 0 0 1 10.653 10.653z'/%3E%3C/svg%3E")}.VPNavBarSearch{display:flex;align-items:center}@media (min-width: 768px){.VPNavBarSearch{flex-grow:1;padding-left:24px}}@media (min-width: 960px){.VPNavBarSearch{padding-left:32px}}.dark .DocSearch-Footer{border-top:1px solid var(--vp-c-divider)}.DocSearch-Form{border:1px solid var(--vp-c-brand-1);background-color:var(--vp-c-white)}.dark .DocSearch-Form{background-color:var(--vp-c-default-soft)}.DocSearch-Screen-Icon>svg{margin:auto}.VPNavBarSocialLinks[data-v-f2e6cad9]{display:none}@media (min-width: 1280px){.VPNavBarSocialLinks[data-v-f2e6cad9]{display:flex;align-items:center}}.title[data-v-aaf4866d]{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-aaf4866d]{flex-shrink:0}.VPNavBarTitle.has-sidebar .title[data-v-aaf4866d]{border-bottom-color:var(--vp-c-divider)}}[data-v-aaf4866d] .logo{margin-right:8px;height:var(--vp-nav-logo-height)}.VPNavBarTranslations[data-v-3a86a490]{display:none}@media (min-width: 1280px){.VPNavBarTranslations[data-v-3a86a490]{display:flex;align-items:center}}.title[data-v-3a86a490]{padding:0 24px 0 12px;line-height:32px;font-size:14px;font-weight:700;color:var(--vp-c-text-1)}.VPNavBar[data-v-cd1bb236]{position:relative;height:var(--vp-nav-height);pointer-events:none;white-space:nowrap;transition:background-color .25s}.VPNavBar.screen-open[data-v-cd1bb236]{transition:none;background-color:var(--vp-nav-bg-color);border-bottom:1px solid var(--vp-c-divider)}.VPNavBar[data-v-cd1bb236]:not(.home){background-color:var(--vp-nav-bg-color)}@media (min-width: 960px){.VPNavBar[data-v-cd1bb236]:not(.home){background-color:transparent}.VPNavBar[data-v-cd1bb236]:not(.has-sidebar):not(.home.top){background-color:var(--vp-nav-bg-color)}}.wrapper[data-v-cd1bb236]{padding:0 8px 0 24px}@media (min-width: 768px){.wrapper[data-v-cd1bb236]{padding:0 32px}}@media (min-width: 960px){.VPNavBar.has-sidebar .wrapper[data-v-cd1bb236]{padding:0}}.container[data-v-cd1bb236]{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-cd1bb236],.container>.content[data-v-cd1bb236]{pointer-events:none}.container[data-v-cd1bb236] *{pointer-events:auto}@media (min-width: 960px){.VPNavBar.has-sidebar .container[data-v-cd1bb236]{max-width:100%}}.title[data-v-cd1bb236]{flex-shrink:0;height:calc(var(--vp-nav-height) - 1px);transition:background-color .5s}@media (min-width: 960px){.VPNavBar.has-sidebar .title[data-v-cd1bb236]{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-cd1bb236]{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-cd1bb236]{flex-grow:1}@media (min-width: 960px){.VPNavBar.has-sidebar .content[data-v-cd1bb236]{position:relative;z-index:1;padding-right:32px;padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .content[data-v-cd1bb236]{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-cd1bb236]{display:flex;justify-content:flex-end;align-items:center;height:var(--vp-nav-height);transition:background-color .5s}@media (min-width: 960px){.VPNavBar:not(.home.top) .content-body[data-v-cd1bb236]{position:relative;background-color:var(--vp-nav-bg-color)}.VPNavBar:not(.has-sidebar):not(.home.top) .content-body[data-v-cd1bb236]{background-color:transparent}}@media (max-width: 767px){.content-body[data-v-cd1bb236]{column-gap:.5rem}}.menu+.translations[data-v-cd1bb236]:before,.menu+.appearance[data-v-cd1bb236]:before,.menu+.social-links[data-v-cd1bb236]:before,.translations+.appearance[data-v-cd1bb236]:before,.appearance+.social-links[data-v-cd1bb236]:before{margin-right:8px;margin-left:8px;width:1px;height:24px;background-color:var(--vp-c-divider);content:""}.menu+.appearance[data-v-cd1bb236]:before,.translations+.appearance[data-v-cd1bb236]:before{margin-right:16px}.appearance+.social-links[data-v-cd1bb236]:before{margin-left:16px}.social-links[data-v-cd1bb236]{margin-right:-8px}.divider[data-v-cd1bb236]{width:100%;height:1px}@media (min-width: 960px){.VPNavBar.has-sidebar .divider[data-v-cd1bb236]{padding-left:var(--vp-sidebar-width)}}@media (min-width: 1440px){.VPNavBar.has-sidebar .divider[data-v-cd1bb236]{padding-left:calc((100vw - var(--vp-layout-max-width)) / 2 + var(--vp-sidebar-width))}}.divider-line[data-v-cd1bb236]{width:100%;height:1px;transition:background-color .5s}.VPNavBar:not(.home) .divider-line[data-v-cd1bb236]{background-color:var(--vp-c-gutter)}@media (min-width: 960px){.VPNavBar:not(.home.top) .divider-line[data-v-cd1bb236]{background-color:var(--vp-c-gutter)}.VPNavBar:not(.has-sidebar):not(.home.top) .divider[data-v-cd1bb236]{background-color:var(--vp-c-gutter)}}.VPNavScreenAppearance[data-v-ca8d388f]{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-ca8d388f]{line-height:24px;font-size:12px;font-weight:500;color:var(--vp-c-text-2)}.VPNavScreenMenuLink[data-v-95c6fcee]{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-95c6fcee]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupLink[data-v-80ca3bbe]{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-80ca3bbe]:hover{color:var(--vp-c-brand-1)}.VPNavScreenMenuGroupSection[data-v-074f6daf]{display:block}.title[data-v-074f6daf]{line-height:32px;font-size:13px;font-weight:700;color:var(--vp-c-text-2);transition:color .25s}.VPNavScreenMenuGroup[data-v-da034c53]{border-bottom:1px solid var(--vp-c-divider);height:48px;overflow:hidden;transition:border-color .5s}.VPNavScreenMenuGroup .items[data-v-da034c53]{visibility:hidden}.VPNavScreenMenuGroup.open .items[data-v-da034c53]{visibility:visible}.VPNavScreenMenuGroup.open[data-v-da034c53]{padding-bottom:10px;height:auto}.VPNavScreenMenuGroup.open .button[data-v-da034c53]{padding-bottom:6px;color:var(--vp-c-brand-1)}.VPNavScreenMenuGroup.open .button-icon[data-v-da034c53]{transform:rotate(45deg)}.button[data-v-da034c53]{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-da034c53]:hover{color:var(--vp-c-brand-1)}.button-icon[data-v-da034c53]{transition:transform .25s}.group[data-v-da034c53]:first-child{padding-top:0}.group+.group[data-v-da034c53],.group+.item[data-v-da034c53]{padding-top:4px}.VPNavScreenTranslations[data-v-56ef9b91]{height:24px;overflow:hidden}.VPNavScreenTranslations.open[data-v-56ef9b91]{height:auto}.title[data-v-56ef9b91]{display:flex;align-items:center;font-size:14px;font-weight:500;color:var(--vp-c-text-1)}.icon[data-v-56ef9b91]{font-size:16px}.icon.lang[data-v-56ef9b91]{margin-right:8px}.icon.chevron[data-v-56ef9b91]{margin-left:4px}.list[data-v-56ef9b91]{padding:4px 0 0 24px}.link[data-v-56ef9b91]{line-height:32px;font-size:13px;color:var(--vp-c-text-1)}.VPNavScreen[data-v-5dd6a902]{position:fixed;top:calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px));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 .25s;pointer-events:auto}.VPNavScreen.fade-enter-active[data-v-5dd6a902],.VPNavScreen.fade-leave-active[data-v-5dd6a902]{transition:opacity .25s}.VPNavScreen.fade-enter-active .container[data-v-5dd6a902],.VPNavScreen.fade-leave-active .container[data-v-5dd6a902]{transition:transform .25s ease}.VPNavScreen.fade-enter-from[data-v-5dd6a902],.VPNavScreen.fade-leave-to[data-v-5dd6a902]{opacity:0}.VPNavScreen.fade-enter-from .container[data-v-5dd6a902],.VPNavScreen.fade-leave-to .container[data-v-5dd6a902]{transform:translateY(-8px)}@media (min-width: 768px){.VPNavScreen[data-v-5dd6a902]{display:none}}.container[data-v-5dd6a902]{margin:0 auto;padding:24px 0 96px;max-width:288px}.menu+.translations[data-v-5dd6a902],.menu+.appearance[data-v-5dd6a902],.translations+.appearance[data-v-5dd6a902]{margin-top:24px}.menu+.social-links[data-v-5dd6a902]{margin-top:16px}.appearance+.social-links[data-v-5dd6a902]{margin-top:16px}.VPNav[data-v-923e881b]{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-923e881b]{position:fixed}}.VPSidebarItem.level-0[data-v-4343b89a]{padding-bottom:24px}.VPSidebarItem.collapsed.level-0[data-v-4343b89a]{padding-bottom:10px}.item[data-v-4343b89a]{position:relative;display:flex;width:100%}.VPSidebarItem.collapsible>.item[data-v-4343b89a]{cursor:pointer}.indicator[data-v-4343b89a]{position:absolute;top:6px;bottom:6px;left:-17px;width:2px;border-radius:2px;transition:background-color .25s}.VPSidebarItem.level-2.is-active>.item>.indicator[data-v-4343b89a],.VPSidebarItem.level-3.is-active>.item>.indicator[data-v-4343b89a],.VPSidebarItem.level-4.is-active>.item>.indicator[data-v-4343b89a],.VPSidebarItem.level-5.is-active>.item>.indicator[data-v-4343b89a]{background-color:var(--vp-c-brand-1)}.link[data-v-4343b89a]{display:flex;align-items:center;flex-grow:1}.text[data-v-4343b89a]{flex-grow:1;padding:4px 0;line-height:24px;font-size:14px;transition:color .25s}.VPSidebarItem.level-0 .text[data-v-4343b89a]{font-weight:700;color:var(--vp-c-text-1)}.VPSidebarItem.level-1 .text[data-v-4343b89a],.VPSidebarItem.level-2 .text[data-v-4343b89a],.VPSidebarItem.level-3 .text[data-v-4343b89a],.VPSidebarItem.level-4 .text[data-v-4343b89a],.VPSidebarItem.level-5 .text[data-v-4343b89a]{font-weight:500;color:var(--vp-c-text-2)}.VPSidebarItem.level-0.is-link>.item>.link:hover .text[data-v-4343b89a],.VPSidebarItem.level-1.is-link>.item>.link:hover .text[data-v-4343b89a],.VPSidebarItem.level-2.is-link>.item>.link:hover .text[data-v-4343b89a],.VPSidebarItem.level-3.is-link>.item>.link:hover .text[data-v-4343b89a],.VPSidebarItem.level-4.is-link>.item>.link:hover .text[data-v-4343b89a],.VPSidebarItem.level-5.is-link>.item>.link:hover .text[data-v-4343b89a]{color:var(--vp-c-brand-1)}.VPSidebarItem.level-0.has-active>.item>.text[data-v-4343b89a],.VPSidebarItem.level-1.has-active>.item>.text[data-v-4343b89a],.VPSidebarItem.level-2.has-active>.item>.text[data-v-4343b89a],.VPSidebarItem.level-3.has-active>.item>.text[data-v-4343b89a],.VPSidebarItem.level-4.has-active>.item>.text[data-v-4343b89a],.VPSidebarItem.level-5.has-active>.item>.text[data-v-4343b89a],.VPSidebarItem.level-0.has-active>.item>.link>.text[data-v-4343b89a],.VPSidebarItem.level-1.has-active>.item>.link>.text[data-v-4343b89a],.VPSidebarItem.level-2.has-active>.item>.link>.text[data-v-4343b89a],.VPSidebarItem.level-3.has-active>.item>.link>.text[data-v-4343b89a],.VPSidebarItem.level-4.has-active>.item>.link>.text[data-v-4343b89a],.VPSidebarItem.level-5.has-active>.item>.link>.text[data-v-4343b89a]{color:var(--vp-c-text-1)}.VPSidebarItem.level-0.is-active>.item .link>.text[data-v-4343b89a],.VPSidebarItem.level-1.is-active>.item .link>.text[data-v-4343b89a],.VPSidebarItem.level-2.is-active>.item .link>.text[data-v-4343b89a],.VPSidebarItem.level-3.is-active>.item .link>.text[data-v-4343b89a],.VPSidebarItem.level-4.is-active>.item .link>.text[data-v-4343b89a],.VPSidebarItem.level-5.is-active>.item .link>.text[data-v-4343b89a]{color:var(--vp-c-brand-1)}.caret[data-v-4343b89a]{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-4343b89a]{color:var(--vp-c-text-2)}.item:hover .caret[data-v-4343b89a]:hover{color:var(--vp-c-text-1)}.caret-icon[data-v-4343b89a]{font-size:18px;transform:rotate(90deg);transition:transform .25s}.VPSidebarItem.collapsed .caret-icon[data-v-4343b89a]{transform:rotate(0)}.VPSidebarItem.level-1 .items[data-v-4343b89a],.VPSidebarItem.level-2 .items[data-v-4343b89a],.VPSidebarItem.level-3 .items[data-v-4343b89a],.VPSidebarItem.level-4 .items[data-v-4343b89a],.VPSidebarItem.level-5 .items[data-v-4343b89a]{border-left:1px solid var(--vp-c-divider);padding-left:16px}.VPSidebarItem.collapsed .items[data-v-4343b89a]{display:none}.no-transition[data-v-8fd3fb8b] .caret-icon{transition:none}.group+.group[data-v-8fd3fb8b]{border-top:1px solid var(--vp-c-divider);padding-top:10px}@media (min-width: 960px){.group[data-v-8fd3fb8b]{padding-top:10px;width:calc(var(--vp-sidebar-width) - 64px)}}.VPSidebar[data-v-002788ff]{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-002788ff]{opacity:1;visibility:visible;transform:translate(0);transition:opacity .25s,transform .5s cubic-bezier(.19,1,.22,1)}.dark .VPSidebar[data-v-002788ff]{box-shadow:var(--vp-shadow-1)}@media (min-width: 960px){.VPSidebar[data-v-002788ff]{padding-top:var(--vp-nav-height);width:var(--vp-sidebar-width);max-width:100%;background-color:var(--vp-sidebar-bg-color);opacity:1;visibility:visible;box-shadow:none;transform:translate(0)}}@media (min-width: 1440px){.VPSidebar[data-v-002788ff]{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-002788ff]{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-002788ff]{outline:0}.VPSkipLink[data-v-d497fc70]{top:8px;left:8px;padding:8px 16px;z-index:999;border-radius:8px;font-size:12px;font-weight:700;text-decoration:none;color:var(--vp-c-brand-1);box-shadow:var(--vp-shadow-3);background-color:var(--vp-c-bg)}.VPSkipLink[data-v-d497fc70]:focus{height:auto;width:auto;clip:auto;clip-path:none}@media (min-width: 1280px){.VPSkipLink[data-v-d497fc70]{top:14px;left:16px}}.Layout[data-v-5b5bf43a]{display:flex;flex-direction:column;min-height:100vh}.VPHomeSponsors[data-v-fdfa25c3]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPHomeSponsors[data-v-fdfa25c3]{margin:96px 0}@media (min-width: 768px){.VPHomeSponsors[data-v-fdfa25c3]{margin:128px 0}}.VPHomeSponsors[data-v-fdfa25c3]{padding:0 24px}@media (min-width: 768px){.VPHomeSponsors[data-v-fdfa25c3]{padding:0 48px}}@media (min-width: 960px){.VPHomeSponsors[data-v-fdfa25c3]{padding:0 64px}}.container[data-v-fdfa25c3]{margin:0 auto;max-width:1152px}.love[data-v-fdfa25c3]{margin:0 auto;width:fit-content;font-size:28px;color:var(--vp-c-text-3)}.icon[data-v-fdfa25c3]{display:inline-block}.message[data-v-fdfa25c3]{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-fdfa25c3]{padding-top:32px}.action[data-v-fdfa25c3]{padding-top:40px;text-align:center}.VPTeamPage[data-v-97dd77af]{margin:96px 0}@media (min-width: 768px){.VPTeamPage[data-v-97dd77af]{margin:128px 0}}.VPHome .VPTeamPageTitle[data-v-97dd77af-s]{border-top:1px solid var(--vp-c-gutter);padding-top:88px!important}.VPTeamPageSection+.VPTeamPageSection[data-v-97dd77af-s],.VPTeamMembers+.VPTeamPageSection[data-v-97dd77af-s]{margin-top:64px}.VPTeamMembers+.VPTeamMembers[data-v-97dd77af-s]{margin-top:24px}@media (min-width: 768px){.VPTeamPageTitle+.VPTeamPageSection[data-v-97dd77af-s]{margin-top:16px}.VPTeamPageSection+.VPTeamPageSection[data-v-97dd77af-s],.VPTeamMembers+.VPTeamPageSection[data-v-97dd77af-s]{margin-top:96px}}.VPTeamMembers[data-v-97dd77af-s]{padding:0 24px}@media (min-width: 768px){.VPTeamMembers[data-v-97dd77af-s]{padding:0 48px}}@media (min-width: 960px){.VPTeamMembers[data-v-97dd77af-s]{padding:0 64px}}.VPTeamPageTitle[data-v-aa5938b2]{padding:48px 32px;text-align:center}@media (min-width: 768px){.VPTeamPageTitle[data-v-aa5938b2]{padding:64px 48px 48px}}@media (min-width: 960px){.VPTeamPageTitle[data-v-aa5938b2]{padding:80px 64px 48px}}.title[data-v-aa5938b2]{letter-spacing:0;line-height:44px;font-size:36px;font-weight:500}@media (min-width: 768px){.title[data-v-aa5938b2]{letter-spacing:-.5px;line-height:56px;font-size:48px}}.lead[data-v-aa5938b2]{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-aa5938b2]{max-width:592px;letter-spacing:.15px;line-height:28px;font-size:20px}}.VPTeamPageSection[data-v-e35a061a]{padding:0 32px}@media (min-width: 768px){.VPTeamPageSection[data-v-e35a061a]{padding:0 48px}}@media (min-width: 960px){.VPTeamPageSection[data-v-e35a061a]{padding:0 64px}}.title[data-v-e35a061a]{position:relative;margin:0 auto;max-width:1152px;text-align:center;color:var(--vp-c-text-2)}.title-line[data-v-e35a061a]{position:absolute;top:16px;left:0;width:100%;height:1px;background-color:var(--vp-c-divider)}.title-text[data-v-e35a061a]{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-e35a061a]{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-e35a061a]{padding-top:40px}.VPTeamMembersItem[data-v-acb183f0]{display:flex;flex-direction:column;gap:2px;border-radius:12px;width:100%;height:100%;overflow:hidden}.VPTeamMembersItem.small .profile[data-v-acb183f0]{padding:32px}.VPTeamMembersItem.small .data[data-v-acb183f0]{padding-top:20px}.VPTeamMembersItem.small .avatar[data-v-acb183f0]{width:64px;height:64px}.VPTeamMembersItem.small .name[data-v-acb183f0]{line-height:24px;font-size:16px}.VPTeamMembersItem.small .affiliation[data-v-acb183f0]{padding-top:4px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .desc[data-v-acb183f0]{padding-top:12px;line-height:20px;font-size:14px}.VPTeamMembersItem.small .links[data-v-acb183f0]{margin:0 -16px -20px;padding:10px 0 0}.VPTeamMembersItem.medium .profile[data-v-acb183f0]{padding:48px 32px}.VPTeamMembersItem.medium .data[data-v-acb183f0]{padding-top:24px;text-align:center}.VPTeamMembersItem.medium .avatar[data-v-acb183f0]{width:96px;height:96px}.VPTeamMembersItem.medium .name[data-v-acb183f0]{letter-spacing:.15px;line-height:28px;font-size:20px}.VPTeamMembersItem.medium .affiliation[data-v-acb183f0]{padding-top:4px;font-size:16px}.VPTeamMembersItem.medium .desc[data-v-acb183f0]{padding-top:16px;max-width:288px;font-size:16px}.VPTeamMembersItem.medium .links[data-v-acb183f0]{margin:0 -16px -12px;padding:16px 12px 0}.profile[data-v-acb183f0]{flex-grow:1;background-color:var(--vp-c-bg-soft)}.data[data-v-acb183f0]{text-align:center}.avatar[data-v-acb183f0]{position:relative;flex-shrink:0;margin:0 auto;border-radius:50%;box-shadow:var(--vp-shadow-3)}.avatar-img[data-v-acb183f0]{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;object-fit:cover}.name[data-v-acb183f0]{margin:0;font-weight:600}.affiliation[data-v-acb183f0]{margin:0;font-weight:500;color:var(--vp-c-text-2)}.org.link[data-v-acb183f0]{color:var(--vp-c-text-2);transition:color .25s}.org.link[data-v-acb183f0]:hover{color:var(--vp-c-brand-1)}.desc[data-v-acb183f0]{margin:0 auto}.desc[data-v-acb183f0] a{font-weight:500;color:var(--vp-c-brand-1);text-decoration-style:dotted;transition:color .25s}.links[data-v-acb183f0]{display:flex;justify-content:center;height:56px}.sp-link[data-v-acb183f0]{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-acb183f0]:hover,.sp .sp-link.link[data-v-acb183f0]:focus{outline:none;color:var(--vp-c-white);background-color:var(--vp-c-sponsor)}.sp-icon[data-v-acb183f0]{margin-right:8px;font-size:16px}.VPTeamMembers.small .container[data-v-73d9e590]{grid-template-columns:repeat(auto-fit,minmax(224px,1fr))}.VPTeamMembers.small.count-1 .container[data-v-73d9e590]{max-width:276px}.VPTeamMembers.small.count-2 .container[data-v-73d9e590]{max-width:576px}.VPTeamMembers.small.count-3 .container[data-v-73d9e590]{max-width:876px}.VPTeamMembers.medium .container[data-v-73d9e590]{grid-template-columns:repeat(auto-fit,minmax(256px,1fr))}@media (min-width: 375px){.VPTeamMembers.medium .container[data-v-73d9e590]{grid-template-columns:repeat(auto-fit,minmax(288px,1fr))}}.VPTeamMembers.medium.count-1 .container[data-v-73d9e590]{max-width:368px}.VPTeamMembers.medium.count-2 .container[data-v-73d9e590]{max-width:760px}.container[data-v-73d9e590]{display:grid;gap:24px;margin:0 auto;max-width:1152px}body:not(.mobile):-webkit-scrollbar{display:none}html:not(.mobile){scrollbar-width:none}img.VPImage.logo{border-radius:50%}img.VPImage.image-src{height:100%}.n-image-preview-toolbar .n-base-icon{box-sizing:content-box}:root{--vp-home-hero-name-color: transparent;--vp-home-hero-name-background: -webkit-linear-gradient( 120deg, #bd34fe 30%, #41d1ff );--vp-home-hero-image-background-image: linear-gradient( -45deg, #bd34fe 50%, #47caff 50% );--vp-home-hero-image-filter: blur(44px)}@media (min-width: 640px){:root{--vp-home-hero-image-filter: blur(56px)}}@media (min-width: 960px){:root{--vp-home-hero-image-filter: blur(68px)}}@keyframes hash-hint{0%{background-color:#95b4a820}to{background-color:#95b4a8}}.animate-hash-hint{animation:.5s ease-in-out 6 alternate hash-hint}.VPLocalSearchBox[data-v-d7abc443]{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;display:flex}.backdrop[data-v-d7abc443]{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--vp-backdrop-bg-color);transition:opacity .5s}.shell[data-v-d7abc443]{position:relative;padding:12px;margin:64px auto;display:flex;flex-direction:column;gap:16px;background:var(--vp-local-search-bg);width:min(100vw - 60px,900px);height:min-content;max-height:min(100vh - 128px,900px);border-radius:6px}@media (max-width: 767px){.shell[data-v-d7abc443]{margin:0;width:100vw;height:100vh;max-height:none;border-radius:0}}.search-bar[data-v-d7abc443]{border:1px solid var(--vp-c-divider);border-radius:4px;display:flex;align-items:center;padding:0 12px;cursor:text}@media (max-width: 767px){.search-bar[data-v-d7abc443]{padding:0 8px}}.search-bar[data-v-d7abc443]:focus-within{border-color:var(--vp-c-brand-1)}.local-search-icon[data-v-d7abc443]{display:block;font-size:18px}.navigate-icon[data-v-d7abc443]{display:block;font-size:14px}.search-icon[data-v-d7abc443]{margin:8px}@media (max-width: 767px){.search-icon[data-v-d7abc443]{display:none}}.search-input[data-v-d7abc443]{padding:6px 12px;font-size:inherit;width:100%}@media (max-width: 767px){.search-input[data-v-d7abc443]{padding:6px 4px}}.search-actions[data-v-d7abc443]{display:flex;gap:4px}@media (any-pointer: coarse){.search-actions[data-v-d7abc443]{gap:8px}}@media (min-width: 769px){.search-actions.before[data-v-d7abc443]{display:none}}.search-actions button[data-v-d7abc443]{padding:8px}.search-actions button[data-v-d7abc443]:not([disabled]):hover,.toggle-layout-button.detailed-list[data-v-d7abc443]{color:var(--vp-c-brand-1)}.search-actions button.clear-button[data-v-d7abc443]:disabled{opacity:.37}.search-keyboard-shortcuts[data-v-d7abc443]{font-size:.8rem;opacity:75%;display:flex;flex-wrap:wrap;gap:16px;line-height:14px}.search-keyboard-shortcuts span[data-v-d7abc443]{display:flex;align-items:center;gap:4px}@media (max-width: 767px){.search-keyboard-shortcuts[data-v-d7abc443]{display:none}}.search-keyboard-shortcuts kbd[data-v-d7abc443]{background:#8080801a;border-radius:4px;padding:3px 6px;min-width:24px;display:inline-block;text-align:center;vertical-align:middle;border:1px solid rgba(128,128,128,.15);box-shadow:0 2px 2px #0000001a}.results[data-v-d7abc443]{display:flex;flex-direction:column;gap:6px;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain}.result[data-v-d7abc443]{display:flex;align-items:center;gap:8px;border-radius:4px;transition:none;line-height:1rem;border:solid 2px var(--vp-local-search-result-border);outline:none}.result>div[data-v-d7abc443]{margin:12px;width:100%;overflow:hidden}@media (max-width: 767px){.result>div[data-v-d7abc443]{margin:8px}}.titles[data-v-d7abc443]{display:flex;flex-wrap:wrap;gap:4px;position:relative;z-index:1001;padding:2px 0}.title[data-v-d7abc443]{display:flex;align-items:center;gap:4px}.title.main[data-v-d7abc443]{font-weight:500}.title-icon[data-v-d7abc443]{opacity:.5;font-weight:500;color:var(--vp-c-brand-1)}.title svg[data-v-d7abc443]{opacity:.5}.result.selected[data-v-d7abc443]{--vp-local-search-result-bg: var(--vp-local-search-result-selected-bg);border-color:var(--vp-local-search-result-selected-border)}.excerpt-wrapper[data-v-d7abc443]{position:relative}.excerpt[data-v-d7abc443]{opacity:50%;pointer-events:none;max-height:140px;overflow:hidden;position:relative;margin-top:4px}.result.selected .excerpt[data-v-d7abc443]{opacity:1}.excerpt[data-v-d7abc443] *{font-size:.8rem!important;line-height:130%!important}.titles[data-v-d7abc443] mark,.excerpt[data-v-d7abc443] mark{background-color:var(--vp-local-search-highlight-bg);color:var(--vp-local-search-highlight-text);border-radius:2px;padding:0 2px}.excerpt[data-v-d7abc443] .vp-code-group .tabs{display:none}.excerpt[data-v-d7abc443] .vp-code-group div[class*=language-]{border-radius:8px!important}.excerpt-gradient-bottom[data-v-d7abc443]{position:absolute;bottom:-1px;left:0;width:100%;height:8px;background:linear-gradient(transparent,var(--vp-local-search-result-bg));z-index:1000}.excerpt-gradient-top[data-v-d7abc443]{position:absolute;top:-1px;left:0;width:100%;height:8px;background:linear-gradient(var(--vp-local-search-result-bg),transparent);z-index:1000}.result.selected .titles[data-v-d7abc443],.result.selected .title-icon[data-v-d7abc443]{color:var(--vp-c-brand-1)!important}.no-results[data-v-d7abc443]{font-size:.9rem;text-align:center;padding:12px}svg[data-v-d7abc443]{flex:none}