@volter/model-editor 0.5.66 → 0.5.67

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 (200) hide show
  1. package/dist/.vite/manifest.json +1022 -1006
  2. package/dist/assets/AudioViewer-DVXaSSYC.js +1 -0
  3. package/dist/assets/{BVHLoader-xUHWsz84.js → BVHLoader-msuIvJVn.js} +1 -1
  4. package/dist/assets/ColladaLoader-BpvxwqkB.js +3 -0
  5. package/dist/assets/EntityModelDocument-BtlQZcoU.js +1 -0
  6. package/dist/assets/EnvironmentAssetDocument-BH3zT9rt.js +1 -0
  7. package/dist/assets/FBXLoader-CsdO937F.js +1 -0
  8. package/dist/assets/{GameplaySessionTimeline-HJLZUV4Q.js → GameplaySessionTimeline-Dko95kB7.js} +10 -10
  9. package/dist/assets/ImageViewer-CZ_RMER2.js +1 -0
  10. package/dist/assets/{InspectorCanvasPreview-CLDhscy0.js → InspectorCanvasPreview-BLecDHpc.js} +1 -1
  11. package/dist/assets/InspectorObjectPreview-CSIWwJQE.js +1 -0
  12. package/dist/assets/JsonAssetDocument-CGYSeJyl.js +2 -0
  13. package/dist/assets/{LineSegments2-C8H20K8w.js → LineSegments2-BKEsgiC8.js} +2 -2
  14. package/dist/assets/LiveModuleDocument-CIvS-SUT.js +2 -0
  15. package/dist/assets/LutAssetDocument-BA70uU3w.js +1 -0
  16. package/dist/assets/{MTLLoader-C-rA0fNF.js → MTLLoader-DNh2pFDc.js} +2 -2
  17. package/dist/assets/ModelAssetDocument-D0lNEhOg.js +1 -0
  18. package/dist/assets/NonThreeAuthoringBootstrap-C0pCfkJ4.js +2 -0
  19. package/dist/assets/OBJLoader-DPi99VIm.js +5 -0
  20. package/dist/assets/Object3DDocumentToolbar-PGYkZEwr.js +1 -0
  21. package/dist/assets/Object3DPreview-BROKXSTC.js +2 -0
  22. package/dist/assets/OnlineAssetDetail-lEHnhdUS.js +1 -0
  23. package/dist/assets/OrbitControls-smIenN60.js +1 -0
  24. package/dist/assets/PLYLoader-Cx9Yc9xe.js +2 -0
  25. package/dist/assets/QuarksAssetDocument-C_8eG4KG.js +2 -0
  26. package/dist/assets/RectAreaLightUniformsLib-Iam8rS8R.js +1 -0
  27. package/dist/assets/STLLoader-BaJkM-k1.js +1 -0
  28. package/dist/assets/{ShaderAssetDocument-qlLeb2S3.js → ShaderAssetDocument-Gdp7OCfv.js} +5 -5
  29. package/dist/assets/SourceAssetViewer-l72u0hOa.js +1 -0
  30. package/dist/assets/StageHost-CdzuP0NS.js +1179 -0
  31. package/dist/assets/TDSLoader-BskhMiUy.js +1 -0
  32. package/dist/assets/ToolObject3DPreview-CU5klD6l.js +1 -0
  33. package/dist/assets/Toolbar-DI0LGx25.js +1 -0
  34. package/dist/assets/TransientHint-myZtSdd6.js +1 -0
  35. package/dist/assets/VideoViewer-z0JPXPKa.js +1 -0
  36. package/dist/assets/ViewportShadingMenu-CVU2bU_3.js +1 -0
  37. package/dist/assets/animation-mixers.service-DSIsxWG5.js +1 -0
  38. package/dist/assets/animation-timeline.utility-BEgDQC04.js +1 -0
  39. package/dist/assets/asset-editor-persistence-BtRQI8t6.js +1 -0
  40. package/dist/assets/bitmap-label-Ct4k6ehY.js +1 -0
  41. package/dist/assets/{blender-emscripten-engine-CEsWgnR7.js → blender-emscripten-engine-BeWFjMn-.js} +1 -1
  42. package/dist/assets/blender-node-editor.document-C_kpsARB.js +1 -0
  43. package/dist/assets/{blender-properties-tab-C5tUuCSv.js → blender-properties-tab-B_XBg6S8.js} +3 -3
  44. package/dist/assets/blender-runtime-host-CYhl4T9S.js +4 -0
  45. package/dist/assets/{blender-runtime-skin-DMq0XAvO.js → blender-runtime-skin-Bk6uXECD.js} +98 -51
  46. package/dist/assets/blender-runtime.document-CAPDRCvN.js +12 -0
  47. package/dist/assets/blender-timeline.document-CcEymQyL.js +1 -0
  48. package/dist/assets/blender-uv-editor.document-DSPvSEuE.js +1 -0
  49. package/dist/assets/blender-version.status-CEu7vCi3.js +1 -0
  50. package/dist/assets/{blender-wali-engine-D3iKpzn9.js → blender-wali-engine-da698rDf.js} +1 -1
  51. package/dist/assets/blender.command-BCb_c9lw.js +1 -0
  52. package/dist/assets/blender.keymap-_rF_vRX8.js +1 -0
  53. package/dist/assets/{blender.status-ujwGU6dU.js → blender.status-DrasQhJV.js} +1 -1
  54. package/dist/assets/{blender.style-CxfbTFcE.js → blender.style-DaIh9SiA.js} +1 -1
  55. package/dist/assets/{client-DNXj_opT.js → client-mkWk8S65.js} +1 -1
  56. package/dist/assets/content-bounds-_QWiKD5_.js +85 -0
  57. package/dist/assets/{hosted-asset-materialization-BXM49Qkc.js → hosted-asset-materialization-hUS3IhTD.js} +2 -2
  58. package/dist/assets/index-0Lm0Nf1M.css +1 -0
  59. package/dist/assets/{index-CJbYy-CF.js → index-7vd2obXq.js} +2 -2
  60. package/dist/assets/{index-DgapqSPi.js → index-BRLA7zdc.js} +1 -1
  61. package/dist/assets/{index-BtfYaG4D.js → index-CQG6JOSy.js} +18 -18
  62. package/dist/assets/{index-CanA16PU.js → index-CnvSS9lU.js} +1 -1
  63. package/dist/assets/{index-Bge9JUr6.js → index-DYNMP0kE.js} +1 -1
  64. package/dist/assets/index-Dm_h-T4x.js +1406 -0
  65. package/dist/assets/{index-gHZae-lw.js → index-Dz8qGBZc.js} +1 -1
  66. package/dist/assets/{index-BncK9THk.js → index-Fv4R0cYr.js} +1 -1
  67. package/dist/assets/{index-IEjydI9d.js → index-f-MQ14bP.js} +1 -1
  68. package/dist/assets/{index-D2LwEE0L.js → index-jib6KJY8.js} +6 -6
  69. package/dist/assets/{index-DUqP1RMl.js → index-ux8XhRyW.js} +1 -1
  70. package/dist/assets/{jsx-runtime-DPjLkJKQ.js → jsx-runtime-CAUTK36e.js} +1 -1
  71. package/dist/assets/layered-pick-CT4HlEpW.js +1 -0
  72. package/dist/assets/live-mixers-B-bwLZ7c.js +1 -0
  73. package/dist/assets/model-inspection-DDZE59vp.js +1 -0
  74. package/dist/assets/models.finder-Caf-3Yix.js +1 -0
  75. package/dist/assets/product-DbFrUS6F.js +1 -0
  76. package/dist/assets/properties-bone-constraints.inspector-DB3Rc_Hf.js +1 -0
  77. package/dist/assets/properties-bone.inspector-B7f7H_Co.js +1 -0
  78. package/dist/assets/properties-collection.inspector-JCtV3h3Y.js +1 -0
  79. package/dist/assets/properties-constraints.inspector-Cs8MwS-1.js +1 -0
  80. package/dist/assets/properties-data.inspector-DKGiHu8O.js +1 -0
  81. package/dist/assets/properties-material.inspector-Dc18RI13.js +1 -0
  82. package/dist/assets/properties-modifiers.inspector-DvGvXq2v.js +1 -0
  83. package/dist/assets/properties-object.inspector-Bl9nrytP.js +1 -0
  84. package/dist/assets/properties-output.inspector-B6QsU94n.js +1 -0
  85. package/dist/assets/properties-particles.inspector-B1dMnZSA.js +1 -0
  86. package/dist/assets/properties-physics.inspector-BwfNykfW.js +1 -0
  87. package/dist/assets/properties-render.inspector-KrL2EiTH.js +1 -0
  88. package/dist/assets/properties-scene.inspector-CewQnyRt.js +1 -0
  89. package/dist/assets/properties-texture.inspector-BITMzY-f.js +1 -0
  90. package/dist/assets/properties-view-layer.inspector-BpkDbmcb.js +1 -0
  91. package/dist/assets/properties-world.inspector-DLRH45Oj.js +1 -0
  92. package/dist/assets/{react-18-DyywM-Z2.js → react-18-D335xReo.js} +1 -1
  93. package/dist/assets/{react-story-board-B9V-j_Y5.js → react-story-board-CkaP4mEG.js} +1 -1
  94. package/dist/assets/{session-CsR0lApe.js → session-CTXsU1lK.js} +176 -1
  95. package/dist/assets/{spark.module-gG1EsWx8.js → spark.module-DMQ9J7rT.js} +11 -11
  96. package/dist/assets/stage-keyboard-BY7u9_MB.js +1 -0
  97. package/dist/assets/stage-overlay-set-DRFcVd27.js +1 -0
  98. package/dist/assets/stage-presence-markers-D2IpuOAY.js +1 -0
  99. package/dist/assets/stage-transform-tools-BGcIULoe.js +1 -0
  100. package/dist/assets/story-capture-RSWY8I8h.js +1 -0
  101. package/dist/assets/three-integration.service-0EyPpd5f.js +4 -0
  102. package/dist/assets/{three.module-ZILb6uB7.js → three.module-CrYDk-Xr.js} +1 -1
  103. package/dist/assets/transform-mode-request-Cz6fzydi.js +1 -0
  104. package/dist/assets/transport-strip-Co-ZDkf-.js +1 -0
  105. package/dist/assets/{vgai-shared-fontawesome-CFSkqz69.js → vgai-shared-fontawesome-2ZSGa7vM.js} +1 -1
  106. package/dist/assets/vgai-shared-jsx-dev-runtime-hkPLeIJV.js +1 -0
  107. package/dist/assets/vgai-shared-jsx-runtime-CUvvjEqj.js +1 -0
  108. package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → vgai-shared-react-dom-client-CS681GK2.js} +1 -1
  109. package/dist/assets/{vgai-shared-three-DzfWDqlp.js → vgai-shared-three-CLJ0K3jQ.js} +1 -1
  110. package/dist/assets/viewport-door-BdL0u5rd.js +1 -0
  111. package/dist/assets/viewport-editor-controls-BYaAZ_Ku.js +1 -0
  112. package/dist/assets/viewport-surface-status-yS6CrXH7.js +24 -0
  113. package/dist/assets/{worker-B7zhIsFh.js → worker-CC9Ug5Ei.js} +1 -1
  114. package/dist/assets/world-documents-B5IWN-ng.js +3 -0
  115. package/dist/vgai-shared-react.json +4 -4
  116. package/dist/vgai-shared-three.json +1 -1
  117. package/dist-node/cli.js +248 -209
  118. package/dist-node/create.js +77 -77
  119. package/package.json +10 -10
  120. package/src/index.ts +1 -0
  121. package/dist/assets/AudioViewer-CRWsJVYN.js +0 -1
  122. package/dist/assets/ColladaLoader-Ccy_gHsu.js +0 -3
  123. package/dist/assets/EntityModelDocument-Dal8YnLK.js +0 -1
  124. package/dist/assets/EnvironmentAssetDocument-DFOFYX5v.js +0 -1
  125. package/dist/assets/FBXLoader-Dh0pOBW2.js +0 -1
  126. package/dist/assets/ImageViewer-BzqBpqL-.js +0 -1
  127. package/dist/assets/InspectorObjectPreview-BUZEp4xS.js +0 -1
  128. package/dist/assets/JsonAssetDocument-DCkqRS0N.js +0 -2
  129. package/dist/assets/LiveModuleDocument-CuOBVz3A.js +0 -2
  130. package/dist/assets/LutAssetDocument-IyEir1rq.js +0 -1
  131. package/dist/assets/ModelAssetDocument-DNStNyCc.js +0 -1
  132. package/dist/assets/NonThreeAuthoringBootstrap-BE15Wpmw.js +0 -2
  133. package/dist/assets/OBJLoader-CopWRneC.js +0 -5
  134. package/dist/assets/Object3DDocumentToolbar-5Dv_8caG.js +0 -1
  135. package/dist/assets/Object3DPreview-C09u9uQZ.js +0 -2
  136. package/dist/assets/OnlineAssetDetail-DOPUI1iu.js +0 -1
  137. package/dist/assets/OrbitControls-DrFzvAAB.js +0 -1
  138. package/dist/assets/PLYLoader-D_esTZ2f.js +0 -2
  139. package/dist/assets/QuarksAssetDocument-BbSJ970L.js +0 -2
  140. package/dist/assets/RectAreaLightUniformsLib-u1ciScuw.js +0 -1
  141. package/dist/assets/STLLoader-Cl5I0sAi.js +0 -1
  142. package/dist/assets/SourceAssetViewer-DwhuqbA4.js +0 -1
  143. package/dist/assets/StageHost-D-o8MsFS.js +0 -1122
  144. package/dist/assets/TDSLoader-KKBg8ef1.js +0 -1
  145. package/dist/assets/ToolObject3DPreview-ILbch3kN.js +0 -1
  146. package/dist/assets/Toolbar-DYJjJKTt.js +0 -1
  147. package/dist/assets/TransientHint-D94hsJSR.js +0 -1
  148. package/dist/assets/VideoViewer-Bx3FPbgE.js +0 -1
  149. package/dist/assets/ViewportShadingMenu-B3N6hSdN.js +0 -1
  150. package/dist/assets/animation-mixers.service-N9HxGOMf.js +0 -1
  151. package/dist/assets/asset-editor-persistence-DGD05u26.js +0 -1
  152. package/dist/assets/blender-node-editor.document-BT2M622g.js +0 -1
  153. package/dist/assets/blender-runtime-host-4ufXy47O.js +0 -4
  154. package/dist/assets/blender-runtime.document-DeFQQsF6.js +0 -8
  155. package/dist/assets/blender-timeline.document-BnlSdxy0.js +0 -1
  156. package/dist/assets/blender-uv-editor.document-UC-XeNn0.js +0 -1
  157. package/dist/assets/blender-version.status-BZP39oH7.js +0 -1
  158. package/dist/assets/blender.command-IGP5wuda.js +0 -1
  159. package/dist/assets/blender.keymap-GAQgeklK.js +0 -1
  160. package/dist/assets/browserAll-2r3AVaAO.js +0 -14
  161. package/dist/assets/canvas-preview-frames-CO60PDM7.js +0 -5
  162. package/dist/assets/index-B4bmKkgY.css +0 -1
  163. package/dist/assets/index-cpXNKgvz.js +0 -1498
  164. package/dist/assets/live-mixers-BRkRHd6g.js +0 -1
  165. package/dist/assets/material-preview.view-DqNcpd_b.js +0 -1
  166. package/dist/assets/model-inspection-JC6gbV8Q.js +0 -1
  167. package/dist/assets/models.finder-BplPGS4I.js +0 -1
  168. package/dist/assets/product-CfZaqLpw.js +0 -1
  169. package/dist/assets/properties-bone-constraints.inspector-Di8kNtAi.js +0 -1
  170. package/dist/assets/properties-bone.inspector-CqAIKNsE.js +0 -1
  171. package/dist/assets/properties-collection.inspector-DpHC_fXW.js +0 -1
  172. package/dist/assets/properties-constraints.inspector-C7G7NOZU.js +0 -1
  173. package/dist/assets/properties-data.inspector-D1sUUst6.js +0 -1
  174. package/dist/assets/properties-material.inspector-BUSjc8tl.js +0 -1
  175. package/dist/assets/properties-modifiers.inspector-Sq9bcfFz.js +0 -1
  176. package/dist/assets/properties-object.inspector-BzqiU_29.js +0 -1
  177. package/dist/assets/properties-output.inspector-BWpFqvfT.js +0 -1
  178. package/dist/assets/properties-particles.inspector-DO1KoaTz.js +0 -1
  179. package/dist/assets/properties-physics.inspector-BgkrTNSA.js +0 -1
  180. package/dist/assets/properties-render.inspector-BU5NOVoQ.js +0 -1
  181. package/dist/assets/properties-scene.inspector-DbMErJ48.js +0 -1
  182. package/dist/assets/properties-texture.inspector-toPpEwqp.js +0 -1
  183. package/dist/assets/properties-view-layer.inspector-COpx9iEK.js +0 -1
  184. package/dist/assets/properties-world.inspector-CxU0DrYX.js +0 -1
  185. package/dist/assets/react-three-rapier.esm-CN6t4A7c.js +0 -1
  186. package/dist/assets/stage-keyboard-CzlqI0nh.js +0 -1
  187. package/dist/assets/stage-overlay-set-DQeskS16.js +0 -1
  188. package/dist/assets/stage-presence-markers-S1lMOwIa.js +0 -1
  189. package/dist/assets/stage-transform-tools-Cqtv-ZQ1.js +0 -1
  190. package/dist/assets/story-capture-DmIUyEQn.js +0 -1
  191. package/dist/assets/story-mount-turn-2IYGgHob.js +0 -1
  192. package/dist/assets/story-pixi-preview-aw8xQhvF.js +0 -1
  193. package/dist/assets/story-three-preview-DDmMjlI8.js +0 -37
  194. package/dist/assets/transform-mode-request-DSPwviXs.js +0 -1
  195. package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +0 -1
  196. package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +0 -1
  197. package/dist/assets/viewport-pick-context-DkawXbEi.js +0 -1
  198. package/dist/assets/viewport-surface-status-DuININWe.js +0 -20
  199. package/dist/assets/webworkerAll-CqQUotBj.js +0 -101
  200. package/dist/assets/world-documents-DkBqH8VU.js +0 -3
@@ -0,0 +1,85 @@
1
+ import{Y as Mt,x as xt,aw as On,y as Dn,o as bt,c as Oe,ax as At,O as Rt,a6 as Nt,ay as kn,H as Ie,R as Le,az as $e,L as ye,v as rn,w as ze,n as un,r as Ge,aA as Tt,m as Ot,aB as Ut,at as Ft,B as Bt,F as Un,aC as Dt,aD as kt,aE as Lt,aF as Pt,aG as Ht,aH as Gt,aI as Zt,aJ as zt,av as Wt,au as Yt,aK as Xt,t as We,aL as Kt,a as Ln}from"./three.module-CrYDk-Xr.js";class Vt extends Mt{constructor(){super();const o=new xt;o.deleteAttribute("uv");const l=new On({side:Dn}),_=new On,y=new bt(16777215,900,28,2);y.position.set(.418,16.199,.3),this.add(y);const V=new Oe(o,l);V.position.set(-.757,13.219,.717),V.scale.set(31.713,28.305,28.591),this.add(V);const A=new At(o,_,6),C=new Rt;C.position.set(-10.906,2.009,1.846),C.rotation.set(0,-.195,0),C.scale.set(2.328,7.905,4.651),C.updateMatrix(),A.setMatrixAt(0,C.matrix),C.position.set(-5.607,-.754,-.758),C.rotation.set(0,.994,0),C.scale.set(1.97,1.534,3.955),C.updateMatrix(),A.setMatrixAt(1,C.matrix),C.position.set(6.167,.857,7.803),C.rotation.set(0,.561,0),C.scale.set(3.927,6.285,3.687),C.updateMatrix(),A.setMatrixAt(2,C.matrix),C.position.set(-2.017,.018,6.124),C.rotation.set(0,.333,0),C.scale.set(2.002,4.566,2.064),C.updateMatrix(),A.setMatrixAt(3,C.matrix),C.position.set(2.291,-.756,-2.621),C.rotation.set(0,-.286,0),C.scale.set(1.546,1.552,1.496),C.updateMatrix(),A.setMatrixAt(4,C.matrix),C.position.set(-2.193,-.369,-5.547),C.rotation.set(0,.516,0),C.scale.set(3.875,3.487,2.986),C.updateMatrix(),A.setMatrixAt(5,C.matrix),this.add(A);const se=new Oe(o,Pe(50));se.position.set(-16.116,14.37,8.208),se.scale.set(.1,2.428,2.739),this.add(se);const ue=new Oe(o,Pe(50));ue.position.set(-16.109,18.021,-8.207),ue.scale.set(.1,2.425,2.751),this.add(ue);const ne=new Oe(o,Pe(17));ne.position.set(14.904,12.198,-1.832),ne.scale.set(.15,4.265,6.331),this.add(ne);const M=new Oe(o,Pe(43));M.position.set(-.462,8.89,14.52),M.scale.set(4.38,5.441,.088),this.add(M);const k=new Oe(o,Pe(20));k.position.set(3.235,11.486,-12.541),k.scale.set(2.5,2,.1),this.add(k);const te=new Oe(o,Pe(100));te.position.set(0,20,0),te.scale.set(1,.1,1),this.add(te)}dispose(){const o=new Set;this.traverse(l=>{l.isMesh&&(o.add(l.geometry),o.add(l.material))});for(const l of o)l.dispose()}}function Pe(s){return new Nt({color:0,emissive:16777215,emissiveIntensity:s})}/*!
2
+ fflate - fast JavaScript compression/decompression
3
+ <https://101arrowz.github.io/fflate>
4
+ Licensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE
5
+ version 0.8.2
6
+ */var ce=Uint8Array,Ze=Uint16Array,$t=Int32Array,Pn=new ce([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Hn=new ce([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Qt=new ce([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Gn=function(s,o){for(var l=new Ze(31),_=0;_<31;++_)l[_]=o+=1<<s[_-1];for(var y=new $t(l[30]),_=1;_<30;++_)for(var V=l[_];V<l[_+1];++V)y[V]=V-l[_]<<5|_;return{b:l,r:y}},Zn=Gn(Pn,2),zn=Zn.b,qt=Zn.r;zn[28]=258,qt[258]=28;var Jt=Gn(Hn,0),jt=Jt.b,En=new Ze(32768);for(var W=0;W<32768;++W){var Te=(W&43690)>>1|(W&21845)<<1;Te=(Te&52428)>>2|(Te&13107)<<2,Te=(Te&61680)>>4|(Te&3855)<<4,En[W]=((Te&65280)>>8|(Te&255)<<8)>>1}var qe=(function(s,o,l){for(var _=s.length,y=0,V=new Ze(o);y<_;++y)s[y]&&++V[s[y]-1];var A=new Ze(o);for(y=1;y<o;++y)A[y]=A[y-1]+V[y-1]<<1;var C;if(l){C=new Ze(1<<o);var se=15-o;for(y=0;y<_;++y)if(s[y])for(var ue=y<<4|s[y],ne=o-s[y],M=A[s[y]-1]++<<ne,k=M|(1<<ne)-1;M<=k;++M)C[En[M]>>se]=ue}else for(C=new Ze(_),y=0;y<_;++y)s[y]&&(C[y]=En[A[s[y]-1]++]>>15-s[y]);return C}),Je=new ce(288);for(var W=0;W<144;++W)Je[W]=8;for(var W=144;W<256;++W)Je[W]=9;for(var W=256;W<280;++W)Je[W]=7;for(var W=280;W<288;++W)Je[W]=8;var Wn=new ce(32);for(var W=0;W<32;++W)Wn[W]=5;var er=qe(Je,9,1),nr=qe(Wn,5,1),dn=function(s){for(var o=s[0],l=1;l<s.length;++l)s[l]>o&&(o=s[l]);return o},he=function(s,o,l){var _=o/8|0;return(s[_]|s[_+1]<<8)>>(o&7)&l},vn=function(s,o){var l=o/8|0;return(s[l]|s[l+1]<<8|s[l+2]<<16)>>(o&7)},tr=function(s){return(s+7)/8|0},rr=function(s,o,l){return(l==null||l>s.length)&&(l=s.length),new ce(s.subarray(o,l))},or=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],fe=function(s,o,l){var _=new Error(o||or[s]);if(_.code=s,Error.captureStackTrace&&Error.captureStackTrace(_,fe),!l)throw _;return _},ir=function(s,o,l,_){var y=s.length,V=0;if(!y||o.f&&!o.l)return l||new ce(0);var A=!l,C=A||o.i!=2,se=o.i;A&&(l=new ce(y*3));var ue=function(Ye){var en=l.length;if(Ye>en){var Xe=new ce(Math.max(en*2,Ye));Xe.set(l),l=Xe}},ne=o.f||0,M=o.p||0,k=o.b||0,te=o.l,Ue=o.d,Ce=o.m,pe=o.n,me=y*8;do{if(!te){ne=he(s,M,1);var Fe=he(s,M+1,3);if(M+=3,Fe)if(Fe==1)te=er,Ue=nr,Ce=9,pe=5;else if(Fe==2){var xe=he(s,M,31)+257,ge=he(s,M+10,15)+4,x=xe+he(s,M+5,31)+1;M+=14;for(var T=new ce(x),D=new ce(19),N=0;N<ge;++N)D[Qt[N]]=he(s,M+N*3,7);M+=ge*3;for(var B=dn(D),Z=(1<<B)-1,R=qe(D,B,1),N=0;N<x;){var Y=R[he(s,M,Z)];M+=Y&15;var re=Y>>4;if(re<16)T[N++]=re;else{var O=0,oe=0;for(re==16?(oe=3+he(s,M,3),M+=2,O=T[N-1]):re==17?(oe=3+he(s,M,7),M+=3):re==18&&(oe=11+he(s,M,127),M+=7);oe--;)T[N++]=O}}var be=T.subarray(0,xe),j=T.subarray(xe);Ce=dn(be),pe=dn(j),te=qe(be,Ce,1),Ue=qe(j,pe,1)}else fe(1);else{var re=tr(M)+4,we=s[re-4]|s[re-3]<<8,Me=re+we;if(Me>y){se&&fe(0);break}C&&ue(k+we),l.set(s.subarray(re,Me),k),o.b=k+=we,o.p=M=Me*8,o.f=ne;continue}if(M>me){se&&fe(0);break}}C&&ue(k+131072);for(var $=(1<<Ce)-1,Be=(1<<pe)-1,K=M;;K=M){var O=te[vn(s,M)&$],Q=O>>4;if(M+=O&15,M>me){se&&fe(0);break}if(O||fe(2),Q<256)l[k++]=Q;else if(Q==256){K=M,te=null;break}else{var Ee=Q-254;if(Q>264){var N=Q-257,Ae=Pn[N];Ee=he(s,M,(1<<Ae)-1)+zn[N],M+=Ae}var L=Ue[vn(s,M)&Be],de=L>>4;L||fe(3),M+=L&15;var j=jt[de];if(de>3){var Ae=Hn[de];j+=vn(s,M)&(1<<Ae)-1,M+=Ae}if(M>me){se&&fe(0);break}C&&ue(k+131072);var _e=k+Ee;if(k<j){var je=V-j,fn=Math.min(j,_e);for(je+k<0&&fe(3);k<fn;++k)l[k]=_[je+k]}for(;k<_e;++k)l[k]=l[k-j]}}o.l=te,o.p=K,o.b=k,o.f=ne,te&&(ne=1,o.m=Ce,o.d=Ue,o.n=pe)}while(!ne);return k!=l.length&&A?rr(l,0,k):l.subarray(0,k)},sr=new ce(0),ar=function(s,o){return((s[0]&15)!=8||s[0]>>4>7||(s[0]<<8|s[1])%31)&&fe(6,"invalid zlib data"),(s[1]>>5&1)==1&&fe(6,"invalid zlib data: "+(s[1]&32?"need":"unexpected")+" dictionary"),(s[1]>>3&4)+2};function on(s,o){return ir(s.subarray(ar(s),-4),{i:2},o,o)}var lr=typeof TextDecoder<"u"&&new TextDecoder,cr=0;try{lr.decode(sr,{stream:!0}),cr=1}catch{}class ur extends kn{constructor(o){super(o),this.type=Ie,this.outputFormat=Le}parse(o){const T=Math.pow(2.7182818,2.2);function D(e,n){let t=0;for(let a=0;a<65536;++a)(a==0||e[a>>3]&1<<(a&7))&&(n[t++]=a);const i=t-1;for(;t<65536;)n[t++]=0;return i}function N(e){for(let n=0;n<16384;n++)e[n]={},e[n].len=0,e[n].lit=0,e[n].p=null}const B={l:0,c:0,lc:0};function Z(e,n,t,i,a){for(;t<e;)n=n<<8|An(i,a),t+=8;t-=e,B.l=n>>t&(1<<e)-1,B.c=n,B.lc=t}const R=new Array(59);function Y(e){for(let t=0;t<=58;++t)R[t]=0;for(let t=0;t<65537;++t)R[e[t]]+=1;let n=0;for(let t=58;t>0;--t){const i=n+R[t]>>1;R[t]=n,n=i}for(let t=0;t<65537;++t){const i=e[t];i>0&&(e[t]=i|R[i]++<<6)}}function O(e,n,t,i,a,h){const r=n;let f=0,u=0;for(;i<=a;i++){if(r.value-n.value>t)return!1;Z(6,f,u,e,r);const c=B.l;if(f=B.c,u=B.lc,h[i]=c,c==63){if(r.value-n.value>t)throw new Error("Something wrong with hufUnpackEncTable");Z(8,f,u,e,r);let p=B.l+6;if(f=B.c,u=B.lc,i+p>a+1)throw new Error("Something wrong with hufUnpackEncTable");for(;p--;)h[i++]=0;i--}else if(c>=59){let p=c-59+2;if(i+p>a+1)throw new Error("Something wrong with hufUnpackEncTable");for(;p--;)h[i++]=0;i--}}Y(h)}function oe(e){return e&63}function be(e){return e>>6}function j(e,n,t,i){for(;n<=t;n++){const a=be(e[n]),h=oe(e[n]);if(a>>h)throw new Error("Invalid table entry");if(h>14){const r=i[a>>h-14];if(r.len)throw new Error("Invalid table entry");if(r.lit++,r.p){const f=r.p;r.p=new Array(r.lit);for(let u=0;u<r.lit-1;++u)r.p[u]=f[u]}else r.p=new Array(1);r.p[r.lit-1]=n}else if(h){let r=0;for(let f=1<<14-h;f>0;f--){const u=i[(a<<14-h)+r];if(u.len||u.p)throw new Error("Invalid table entry");u.len=h,u.lit=n,r++}}}return!0}const $={c:0,lc:0};function Be(e,n,t,i){e=e<<8|An(t,i),n+=8,$.c=e,$.lc=n}const K={c:0,lc:0};function Q(e,n,t,i,a,h,r,f,u){if(e==n){i<8&&(Be(t,i,a,h),t=$.c,i=$.lc),i-=8;let c=t>>i;if(c=new Uint8Array([c])[0],f.value+c>u)return!1;const p=r[f.value-1];for(;c-- >0;)r[f.value++]=p}else if(f.value<u)r[f.value++]=e;else return!1;K.c=t,K.lc=i}function Ee(e){return e&65535}function Ae(e){const n=Ee(e);return n>32767?n-65536:n}const L={a:0,b:0};function de(e,n){const t=Ae(e),a=Ae(n),h=t+(a&1)+(a>>1),r=h,f=h-a;L.a=r,L.b=f}function _e(e,n){const t=Ee(e),i=Ee(n),a=t-(i>>1)&65535,h=i+a-32768&65535;L.a=h,L.b=a}function je(e,n,t,i,a,h,r){const f=r<16384,u=t>a?a:t;let c=1,p,g;for(;c<=u;)c<<=1;for(c>>=1,p=c,c>>=1;c>=1;){g=0;const m=g+h*(a-p),v=h*c,S=h*p,d=i*c,E=i*p;let I,F,H,q;for(;g<=m;g+=S){let P=g;const b=g+i*(t-p);for(;P<=b;P+=E){const X=P+d,J=P+v,z=J+d;f?(de(e[P+n],e[J+n]),I=L.a,H=L.b,de(e[X+n],e[z+n]),F=L.a,q=L.b,de(I,F),e[P+n]=L.a,e[X+n]=L.b,de(H,q),e[J+n]=L.a,e[z+n]=L.b):(_e(e[P+n],e[J+n]),I=L.a,H=L.b,_e(e[X+n],e[z+n]),F=L.a,q=L.b,_e(I,F),e[P+n]=L.a,e[X+n]=L.b,_e(H,q),e[J+n]=L.a,e[z+n]=L.b)}if(t&c){const X=P+v;f?de(e[P+n],e[X+n]):_e(e[P+n],e[X+n]),I=L.a,e[X+n]=L.b,e[P+n]=I}}if(a&c){let P=g;const b=g+i*(t-p);for(;P<=b;P+=E){const X=P+d;f?de(e[P+n],e[X+n]):_e(e[P+n],e[X+n]),I=L.a,e[X+n]=L.b,e[P+n]=I}}p=c,c>>=1}return g}function fn(e,n,t,i,a,h,r,f,u){let c=0,p=0;const g=r,m=Math.trunc(i.value+(a+7)/8);for(;i.value<m;)for(Be(c,p,t,i),c=$.c,p=$.lc;p>=14;){const S=c>>p-14&16383,d=n[S];if(d.len)p-=d.len,Q(d.lit,h,c,p,t,i,f,u,g),c=K.c,p=K.lc;else{if(!d.p)throw new Error("hufDecode issues");let E;for(E=0;E<d.lit;E++){const I=oe(e[d.p[E]]);for(;p<I&&i.value<m;)Be(c,p,t,i),c=$.c,p=$.lc;if(p>=I&&be(e[d.p[E]])==(c>>p-I&(1<<I)-1)){p-=I,Q(d.p[E],h,c,p,t,i,f,u,g),c=K.c,p=K.lc;break}}if(E==d.lit)throw new Error("hufDecode issues")}}const v=8-a&7;for(c>>=v,p-=v;p>0;){const S=n[c<<14-p&16383];if(S.len)p-=S.len,Q(S.lit,h,c,p,t,i,f,u,g),c=K.c,p=K.lc;else throw new Error("hufDecode issues")}return!0}function Ye(e,n,t,i,a,h){const r={value:0},f=t.value,u=le(n,t),c=le(n,t);t.value+=4;const p=le(n,t);if(t.value+=4,u<0||u>=65537||c<0||c>=65537)throw new Error("Something wrong with HUF_ENCSIZE");const g=new Array(65537),m=new Array(16384);N(m);const v=i-(t.value-f);if(O(e,t,v,u,c,g),p>8*(i-(t.value-f)))throw new Error("Something wrong with hufUncompress");j(g,u,c,m),fn(g,m,e,t,p,c,h,a,r)}function en(e,n,t){for(let i=0;i<t;++i)n[i]=e[n[i]]}function Xe(e){for(let n=1;n<e.length;n++){const t=e[n-1]+e[n]-128;e[n]=t}}function Sn(e,n){let t=0,i=Math.floor((e.length+1)/2),a=0;const h=e.length-1;for(;!(a>h||(n[a++]=e[t++],a>h));)n[a++]=e[i++]}function yn(e){let n=e.byteLength;const t=new Array;let i=0;const a=new DataView(e);for(;n>0;){const h=a.getInt8(i++);if(h<0){const r=-h;n-=r+1;for(let f=0;f<r;f++)t.push(a.getUint8(i++))}else{const r=h;n-=2;const f=a.getUint8(i++);for(let u=0;u<r+1;u++)t.push(f)}}return t}function Qn(e,n,t,i,a,h){let r=new DataView(h.buffer);const f=t[e.idx[0]].width,u=t[e.idx[0]].height,c=3,p=Math.floor(f/8),g=Math.ceil(f/8),m=Math.ceil(u/8),v=f-(g-1)*8,S=u-(m-1)*8,d={value:0},E=new Array(c),I=new Array(c),F=new Array(c),H=new Array(c),q=new Array(c);for(let b=0;b<c;++b)q[b]=n[e.idx[b]],E[b]=b<1?0:E[b-1]+g*m,I[b]=new Float32Array(64),F[b]=new Uint16Array(64),H[b]=new Uint16Array(g*64);for(let b=0;b<m;++b){let X=8;b==m-1&&(X=S);let J=8;for(let U=0;U<g;++U){U==g-1&&(J=v);for(let G=0;G<c;++G)F[G].fill(0),F[G][0]=a[E[G]++],In(d,i,F[G]),Cn(F[G],I[G]),Mn(I[G]);Jn(I);for(let G=0;G<c;++G)xn(I[G],H[G],U*64)}let z=0;for(let U=0;U<c;++U){const G=t[e.idx[U]].type;for(let Se=8*b;Se<8*b+X;++Se){z=q[U][Se];for(let Ve=0;Ve<p;++Ve){const ve=Ve*64+(Se&7)*8;r.setUint16(z+0*G,H[U][ve+0],!0),r.setUint16(z+2*G,H[U][ve+1],!0),r.setUint16(z+4*G,H[U][ve+2],!0),r.setUint16(z+6*G,H[U][ve+3],!0),r.setUint16(z+8*G,H[U][ve+4],!0),r.setUint16(z+10*G,H[U][ve+5],!0),r.setUint16(z+12*G,H[U][ve+6],!0),r.setUint16(z+14*G,H[U][ve+7],!0),z+=16*G}}if(p!=g)for(let Se=8*b;Se<8*b+X;++Se){const Ve=q[U][Se]+8*p*2*G,ve=p*64+(Se&7)*8;for(let tn=0;tn<J;++tn)r.setUint16(Ve+tn*2*G,H[U][ve+tn],!0)}}}const P=new Uint16Array(f);r=new DataView(h.buffer);for(let b=0;b<c;++b){t[e.idx[b]].decoded=!0;const X=t[e.idx[b]].type;if(t[b].type==2)for(let J=0;J<u;++J){const z=q[b][J];for(let U=0;U<f;++U)P[U]=r.getUint16(z+U*2*X,!0);for(let U=0;U<f;++U)r.setFloat32(z+U*2*X,w(P[U]),!0)}}}function qn(e,n,t,i,a,h){const r=new DataView(h.buffer),f=t[e],u=f.width,c=f.height,p=Math.ceil(u/8),g=Math.ceil(c/8),m=Math.floor(u/8),v=u-(p-1)*8,S=c-(g-1)*8,d={value:0};let E=0;const I=new Float32Array(64),F=new Uint16Array(64),H=new Uint16Array(p*64);for(let q=0;q<g;++q){let P=8;q==g-1&&(P=S);for(let b=0;b<p;++b)F.fill(0),F[0]=a[E++],In(d,i,F),Cn(F,I),Mn(I),xn(I,H,b*64);for(let b=8*q;b<8*q+P;++b){let X=n[e][b];for(let J=0;J<m;++J){const z=J*64+(b&7)*8;for(let U=0;U<8;++U)r.setUint16(X+U*2*f.type,H[z+U],!0);X+=16*f.type}if(p!=m){const J=m*64+(b&7)*8;for(let z=0;z<v;++z)r.setUint16(X+z*2*f.type,H[J+z],!0)}}}f.decoded=!0}function In(e,n,t){let i,a=1;for(;a<64;)i=n[e.value],i==65280?a=64:i>>8==255?a+=i&255:(t[a]=i,a++),e.value++}function Cn(e,n){n[0]=w(e[0]),n[1]=w(e[1]),n[2]=w(e[5]),n[3]=w(e[6]),n[4]=w(e[14]),n[5]=w(e[15]),n[6]=w(e[27]),n[7]=w(e[28]),n[8]=w(e[2]),n[9]=w(e[4]),n[10]=w(e[7]),n[11]=w(e[13]),n[12]=w(e[16]),n[13]=w(e[26]),n[14]=w(e[29]),n[15]=w(e[42]),n[16]=w(e[3]),n[17]=w(e[8]),n[18]=w(e[12]),n[19]=w(e[17]),n[20]=w(e[25]),n[21]=w(e[30]),n[22]=w(e[41]),n[23]=w(e[43]),n[24]=w(e[9]),n[25]=w(e[11]),n[26]=w(e[18]),n[27]=w(e[24]),n[28]=w(e[31]),n[29]=w(e[40]),n[30]=w(e[44]),n[31]=w(e[53]),n[32]=w(e[10]),n[33]=w(e[19]),n[34]=w(e[23]),n[35]=w(e[32]),n[36]=w(e[39]),n[37]=w(e[45]),n[38]=w(e[52]),n[39]=w(e[54]),n[40]=w(e[20]),n[41]=w(e[22]),n[42]=w(e[33]),n[43]=w(e[38]),n[44]=w(e[46]),n[45]=w(e[51]),n[46]=w(e[55]),n[47]=w(e[60]),n[48]=w(e[21]),n[49]=w(e[34]),n[50]=w(e[37]),n[51]=w(e[47]),n[52]=w(e[50]),n[53]=w(e[56]),n[54]=w(e[59]),n[55]=w(e[61]),n[56]=w(e[35]),n[57]=w(e[36]),n[58]=w(e[48]),n[59]=w(e[49]),n[60]=w(e[57]),n[61]=w(e[58]),n[62]=w(e[62]),n[63]=w(e[63])}function Mn(e){const n=.5*Math.cos(.7853975),t=.5*Math.cos(3.14159/16),i=.5*Math.cos(3.14159/8),a=.5*Math.cos(3*3.14159/16),h=.5*Math.cos(5*3.14159/16),r=.5*Math.cos(3*3.14159/8),f=.5*Math.cos(7*3.14159/16),u=new Array(4),c=new Array(4),p=new Array(4),g=new Array(4);for(let m=0;m<8;++m){const v=m*8;u[0]=i*e[v+2],u[1]=r*e[v+2],u[2]=i*e[v+6],u[3]=r*e[v+6],c[0]=t*e[v+1]+a*e[v+3]+h*e[v+5]+f*e[v+7],c[1]=a*e[v+1]-f*e[v+3]-t*e[v+5]-h*e[v+7],c[2]=h*e[v+1]-t*e[v+3]+f*e[v+5]+a*e[v+7],c[3]=f*e[v+1]-h*e[v+3]+a*e[v+5]-t*e[v+7],p[0]=n*(e[v+0]+e[v+4]),p[3]=n*(e[v+0]-e[v+4]),p[1]=u[0]+u[3],p[2]=u[1]-u[2],g[0]=p[0]+p[1],g[1]=p[3]+p[2],g[2]=p[3]-p[2],g[3]=p[0]-p[1],e[v+0]=g[0]+c[0],e[v+1]=g[1]+c[1],e[v+2]=g[2]+c[2],e[v+3]=g[3]+c[3],e[v+4]=g[3]-c[3],e[v+5]=g[2]-c[2],e[v+6]=g[1]-c[1],e[v+7]=g[0]-c[0]}for(let m=0;m<8;++m)u[0]=i*e[16+m],u[1]=r*e[16+m],u[2]=i*e[48+m],u[3]=r*e[48+m],c[0]=t*e[8+m]+a*e[24+m]+h*e[40+m]+f*e[56+m],c[1]=a*e[8+m]-f*e[24+m]-t*e[40+m]-h*e[56+m],c[2]=h*e[8+m]-t*e[24+m]+f*e[40+m]+a*e[56+m],c[3]=f*e[8+m]-h*e[24+m]+a*e[40+m]-t*e[56+m],p[0]=n*(e[m]+e[32+m]),p[3]=n*(e[m]-e[32+m]),p[1]=u[0]+u[3],p[2]=u[1]-u[2],g[0]=p[0]+p[1],g[1]=p[3]+p[2],g[2]=p[3]-p[2],g[3]=p[0]-p[1],e[0+m]=g[0]+c[0],e[8+m]=g[1]+c[1],e[16+m]=g[2]+c[2],e[24+m]=g[3]+c[3],e[32+m]=g[3]-c[3],e[40+m]=g[2]-c[2],e[48+m]=g[1]-c[1],e[56+m]=g[0]-c[0]}function Jn(e){for(let n=0;n<64;++n){const t=e[0][n],i=e[1][n],a=e[2][n];e[0][n]=t+1.5747*a,e[1][n]=t-.1873*i-.4682*a,e[2][n]=t+1.8556*i}}function xn(e,n,t){for(let i=0;i<64;++i)n[t+i]=Ge.toHalfFloat(jn(e[i]))}function jn(e){return e<=1?Math.sign(e)*Math.pow(Math.abs(e),2.2):Math.sign(e)*Math.pow(T,Math.abs(e)-1)}function mn(e){return new DataView(e.array.buffer,e.offset.value,e.size)}function et(e){const n=e.viewer.buffer.slice(e.offset.value,e.offset.value+e.size),t=new Uint8Array(yn(n)),i=new Uint8Array(t.length);return Xe(t),Sn(t,i),new DataView(i.buffer)}function gn(e){const n=e.array.slice(e.offset.value,e.offset.value+e.size),t=on(n),i=new Uint8Array(t.length);return Xe(t),Sn(t,i),new DataView(i.buffer)}function nt(e){const n=e.viewer,t={value:e.offset.value},i=new Uint16Array(e.columns*e.lines*(e.inputChannels.length*e.type)),a=new Uint8Array(8192);let h=0;const r=new Array(e.inputChannels.length);for(let S=0,d=e.inputChannels.length;S<d;S++)r[S]={},r[S].start=h,r[S].end=r[S].start,r[S].nx=e.columns,r[S].ny=e.lines,r[S].size=e.type,h+=r[S].nx*r[S].ny*r[S].size;const f=Ke(n,t),u=Ke(n,t);if(u>=8192)throw new Error("Something is wrong with PIZ_COMPRESSION BITMAP_SIZE");if(f<=u)for(let S=0;S<u-f+1;S++)a[S+f]=Re(n,t);const c=new Uint16Array(65536),p=D(a,c),g=le(n,t);Ye(e.array,n,t,g,i,h);for(let S=0;S<e.inputChannels.length;++S){const d=r[S];for(let E=0;E<r[S].size;++E)je(i,d.start+E,d.nx,d.size,d.ny,d.nx*d.size,p)}en(c,i,h);let m=0;const v=new Uint8Array(i.buffer.byteLength);for(let S=0;S<e.lines;S++)for(let d=0;d<e.inputChannels.length;d++){const E=r[d],I=E.nx*E.size,F=new Uint8Array(i.buffer,E.end*2,I*2);v.set(F,m),m+=I*2,E.end+=I}return new DataView(v.buffer)}function tt(e){const n=e.array.slice(e.offset.value,e.offset.value+e.size),t=on(n),i=e.inputChannels.length*e.lines*e.columns*e.totalBytes,a=new ArrayBuffer(i),h=new DataView(a);let r=0,f=0;const u=new Array(4);for(let c=0;c<e.lines;c++)for(let p=0;p<e.inputChannels.length;p++){let g=0;switch(e.inputChannels[p].pixelType){case 1:u[0]=r,u[1]=u[0]+e.columns,r=u[1]+e.columns;for(let v=0;v<e.columns;++v){const S=t[u[0]++]<<8|t[u[1]++];g+=S,h.setUint16(f,g,!0),f+=2}break;case 2:u[0]=r,u[1]=u[0]+e.columns,u[2]=u[1]+e.columns,r=u[2]+e.columns;for(let v=0;v<e.columns;++v){const S=t[u[0]++]<<24|t[u[1]++]<<16|t[u[2]++]<<8;g+=S,h.setUint32(f,g,!0),f+=4}break}}return h}function bn(e){const n=e.viewer,t={value:e.offset.value},i=new Uint8Array(e.columns*e.lines*(e.inputChannels.length*e.type*2)),a={version:ie(n,t),unknownUncompressedSize:ie(n,t),unknownCompressedSize:ie(n,t),acCompressedSize:ie(n,t),dcCompressedSize:ie(n,t),rleCompressedSize:ie(n,t),rleUncompressedSize:ie(n,t),rleRawSize:ie(n,t),totalAcUncompressedCount:ie(n,t),totalDcUncompressedCount:ie(n,t),acCompression:ie(n,t)};if(a.version<2)throw new Error("EXRLoader.parse: "+De.compression+" version "+a.version+" is unsupported");const h=new Array;let r=Ke(n,t)-2;for(;r>0;){const d=nn(n.buffer,t),E=Re(n,t),I=E>>2&3,F=(E>>4)-1,H=new Int8Array([F])[0],q=Re(n,t);h.push({name:d,index:H,type:q,compression:I}),r-=d.length+3}const f=De.channels,u=new Array(e.inputChannels.length);for(let d=0;d<e.inputChannels.length;++d){const E=u[d]={},I=f[d];E.name=I.name,E.compression=0,E.decoded=!1,E.type=I.pixelType,E.pLinear=I.pLinear,E.width=e.columns,E.height=e.lines}const c={idx:new Array(3)};for(let d=0;d<e.inputChannels.length;++d){const E=u[d];for(let I=0;I<h.length;++I){const F=h[I];E.name==F.name&&(E.compression=F.compression,F.index>=0&&(c.idx[F.index]=d),E.offset=d)}}let p,g,m;if(a.acCompressedSize>0)switch(a.acCompression){case 0:p=new Uint16Array(a.totalAcUncompressedCount),Ye(e.array,n,t,a.acCompressedSize,p,a.totalAcUncompressedCount);break;case 1:const d=e.array.slice(t.value,t.value+a.totalAcUncompressedCount),E=on(d);p=new Uint16Array(E.buffer),t.value+=a.totalAcUncompressedCount;break}if(a.dcCompressedSize>0){const d={array:e.array,offset:t,size:a.dcCompressedSize};g=new Uint16Array(gn(d).buffer),t.value+=a.dcCompressedSize}if(a.rleRawSize>0){const d=e.array.slice(t.value,t.value+a.rleCompressedSize),E=on(d);m=yn(E.buffer),t.value+=a.rleCompressedSize}let v=0;const S=new Array(u.length);for(let d=0;d<S.length;++d)S[d]=new Array;for(let d=0;d<e.lines;++d)for(let E=0;E<u.length;++E)S[E].push(v),v+=u[E].width*e.type*2;c.idx[0]!==void 0&&u[c.idx[0]]&&Qn(c,S,u,p,g,i);for(let d=0;d<u.length;++d){const E=u[d];if(!E.decoded)switch(E.compression){case 2:let I=0,F=0;for(let H=0;H<e.lines;++H){let q=S[d][I];for(let P=0;P<E.width;++P){for(let b=0;b<2*E.type;++b)i[q++]=m[F+b*E.width*E.height];F++}I++}break;case 1:qn(d,S,u,p,g,i);break;default:throw new Error("EXRLoader.parse: unsupported channel compression")}}return new DataView(i.buffer)}function nn(e,n){const t=new Uint8Array(e);let i=0;for(;t[n.value+i]!=0;)i+=1;const a=new TextDecoder().decode(t.slice(n.value,n.value+i));return n.value=n.value+i+1,a}function rt(e,n,t){const i=new TextDecoder().decode(new Uint8Array(e).slice(n.value,n.value+t));return n.value=n.value+t,i}function ot(e,n){const t=ae(e,n),i=le(e,n);return[t,i]}function it(e,n){const t=le(e,n),i=le(e,n);return[t,i]}function ae(e,n){const t=e.getInt32(n.value,!0);return n.value=n.value+4,t}function le(e,n){const t=e.getUint32(n.value,!0);return n.value=n.value+4,t}function An(e,n){const t=e[n.value];return n.value=n.value+1,t}function Re(e,n){const t=e.getUint8(n.value);return n.value=n.value+1,t}const ie=function(e,n){let t;return"getBigInt64"in DataView.prototype?t=Number(e.getBigInt64(n.value,!0)):t=e.getUint32(n.value+4,!0)+Number(e.getUint32(n.value,!0)<<32),n.value+=8,t};function ee(e,n){const t=e.getFloat32(n.value,!0);return n.value+=4,t}function st(e,n){return Ge.toHalfFloat(ee(e,n))}function w(e){const n=(e&31744)>>10,t=e&1023;return(e>>15?-1:1)*(n?n===31?t?NaN:1/0:Math.pow(2,n-15)*(1+t/1024):6103515625e-14*(t/1024))}function Ke(e,n){const t=e.getUint16(n.value,!0);return n.value+=2,t}function at(e,n){return w(Ke(e,n))}function lt(e,n,t,i){const a=t.value,h=[];for(;t.value<a+i-1;){const r=nn(n,t),f=ae(e,t),u=Re(e,t);t.value+=3;const c=ae(e,t),p=ae(e,t);h.push({name:r,pixelType:f,pLinear:u,xSampling:c,ySampling:p})}return t.value+=1,h}function ct(e,n){const t=ee(e,n),i=ee(e,n),a=ee(e,n),h=ee(e,n),r=ee(e,n),f=ee(e,n),u=ee(e,n),c=ee(e,n);return{redX:t,redY:i,greenX:a,greenY:h,blueX:r,blueY:f,whiteX:u,whiteY:c}}function ut(e,n){const t=["NO_COMPRESSION","RLE_COMPRESSION","ZIPS_COMPRESSION","ZIP_COMPRESSION","PIZ_COMPRESSION","PXR24_COMPRESSION","B44_COMPRESSION","B44A_COMPRESSION","DWAA_COMPRESSION","DWAB_COMPRESSION"],i=Re(e,n);return t[i]}function pt(e,n){const t=ae(e,n),i=ae(e,n),a=ae(e,n),h=ae(e,n);return{xMin:t,yMin:i,xMax:a,yMax:h}}function ht(e,n){const t=["INCREASING_Y","DECREASING_Y","RANDOM_Y"],i=Re(e,n);return t[i]}function ft(e,n){const t=["ENVMAP_LATLONG","ENVMAP_CUBE"],i=Re(e,n);return t[i]}function mt(e,n){const t=["ONE_LEVEL","MIPMAP_LEVELS","RIPMAP_LEVELS"],i=["ROUND_DOWN","ROUND_UP"],a=le(e,n),h=le(e,n),r=Re(e,n);return{xSize:a,ySize:h,levelMode:t[r&15],roundingMode:i[r>>4]}}function gt(e,n){const t=ee(e,n),i=ee(e,n);return[t,i]}function dt(e,n){const t=ee(e,n),i=ee(e,n),a=ee(e,n);return[t,i,a]}function vt(e,n,t,i,a){if(i==="string"||i==="stringvector"||i==="iccProfile")return rt(n,t,a);if(i==="chlist")return lt(e,n,t,a);if(i==="chromaticities")return ct(e,t);if(i==="compression")return ut(e,t);if(i==="box2i")return pt(e,t);if(i==="envmap")return ft(e,t);if(i==="tiledesc")return mt(e,t);if(i==="lineOrder")return ht(e,t);if(i==="float")return ee(e,t);if(i==="v2f")return gt(e,t);if(i==="v3f")return dt(e,t);if(i==="int")return ae(e,t);if(i==="rational")return ot(e,t);if(i==="timecode")return it(e,t);if(i==="preview")return t.value+=a,"skipped";t.value+=a}function wt(e,n){const t=Math.log2(e);return n=="ROUND_DOWN"?Math.floor(t):Math.ceil(t)}function Et(e,n,t){let i=0;switch(e.levelMode){case"ONE_LEVEL":i=1;break;case"MIPMAP_LEVELS":i=wt(Math.max(n,t),e.roundingMode)+1;break;case"RIPMAP_LEVELS":throw new Error("THREE.EXRLoader: RIPMAP_LEVELS tiles currently unsupported.")}return i}function Rn(e,n,t,i){const a=new Array(e);for(let h=0;h<e;h++){const r=1<<h;let f=n/r|0;i=="ROUND_UP"&&f*r<n&&(f+=1);const u=Math.max(f,1);a[h]=(u+t-1)/t|0}return a}function _t(){const e=this,n=e.offset,t={value:0};for(let i=0;i<e.tileCount;i++){const a=ae(e.viewer,n),h=ae(e.viewer,n);n.value+=8,e.size=le(e.viewer,n);const r=a*e.blockWidth,f=h*e.blockHeight;e.columns=r+e.blockWidth>e.width?e.width-r:e.blockWidth,e.lines=f+e.blockHeight>e.height?e.height-f:e.blockHeight;const u=e.columns*e.totalBytes,p=e.size<e.lines*u?e.uncompress(e):mn(e);n.value+=e.size;for(let g=0;g<e.lines;g++){const m=g*e.columns*e.totalBytes;for(let v=0;v<e.inputChannels.length;v++){const S=De.channels[v].name,d=e.channelByteOffsets[S]*e.columns,E=e.decodeChannels[S];if(E===void 0)continue;t.value=m+d;const I=(e.height-(1+f+g))*e.outLineWidth;for(let F=0;F<e.columns;F++){const H=I+(F+r)*e.outputChannels+E;e.byteArray[H]=e.getter(p,t)}}}}}function St(){const e=this,n=e.offset,t={value:0};for(let i=0;i<e.height/e.blockHeight;i++){const a=ae(e.viewer,n)-De.dataWindow.yMin;e.size=le(e.viewer,n),e.lines=a+e.blockHeight>e.height?e.height-a:e.blockHeight;const h=e.columns*e.totalBytes,f=e.size<e.lines*h?e.uncompress(e):mn(e);n.value+=e.size;for(let u=0;u<e.blockHeight;u++){const c=i*e.blockHeight,p=u+e.scanOrder(c);if(p>=e.height)continue;const g=u*h,m=(e.height-1-p)*e.outLineWidth;for(let v=0;v<e.inputChannels.length;v++){const S=De.channels[v].name,d=e.channelByteOffsets[S]*e.columns,E=e.decodeChannels[S];if(E!==void 0){t.value=g+d;for(let I=0;I<e.columns;I++){const F=m+I*e.outputChannels+E;e.byteArray[F]=e.getter(f,t)}}}}}}function yt(e,n,t){const i={};if(e.getUint32(0,!0)!=20000630)throw new Error("THREE.EXRLoader: Provided file doesn't appear to be in OpenEXR format.");i.version=e.getUint8(4);const a=e.getUint8(5);i.spec={singleTile:!!(a&2),longName:!!(a&4),deepFormat:!!(a&8),multiPart:!!(a&16)},t.value=8;let h=!0;for(;h;){const r=nn(n,t);if(r==="")h=!1;else{const f=nn(n,t),u=le(e,t),c=vt(e,n,t,f,u);c===void 0?console.warn(`THREE.EXRLoader: Skipped unknown header attribute type '${f}'.`):i[r]=c}}if((a&-7)!=0)throw console.error("THREE.EXRHeader:",i),new Error("THREE.EXRLoader: Provided file is currently unsupported.");return i}function It(e,n,t,i,a,h){const r={size:0,viewer:n,array:t,offset:i,width:e.dataWindow.xMax-e.dataWindow.xMin+1,height:e.dataWindow.yMax-e.dataWindow.yMin+1,inputChannels:e.channels,channelByteOffsets:{},shouldExpand:!1,scanOrder:null,totalBytes:null,columns:null,lines:null,type:null,uncompress:null,getter:null,format:null,colorSpace:ye};switch(e.compression){case"NO_COMPRESSION":r.blockHeight=1,r.uncompress=mn;break;case"RLE_COMPRESSION":r.blockHeight=1,r.uncompress=et;break;case"ZIPS_COMPRESSION":r.blockHeight=1,r.uncompress=gn;break;case"ZIP_COMPRESSION":r.blockHeight=16,r.uncompress=gn;break;case"PIZ_COMPRESSION":r.blockHeight=32,r.uncompress=nt;break;case"PXR24_COMPRESSION":r.blockHeight=16,r.uncompress=tt;break;case"DWAA_COMPRESSION":r.blockHeight=32,r.uncompress=bn;break;case"DWAB_COMPRESSION":r.blockHeight=256,r.uncompress=bn;break;default:throw new Error("EXRLoader.parse: "+e.compression+" is unsupported")}const f={};for(const m of e.channels)switch(m.name){case"Y":case"R":case"G":case"B":case"A":f[m.name]=!0,r.type=m.pixelType}let u=!1,c=!1;if(f.R&&f.G&&f.B)r.outputChannels=4;else if(f.Y)r.outputChannels=1;else throw new Error("EXRLoader.parse: file contains unsupported data channels.");switch(r.outputChannels){case 4:h==Le?(u=!f.A,r.format=Le,r.colorSpace=ye,r.outputChannels=4,r.decodeChannels={R:0,G:1,B:2,A:3}):h==$e?(r.format=$e,r.colorSpace=ye,r.outputChannels=2,r.decodeChannels={R:0,G:1}):h==rn?(r.format=rn,r.colorSpace=ye,r.outputChannels=1,r.decodeChannels={R:0}):c=!0;break;case 1:h==Le?(u=!0,r.format=Le,r.colorSpace=ye,r.outputChannels=4,r.shouldExpand=!0,r.decodeChannels={Y:0}):h==$e?(r.format=$e,r.colorSpace=ye,r.outputChannels=2,r.shouldExpand=!0,r.decodeChannels={Y:0}):h==rn?(r.format=rn,r.colorSpace=ye,r.outputChannels=1,r.decodeChannels={Y:0}):c=!0;break;default:c=!0}if(c)throw new Error("EXRLoader.parse: invalid output format for specified file.");if(r.type==1)switch(a){case ze:r.getter=at;break;case Ie:r.getter=Ke;break}else if(r.type==2)switch(a){case ze:r.getter=ee;break;case Ie:r.getter=st}else throw new Error("EXRLoader.parse: unsupported pixelType "+r.type+" for "+e.compression+".");r.columns=r.width;const p=r.width*r.height*r.outputChannels;switch(a){case ze:r.byteArray=new Float32Array(p),u&&r.byteArray.fill(1,0,p);break;case Ie:r.byteArray=new Uint16Array(p),u&&r.byteArray.fill(15360,0,p);break;default:console.error("THREE.EXRLoader: unsupported type: ",a);break}let g=0;for(const m of e.channels)r.decodeChannels[m.name]!==void 0&&(r.channelByteOffsets[m.name]=g),g+=m.pixelType*2;if(r.totalBytes=g,r.outLineWidth=r.width*r.outputChannels,e.lineOrder==="INCREASING_Y"?r.scanOrder=m=>m:r.scanOrder=m=>r.height-1-m,e.spec.singleTile){r.blockHeight=e.tiles.ySize,r.blockWidth=e.tiles.xSize;const m=Et(e.tiles,r.width,r.height),v=Rn(m,r.width,e.tiles.xSize,e.tiles.roundingMode),S=Rn(m,r.height,e.tiles.ySize,e.tiles.roundingMode);r.tileCount=v[0]*S[0];for(let d=0;d<m;d++)for(let E=0;E<S[d];E++)for(let I=0;I<v[d];I++)ie(n,i);r.decode=_t.bind(r)}else{r.blockWidth=r.width;const m=Math.ceil(r.height/r.blockHeight);for(let v=0;v<m;v++)ie(n,i);r.decode=St.bind(r)}return r}const Nn={value:0},Tn=new DataView(o),Ct=new Uint8Array(o),De=yt(Tn,o,Nn),Ne=It(De,Tn,Ct,Nn,this.type,this.outputFormat);if(Ne.decode(),Ne.shouldExpand){const e=Ne.byteArray;if(this.outputFormat==Le)for(let n=0;n<e.length;n+=4)e[n+2]=e[n+1]=e[n];else if(this.outputFormat==$e)for(let n=0;n<e.length;n+=2)e[n+1]=e[n]}return{header:De,width:Ne.width,height:Ne.height,data:Ne.byteArray,format:Ne.format,colorSpace:Ne.colorSpace,type:this.type}}setDataType(o){return this.type=o,this}setOutputFormat(o){return this.outputFormat=o,this}load(o,l,_,y){function V(A,C){A.colorSpace=C.colorSpace,A.minFilter=un,A.magFilter=un,A.generateMipmaps=!1,A.flipY=!1,l&&l(A,C)}return super.load(o,V,_,y)}}class pr extends kn{constructor(o){super(o),this.type=Ie}parse(o){const A=function(x,T){switch(x){case 1:throw new Error("THREE.HDRLoader: Read Error: "+(T||""));case 2:throw new Error("THREE.HDRLoader: Write Error: "+(T||""));case 3:throw new Error("THREE.HDRLoader: Bad File Format: "+(T||""));default:case 4:throw new Error("THREE.HDRLoader: Memory Error: "+(T||""))}},M=function(x,T,D){T=T||1024;let B=x.pos,Z=-1,R=0,Y="",O=String.fromCharCode.apply(null,new Uint16Array(x.subarray(B,B+128)));for(;0>(Z=O.indexOf(`
7
+ `))&&R<T&&B<x.byteLength;)Y+=O,R+=O.length,B+=128,O+=String.fromCharCode.apply(null,new Uint16Array(x.subarray(B,B+128)));return-1<Z?(x.pos+=R+Z+1,Y+O.slice(0,Z)):!1},k=function(x){const T=/^#\?(\S+)/,D=/^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/,N=/^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/,B=/^\s*FORMAT=(\S+)\s*$/,Z=/^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/,R={valid:0,string:"",comments:"",programtype:"RGBE",format:"",gamma:1,exposure:1,width:0,height:0};let Y,O;for((x.pos>=x.byteLength||!(Y=M(x)))&&A(1,"no header found"),(O=Y.match(T))||A(3,"bad initial token"),R.valid|=1,R.programtype=O[1],R.string+=Y+`
8
+ `;Y=M(x),Y!==!1;){if(R.string+=Y+`
9
+ `,Y.charAt(0)==="#"){R.comments+=Y+`
10
+ `;continue}if((O=Y.match(D))&&(R.gamma=parseFloat(O[1])),(O=Y.match(N))&&(R.exposure=parseFloat(O[1])),(O=Y.match(B))&&(R.valid|=2,R.format=O[1]),(O=Y.match(Z))&&(R.valid|=4,R.height=parseInt(O[1],10),R.width=parseInt(O[2],10)),R.valid&2&&R.valid&4)break}return R.valid&2||A(3,"missing format specifier"),R.valid&4||A(3,"missing image size specifier"),R},te=function(x,T,D){const N=T;if(N<8||N>32767||x[0]!==2||x[1]!==2||x[2]&128)return new Uint8Array(x);N!==(x[2]<<8|x[3])&&A(3,"wrong scanline width");const B=new Uint8Array(4*T*D);B.length||A(4,"unable to allocate buffer space");let Z=0,R=0;const Y=4*N,O=new Uint8Array(4),oe=new Uint8Array(Y);let be=D;for(;be>0&&R<x.byteLength;){R+4>x.byteLength&&A(1),O[0]=x[R++],O[1]=x[R++],O[2]=x[R++],O[3]=x[R++],(O[0]!=2||O[1]!=2||(O[2]<<8|O[3])!=N)&&A(3,"bad rgbe scanline format");let j=0,$;for(;j<Y&&R<x.byteLength;){$=x[R++];const K=$>128;if(K&&($-=128),($===0||j+$>Y)&&A(3,"bad scanline data"),K){const Q=x[R++];for(let Ee=0;Ee<$;Ee++)oe[j++]=Q}else oe.set(x.subarray(R,R+$),j),j+=$,R+=$}const Be=N;for(let K=0;K<Be;K++){let Q=0;B[Z]=oe[K+Q],Q+=N,B[Z+1]=oe[K+Q],Q+=N,B[Z+2]=oe[K+Q],Q+=N,B[Z+3]=oe[K+Q],Z+=4}be--}return B},Ue=function(x,T,D,N){const B=x[T+3],Z=Math.pow(2,B-128)/255;D[N+0]=x[T+0]*Z,D[N+1]=x[T+1]*Z,D[N+2]=x[T+2]*Z,D[N+3]=1},Ce=function(x,T,D,N){const B=x[T+3],Z=Math.pow(2,B-128)/255;D[N+0]=Ge.toHalfFloat(Math.min(x[T+0]*Z,65504)),D[N+1]=Ge.toHalfFloat(Math.min(x[T+1]*Z,65504)),D[N+2]=Ge.toHalfFloat(Math.min(x[T+2]*Z,65504)),D[N+3]=Ge.toHalfFloat(1)},pe=new Uint8Array(o);pe.pos=0;const me=k(pe),Fe=me.width,re=me.height,we=te(pe.subarray(pe.pos),Fe,re);let Me,xe,ge;switch(this.type){case ze:ge=we.length/4;const x=new Float32Array(ge*4);for(let D=0;D<ge;D++)Ue(we,D*4,x,D*4);Me=x,xe=ze;break;case Ie:ge=we.length/4;const T=new Uint16Array(ge*4);for(let D=0;D<ge;D++)Ce(we,D*4,T,D*4);Me=T,xe=Ie;break;default:throw new Error("THREE.HDRLoader: Unsupported type: "+this.type)}return{width:Fe,height:re,data:Me,header:me.string,gamma:me.gamma,exposure:me.exposure,type:xe}}setDataType(o){return this.type=o,this}load(o,l,_,y){function V(A,C){switch(A.type){case ze:case Ie:A.colorSpace=ye,A.minFilter=un,A.magFilter=un,A.generateMipmaps=!1,A.flipY=!0;break}l&&l(A,C)}return super.load(o,V,_,y)}}function hr(s){const o=new Tt(s),l=new Vt;try{const _=o.fromScene(l,.04);return{texture:_.texture,dispose:()=>_.dispose()}}finally{l.dispose(),o.dispose()}}async function Ur(s,o){const l=o==="exr"?new ur:new pr;l.setDataType(Ie);const _=await l.loadAsync(s);return _.mapping=Ot,_.colorSpace=ye,_}const fr=new WeakSet,mr=8;let Qe=0;function gr(s){fr.add(s),Qe+=1;const o=s,l=o.dispose;if(typeof l=="function"){let _=!0;o.dispose=function(...V){return _&&(_=!1,Qe-=1),l.apply(this,V)}}return Qe>=mr&&console.warn(`[host-renderers] ${Qe} editor WebGL renderers are live at once. The browser evicts the OLDEST context past its limit, which is the main viewport — a white viewport and "too many active WebGL contexts" is this. Creating stack:`,new Error("renderer created here").stack),s}function Fr(){return Qe}const dr=2,ke=[],pn=new Set;function vr(){const s=document.createElement("canvas");s.style.width="100%",s.style.height="100%",s.style.display="block";const o=gr(new Ut({canvas:s,antialias:!0,alpha:!0})),l={canvas:s,renderer:o,environment:null,pooled:!1,leased:!0,lost:!1};return pn.add(l),s.addEventListener("webglcontextlost",()=>{l.lost=!0;const _=ke.indexOf(l);_>=0&&ke.splice(_,1),l.leased||Yn(l)}),l}function Yn(s){pn.delete(s)&&(s.environment?.dispose(),s.environment=null,s.renderer.dispose(),s.renderer.forceContextLoss(),s.canvas.remove())}function Br(){return{active:[...pn].filter(s=>s.leased&&!s.lost).length,idle:[...pn].filter(s=>!s.leased&&!s.lost).length}}function Dr(){let s=ke.find(_=>!_.leased&&!_.lost);s||(s=vr(),ke.length<dr&&(s.pooled=!0,ke.push(s))),s.leased=!0;const o=s;let l=!1;return{canvas:o.canvas,renderer:o.renderer,environment(){return o.environment??=hr(o.renderer),{texture:o.environment.texture,dispose:()=>{}}},release(_){if(!l){if(l=!0,o.leased=!1,o.canvas.remove(),_?.discard){o.lost=!0;const y=ke.indexOf(o);y>=0&&ke.splice(y,1)}if(!o.pooled||o.lost){Yn(o);return}o.renderer.setScissorTest(!1),o.renderer.autoClear=!0,o.renderer.clear()}}}}class wr{constructor(){this.isPass=!0,this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error("THREE.Pass: .render() must be implemented in derived pass.")}dispose(){}}const Er=new Ft(-1,1,1,-1,0,1);class _r extends Bt{constructor(){super(),this.setAttribute("position",new Un([-1,3,0,-1,-1,0,3,-1,0],3)),this.setAttribute("uv",new Un([0,2,0,0,2,0],2))}}const Sr=new _r;class yr{constructor(o){this._mesh=new Oe(Sr,o)}dispose(){this._mesh.geometry.dispose()}render(o){o.render(this._mesh,Er)}get material(){return this._mesh.material}set material(o){this._mesh.material=o}}const sn={name:"OutputShader",uniforms:{tDiffuse:{value:null},toneMappingExposure:{value:1}},vertexShader:`
11
+ precision highp float;
12
+
13
+ uniform mat4 modelViewMatrix;
14
+ uniform mat4 projectionMatrix;
15
+
16
+ attribute vec3 position;
17
+ attribute vec2 uv;
18
+
19
+ varying vec2 vUv;
20
+
21
+ void main() {
22
+
23
+ vUv = uv;
24
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
25
+
26
+ }`,fragmentShader:`
27
+
28
+ precision highp float;
29
+
30
+ uniform sampler2D tDiffuse;
31
+
32
+ #include <tonemapping_pars_fragment>
33
+ #include <colorspace_pars_fragment>
34
+
35
+ varying vec2 vUv;
36
+
37
+ void main() {
38
+
39
+ gl_FragColor = texture2D( tDiffuse, vUv );
40
+
41
+ // tone mapping
42
+
43
+ #ifdef LINEAR_TONE_MAPPING
44
+
45
+ gl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb );
46
+
47
+ #elif defined( REINHARD_TONE_MAPPING )
48
+
49
+ gl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb );
50
+
51
+ #elif defined( CINEON_TONE_MAPPING )
52
+
53
+ gl_FragColor.rgb = CineonToneMapping( gl_FragColor.rgb );
54
+
55
+ #elif defined( ACES_FILMIC_TONE_MAPPING )
56
+
57
+ gl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb );
58
+
59
+ #elif defined( AGX_TONE_MAPPING )
60
+
61
+ gl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb );
62
+
63
+ #elif defined( NEUTRAL_TONE_MAPPING )
64
+
65
+ gl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb );
66
+
67
+ #elif defined( CUSTOM_TONE_MAPPING )
68
+
69
+ gl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb );
70
+
71
+ #endif
72
+
73
+ // color space
74
+
75
+ #ifdef SRGB_TRANSFER
76
+
77
+ gl_FragColor = sRGBTransferOETF( gl_FragColor );
78
+
79
+ #endif
80
+
81
+ }`};class Ir extends wr{constructor(){super(),this.uniforms=Dt.clone(sn.uniforms),this.material=new kt({name:sn.name,uniforms:this.uniforms,vertexShader:sn.vertexShader,fragmentShader:sn.fragmentShader}),this._fsQuad=new yr(this.material),this._outputColorSpace=null,this._toneMapping=null}render(o,l,_){this.uniforms.tDiffuse.value=_.texture,this.uniforms.toneMappingExposure.value=o.toneMappingExposure,(this._outputColorSpace!==o.outputColorSpace||this._toneMapping!==o.toneMapping)&&(this._outputColorSpace=o.outputColorSpace,this._toneMapping=o.toneMapping,this.material.defines={},Lt.getTransfer(this._outputColorSpace)===Pt&&(this.material.defines.SRGB_TRANSFER=""),this._toneMapping===Ht?this.material.defines.LINEAR_TONE_MAPPING="":this._toneMapping===Gt?this.material.defines.REINHARD_TONE_MAPPING="":this._toneMapping===Zt?this.material.defines.CINEON_TONE_MAPPING="":this._toneMapping===zt?this.material.defines.ACES_FILMIC_TONE_MAPPING="":this._toneMapping===Wt?this.material.defines.AGX_TONE_MAPPING="":this._toneMapping===Yt?this.material.defines.NEUTRAL_TONE_MAPPING="":this._toneMapping===Xt&&(this.material.defines.CUSTOM_TONE_MAPPING=""),this.material.needsUpdate=!0),this.renderToScreen===!0?(o.setRenderTarget(null),this._fsQuad.render(o)):(o.setRenderTarget(l),this.clear&&o.clear(o.autoClearColor,o.autoClearDepth,o.autoClearStencil),this._fsQuad.render(o))}dispose(){this.material.dispose(),this._fsQuad.dispose()}}let He=null;const Fn={value:!1};function kr(s=!1){return He||(He=new Ir,Object.assign(He.uniforms,{unassociateAlpha:Fn}),He.material.fragmentShader=He.material.fragmentShader.replace("uniform sampler2D tDiffuse;",`uniform sampler2D tDiffuse;
82
+ uniform bool unassociateAlpha;`).replace("gl_FragColor = texture2D( tDiffuse, vUv );",`gl_FragColor = texture2D( tDiffuse, vUv );
83
+ if (unassociateAlpha && gl_FragColor.a != 0.0) {
84
+ gl_FragColor.rgb /= gl_FragColor.a;
85
+ }`)),Fn.value=s,He}const Xn={editorHelperType:"editorHelperType",skeletonVisible:"skeletonVisible",skeletonEnabled:"skeletonEnabled",engineInternal:"engineInternal",editorHelper:"editorHelper",vgaiComponentRoot:"vgaiComponentRoot",vgaiBuiltInternal:"vgaiBuiltInternal"};function Kn(s,o){return s?s.userData[Xn[o]]:void 0}function Lr(s,o,l){s.userData[Xn[o]]=l}function Pr(s){const o=Kn(s,"vgaiComponentRoot");return typeof o=="string"&&o?o:void 0}function Cr(s){return Kn(s,"vgaiBuiltInternal")===!0}function hn(s,o){o(s);for(const l of s.children)Cr(l)||hn(l,o)}const an=new We,Bn=new Ln;function Vn(s){return Number.isFinite(s.min.x)&&Number.isFinite(s.min.y)&&Number.isFinite(s.min.z)&&Number.isFinite(s.max.x)&&Number.isFinite(s.max.y)&&Number.isFinite(s.max.z)}const ln=new Ln,wn=new We;function Mr(s,o,l,_){for(let y=0;y<o.count;y++)o.getMatrixAt(y,ln),ln.premultiply(o.matrixWorld),_&&ln.premultiply(_),wn.copy(l).applyMatrix4(ln),Vn(wn)&&s.union(wn)}function _n(s,o,l=null){const _=o.geometry;if(!_)return;const y=xr(o,_);if(y){if(o.isInstancedMesh){Mr(s,o,y,l);return}l?(Bn.multiplyMatrices(l,o.matrixWorld),an.copy(y).applyMatrix4(Bn)):an.copy(y).applyMatrix4(o.matrixWorld),Vn(an)&&s.union(an)}}function xr(s,o){const l=s;return s.isSkinnedMesh?(o.boundingBox===null&&o.computeBoundingBox(),o.boundingBox):l.boundingBox!==void 0&&!s.isInstancedMesh?(l.boundingBox===null&&l.computeBoundingBox?.(),l.boundingBox??null):(o.boundingBox===null&&o.computeBoundingBox(),o.boundingBox)}function br(s,o){return hn(o,l=>{l.updateWorldMatrix(!1,!1),_n(s,l)}),s}const cn=new We;function $n(s){const o=s.material;return o?Array.isArray(o)?o:[o]:[]}function Ar(s){const o=$n(s);return o.length>0&&o.every(l=>l.depthWrite===!1)}function Rr(s){const o=$n(s);return o.length>0&&o.every(l=>l.side===Dn)}function Nr(s,o=[]){return hn(s,l=>{l.updateWorldMatrix(!1,!1),cn.makeEmpty(),_n(cn,l),!cn.isEmpty()&&o.push({box:cn.clone(),overlay:Ar(l),enclosure:Rr(l)})}),o}function Hr(s,o=[]){for(const l of Nr(s))o.push(l.box);return o}function Tr(s,o=new We){return o.makeEmpty(),br(o,s)}function Gr(s,o,l=new We){return l.makeEmpty(),hn(s,_=>{_.updateWorldMatrix(!1,!1),_n(l,_,o)}),l}class Zr extends Kt{entityObject;constructor(o,l){super(new We,l),this.entityObject=o,this.update()}update(){Tr(this.entityObject,this.box)}}export{Zr as C,ur as E,yr as F,pr as H,Xn as O,Dr as a,hr as b,Tr as c,Pr as d,Br as e,Gr as f,Kn as g,br as h,Cr as i,Hr as j,Ur as k,Fr as l,gr as m,Lr as s,on as u,kr as v};
@@ -1,2 +1,2 @@
1
- import{cH as E,s as l,o as y,cI as L,a as b,m as T}from"./index-cpXNKgvz.js";import"./index-DaQZGF7d.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D2LwEE0L.js";import"./client-DNXj_opT.js";import"./three.module-ZILb6uB7.js";function x(e){return!e||e.trim()===""?"empty":e.includes("\0")?"nul":e.startsWith("/")||e.startsWith("\\")||/^[a-zA-Z]:[\\/]/.test(e)?"absolute":e.split(/[\\/]/).includes("..")?"traversal":null}function O(e){return x(e)===null}const d=".vgai/assets.json",k=y({key:l().min(1),license:l().min(1).optional(),sourceHash:l().regex(/^sha256-[a-f0-9]{64}$/,'sourceHash must be "sha256-<64 hex>"').optional(),materializedAt:l().datetime()}).strict(),z=E(l().min(1),k);function I(e){if(!/^[a-f0-9]{64}$/.test(e))throw new Error(`Not a sha256 digest, refusing to record it as a sourceHash: ${e}`);return`sha256-${e}`}function m(e){const t=e.replaceAll("\\","/").replace(/^\.\//,"").replace(/^\/+/,"");if(!t)throw new Error("An asset ledger path cannot be empty.");if(!O(t))throw new Error(`An asset ledger path cannot escape the project: ${e}`);return t}function _(e){return z.parse(e)}function D(e){if(e==null||e.trim()==="")return{};let t;try{t=JSON.parse(e)}catch(s){throw new Error(`${d} is not valid JSON: ${String(s)}`)}return _(t)}function M(e,t,s){const r=m(t),a=k.parse(s),n={...e,[r]:a},i={};for(const u of Object.keys(n).sort())i[u]=n[u];return i}function U(e){const t={};for(const s of Object.keys(e).sort())t[s]=e[s];return`${JSON.stringify(t,null,2)}
2
- `}function H(e,t,s){const r=globalThis.navigator?.locks;return r?r.request(`vgai:${e}:${L(t)}`,s):s()}const j=1e4,N=15;function R(){return globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random()}`}async function B(e,t,s={}){const r=s.staleAfterMs??j,a=s.retryDelayMs??N,n=s.now??Date.now,i=s.sleep??(o=>new Promise(c=>setTimeout(c,o))),u=s.token??R;for(;;){const o=JSON.stringify({at:n(),owner:s.owner??"unknown",token:u()});if(await e.createIfAbsent(o))try{return await t()}finally{await e.removeIfHeldBy(o)}const c=await e.read();if(c!==null){if(n()-J(c)>r){await e.removeIfHeldBy(c);continue}await i(a)}}}function J(e){try{const t=JSON.parse(e);return typeof t.at=="number"?t.at:0}catch{return 0}}function F(){const e=new Map;return(t,s)=>{const a=(e.get(t)??Promise.resolve()).then(s,s),n=a.then(()=>{},()=>{});return e.set(t,n),n.then(()=>{e.get(t)===n&&e.delete(t)}),a}}async function S(e){return await e.exists(d)?D(await e.read(d)):{}}async function C(e,t){await e.write(d,U(t))}const f=`${d}.lock`,W=F(),A=new WeakMap;let $=0;function K(e){const t=A.get(e);if(t!==void 0)return t;$+=1;const s=`${e.id}#${$}`;return A.set(e,s),s}async function G(e,t){const s={key:t.key,...t.license?{license:t.license}:{},...t.sourceSha256?{sourceHash:I(t.sourceSha256)}:{},materializedAt:t.materializedAt??new Date().toISOString()};await W(K(e),()=>B({createIfAbsent:r=>e.writeIfAbsent(f,r),read:async()=>await e.exists(f)?e.read(f):null,removeIfHeldBy:r=>H(e.id,f,async()=>{await e.exists(f)&&await e.read(f)===r&&await e.remove(f)})},async()=>{const r=await S(e);await C(e,M(r,m(t.destPath),s))},{owner:e.id}))}const Y=y({key:l().regex(/^[^:]+:.+$/,'An asset key must be "source:id"'),dest:l().min(1),sha256:l().regex(/^[a-f0-9]{64}$/,"A pack entry must pin the sha256 of its bytes as 64 lowercase hex digits")}).strict(),q=y({packs:E(l().min(1),b(Y))}).strict();function V(e){return q.parse(e)}function Z(e){const t=[],s=new Map;for(const[r,a]of Object.entries(e.packs))for(const n of a){const i=s.get(n.dest);if(i!==void 0)throw new Error(`Two packs declare the same destination "${n.dest}": "${i}" and "${r}".`);s.set(n.dest,r),t.push({...n,pack:r})}return t}const w="asset-manifest.json",v="https://vgai-asset-library.aaron-0ed.workers.dev";function P(e){return(e.baseUrl??v).replace(/\/+$/,"")}function Q(e){return e.signal?{signal:e.signal}:{}}async function X(e,t={}){const s=P(t),r=await fetch(`${s}/v1/assets/${encodeURIComponent(e)}`,Q(t));if(!r.ok)return null;const a=await r.json();return!a||typeof a!="object"||!Array.isArray(a.files)?null:a}function ee(e,t,s,r){return`${P(e?{baseUrl:e}:{})}/v1/assets/${encodeURIComponent(t)}/files/${s}`}async function we(e,t={}){const s=await te(e),r={declared:s.length,materialized:[],alreadyPresent:[],failed:[]};if(s.length===0)return r;const a=await S(e);for(const n of s){if(t.signal?.aborted)break;if(a[m(n.dest)]&&await e.exists(n.dest)){r.alreadyPresent.push(n),t.onProgress?.(n,"already-present");continue}try{await se(e,n,t),r.materialized.push(n),t.onProgress?.(n,"materialized")}catch(i){r.failed.push({entry:n,reason:i instanceof Error?i.message:String(i)}),t.onProgress?.(n,"failed")}}return r}async function te(e){if(!await e.exists(w))return[];const t=await e.read(w);let s;try{s=JSON.parse(t)}catch(r){throw new Error(`${w} is not valid JSON: ${r instanceof Error?r.message:String(r)}`)}return Z(V(s))}async function se(e,t,s){const r=await re(t,s);await e.write(t.dest,r.bytes),await G(e,{destPath:t.dest,key:t.key,license:r.license,sourceSha256:t.sha256})}async function re(e,t={}){const s=e.key.indexOf(":");if(s<0)throw new Error(`Malformed asset key "${e.key}" (expected "source:id").`);const r=e.key.slice(0,s),a=e.key.slice(s+1);if(r!=="local")throw new Error(`Asset key "${e.key}": only the "local" (cloud-hosted) source can be materialized from the cloud worker.`);const n=t.baseUrl??v,i=t.signal?{baseUrl:n,signal:t.signal}:{baseUrl:n},u=await X(a,i);if(!u)throw new Error(`"${e.key}" is not hosted by the cloud asset library.`);const o=u.files[0];if(!o)throw new Error(`"${e.key}" has no files in the cloud library.`);if(o.dependencies.length>0)throw new Error(`"${e.key}" has ${o.dependencies.length} dependency file(s) — a pack entry names exactly one destination file.`);if(o.main.sha256!==e.sha256)throw new Error(`"${e.key}" → ${e.dest}: the cloud library reports sha256:${o.main.sha256} but ${w} pins sha256:${e.sha256}. Nothing was fetched or written; the pin is only re-cut by a reviewed change to the declaration.`);const c=ee(n,a,0),h=await fetch(c,t.signal?{signal:t.signal}:{});if(!h.ok)throw new Error(`${c} returned ${h.status} ${h.statusText}.`);const g=new Uint8Array(await h.arrayBuffer()),p=await T(g);if(p!==e.sha256)throw new Error(`"${e.key}" → ${e.dest}: ${c} delivered sha256:${p} but the declaration pins sha256:${e.sha256}. Nothing was written.`);return{bytes:g,license:u.license}}export{w as ASSET_MANIFEST_PATH,re as fetchVerifiedPackEntry,we as materializeDeclaredAssetPacks};
1
+ import{k as E,g as l,o as y,bB as b,f as L,bh as T}from"./index-Dm_h-T4x.js";import"./index-DaQZGF7d.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-CAUTK36e.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-jib6KJY8.js";import"./client-mkWk8S65.js";function x(e){return!e||e.trim()===""?"empty":e.includes("\0")?"nul":e.startsWith("/")||e.startsWith("\\")||/^[a-zA-Z]:[\\/]/.test(e)?"absolute":e.split(/[\\/]/).includes("..")?"traversal":null}function O(e){return x(e)===null}const d=".vgai/assets.json",k=y({key:l().min(1),license:l().min(1).optional(),sourceHash:l().regex(/^sha256-[a-f0-9]{64}$/,'sourceHash must be "sha256-<64 hex>"').optional(),materializedAt:l().datetime()}).strict(),z=E(l().min(1),k);function _(e){if(!/^[a-f0-9]{64}$/.test(e))throw new Error(`Not a sha256 digest, refusing to record it as a sourceHash: ${e}`);return`sha256-${e}`}function m(e){const t=e.replaceAll("\\","/").replace(/^\.\//,"").replace(/^\/+/,"");if(!t)throw new Error("An asset ledger path cannot be empty.");if(!O(t))throw new Error(`An asset ledger path cannot escape the project: ${e}`);return t}function D(e){return z.parse(e)}function I(e){if(e==null||e.trim()==="")return{};let t;try{t=JSON.parse(e)}catch(s){throw new Error(`${d} is not valid JSON: ${String(s)}`)}return D(t)}function M(e,t,s){const r=m(t),a=k.parse(s),n={...e,[r]:a},i={};for(const u of Object.keys(n).sort())i[u]=n[u];return i}function U(e){const t={};for(const s of Object.keys(e).sort())t[s]=e[s];return`${JSON.stringify(t,null,2)}
2
+ `}function H(e,t,s){const r=globalThis.navigator?.locks;return r?r.request(`vgai:${e}:${b(t)}`,s):s()}const j=1e4,N=15;function R(){return globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random()}`}async function B(e,t,s={}){const r=s.staleAfterMs??j,a=s.retryDelayMs??N,n=s.now??Date.now,i=s.sleep??(o=>new Promise(c=>setTimeout(c,o))),u=s.token??R;for(;;){const o=JSON.stringify({at:n(),owner:s.owner??"unknown",token:u()});if(await e.createIfAbsent(o))try{return await t()}finally{await e.removeIfHeldBy(o)}const c=await e.read();if(c!==null){if(n()-J(c)>r){await e.removeIfHeldBy(c);continue}await i(a)}}}function J(e){try{const t=JSON.parse(e);return typeof t.at=="number"?t.at:0}catch{return 0}}function F(){const e=new Map;return(t,s)=>{const a=(e.get(t)??Promise.resolve()).then(s,s),n=a.then(()=>{},()=>{});return e.set(t,n),n.then(()=>{e.get(t)===n&&e.delete(t)}),a}}async function S(e){return await e.exists(d)?I(await e.read(d)):{}}async function C(e,t){await e.write(d,U(t))}const f=`${d}.lock`,W=F(),A=new WeakMap;let $=0;function K(e){const t=A.get(e);if(t!==void 0)return t;$+=1;const s=`${e.id}#${$}`;return A.set(e,s),s}async function G(e,t){const s={key:t.key,...t.license?{license:t.license}:{},...t.sourceSha256?{sourceHash:_(t.sourceSha256)}:{},materializedAt:t.materializedAt??new Date().toISOString()};await W(K(e),()=>B({createIfAbsent:r=>e.writeIfAbsent(f,r),read:async()=>await e.exists(f)?e.read(f):null,removeIfHeldBy:r=>H(e.id,f,async()=>{await e.exists(f)&&await e.read(f)===r&&await e.remove(f)})},async()=>{const r=await S(e);await C(e,M(r,m(t.destPath),s))},{owner:e.id}))}const Y=y({key:l().regex(/^[^:]+:.+$/,'An asset key must be "source:id"'),dest:l().min(1),sha256:l().regex(/^[a-f0-9]{64}$/,"A pack entry must pin the sha256 of its bytes as 64 lowercase hex digits")}).strict(),q=y({packs:E(l().min(1),L(Y))}).strict();function V(e){return q.parse(e)}function Z(e){const t=[],s=new Map;for(const[r,a]of Object.entries(e.packs))for(const n of a){const i=s.get(n.dest);if(i!==void 0)throw new Error(`Two packs declare the same destination "${n.dest}": "${i}" and "${r}".`);s.set(n.dest,r),t.push({...n,pack:r})}return t}const w="asset-manifest.json",v="https://vgai-asset-library.aaron-0ed.workers.dev";function P(e){return(e.baseUrl??v).replace(/\/+$/,"")}function Q(e){return e.signal?{signal:e.signal}:{}}async function X(e,t={}){const s=P(t),r=await fetch(`${s}/v1/assets/${encodeURIComponent(e)}`,Q(t));if(!r.ok)return null;const a=await r.json();return!a||typeof a!="object"||!Array.isArray(a.files)?null:a}function ee(e,t,s,r){return`${P(e?{baseUrl:e}:{})}/v1/assets/${encodeURIComponent(t)}/files/${s}`}async function he(e,t={}){const s=await te(e),r={declared:s.length,materialized:[],alreadyPresent:[],failed:[]};if(s.length===0)return r;const a=await S(e);for(const n of s){if(t.signal?.aborted)break;if(a[m(n.dest)]&&await e.exists(n.dest)){r.alreadyPresent.push(n),t.onProgress?.(n,"already-present");continue}try{await se(e,n,t),r.materialized.push(n),t.onProgress?.(n,"materialized")}catch(i){r.failed.push({entry:n,reason:i instanceof Error?i.message:String(i)}),t.onProgress?.(n,"failed")}}return r}async function te(e){if(!await e.exists(w))return[];const t=await e.read(w);let s;try{s=JSON.parse(t)}catch(r){throw new Error(`${w} is not valid JSON: ${r instanceof Error?r.message:String(r)}`)}return Z(V(s))}async function se(e,t,s){const r=await re(t,s);await e.write(t.dest,r.bytes),await G(e,{destPath:t.dest,key:t.key,license:r.license,sourceSha256:t.sha256})}async function re(e,t={}){const s=e.key.indexOf(":");if(s<0)throw new Error(`Malformed asset key "${e.key}" (expected "source:id").`);const r=e.key.slice(0,s),a=e.key.slice(s+1);if(r!=="local")throw new Error(`Asset key "${e.key}": only the "local" (cloud-hosted) source can be materialized from the cloud worker.`);const n=t.baseUrl??v,i=t.signal?{baseUrl:n,signal:t.signal}:{baseUrl:n},u=await X(a,i);if(!u)throw new Error(`"${e.key}" is not hosted by the cloud asset library.`);const o=u.files[0];if(!o)throw new Error(`"${e.key}" has no files in the cloud library.`);if(o.dependencies.length>0)throw new Error(`"${e.key}" has ${o.dependencies.length} dependency file(s) — a pack entry names exactly one destination file.`);if(o.main.sha256!==e.sha256)throw new Error(`"${e.key}" → ${e.dest}: the cloud library reports sha256:${o.main.sha256} but ${w} pins sha256:${e.sha256}. Nothing was fetched or written; the pin is only re-cut by a reviewed change to the declaration.`);const c=ee(n,a,0),h=await fetch(c,t.signal?{signal:t.signal}:{});if(!h.ok)throw new Error(`${c} returned ${h.status} ${h.statusText}.`);const g=new Uint8Array(await h.arrayBuffer()),p=await T(g);if(p!==e.sha256)throw new Error(`"${e.key}" → ${e.dest}: ${c} delivered sha256:${p} but the declaration pins sha256:${e.sha256}. Nothing was written.`);return{bytes:g,license:u.license}}export{w as ASSET_MANIFEST_PATH,re as fetchVerifiedPackEntry,he as materializeDeclaredAssetPacks};
@@ -0,0 +1 @@
1
+ .vgai-console{display:flex;height:100%;flex-direction:column}.vgai-console .vgai-toolbar{flex:0 0 auto}.vgai-console-filter{width:140px;margin-left:auto}.vgai-console-list{min-height:0;flex:1;overflow-y:auto;font-family:var(--vgai-font-mono);font-size:var(--vgai-font-base);line-height:18px}.vgai-console-empty{padding:var(--vgai-space-6) var(--vgai-space-4);color:var(--vgai-content-dim);font-style:italic}.vgai-console-row{display:flex;align-items:flex-start;padding:1px var(--vgai-space-4);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-boundary-default)}.vgai-console-row[data-level=error]{background:var(--vgai-danger-faint)}.vgai-console-row:hover{background:var(--vgai-neutral-hover)}.vgai-console-count{flex:0 0 auto;margin-left:var(--vgai-space-3);padding:0 var(--vgai-space-2);color:var(--vgai-content-muted);background:var(--vgai-surface-raised);border-radius:var(--vgai-radius-lg);font-size:var(--vgai-font-sm)}.vgai-console [data-console-level=info][aria-pressed=true]{color:var(--vgai-content-primary)}.vgai-console [data-console-level=warn][aria-pressed=true]{color:var(--vgai-warn)}.vgai-console [data-console-level=error][aria-pressed=true]{color:var(--vgai-danger)}.vgai-model-document-header{display:flex;align-items:center;gap:var(--vgai-space-2);flex:1 1 auto;min-width:0}.vgai-model-viewport-toolbar{position:static;min-height:auto;padding:0;border:0;background:transparent;box-shadow:none}.vgai-model-viewport-toolbar--preview{margin-left:auto}.vgai-model-viewport-toolbar>*{flex:0 0 auto}.vgai-model-toolbar-labelled-control{display:inline-flex;align-items:center;gap:var(--vgai-space-1);white-space:nowrap}.vgai-model-preview-menu{width:250px;padding:var(--vgai-space-3);gap:var(--vgai-space-3)}.vgai-model-preview-menu>label{display:grid;grid-template-columns:68px minmax(0,1fr) auto;align-items:center;gap:var(--vgai-space-2);color:var(--vgai-text-2);font-size:var(--vgai-font-xs)}.vgai-model-preview-menu select{grid-column:2 / -1}.vgai-model-preview-menu input[type=range]{width:120px}.vgai-model-capture-preview{position:absolute;z-index:var(--vgai-z-sticky);top:calc(var(--vgai-space-3) + var(--vgai-control-default-height) + var(--vgai-space-2));right:var(--vgai-space-3);width:min(420px,calc(100% - 2 * var(--vgai-space-3)));padding:var(--vgai-space-3)}.vgai-model-capture-preview>div{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--vgai-space-3)}.vgai-model-capture-preview img{display:block;width:100%}.vgai-model-toolbar-error{position:absolute;z-index:var(--vgai-z-sticky);right:var(--vgai-space-3);bottom:var(--vgai-space-3);max-width:420px}@media(width<=720px){.vgai-model-toolbar-labelled-control>span{display:none}}.vgai-viewport-shading-segments{display:inline-flex}.vgai-viewport-shading-segments>*{display:inline-flex}.vgai-viewport-shading-segments>:not(:first-child) .vgai-btn,.vgai-viewport-shading-segments>.vgai-btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;border-left-width:0}.vgai-viewport-shading-segments>:not(:last-child) .vgai-btn,.vgai-viewport-shading-segments>.vgai-btn:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.vgai-viewport-shading-segments .vgai-btn[aria-pressed=true]{position:relative;z-index:1}.vgai-viewport-shading-glyph{width:var(--vgai-icon-md);height:var(--vgai-icon-md);overflow:visible}.vgai-viewport-shading-options{display:grid;gap:var(--vgai-space-2);padding:var(--vgai-space-2) var(--vgai-space-3)}.vgai-viewport-shading-options>label{display:grid;grid-template-columns:68px minmax(0,1fr) auto;align-items:center;gap:var(--vgai-space-2);color:var(--vgai-text-2);font-size:var(--vgai-font-xs)}.vgai-viewport-shading-options select{grid-column:2 / -1}.vgai-viewport-shading-options input[type=range]{width:120px}.vgai-viewport-overlays-glyph{width:var(--vgai-icon-md);height:var(--vgai-icon-md);overflow:visible}.vgai-project-header{position:relative;display:flex;height:var(--vgai-command-bar-height);flex:0 0 auto;align-items:center;padding:0 var(--vgai-space-3);color:var(--vgai-content-primary);background:var(--vgai-surface-shell);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-boundary-area);font-size:var(--vgai-font-base);pointer-events:auto;user-select:none;box-sizing:border-box}.vgai-project-header-left{position:relative;display:flex;min-width:0;flex:1;align-self:stretch;align-items:center}.vgai-menu-trigger.vgai-project-trigger{position:relative;display:flex;width:14px;min-width:0;align-items:center;justify-content:flex-start;padding:0;overflow:visible;white-space:nowrap}.vgai-project-menu-name{display:block;max-width:320px;padding:var(--vgai-space-3) var(--vgai-space-4) var(--vgai-space-1)}.vgai-project-header-right .vgai-btn[data-variant=ghost]{color:var(--vgai-content-primary)}.vgai-project-header-left .vgai-text[data-variant=label]{font-weight:400}.vgai-project-app-menus,.vgai-project-transport{flex:0 0 auto}.vgai-project-menu{position:absolute;top:100%;left:0;min-width:190px;margin-top:var(--vgai-space-1)}.vgai-project-path{display:block;max-width:320px;padding:var(--vgai-space-2) var(--vgai-space-4)}.vgai-project-versions{display:grid;grid-template-columns:1fr auto;gap:var(--vgai-space-2) var(--vgai-space-6);padding:var(--vgai-space-3) var(--vgai-space-4) var(--vgai-space-4);color:var(--vgai-content-dim);font-size:var(--vgai-font-sm)}.vgai-project-header-right{min-width:0;flex:1;gap:var(--vgai-space-2)}@media(max-width:680px){.vgai-project-header{height:auto;min-height:var(--vgai-command-bar-height);flex-wrap:wrap;gap:var(--vgai-space-2) var(--vgai-space-4);padding-block:4px}.vgai-project-header-left{flex:1 1 100%}.vgai-project-header-right{flex:1 1 auto;flex-wrap:wrap}}.vgai-header-telemetry{min-width:0;flex:0 0 auto;overflow:visible}.vgai-header-telemetry-button.vgai-btn{min-width:0;height:var(--vgai-control-compact-height);gap:var(--vgai-space-2);padding-inline:var(--vgai-space-2);font-variant-numeric:tabular-nums}.vgai-header-audio{position:relative}.vgai-audio-vu{display:flex;width:34px;height:12px;align-items:stretch;gap:var(--vgai-space-1)}.vgai-audio-vu>i{width:2px;flex:1 1 0;border-radius:1px;background:var(--vgai-boundary-strong)}.vgai-header-audio[data-available=true] .vgai-audio-vu>i[data-filled=true]{background:var(--vgai-accent)}.vgai-header-audio[data-muted=true] .vgai-audio-vu>i[data-filled=true]{background:var(--vgai-content-muted)}.vgai-header-performance{border-left:var(--vgai-stroke-resting) solid var(--vgai-boundary-default)}.vgai-header-performance svg{display:block;overflow:visible}.vgai-performance-graph{border-radius:var(--vgai-radius-sm);background:color-mix(in srgb,var(--vgai-surface-panel) 72%,transparent)}.vgai-performance-budget{stroke:var(--vgai-boundary-strong);stroke-dasharray:2 2;stroke-width:1}.vgai-performance-sparkline{fill:none;stroke:var(--vgai-accent);stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5;vector-effect:non-scaling-stroke}.vgai-header-performance[data-performance-tone=warning] .vgai-performance-sparkline,.vgai-header-performance[data-performance-tone=warning] .vgai-header-fps{color:var(--vgai-warn);stroke:var(--vgai-warn)}.vgai-header-performance[data-performance-tone=danger] .vgai-performance-sparkline,.vgai-header-performance[data-performance-tone=danger] .vgai-header-fps{color:var(--vgai-danger);stroke:var(--vgai-danger)}.vgai-performance-readout{display:grid;min-width:48px;line-height:1.05;text-align:right}.vgai-header-fps{color:var(--vgai-content-primary);font-family:var(--vgai-font-mono);font-size:var(--vgai-font-sm);font-weight:600}.vgai-header-frame-ms{color:var(--vgai-content-dim);font-family:var(--vgai-font-mono);font-size:var(--vgai-font-xs)}@media(max-width:1120px){.vgai-header-performance svg,.vgai-audio-vu{display:none}}.vgai-project-header-cluster{display:flex;min-width:0}.vgai-project-header-left .vgai-project-header-cluster{flex:0 0 auto}.vgai-project-header-right .vgai-project-header-cluster{align-items:center;gap:var(--vgai-space-2)}[data-vgai-chrome=islands] .vgai-project-header{z-index:var(--vgai-z-sticky);align-items:flex-start;padding-top:var(--vgai-space-4);background:transparent;border-bottom-color:transparent;pointer-events:none}[data-vgai-chrome=islands] .vgai-editor-shell:has(.vgai-workspace-dock[data-vgai-backdrop]) .vgai-project-header{position:absolute;top:0;left:0;right:0}[data-vgai-chrome=islands] .vgai-project-header .vgai-chrome-island{height:38px;align-items:center;padding:0 var(--vgai-space-3)}[data-vgai-chrome=islands] .vgai-project-menu{pointer-events:auto}.vgai-project-header{transition:margin-top var(--vgai-duration-slow) var(--vgai-ease-standard)}[data-vgai-play-chrome=hidden] .vgai-project-header{margin-top:calc(-1 * var(--vgai-command-bar-height));background:transparent;border-bottom-color:transparent;pointer-events:none;transition:margin-top var(--vgai-duration-base) var(--vgai-ease-standard)}[data-vgai-play-chrome=hidden] .vgai-project-header-left,[data-vgai-play-chrome=hidden] .vgai-project-transport,[data-vgai-play-chrome=hidden] .vgai-project-header-right>:not(.vgai-header-telemetry){transform:translateY(calc(-100% - 12px));opacity:0;visibility:hidden;pointer-events:none;transition:transform var(--vgai-duration-base) var(--vgai-ease-standard),opacity var(--vgai-duration-base) var(--vgai-ease-standard) .1s,visibility 0s linear .28s}[data-vgai-play-chrome=hidden] .vgai-header-telemetry{position:fixed;top:12px;right:12px;z-index:var(--vgai-z-sticky);height:32px;padding:0 var(--vgai-space-2);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-lg);background:var(--vgai-surface-chrome);box-shadow:var(--vgai-shadow-sm);pointer-events:auto}[data-vgai-play-chrome=hidden][data-vgai-play-revealed] .vgai-project-header{margin-top:0;background:var(--vgai-surface-shell);border-bottom-color:var(--vgai-boundary-default);pointer-events:auto;transition:margin-top var(--vgai-duration-base) var(--vgai-ease-standard)}[data-vgai-play-chrome=hidden][data-vgai-play-revealed] .vgai-project-header-left,[data-vgai-play-chrome=hidden][data-vgai-play-revealed] .vgai-project-transport,[data-vgai-play-chrome=hidden][data-vgai-play-revealed] .vgai-project-header-right>:not(.vgai-header-telemetry){transform:none;opacity:1;visibility:visible;pointer-events:auto;transition:transform var(--vgai-duration-base) var(--vgai-ease-standard),opacity var(--vgai-duration-fast) var(--vgai-ease-standard),visibility 0s}[data-vgai-play-chrome=hidden][data-vgai-play-revealed] .vgai-header-telemetry{position:static;height:auto;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}@media(prefers-reduced-motion:reduce){.vgai-project-header,[data-vgai-play-chrome=hidden] .vgai-project-header,[data-vgai-play-chrome=hidden] .vgai-project-header-left,[data-vgai-play-chrome=hidden] .vgai-project-transport,[data-vgai-play-chrome=hidden] .vgai-project-header-right>*{transition:none}}.vgai-divider.vgai-project-menu-rule{align-self:center;margin-inline:var(--vgai-space-4);background:var(--vgai-boundary-divider)}.vgai-workspace-tabs{display:flex;background:var(--vgai-surface-chrome);height:22px;align-items:center;align-self:flex-start;margin-top:var(--vgai-space-1);flex:1 1 0;min-width:0;overflow-x:auto;overflow-y:hidden;box-shadow:var(--vgai-widget-emboss-shadow)}.vgai-project-header .vgai-project-header-left .vgai-workspace-tabs{scrollbar-width:none}.vgai-project-header .vgai-project-header-left .vgai-workspace-tabs::-webkit-scrollbar{display:none}.vgai-workspace-tab{appearance:none;border:0;margin:0;flex:0 0 auto;height:var(--vgai-control-compact-height);padding:0 var(--vgai-space-5);background:transparent;color:var(--vgai-content-dim);font:inherit;font-size:var(--vgai-font-base);white-space:nowrap;border-radius:var(--vgai-radius-sm) var(--vgai-radius-sm) 0 0;cursor:default}.vgai-workspace-tab:hover{color:var(--vgai-content-primary)}.vgai-workspace-tab[aria-selected=true]{background:var(--vgai-surface-panel);color:var(--vgai-content-primary)}.vgai-worktree-switcher{display:flex;min-width:0;flex:0 0 auto;margin-left:var(--vgai-space-2);align-items:center}.vgai-menu-trigger.vgai-worktree-trigger{position:relative;display:inline-flex;width:14px;min-width:0;align-items:center;justify-content:center;padding:0;gap:var(--vgai-space-2)}.vgai-worktree-dirty-dot{width:6px;height:6px;flex:0 0 auto;border-radius:var(--vgai-radius-full);background:var(--vgai-warn)}.vgai-worktree-trigger .vgai-worktree-dirty-dot{position:absolute;top:2px;right:1px;width:5px;height:5px}.vgai-worktree-menu{width:min(520px,calc(100vw - 24px));padding:var(--vgai-space-2)}.vgai-worktree-version-control{max-height:min(460px,48vh);overflow:auto;padding:0 var(--vgai-space-3) var(--vgai-space-2)}.vgai-worktree-version-control details>summary{padding-block:var(--vgai-space-2)}.vgai-worktree-search{display:flex;align-items:center;gap:var(--vgai-space-2);padding:var(--vgai-space-1) var(--vgai-space-1) var(--vgai-space-2)}.vgai-worktree-search .vgai-input{min-width:0;flex:1}.vgai-worktree-results{max-height:min(420px,60vh);overflow:auto}.vgai-worktree-section-label{padding:var(--vgai-space-2) var(--vgai-space-4) var(--vgai-space-1);font-weight:600;letter-spacing:.02em;text-transform:uppercase}.vgai-worktree-menu-item[data-current]:disabled{color:var(--vgai-content-primary)}.vgai-worktree-menu-item[data-current]:disabled:hover{background:var(--vgai-selection-bg)}.vgai-worktree-menu-item,.vgai-worktree-create-command{min-width:0;min-height:46px;align-items:center;gap:var(--vgai-space-2);padding-block:var(--vgai-space-2);padding-inline:var(--vgai-space-3);white-space:normal}.vgai-worktree-row-shell{display:flex;min-width:0;align-items:center}.vgai-worktree-row-shell>.vgai-worktree-menu-item{min-width:0;flex:1}.vgai-worktree-row-icon{display:inline-flex;width:18px;flex:0 0 18px;align-items:center;justify-content:center;color:var(--vgai-content-muted)}.vgai-worktree-row-copy{display:grid;min-width:0;flex:1;gap:1px}.vgai-worktree-row-title,.vgai-worktree-row-detail{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vgai-worktree-presence{display:inline-flex;flex:0 0 auto;align-items:center;padding-left:5px}.vgai-worktree-avatar{--vgai-participant-color: var(--vgai-content-muted);display:inline-flex;width:22px;height:22px;margin-left:-5px;align-items:center;justify-content:center;border:2px solid var(--vgai-surface-overlay);border-radius:var(--vgai-radius-full);background:var(--vgai-participant-color);color:#fff;font-size:8px;font-weight:700;letter-spacing:-.01em}.vgai-worktree-avatar[data-kind=agent]{border-radius:7px}.vgai-worktree-avatar[data-status=needs-input]{box-shadow:0 0 0 2px var(--vgai-warn)}.vgai-worktree-avatar[data-status=idle],.vgai-worktree-avatar[data-status=done]{opacity:.62}.vgai-worktree-avatar-more{--vgai-participant-color: var(--vgai-surface-raised);color:var(--vgai-content-muted)}.vgai-worktree-row-title{display:flex;align-items:center;gap:var(--vgai-space-2);font-size:var(--vgai-font-base)}.vgai-worktree-row-detail{color:var(--vgai-content-dim);font-size:var(--vgai-font-xs)}.vgai-worktree-empty,.vgai-worktree-error,.vgai-worktree-more{padding:var(--vgai-space-3) var(--vgai-space-4)}.vgai-worktree-delegate{display:grid;gap:var(--vgai-space-2);padding:var(--vgai-space-3)}.vgai-worktree-delegate textarea{min-height:72px;resize:vertical}.vgai-worktree-delegate label{display:grid;grid-template-columns:70px minmax(0,1fr);align-items:center;gap:var(--vgai-space-2);color:var(--vgai-content-dim);font-size:var(--vgai-font-xs)}.vgai-worktree-delegate select{min-width:0}.vgai-worktree-delegate-open{width:100%;justify-content:center}.vgai-collaboration-header{display:flex;min-width:0;align-items:center}.vgai-collaboration-header-trigger{display:inline-flex;flex:0 0 auto;align-items:center;gap:var(--vgai-space-2)}.vgai-collaboration-header-count{min-width:1ch;color:var(--vgai-content-dim);font-variant-numeric:tabular-nums;text-align:center}.vgai-collaboration-header-menu{width:min(360px,calc(100vw - 24px));padding:var(--vgai-space-2)}.vgai-session-access-control{padding:var(--vgai-space-2)}.vgai-collaboration-header-label{padding:var(--vgai-space-2) var(--vgai-space-3);font-weight:600;text-transform:uppercase}.vgai-collaboration-header-person{display:flex;min-width:0;align-items:center;gap:var(--vgai-space-2);padding-block:var(--vgai-space-2)}.vgai-collaboration-header-elsewhere{padding-inline:var(--vgai-space-3)}.vgai-collaboration-header-dot{width:9px;height:9px;flex:0 0 auto;border-radius:var(--vgai-radius-full)}.vgai-collaboration-header-copy{display:grid;min-width:0;flex:1}.vgai-collaboration-header-copy>span{overflow:hidden;color:var(--vgai-content-dim);font-size:var(--vgai-font-xs);text-overflow:ellipsis;white-space:nowrap}.vgai-collaboration-header-actions{display:flex;flex-wrap:wrap;gap:var(--vgai-space-2);padding:var(--vgai-space-2)}.vgai-shell,.vgai-splash,.vgai-account{--vgai-shell-radius: 12px;--vgai-shell-radius-sm: 8px;--vgai-shell-font-xs: 11px;--vgai-shell-font-sm: 12px;--vgai-shell-font-base: 13px;--vgai-shell-font-md: 14px;--vgai-shell-font-lg: 16px;--vgai-shell-font-xl: 20px;--vgai-shell-font-display: 36px;--vgai-shell-line: 1.55;--vgai-shell-card-highlight: inset 0 1px 0 rgb(255 255 255 / 5%);--vgai-shell-ease: cubic-bezier(.2, .85, .25, 1)}.vgai-shell{position:absolute;inset:0;overflow:auto;color:var(--vgai-content-primary);background:color-mix(in srgb,var(--vgai-surface-shell) 42%,black);font-size:var(--vgai-shell-font-base);line-height:var(--vgai-shell-line);pointer-events:auto;-webkit-font-smoothing:antialiased}.vgai-shell:before{content:"";position:fixed;inset:0;background:radial-gradient(1150px 640px at 50% -16%,color-mix(in srgb,var(--vgai-accent) 22%,transparent),transparent 62%),radial-gradient(720px 420px at 50% -4%,rgb(255 255 255 / 5%),transparent 58%),radial-gradient(900px 560px at -12% 112%,color-mix(in srgb,var(--vgai-accent) 5%,transparent),transparent 55%),radial-gradient(135% 105% at 50% 40%,transparent 50%,rgb(0 0 0 / 50%) 100%);pointer-events:none}.vgai-shell:after{content:"";position:fixed;inset:0;background-image:radial-gradient(rgb(255 255 255 / 5%) 1px,transparent 1px);background-size:26px 26px;mask-image:linear-gradient(180deg,rgb(0 0 0 / 65%),transparent 52%);pointer-events:none}.vgai-shell-container{position:relative;z-index:var(--vgai-z-base);width:100%;max-width:1120px;margin:0 auto;padding:0 40px 96px;box-sizing:border-box}.vgai-shell-header{display:flex;align-items:center;justify-content:space-between;gap:var(--vgai-space-8);min-height:72px;margin-bottom:40px}.vgai-shell .vgai-btn.vgai-shell-brand{display:inline-flex;height:auto;align-items:center;gap:var(--vgai-space-5);padding:var(--vgai-space-2) var(--vgai-space-3);margin-left:-6px}.vgai-shell-brand-mark{display:grid;place-items:center;width:30px;height:30px}.vgai-shell-wordmark{color:var(--vgai-content-primary);font-size:15px;font-weight:var(--vgai-font-weight-bold);letter-spacing:.22em}.vgai-shell-header-actions{display:flex;align-items:center;gap:var(--vgai-space-4)}.vgai-shell .vgai-btn.vgai-shell-account-pill{height:32px;padding:0 14px;border-radius:var(--vgai-radius-full);font-size:var(--vgai-shell-font-sm)}.vgai-shell-hero{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--vgai-space-10);margin-bottom:32px;flex-wrap:wrap}.vgai-shell-hero-heading{margin:0;font-size:var(--vgai-shell-font-display);font-weight:650;letter-spacing:-.03em;line-height:var(--vgai-leading-snug);color:#fff;text-shadow:0 2px 24px color-mix(in srgb,var(--vgai-accent) 24%,transparent)}.vgai-shell-hero-actions{display:flex;align-items:center;gap:var(--vgai-space-5)}.vgai-shell .vgai-chip,.vgai-account .vgai-chip{display:inline-flex;width:fit-content;align-items:center;gap:var(--vgai-space-3);height:22px;padding:0 var(--vgai-space-5);color:var(--vgai-content-muted);background:var(--vgai-surface-inset);border:1px solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-full);font-family:var(--vgai-font-mono);font-size:var(--vgai-shell-font-xs);letter-spacing:.02em;white-space:nowrap;box-sizing:border-box}.vgai-shell .vgai-chip[data-variant=tag],.vgai-account .vgai-chip[data-variant=tag]{padding:0 7px;border-radius:var(--vgai-radius-sm)}.vgai-shell .vgai-chip[data-tone=accent],.vgai-account .vgai-chip[data-tone=accent]{color:var(--vgai-accent);background:var(--vgai-accent-muted);border-color:transparent}.vgai-shell .vgai-chip[data-tone=success],.vgai-account .vgai-chip[data-tone=success]{color:var(--vgai-success);background:var(--vgai-success-muted);border-color:transparent}.vgai-shell .vgai-chip[data-tone=warn],.vgai-account .vgai-chip[data-tone=warn]{color:var(--vgai-warn);background:var(--vgai-warn-muted);border-color:transparent}.vgai-shell .vgai-btn.vgai-shell-cta{height:32px;padding:0 14px;border-radius:var(--vgai-shell-radius-sm);font-size:var(--vgai-shell-font-base);font-weight:var(--vgai-font-weight-semibold)}.vgai-shell .vgai-btn[data-variant=primary],.vgai-account .vgai-btn[data-variant=primary]{color:#fff;background:linear-gradient(180deg,#ffffff24,#fff0 52%),color-mix(in srgb,var(--vgai-accent) 76%,#1d4ed8);border:1px solid color-mix(in srgb,var(--vgai-accent) 74%,white 8%);box-shadow:inset 0 1px #ffffff38,0 1px 2px #0006,0 6px 16px #00000052}.vgai-shell .vgai-btn[data-variant=primary]:hover:not(:disabled),.vgai-account .vgai-btn[data-variant=primary]:hover:not(:disabled){filter:brightness(1.09);box-shadow:inset 0 1px #ffffff52,0 2px 4px #0000006b,0 8px 22px #0000006b}.vgai-shell .vgai-btn.vgai-shell-cta-hero{height:38px;padding:0 18px;gap:var(--vgai-space-4);border-radius:9px;font-size:var(--vgai-font-lg)}.vgai-shell .vgai-btn.vgai-shell-cta-hero[data-variant=primary]{color:#fff;background:linear-gradient(180deg,#ffffff24,#fff0 52%),color-mix(in srgb,var(--vgai-accent) 76%,#1d4ed8);border:1px solid color-mix(in srgb,var(--vgai-accent) 74%,white 8%);box-shadow:inset 0 1px #ffffff38,0 1px 2px #00000073,0 8px 20px #0006}.vgai-shell .vgai-btn.vgai-shell-cta-hero[data-variant=primary]:hover:not(:disabled){filter:brightness(1.09);box-shadow:inset 0 1px #ffffff52,0 2px 4px #00000073,0 12px 28px #0000007f}.vgai-shell .vgai-btn:focus-visible,.vgai-shell .vgai-input:focus-visible,.vgai-shell .vgai-select:focus-visible,.vgai-account .vgai-btn:focus-visible,.vgai-account .vgai-input:focus-visible,.vgai-account .vgai-select:focus-visible{outline:var(--vgai-focus-ring);outline-offset:2px}.vgai-shell .vgai-btn.vgai-shell-cta[data-variant=ghost]{color:var(--vgai-content-muted)}.vgai-shell .vgai-btn.vgai-shell-cta[data-variant=ghost]:hover:not(:disabled){color:var(--vgai-content-primary)}.vgai-shell-card{position:relative;padding:28px;background:linear-gradient(180deg,#ffffff0d,#fff0 44%),color-mix(in srgb,white 3%,var(--vgai-surface-panel));border:1px solid rgb(255 255 255 / 9%);border-radius:var(--vgai-shell-radius);box-shadow:inset 0 1px #ffffff14,0 1px 2px #00000073,0 20px 48px #00000075;box-sizing:border-box}.vgai-shell-section{margin-bottom:36px}.vgai-shell-section-label{display:flex;align-items:center;gap:var(--vgai-space-4);margin-bottom:14px;color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-xs);font-weight:var(--vgai-font-weight-semibold);letter-spacing:.09em;text-transform:uppercase}.vgai-shell-section-label:after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--vgai-boundary-default),transparent)}.vgai-shell-count{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;color:var(--vgai-content-muted);background:var(--vgai-surface-raised);border-radius:var(--vgai-radius-full);font-size:var(--vgai-font-sm);font-weight:var(--vgai-font-weight-semibold);letter-spacing:0;box-sizing:border-box}.vgai-shell-empty{display:flex;flex-direction:column;align-items:center;gap:var(--vgai-space-4);padding:72px 32px 64px;text-align:center}.vgai-shell-empty-mark{position:relative;display:grid;place-items:center;padding:18px}.vgai-shell-empty-mark:before{content:"";position:absolute;inset:-46px;background:radial-gradient(closest-side,color-mix(in srgb,var(--vgai-accent) 22%,transparent),transparent 74%);border-radius:var(--vgai-radius-full);pointer-events:none}.vgai-shell-empty-mark:after{content:"";position:absolute;bottom:-10px;width:96px;height:18px;background:radial-gradient(closest-side,rgb(0 0 0 / 55%),transparent 75%);border-radius:var(--vgai-radius-full);pointer-events:none}.vgai-shell-empty-title{margin:14px 0 0;color:var(--vgai-content-primary);font-size:22px;font-weight:650;letter-spacing:-.02em}.vgai-shell-empty-actions{display:flex;gap:var(--vgai-space-5);margin-top:18px}.vgai-shell-footer{display:flex;justify-content:flex-end;margin-top:72px}.vgai-shell-footer .vgai-chip{height:20px;padding:0 7px;color:color-mix(in srgb,var(--vgai-content-dim) 72%,transparent);background:#ffffff08;border-color:#ffffff12;font-size:var(--vgai-font-sm)}.vgai-shell-notice{display:flex;align-items:center;flex-wrap:wrap;gap:var(--vgai-space-6);padding:var(--vgai-space-6) var(--vgai-space-8);margin-bottom:var(--vgai-space-12);color:var(--vgai-content-muted);background:var(--vgai-accent-muted);border:1px solid color-mix(in srgb,var(--vgai-accent) 18%,transparent);border-radius:var(--vgai-shell-radius-sm);font-size:var(--vgai-shell-font-sm)}.vgai-shell-notice-icon{color:var(--vgai-accent)}.vgai-shell .vgai-error-card{display:flex;gap:var(--vgai-space-8);align-items:flex-start;padding:22px 24px;margin-bottom:28px;background:linear-gradient(180deg,color-mix(in srgb,var(--vgai-danger) 7%,rgb(255 255 255 / 3%)),#fff0 46%),color-mix(in srgb,white 3%,var(--vgai-surface-panel));border:1px solid color-mix(in srgb,var(--vgai-danger) 28%,rgb(255 255 255 / 8%));border-radius:var(--vgai-shell-radius);box-shadow:inset 0 1px color-mix(in srgb,var(--vgai-danger) 20%,rgb(255 255 255 / 8%)),0 1px 2px #00000073,0 20px 48px #00000075}.vgai-shell[data-testid=project-detection-error] .vgai-error-card{max-width:880px;margin-inline:auto}.vgai-shell .vgai-shell-brand-static{display:inline-flex;align-items:center;gap:var(--vgai-space-5)}.vgai-shell[data-testid=project-detection-error] .vgai-shell-notice,.vgai-shell[data-testid=project-detection-error] .vgai-startup-error-actions{max-width:880px;margin-inline:auto}.vgai-shell[data-testid=project-detection-error]:before{background:radial-gradient(1150px 640px at 50% -16%,color-mix(in srgb,var(--vgai-danger) 15%,transparent),transparent 62%),radial-gradient(720px 420px at 50% -4%,rgb(255 255 255 / 4%),transparent 58%),radial-gradient(900px 560px at -12% 112%,color-mix(in srgb,var(--vgai-danger) 4%,transparent),transparent 55%),radial-gradient(135% 105% at 50% 40%,transparent 50%,rgb(0 0 0 / 52%) 100%)}.vgai-shell .vgai-error-card-icon{display:grid;place-items:center;flex:none;width:34px;height:34px;margin-top:var(--vgai-space-1);color:var(--vgai-danger);background:linear-gradient(180deg,rgb(255 255 255 / 8%),transparent 55%),var(--vgai-danger-muted);border:1px solid color-mix(in srgb,var(--vgai-danger) 34%,transparent);border-radius:var(--vgai-shell-radius-sm);box-shadow:0 0 18px color-mix(in srgb,var(--vgai-danger) 22%,transparent);font-size:var(--vgai-shell-font-base);box-sizing:border-box}.vgai-shell .vgai-error-card-body{flex:1;min-width:0}.vgai-shell .vgai-error-card-title{margin:0 0 var(--vgai-space-2);color:var(--vgai-content-primary);font-size:15px;font-weight:var(--vgai-font-weight-semibold);letter-spacing:-.01em;line-height:var(--vgai-leading-normal)}.vgai-shell .vgai-error-card-guidance{margin:0 0 var(--vgai-space-4);color:var(--vgai-content-muted);font-size:var(--vgai-shell-font-base)}.vgai-shell .vgai-error-card-message{max-height:176px;padding:var(--vgai-space-5) var(--vgai-space-6);overflow:auto;color:var(--vgai-danger);background:color-mix(in srgb,black 30%,var(--vgai-surface-inset));border:1px solid var(--vgai-boundary-default);border-radius:var(--vgai-shell-radius-sm);font-family:var(--vgai-font-mono);font-size:var(--vgai-shell-font-sm);line-height:1.6;overflow-wrap:anywhere;white-space:pre-wrap}.vgai-shell .vgai-error-card-recovery-label{margin:14px 0 6px;color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-xs);font-weight:var(--vgai-font-weight-semibold);letter-spacing:.09em;text-transform:uppercase}.vgai-shell .vgai-error-card-command{display:flex;align-items:center;gap:var(--vgai-space-4);padding:8px 8px 8px 14px;background:var(--vgai-surface-inset);border:1px solid var(--vgai-boundary-default);border-radius:var(--vgai-shell-radius-sm)}.vgai-shell .vgai-error-card-command>code{flex:1;color:var(--vgai-content-primary);font-family:var(--vgai-font-mono);font-size:var(--vgai-shell-font-sm);overflow-wrap:anywhere}.vgai-shell .vgai-error-card-actions{display:flex;gap:var(--vgai-space-5);margin-top:14px}.vgai-splash{position:absolute;inset:0;display:grid;place-items:center;background:color-mix(in srgb,var(--vgai-surface-shell) 42%,black);color:var(--vgai-content-primary);pointer-events:auto;overflow:hidden}.vgai-splash:before{content:"";position:absolute;inset:0;background:radial-gradient(1000px 640px at 50% 34%,color-mix(in srgb,var(--vgai-accent) 18%,transparent),transparent 62%),radial-gradient(520px 340px at 50% 40%,rgb(255 255 255 / 5%),transparent 60%),radial-gradient(135% 105% at 50% 45%,transparent 48%,rgb(0 0 0 / 55%) 100%);pointer-events:none}.vgai-splash:after{content:"";position:absolute;inset:0;background-image:radial-gradient(rgb(255 255 255 / 4%) 1px,transparent 1px);background-size:26px 26px;mask-image:radial-gradient(640px 420px at 50% 40%,rgb(0 0 0 / 80%),transparent 78%);pointer-events:none}.vgai-splash-stack{position:relative;display:flex;flex-direction:column;align-items:center;gap:var(--vgai-space-8);min-width:260px;animation:vgai-shell-rise .6s var(--vgai-shell-var(--vgai-ease-standard)) both}.vgai-splash-logo{position:relative;display:grid;place-items:center;width:72px;height:72px;margin-bottom:var(--vgai-space-3)}.vgai-splash-logo:before{content:"";position:absolute;inset:-42px;background:radial-gradient(closest-side,color-mix(in srgb,var(--vgai-accent) 24%,transparent),transparent 74%);border-radius:var(--vgai-radius-full)}.vgai-splash-logo:after{content:"";position:absolute;bottom:-12px;width:84px;height:16px;background:radial-gradient(closest-side,rgb(0 0 0 / 55%),transparent 75%);border-radius:var(--vgai-radius-full)}.vgai-splash-title{color:#ffffffe0;font-size:var(--vgai-font-xl);font-weight:var(--vgai-font-weight-semibold);letter-spacing:.3em;text-indent:.3em;text-transform:uppercase;text-shadow:0 1px 18px color-mix(in srgb,var(--vgai-accent) 30%,transparent)}.vgai-splash-progress{position:relative;width:232px;height:3px;margin-top:var(--vgai-space-3);overflow:hidden;background:color-mix(in srgb,var(--vgai-accent) 14%,rgb(255 255 255 / 5%));border-radius:var(--vgai-radius-full);box-shadow:0 0 18px color-mix(in srgb,var(--vgai-accent) 38%,transparent)}.vgai-splash-progress:after{content:"";position:absolute;inset:0;width:52%;background:linear-gradient(90deg,transparent,color-mix(in srgb,var(--vgai-accent) 80%,white),transparent);border-radius:inherit;animation:vgai-splash-sweep 1.4s ease-in-out infinite}.vgai-splash-status{color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-sm);letter-spacing:.01em}.vgai-splash-note{max-width:42ch;color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-xs, var(--vgai-shell-font-sm));line-height:var(--vgai-leading-relaxed);text-align:center;opacity:.8}@keyframes vgai-splash-sweep{0%{transform:translate(-110%)}to{transform:translate(360%)}}.vgai-shell-rise{animation:vgai-shell-rise .48s var(--vgai-shell-var(--vgai-ease-standard)) both}.vgai-shell-rise[data-rise="2"]{animation-delay:60ms}.vgai-shell-rise[data-rise="3"]{animation-delay:.12s}.vgai-shell-rise[data-rise="4"]{animation-delay:.18s}@keyframes vgai-shell-rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.vgai-account{font-size:var(--vgai-shell-font-base);line-height:var(--vgai-shell-line)}.vgai-account{height:100%;padding:32px 40px 64px;overflow:auto;box-sizing:border-box;color:var(--vgai-content-primary);background:radial-gradient(1000px 560px at 50% -10%,color-mix(in srgb,var(--vgai-accent) 20%,transparent),transparent 62%),radial-gradient(640px 380px at 50% -2%,rgb(255 255 255 / 5%),transparent 58%),radial-gradient(135% 105% at 50% 40%,transparent 50%,rgb(0 0 0 / 45%) 100%),color-mix(in srgb,var(--vgai-surface-shell) 42%,black)}.vgai-shell .vgai-account{height:auto;padding:0;overflow:visible;background:none}[data-vgai-chrome=islands] .vgai-dock-document-content .vgai-account{--vgai-content-primary: var(--vgai-content-primary-on-bright);--vgai-content-muted: var(--vgai-content-muted-on-bright);--vgai-content-dim: var(--vgai-content-dim-on-bright);--vgai-content-text-shadow: var(--vgai-content-text-shadow-on-bright);--vgai-content-frost-bg: var(--vgai-content-frost-bg-on-bright);--vgai-text-1: var(--vgai-content-primary);--vgai-text-2: var(--vgai-content-muted);--vgai-text-3: var(--vgai-content-dim);text-shadow:var(--vgai-content-text-shadow, none);background:var(--vgai-glass-regular-bg, var(--vgai-surface-panel));backdrop-filter:var(--vgai-glass-regular-backdrop-filter, none);-webkit-backdrop-filter:var(--vgai-glass-regular-backdrop-filter, none)}[data-vgai-chrome=islands] .vgai-workspace-task-overlay .vgai-dock-document-content .vgai-account{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none}[data-vgai-chrome=islands] .vgai-dock-document-content .vgai-account .vgai-account-card{background:color-mix(in srgb,currentColor 5%,transparent);border-color:color-mix(in srgb,currentColor 18%,transparent);box-shadow:none}.vgai-account-stack{max-width:720px;margin:0 auto;display:flex;flex-direction:column;gap:var(--vgai-space-10)}.vgai-account-identity{display:flex;align-items:center;gap:var(--vgai-space-8);padding:var(--vgai-space-3) var(--vgai-space-1) var(--vgai-space-5);margin-bottom:var(--vgai-space-3)}.vgai-account-avatar{display:grid;place-items:center;flex:none;width:56px;height:56px;color:var(--vgai-content-on-accent);background:linear-gradient(180deg,rgb(255 255 255 / 24%),transparent 55%),linear-gradient(135deg,color-mix(in srgb,var(--vgai-accent) 88%,white),color-mix(in srgb,var(--vgai-accent) 68%,black));border-radius:var(--vgai-radius-full);font-size:22px;font-weight:var(--vgai-font-weight-semibold);letter-spacing:.02em;text-transform:uppercase;box-shadow:inset 0 1px #ffffff4d,0 0 0 1px #ffffff1a,0 6px 18px #00000073,0 0 32px color-mix(in srgb,var(--vgai-accent) 26%,transparent)}.vgai-account-identity-main{flex:1;min-width:0}.vgai-account-identity-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--vgai-space-2) var(--vgai-space-5)}.vgai-account-identity-email{margin:0;color:#fff;font-size:20px;font-weight:650;letter-spacing:-.02em;line-height:var(--vgai-leading-snug);overflow-wrap:anywhere;text-shadow:0 2px 18px color-mix(in srgb,var(--vgai-accent) 22%,transparent)}.vgai-account-plan-chips{display:inline-flex;align-items:center;flex-wrap:wrap;gap:var(--vgai-space-4)}.vgai-account-identity-note{margin:3px 0 0;color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-xs);font-weight:var(--vgai-font-weight-semibold);letter-spacing:.08em;text-transform:uppercase}.vgai-account .vgai-btn.vgai-account-signout{flex:none;color:var(--vgai-content-muted)}.vgai-account .vgai-btn.vgai-account-signout:hover:not(:disabled){color:var(--vgai-content-primary)}.vgai-account .vgai-chip{height:24px;padding:0 var(--vgai-space-5);font-weight:var(--vgai-font-weight-semibold);letter-spacing:0}.vgai-account-signin-stack{display:flex;flex-direction:column;align-items:center;gap:var(--vgai-space-10);max-width:720px;margin:0 auto;padding-top:var(--vgai-space-8)}.vgai-account-signin-stack>.vgai-provider-connections{width:100%;box-sizing:border-box}.vgai-account-signin-hero{display:flex;flex-direction:column;align-items:center;gap:var(--vgai-space-2);padding-top:var(--vgai-space-10);text-align:center}.vgai-account-signin-mark{position:relative;display:grid;place-items:center;padding:var(--vgai-space-8)}.vgai-account-signin-mark:before{content:"";position:absolute;inset:-54px;background:radial-gradient(closest-side,color-mix(in srgb,var(--vgai-accent) 28%,transparent),transparent 76%);border-radius:var(--vgai-radius-full);pointer-events:none}.vgai-account-signin-mark:after{content:"";position:absolute;bottom:-8px;width:84px;height:16px;background:radial-gradient(closest-side,rgb(0 0 0 / 55%),transparent 75%);border-radius:var(--vgai-radius-full);pointer-events:none}.vgai-account-signin-card{display:flex;flex-direction:column;gap:var(--vgai-space-8);width:min(400px,100%);padding:28px;box-sizing:border-box}.vgai-account-signin-title{margin:var(--vgai-space-5) 0 0;color:#fff;font-size:var(--vgai-font-heading);font-weight:650;letter-spacing:-.02em;line-height:var(--vgai-leading-snug);text-shadow:0 2px 24px color-mix(in srgb,var(--vgai-accent) 24%,transparent)}.vgai-account .vgai-btn[data-variant=primary]{color:#fff;background:linear-gradient(180deg,#ffffff24,#fff0 52%),color-mix(in srgb,var(--vgai-accent) 76%,#1d4ed8);border:1px solid color-mix(in srgb,var(--vgai-accent) 74%,white 8%);box-shadow:inset 0 1px #ffffff38,0 1px 2px #0006,0 6px 16px #00000052}.vgai-account .vgai-btn[data-variant=primary]:hover:not(:disabled){filter:brightness(1.09);box-shadow:inset 0 1px #ffffff52,0 2px 4px #0000006b,0 8px 22px #0000006b}.vgai-account-signin-card .vgai-btn[data-variant=primary]{width:100%;height:38px;border-radius:9px;font-size:var(--vgai-shell-font-base);font-weight:var(--vgai-font-weight-semibold)}.vgai-account-signin-points{display:flex;flex-direction:column;gap:var(--vgai-space-4);width:min(400px,100%);margin:0;padding:0 var(--vgai-space-2);list-style:none;color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-base);box-sizing:border-box}.vgai-account-signin-points li{display:flex;align-items:baseline;gap:var(--vgai-space-5)}.vgai-account-signin-points li:before{content:"✓";flex:none;color:var(--vgai-success);font-size:var(--vgai-shell-font-sm);font-weight:var(--vgai-font-weight-semibold)}.vgai-account .vgai-field{display:flex;flex-direction:column;gap:7px}.vgai-account .vgai-field-label{color:var(--vgai-content-muted);font-size:var(--vgai-shell-font-sm);font-weight:var(--vgai-font-weight-semibold)}.vgai-account .vgai-input,.vgai-account .vgai-select{height:34px;padding:0 var(--vgai-space-6);border-radius:var(--vgai-shell-radius-sm);font-size:var(--vgai-shell-font-base)}.vgai-account .vgai-select{padding-right:30px}.vgai-account-help{margin:0;color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-sm);line-height:var(--vgai-leading-relaxed)}.vgai-account-infostrip{display:flex;align-items:flex-start;gap:var(--vgai-space-4);padding:0 var(--vgai-space-1);color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-xs);line-height:var(--vgai-leading-relaxed);text-align:left}.vgai-account-infostrip-icon{flex:none;margin-top:var(--vgai-space-1);color:color-mix(in srgb,var(--vgai-accent) 70%,var(--vgai-content-dim))}.vgai-account-card{padding:var(--vgai-space-12);background:linear-gradient(180deg,#ffffff0d,#fff0 44%),color-mix(in srgb,white 3%,var(--vgai-surface-panel));border:1px solid rgb(255 255 255 / 9%);border-radius:var(--vgai-shell-radius);box-shadow:inset 0 1px #ffffff14,0 1px 2px #00000073,0 20px 48px #00000075;box-sizing:border-box}.vgai-account-card-title{margin:0 0 var(--vgai-space-2);color:var(--vgai-content-primary);font-size:var(--vgai-shell-font-md);font-weight:var(--vgai-font-weight-semibold);letter-spacing:-.005em}.vgai-account-card-sub{margin:0 0 var(--vgai-space-8);color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-sm);max-width:560px}.vgai-account-card-head{display:flex;align-items:center;justify-content:space-between;gap:var(--vgai-space-6)}.vgai-account-card-head .vgai-account-card-title{margin:0}.vgai-account-credit-figure{display:flex;align-items:baseline;gap:var(--vgai-space-4);margin:var(--vgai-space-5) 0 var(--vgai-space-6)}.vgai-account-credit-number{color:#fff;font-size:28px;font-weight:650;letter-spacing:-.02em;line-height:var(--vgai-leading-tight);font-variant-numeric:tabular-nums}.vgai-account-credit-unit{color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-sm)}.vgai-account .vgai-meter{position:relative;height:8px;margin:var(--vgai-space-1) 0 var(--vgai-space-5);overflow:hidden;background:#00000061;border-radius:var(--vgai-radius-full);box-shadow:inset 0 1px 2px #0000007f,inset 0 0 0 1px #ffffff0d;box-sizing:border-box}.vgai-account .vgai-meter-fill{position:absolute;inset:0 auto 0 0;background:linear-gradient(180deg,color-mix(in srgb,var(--vgai-accent) 78%,white),var(--vgai-accent));border-radius:inherit;box-shadow:0 0 12px color-mix(in srgb,var(--vgai-accent) 55%,transparent);transition:width var(--vgai-duration-slow) var(--vgai-shell-var(--vgai-ease-standard))}.vgai-account .vgai-meter-fill[data-part=reserved]{background:color-mix(in srgb,var(--vgai-accent) 38%,transparent);box-shadow:none}.vgai-account .vgai-meter[data-state=over] .vgai-meter-fill{background:linear-gradient(180deg,color-mix(in srgb,var(--vgai-danger) 80%,white),var(--vgai-danger));box-shadow:0 0 12px color-mix(in srgb,var(--vgai-danger) 55%,transparent)}.vgai-account-cycle-line{margin:0 0 var(--vgai-space-6);color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-sm);font-variant-numeric:tabular-nums}.vgai-account-cycle-over{color:var(--vgai-danger);font-weight:var(--vgai-font-weight-semibold)}.vgai-account-legend{display:flex;align-items:center;flex-wrap:wrap;gap:var(--vgai-space-3) var(--vgai-space-8)}.vgai-account-legend-item{display:inline-flex;align-items:center;gap:7px;color:var(--vgai-content-muted);font-size:var(--vgai-shell-font-sm);font-variant-numeric:tabular-nums}.vgai-account-legend-dot{flex:none;width:8px;height:8px;border-radius:var(--vgai-radius-full);box-sizing:border-box}.vgai-account-legend-item[data-part=used] .vgai-account-legend-dot{background:var(--vgai-accent)}.vgai-account-legend[data-state=over] .vgai-account-legend-item[data-part=used] .vgai-account-legend-dot{background:var(--vgai-danger)}.vgai-account-legend-item[data-part=reserved] .vgai-account-legend-dot{background:color-mix(in srgb,var(--vgai-accent) 38%,transparent)}.vgai-account-legend-item[data-part=purchased] .vgai-account-legend-dot{background:transparent;border:1px solid var(--vgai-boundary-strong)}.vgai-account-expiry{margin-top:var(--vgai-space-5)}.vgai-account-card-footer{display:flex;align-items:center;flex-wrap:wrap;gap:var(--vgai-space-4);margin-top:18px;padding-top:14px;border-top:1px solid rgb(255 255 255 / 7%)}.vgai-account .vgai-btn.vgai-account-quiet-danger{color:var(--vgai-content-dim)}.vgai-account .vgai-btn.vgai-account-quiet-danger:hover:not(:disabled){color:var(--vgai-danger);background:var(--vgai-danger-muted)}.vgai-account-providers-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--vgai-space-8)}.vgai-account-providers-header .vgai-status-dot{flex-shrink:0;white-space:nowrap}.vgai-account-provider-list{display:flex;flex-direction:column;margin-top:var(--vgai-space-2);border-top:1px solid rgb(255 255 255 / 7%)}.vgai-account-provider{display:flex;align-items:center;gap:var(--vgai-space-8);padding:14px 2px;border-top:1px solid rgb(255 255 255 / 7%)}.vgai-account-provider:first-child{border-top:0}.vgai-account-provider-monogram{display:grid;place-items:center;flex:none;width:38px;height:38px;color:var(--vgai-content-primary);background:linear-gradient(180deg,rgb(255 255 255 / 6%),transparent 60%),var(--vgai-surface-raised);border:1px solid var(--vgai-boundary-default);border-radius:10px;font-size:var(--vgai-shell-font-md);font-weight:var(--vgai-font-weight-semibold)}.vgai-account-provider[data-configured=true] .vgai-account-provider-monogram{color:var(--vgai-accent);border-color:#579eff59;background:linear-gradient(180deg,rgb(87 158 255 / 12%),transparent 70%),var(--vgai-surface-raised)}.vgai-account-provider-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--vgai-space-1)}.vgai-account-provider-name{display:flex;align-items:center;gap:var(--vgai-space-4);color:var(--vgai-content-primary);font-size:var(--vgai-shell-font-base);font-weight:var(--vgai-font-weight-semibold)}.vgai-account-provider-dot{flex:none;width:6px;height:6px;background:var(--vgai-success);border-radius:var(--vgai-radius-full)}.vgai-account-provider-key{color:var(--vgai-content-dim);font-family:var(--vgai-font-mono);font-size:var(--vgai-shell-font-xs)}.vgai-account-provider-source{color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-xs)}.vgai-account-provider-warning{color:var(--vgai-warn);font-size:var(--vgai-shell-font-xs)}.vgai-account-provider-actions{display:flex;align-items:center;gap:var(--vgai-space-4)}.vgai-account-provider-form{display:flex;flex-direction:column;gap:var(--vgai-space-6);width:min(360px,48%)}.vgai-account-provider-form .vgai-tool-actions,.vgai-account-provider-form-actions{display:flex;gap:var(--vgai-space-4)}.vgai-account .vgai-status-dot{display:inline-flex;align-items:center;gap:var(--vgai-space-3);color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-xs);font-weight:var(--vgai-font-weight-regular)}.vgai-account .vgai-status-dot:before{content:"";width:6px;height:6px;background:var(--vgai-content-dim);border-radius:var(--vgai-radius-full)}.vgai-account .vgai-status-dot[data-state=on]{color:var(--vgai-success)}.vgai-account .vgai-status-dot[data-state=on]:before{background:var(--vgai-success);box-shadow:0 0 6px var(--vgai-success)}.vgai-account-switch-row{display:flex;align-items:flex-start;gap:14px;padding:14px 0;border-top:1px solid rgb(255 255 255 / 7%);cursor:pointer}.vgai-account-switch-row:first-of-type{border-top:0}.vgai-account-switch-copy{display:flex;flex-direction:column;gap:var(--vgai-space-1)}.vgai-account-switch-copy>strong{color:var(--vgai-content-primary);font-size:var(--vgai-shell-font-base);font-weight:var(--vgai-font-weight-semibold)}.vgai-account-switch-copy>small{color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-sm)}.vgai-account-switch-row .vgai-checkbox{appearance:none;flex:none;width:34px;height:20px;margin:1px 0 0;background:#0000004d;border:1px solid rgb(255 255 255 / 14%);border-radius:var(--vgai-radius-full);cursor:pointer;position:relative;box-shadow:inset 0 1px 2px #00000059;transition:background .16s var(--vgai-ease-standard),border-color .16s var(--vgai-ease-standard)}.vgai-account-switch-row .vgai-checkbox:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;background:var(--vgai-content-muted);border-radius:var(--vgai-radius-full);transition:transform .16s var(--vgai-shell-var(--vgai-ease-standard)),background .16s var(--vgai-ease-standard)}.vgai-account-switch-row .vgai-checkbox:checked{background:linear-gradient(180deg,#fff3,#fff0 55%),var(--vgai-accent);border-color:color-mix(in srgb,var(--vgai-accent) 80%,white 10%);box-shadow:0 0 10px color-mix(in srgb,var(--vgai-accent) 35%,transparent)}.vgai-account-switch-row .vgai-checkbox:checked:after{transform:translate(14px);background:var(--vgai-content-on-accent)}.vgai-account-switch-row .vgai-checkbox:focus-visible{outline:var(--vgai-focus-ring);outline-offset:2px}.vgai-account-policy-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-left:48px;padding:var(--vgai-space-2) 0 var(--vgai-space-6)}.vgai-account-limit-field{max-width:320px;margin-left:48px;padding:4px 0 14px}.vgai-account-usage{display:flex;flex-direction:column;margin-top:var(--vgai-space-2)}.vgai-account-usage-row{display:flex;align-items:center;justify-content:space-between;gap:var(--vgai-space-8);padding:11px 2px;border-top:1px solid rgb(255 255 255 / 7%);font-size:var(--vgai-shell-font-base)}.vgai-account-usage-row:first-child{border-top:0}.vgai-account-usage-row>span{color:var(--vgai-content-muted)}.vgai-account-usage-row>strong{color:var(--vgai-content-primary);font-variant-numeric:tabular-nums;font-weight:var(--vgai-font-weight-semibold)}.vgai-account-input-suffix{display:flex;align-items:center;gap:var(--vgai-space-4)}.vgai-account-input-suffix .vgai-input{flex:1;min-width:0}.vgai-account-suffix{flex:none;color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-sm)}.vgai-account-status{display:flex;align-items:center;gap:var(--vgai-space-5);padding:var(--vgai-space-6) var(--vgai-space-8);color:var(--vgai-content-primary);background:var(--vgai-surface-chrome);backdrop-filter:var(--vgai-content-frost-filter, none);-webkit-backdrop-filter:var(--vgai-content-frost-filter, none);border:1px solid var(--vgai-boundary-default);border-radius:var(--vgai-shell-radius-sm);font-size:var(--vgai-shell-font-sm);animation:vgai-shell-rise var(--vgai-duration-slow) var(--vgai-shell-var(--vgai-ease-standard)) both}.vgai-account-status:before{content:"";flex:none;width:6px;height:6px;background:var(--vgai-accent);border-radius:var(--vgai-radius-full)}.vgai-account-device-code{display:flex;flex-direction:column;gap:var(--vgai-space-3);padding:14px 16px;background:var(--vgai-surface-inset);backdrop-filter:var(--vgai-content-frost-filter, none);-webkit-backdrop-filter:var(--vgai-content-frost-filter, none);border:1px solid var(--vgai-boundary-default);border-radius:var(--vgai-shell-radius-sm);text-align:center}.vgai-account-device-code>strong{color:var(--vgai-content-primary);font-family:var(--vgai-font-mono);font-size:22px;letter-spacing:.28em}.vgai-account-device-code>span{color:var(--vgai-content-dim);font-size:var(--vgai-shell-font-sm)}@media(max-width:860px){.vgai-shell-container{padding:0 20px 64px}.vgai-account-identity{flex-wrap:wrap}.vgai-account-policy-fields{grid-template-columns:minmax(0,1fr);margin-left:0}.vgai-account-limit-field{margin-left:0}.vgai-shell-hero{align-items:flex-start;flex-direction:column}}@media(prefers-reduced-motion:reduce){.vgai-shell-rise,.vgai-splash-stack,.vgai-account-status{animation:none}.vgai-splash-progress:after{animation:none;width:100%;background:var(--vgai-accent-muted)}.vgai-account .vgai-meter-fill,.vgai-account-switch-row .vgai-checkbox,.vgai-account-switch-row .vgai-checkbox:after{transition:none}}.vgai-asset-library-panel{width:100%;height:100%;min-width:0;min-height:0;overflow:hidden}.vgai-asset-library-navigator{display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;color:var(--vgai-text-1)}.vgai-asset-library-navigator__controls{display:flex;flex-direction:column;gap:5px;padding:var(--vgai-space-3);border-bottom:1px solid var(--vgai-structural-divider)}.vgai-asset-library-navigator__search-row{display:flex;gap:var(--vgai-space-2)}.vgai-asset-library-navigator__search-row>.vgai-input{width:100%;min-width:0;box-sizing:border-box}.vgai-asset-library-navigator__filters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--vgai-space-2)}.vgai-asset-library-navigator__filters .vgai-select{width:100%;min-width:0}.vgai-asset-library-navigator__status{color:var(--vgai-text-3);font-size:var(--vgai-font-sm)}.vgai-asset-import-jobs{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:var(--vgai-space-2);color:var(--vgai-text-2);font-size:var(--vgai-font-sm)}.vgai-asset-import-jobs>span{display:inline-flex;min-width:0;align-items:center;gap:var(--vgai-space-2);padding:var(--vgai-space-1) var(--vgai-space-2);border:1px solid var(--vgai-border-1);border-radius:var(--vgai-radius-sm, 3px);background:var(--vgai-bg-1)}.vgai-asset-import-jobs [data-status=failed],.vgai-asset-import-error{color:var(--vgai-danger, var(--vgai-text-1))}.vgai-asset-library-navigator__results{flex:1;min-height:0;overflow:auto;padding:var(--vgai-space-4);display:grid;grid-template-columns:repeat(auto-fill,minmax(66px,1fr));grid-auto-rows:min-content;align-content:start;gap:var(--vgai-space-3);background:var(--vgai-content-frost-bg, transparent);backdrop-filter:var(--vgai-content-frost-filter, none);-webkit-backdrop-filter:var(--vgai-content-frost-filter, none)}.vgai-asset-library-navigator__filter-drawer{min-height:0;max-height:58%;overflow:auto;border-bottom:1px solid var(--vgai-structural-divider)}.vgai-asset-library-navigator__filter-heading{position:sticky;z-index:1;top:0;display:flex;align-items:center;justify-content:space-between;padding:5px 7px;border-bottom:1px solid var(--vgai-structural-divider);background:var(--vgai-surface-sticky);backdrop-filter:var(--vgai-surface-sticky-backdrop-filter, none);-webkit-backdrop-filter:var(--vgai-surface-sticky-backdrop-filter, none);color:var(--vgai-text-2);font-size:var(--vgai-font-sm);font-weight:650}.vgai-asset-library-navigator__source-filters{display:block;overflow:visible;padding:var(--vgai-space-5);border:0}.vgai-asset-library-navigator__save-search{width:calc(100% - 12px);margin:var(--vgai-space-3) var(--vgai-space-3) 0}.vgai-asset-library-card{width:100%;min-width:0;padding:0;display:flex;flex-direction:column;align-items:center;gap:3px;border:0;border-radius:var(--vgai-radius-sm, 3px);background:transparent;color:var(--vgai-text-1);text-align:center;cursor:pointer;user-select:none}.vgai-asset-library-card .vgai-project-asset-entry__preview{width:100%;aspect-ratio:1 / 1;margin:0 auto;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--vgai-radius-sm, 3px);pointer-events:none;position:relative}.vgai-asset-library-card .vgai-project-asset-entry__preview>img{width:100%;height:100%;object-fit:contain}.vgai-asset-library-card__name,.vgai-asset-library-card__meta{width:100%;min-width:0;overflow:hidden;text-overflow:ellipsis}.vgai-asset-library-card__name{min-height:26px;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:var(--vgai-font-sm);line-height:13px;font-weight:550}.vgai-asset-library-card__meta{color:var(--vgai-text-3);font-size:var(--vgai-font-xs);white-space:nowrap}.vgai-asset-library-navigator__load-more{grid-column:1 / -1;justify-self:center}.vgai-project-assets-toolbar{flex:0 0 auto;border-bottom:1px solid var(--vgai-structural-divider)}.vgai-project-assets-toolbar__row{width:100%;min-width:0;min-height:28px;box-sizing:border-box;gap:var(--vgai-space-2);padding:var(--vgai-space-1) var(--vgai-space-2);border:0;background:transparent}.vgai-project-assets-toolbar__row+.vgai-project-assets-toolbar__row{border-top:1px solid var(--vgai-structural-divider)}.vgai-project-assets-toolbar__select{min-width:0;flex:1 1 64px;width:64px}.vgai-content-filter-chip{flex:0 0 auto;border:1px solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-full);padding-inline:8px;color:var(--vgai-text-2)}.vgai-content-filter-inline{flex:1 1 auto;min-width:0;overflow-x:auto;scrollbar-width:none}.vgai-component-thumbnail{width:100%;height:100%;object-fit:cover}.vgai-component-thumbnail-fallback{display:contents}.vgai-project-assets-toolbar__more{position:relative;flex:0 0 auto}.vgai-project-assets-toolbar__menu{position:absolute;z-index:var(--vgai-z-dropdown);top:calc(100% + 3px);right:0;min-width:170px}.vgai-project-assets-results{box-shadow:inset 0 1px 0 var(--vgai-border-1);background:var(--vgai-content-frost-bg, transparent);backdrop-filter:var(--vgai-content-frost-filter, none);-webkit-backdrop-filter:var(--vgai-content-frost-filter, none)}.vgai-content-result-section{display:contents}.vgai-content-section-heading{grid-column:1 / -1;display:flex;align-items:center;min-width:0;min-height:18px;gap:7px;margin-top:var(--vgai-space-1);color:var(--vgai-text-3);font-size:var(--vgai-font-xs);font-weight:650;letter-spacing:.08em;line-height:var(--vgai-leading-tight);text-transform:uppercase}.vgai-content-section-heading:after{content:"";min-width:8px;flex:1 1 auto;border-top:1px solid var(--vgai-structural-divider)}.vgai-content-section-heading[data-level=section]{min-height:22px;margin-top:var(--vgai-space-3);color:var(--vgai-text-2);font-size:var(--vgai-font-sm)}.vgai-content-section-heading[data-level=category]{padding-inline-start:2px}.vgai-project-asset-entry{box-sizing:border-box;border:0;background:transparent}.vgai-project-asset-entry:hover{background:transparent}.vgai-project-asset-entry[data-selected=true]{background:var(--vgai-selection-bg);box-shadow:none}.vgai-project-asset-entry__preview{box-sizing:border-box;border:1px solid var(--vgai-border-1);background:linear-gradient(45deg,rgb(255 255 255 / 2%) 25%,transparent 25%) 0 0 / 12px 12px,linear-gradient(-45deg,rgb(255 255 255 / 2%) 25%,transparent 25%) 0 6px / 12px 12px,var(--vgai-bg-inset);transition:border-color 90ms var(--vgai-ease-standard),box-shadow 90ms var(--vgai-ease-standard)}.vgai-project-asset-entry:hover .vgai-project-asset-entry__preview{border-color:var(--vgai-boundary-strong)}.vgai-project-asset-entry[data-selected=true] .vgai-project-asset-entry__preview{border-color:var(--vgai-border-1)}.vgai-project-asset-entry__kind{position:absolute;right:4px;bottom:4px;width:18px;height:18px;display:grid;place-items:center;border:1px solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-sm);background:var(--vgai-surface-overlay);box-shadow:var(--vgai-shadow-sm)}.vgai-project-asset-entry[data-view=list]{border-color:transparent;background:transparent}.vgai-project-asset-entry[data-view=list] .vgai-project-asset-entry__preview{border:0;background:transparent}.vgai-folder-preview{position:relative;width:100%;height:100%}.vgai-folder-preview__grid{position:absolute;inset:0;display:grid;gap:var(--vgai-space-1);animation:vgai-folder-preview-fade .12s var(--vgai-ease-out)}.vgai-folder-preview__grid[data-count="1"]{grid-template:1fr / 1fr}.vgai-folder-preview__grid[data-count="2"]{grid-template:1fr / 1fr 1fr}.vgai-folder-preview__grid[data-count="3"],.vgai-folder-preview__grid[data-count="4"]{grid-template:1fr 1fr / 1fr 1fr}.vgai-folder-preview__grid[data-count="3"]>:first-child{grid-row:span 2}.vgai-folder-preview__cell{position:relative;display:flex;min-width:0;min-height:0;align-items:center;justify-content:center;overflow:hidden;background:var(--vgai-bg-inset)}.vgai-folder-preview__cell img{width:100%;height:100%;object-fit:cover}.vgai-folder-preview__cell img[data-fit=contain]{object-fit:contain}.vgai-folder-preview__chip,.vgai-folder-preview__count{position:absolute;bottom:3px;display:inline-flex;align-items:center;padding:2px 5px;border-radius:var(--vgai-radius-full);background:color-mix(in srgb,var(--vgai-bg-0) 82%,transparent);color:var(--vgai-text-2);font-size:var(--vgai-font-xs);line-height:var(--vgai-leading-tight);pointer-events:none;animation:vgai-folder-preview-fade .12s var(--vgai-ease-out)}.vgai-folder-preview__chip{left:3px;padding:var(--vgai-space-1) var(--vgai-space-2);font-size:var(--vgai-font-sm)}.vgai-folder-preview__count{right:3px;font-variant-numeric:tabular-nums}.vgai-folder-preview__fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;animation:vgai-folder-preview-fade .12s var(--vgai-ease-out)}.vgai-folder-preview__empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--vgai-text-3);animation:vgai-folder-preview-fade .12s var(--vgai-ease-out)}.vgai-folder-preview__empty-glyph{font-size:17px;opacity:.7}.vgai-folder-preview__empty-caption{font-size:var(--vgai-font-xs);letter-spacing:.05em;text-transform:uppercase}@keyframes vgai-folder-preview-fade{0%{opacity:0}}.vgai-asset-editor button:focus-visible,.vgai-asset-browser button:focus-visible,.vgai-asset-editor input:focus-visible{outline:0;box-shadow:0 0 0 2px var(--vgai-accent)}.vgai-asset-card__preview{position:relative;width:100%;aspect-ratio:4 / 3;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--vgai-radius-sm, 3px);box-shadow:inset 0 0 0 1px var(--vgai-border-1)}.vgai-asset-card__fallback{position:absolute;right:4px;bottom:4px;padding:var(--vgai-space-1) var(--vgai-space-2);border-radius:var(--vgai-radius-sm);background:color-mix(in srgb,var(--vgai-bg-0) 88%,transparent);color:var(--vgai-text-2);font-size:var(--vgai-font-xs)}.vgai-asset-card__preview img{width:100%;height:100%;object-fit:contain}.vgai-asset-card__name{margin-top:7px;min-height:34px;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:var(--vgai-font-md);line-height:17px;font-weight:550;min-width:0;overflow-wrap:anywhere;word-break:break-word}.vgai-asset-card__meta,.vgai-asset-card__badges{display:flex;gap:5px;align-items:center;margin-top:var(--vgai-space-2);color:var(--vgai-text-3);font-size:var(--vgai-font-sm)}.vgai-asset-badge{padding:1px 5px;border-radius:var(--vgai-radius-full);background:var(--vgai-bg-3);color:var(--vgai-text-2);font-size:var(--vgai-font-sm);white-space:nowrap}.vgai-asset-facet-title{margin:12px 0 5px;color:var(--vgai-text-3);font-size:var(--vgai-font-sm);font-weight:700;letter-spacing:.06em;text-transform:uppercase}.vgai-asset-facet-check{display:flex;align-items:center;gap:var(--vgai-space-3);min-height:28px;color:var(--vgai-text-2);font-size:var(--vgai-font-base)}.vgai-asset-facet-check .vgai-select{min-width:0;flex:1}.vgai-asset-context-menu{position:fixed;min-width:190px}.vgai-asset-context-menu .vgai-menu-item{min-height:var(--vgai-control-comfortable-height);justify-content:space-between;gap:var(--vgai-space-6)}.vgai-asset-context-menu kbd{color:var(--vgai-text-3);font:inherit}.vgai-asset-editor{width:100%;height:100%;min-width:0;min-height:0;display:flex;flex-direction:column;position:relative}.vgai-asset-editor__toolbar{min-height:40px;display:flex;align-items:center;gap:7px;padding:var(--vgai-space-3) var(--vgai-space-5);border-bottom:1px solid var(--vgai-structural-divider)}.vgai-asset-editor__commands{flex:1;display:flex;flex-wrap:wrap;align-items:center;gap:5px}.vgai-asset-editor__toolbar button,.vgai-asset-editor__toolbar select{min-height:26px;border:1px solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-sm);background:var(--vgai-bg-3);color:var(--vgai-text-1)}.vgai-asset-editor__viewport{flex:1;min-width:0;min-height:0;overflow:auto;position:relative}.vgai-asset-editor__viewport--fill{overflow:hidden}.vgai-asset-transparency-well{background-color:var(--vgai-bg-inset);background-image:linear-gradient(45deg,#2a2a2a 25%,transparent 25%,transparent 75%,#2a2a2a 75%),linear-gradient(45deg,#2a2a2a 25%,transparent 25%,transparent 75%,#2a2a2a 75%);background-position:0 0,8px 8px;background-size:16px 16px}.vgai-object3d-studio-stage{background-color:var(--vgai-object3d-stage-base, #1d232b);background-image:radial-gradient(90% 72% at 50% 36%,color-mix(in srgb,var(--vgai-accent) 16%,rgb(122 148 177 / 22%)),transparent 62%),radial-gradient(70% 42% at 50% 92%,rgb(124 151 181 / 10%),transparent 72%),radial-gradient(140% 112% at 50% 44%,transparent 42%,rgb(0 0 0 / 58%) 100%),linear-gradient(180deg,var(--vgai-object3d-stage-top, color-mix(in srgb, var(--vgai-surface-raised) 82%, #394451)) 0%,var(--vgai-object3d-stage-bottom, color-mix(in srgb, var(--vgai-surface-shell) 76%, #11151b)) 100%)}.vgai-object3d-studio-stage[data-vgai-chromeless=true]{--vgai-object3d-stage-base: rgb(29 35 43 / 34%);--vgai-object3d-stage-top: rgb(57 68 81 / 40%);--vgai-object3d-stage-bottom: rgb(17 21 27 / 52%)}.vgai-object3d-asset-workspace{position:absolute;inset:0;display:flex;min-width:0;min-height:0;flex-direction:column}.vgai-behavior-document{position:absolute;inset:0;min-width:0;min-height:0}.vgai-behavior-document__empty{display:grid;width:100%;height:100%;place-items:center;color:var(--vgai-text-2)}.vgai-inspector-icon-strip{display:flex;flex-wrap:wrap;align-items:center;gap:var(--vgai-space-1);padding:var(--vgai-space-1) var(--vgai-space-2);border-bottom:1px solid var(--vgai-structural-divider)}.vgai-inspector-icon-strip .vgai-btn[data-variant=ghost]{color:var(--vgai-content-dim)}.vgai-inspector-icon-strip .vgai-btn[data-variant=ghost]:hover:not(:disabled){color:var(--vgai-content-primary)}.vgai-inspector-properties{display:flex;align-items:stretch;min-height:100%}[data-vgai-inspector-presentation=properties]{flex:1 1 auto;min-height:0}[data-vgai-inspector-presentation=properties]>.vgai-inspector-properties-fill{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.vgai-inspector-properties-rail{display:flex;flex-direction:column;gap:var(--vgai-stroke-resting);padding-top:var(--vgai-space-4);padding-left:var(--vgai-stroke-resting);--vgai-properties-tab-plate-radius: 2px;width:28px;box-sizing:border-box;background:var(--vgai-surface-shell);position:sticky;top:0;align-self:stretch;flex:0 0 auto}.vgai-inspector-properties-rail-separator{flex:0 0 auto;height:6.5px}.vgai-inspector-properties-rail .vgai-btn[data-icon][data-size]{width:27px;height:27px;min-width:0;min-height:0;padding:0;border-radius:0}.vgai-inspector-properties-rail .vgai-btn[data-variant=ghost]{color:var(--vgai-content-dim);background:var(--vgai-surface-chrome)}.vgai-inspector-properties-rail .vgai-btn[data-variant=ghost]:hover:not(:disabled){color:var(--vgai-content-primary)}.vgai-inspector-properties-rail .vgai-btn[aria-selected=true],.vgai-inspector-properties-rail .vgai-btn[data-variant=ghost][aria-selected=true]{color:var(--vgai-content-primary);background:var(--vgai-surface-panel)}.vgai-inspector-properties-rail .vgai-btn[data-icon][data-size][aria-selected=true]{--vgai-plate-corner: calc(var(--vgai-properties-tab-plate-radius) + var(--vgai-stroke-resting));background-clip:padding-box;border-radius:var(--vgai-plate-corner) 0 0 var(--vgai-plate-corner)}.vgai-inspector-properties-rail .vgai-btn [data-vgai-tone]{opacity:.8}.vgai-inspector-properties-rail .vgai-btn[aria-selected=true] [data-vgai-tone]{opacity:1}.vgai-inspector-identity[data-vgai-identity-layout=properties]{display:flex;flex-direction:column;gap:var(--vgai-space-8);padding:var(--vgai-space-1) 0 var(--vgai-space-5)}.vgai-inspector-breadcrumb{display:flex;align-items:center;gap:var(--vgai-space-4);min-height:var(--vgai-control-default-height)}.vgai-inspector-breadcrumb-chain{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--vgai-font-base);color:var(--vgai-content-primary)}.vgai-inspector-datablock{display:flex;align-items:stretch;min-width:0}.vgai-inspector-datablock-kind{display:flex;flex:0 0 auto;align-items:center;justify-content:center;min-width:calc(var(--vgai-control-default-height) + var(--vgai-space-5));height:var(--vgai-control-default-height);background:var(--vgai-widget-menu);color:var(--vgai-content-primary);border:var(--vgai-stroke-resting) solid var(--vgai-border-1);border-radius:var(--vgai-radius-sm) 0 0 var(--vgai-radius-sm);border-right:0;box-shadow:var(--vgai-widget-emboss-shadow)}.vgai-inspector-datablock .vgai-input,.vgai-inspector-datablock [data-testid=ingest-name]{border-radius:0 var(--vgai-radius-sm) var(--vgai-radius-sm) 0}.vgai-inspector-datablock [data-testid=ingest-name][data-readonly=true]{display:flex;align-items:center;height:var(--vgai-control-default-height);padding:0 var(--vgai-space-3);background:var(--vgai-input-surface, var(--vgai-bg-inset));border:var(--vgai-stroke-resting) solid var(--vgai-input-border, var(--vgai-border-1));box-sizing:border-box;box-shadow:var(--vgai-input-shadow, none)}.vgai-inspector-properties-body{flex:1 1 auto;min-width:0;padding:var(--vgai-space-4)}.vgai-inspector-properties-body .vgai-section{background:var(--vgai-surface-section);border:var(--vgai-stroke-resting) solid var(--vgai-surface-section-edge);border-radius:var(--vgai-radius-sm);margin-bottom:var(--vgai-space-1);overflow:hidden}.vgai-inspector-properties-body .vgai-section-header{background:transparent}.vgai-inspector-properties-body .vgai-section:last-child{margin-bottom:0}.vgai-inspector-properties-body .vgai-inspector-tool-section{padding:0;margin-top:0;border-top:0}.vgai-inspector-properties-body .vgai-section-glyph{display:none}.vgai-inspector-properties-body .vgai-section-trigger{gap:var(--vgai-space-3);padding-inline:var(--vgai-space-2) var(--vgai-space-4);font-weight:400;--vgai-section-disclosure-size: var(--vgai-icon-lg)}.vgai-mini-inspector{position:relative;display:flex;flex-direction:column;width:100%;min-height:0;border-radius:inherit;overflow-y:auto;pointer-events:auto}.vgai-mini-inspector-minimize{position:absolute;top:var(--vgai-space-1);right:var(--vgai-space-1);z-index:1;color:var(--vgai-content-dim)}.vgai-mini-inspector-preview{position:relative;width:100%;aspect-ratio:1 / 1;max-height:180px;display:flex;align-items:center;justify-content:center;overflow:hidden;background:var(--vgai-bg-inset);color:var(--vgai-content-dim);cursor:pointer}.vgai-mini-inspector-preview[aria-label]{cursor:pointer}.vgai-mini-inspector-preview:focus-visible{outline:var(--vgai-focus-ring);outline-offset:-2px}.vgai-mini-inspector-preview .vgai-editor-icon{font-size:var(--vgai-font-xl, 24px)}.vgai-mini-inspector-identity{display:flex;align-items:center;gap:var(--vgai-space-2);padding:var(--vgai-space-2)}.vgai-mini-inspector-actions{display:flex;justify-content:flex-end;padding:0 var(--vgai-space-2) var(--vgai-space-2)}.vgai-inspector-pill{display:flex;align-items:center;gap:var(--vgai-space-1);width:100%;height:100%;padding:var(--vgai-space-1)}.vgai-inspector-pill-open{display:flex;align-items:center;gap:var(--vgai-space-2);min-width:0;flex:1;height:100%;border:0;background:transparent;color:var(--vgai-content-primary);cursor:pointer;text-align:left}.vgai-inspector-pill-open:focus-visible{outline:var(--vgai-focus-ring);outline-offset:2px;border-radius:var(--vgai-radius-full)}.vgai-inspector-pill-thumb{position:relative;width:42px;height:42px;flex:0 0 42px;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--vgai-radius-full);background:var(--vgai-bg-inset);border:1px solid var(--vgai-boundary-default);color:var(--vgai-content-dim);pointer-events:none}.vgai-inspector-pill-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--vgai-font-md);font-weight:600}.vgai-workspace-task-overlay{position:absolute;top:72px;bottom:64px;left:50%;z-index:var(--vgai-z-modal);width:min(760px,calc(100% - 96px));min-height:320px;overflow:hidden;transform:translate(-50%);display:flex;flex-direction:column;border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-lg);box-shadow:var(--vgai-shadow-lg)}.vgai-workspace-task-overlay-header{min-height:var(--vgai-panel-header-height);box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:var(--vgai-space-3);padding:var(--vgai-space-1) var(--vgai-space-3);color:var(--vgai-content-primary);font-size:var(--vgai-font-md);font-weight:650}.vgai-workspace-task-overlay-body,.vgai-workspace-task-overlay-body>.vgai-dock-document{min-height:0;flex:1}@media(max-width:720px){.vgai-workspace-task-overlay{top:56px;bottom:52px;width:calc(100% - 32px)}}.vgai-dock-panel,.vgai-dock-document,.vgai-dock-document-content{min-width:0;min-height:0;width:100%;height:100%}.vgai-dock-panel,.vgai-dock-document,.vgai-dock-document-content{display:flex;flex-direction:column;overflow:hidden;pointer-events:auto}.vgai-dock-document-content{position:relative}.vgai-dock-document-toolbar{flex:0 0 auto;display:flex;align-items:center;gap:var(--vgai-space-2);min-height:var(--vgai-local-toolbar-height);background:var(--vgai-surface-header);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-structural-divider);pointer-events:auto}.vgai-dock-document-shelf{position:absolute;left:var(--vgai-space-4);top:var(--vgai-viewport-overlay-top, var(--vgai-space-4));z-index:calc(var(--vgai-z-dropdown, 1000) - 1);isolation:isolate;display:flex;flex-direction:column;align-items:flex-start;gap:var(--vgai-space-2);pointer-events:auto}.vgai-dock-document-shelf .vgai-floating-toolbar,.vgai-dock-document-shelf .vgai-floating-toolbar>*{display:flex;flex-direction:column;align-items:stretch}.vgai-dock-document-shelf:not(:empty){--vgai-control-compact-height: var(--vgai-tool-size, 36px);--vgai-control-default-height: var(--vgai-tool-size, 36px);--vgai-control-comfortable-height: var(--vgai-tool-size, 36px);--vgai-tool-glyph-size: var(--vgai-icon-2xl);--vgai-icon-sm: var(--vgai-tool-glyph-size);--vgai-icon-md: var(--vgai-tool-glyph-size);width:var(--vgai-tool-width, 40px);align-items:stretch}.vgai-dock-document-shelf .vgai-btn[data-icon=true][data-size],.vgai-dock-document-shelf .vgai-floating-toolbar .vgai-btn[data-icon=true][data-shape]{width:var(--vgai-tool-width, 40px);height:var(--vgai-tool-size, 36px)}.vgai-dock-document-shelf .vgai-toolbar.vgai-floating-toolbar{padding-inline:0}.vgai-dock-document-shelf .vgai-split-button{width:var(--vgai-tool-width, 40px)}.vgai-dock-document-shelf .vgai-split-button>*{min-width:0;flex:1 1 auto}.vgai-dock-document-shelf .vgai-split-button>*+*{flex:0 0 13px}.vgai-dock-document-shelf .vgai-split-button .vgai-btn[data-icon=true][data-size]{width:auto;min-width:0}.vgai-dock-document-shelf .vgai-btn[data-variant=ghost]:not([aria-pressed=true]):not(:disabled){background:var(--vgai-widget-menu);border-color:var(--vgai-boundary-default);color:var(--vgai-content-primary)}.vgai-dock-document-shelf .vgai-btn[data-variant=ghost]:not([aria-pressed=true]):not(:disabled):hover{background:var(--vgai-widget-menu-hover)}.vgai-dock-document-shelf .vgai-floating-toolbar{gap:0}.vgai-dock-document-shelf :is(.vgai-floating-toolbar,.vgai-document-shelf-tools)>*+*{margin-block-start:calc(-1 * var(--vgai-stroke-resting))}.vgai-dock-document-shelf .vgai-toolbar-divider{width:100%;height:var(--vgai-tool-gap, var(--vgai-space-1));background:none;border:0;margin-block-start:0}.vgai-dock-document-shelf{gap:var(--vgai-tool-gap, var(--vgai-space-2))}.vgai-dock-document-shelf .vgai-floating-toolbar{padding:0;border:0;border-radius:0;background:none;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none}.vgai-dock-document-shelf[role=toolbar]>*{box-shadow:var(--vgai-widget-emboss-shadow)}.vgai-dock-document-shelf .vgai-viewport-toolbar{position:static}.vgai-dock-document-content[data-vgai-stage-bar]{--vgai-stage-bar-control: var(--vgai-control-comfortable-height, 28px);--vgai-stage-bar-inset: var(--vgai-space-1);--vgai-stage-bar-height: calc(var(--vgai-stage-bar-control) + 2 * var(--vgai-stage-bar-inset));--vgai-viewport-overlay-top: calc(var(--vgai-stage-bar-height) + var(--vgai-space-2))}.vgai-dock-document-content[data-vgai-stage-bar=pills]{--vgai-stage-bar-inset: var(--vgai-space-2)}.vgai-stage-bar{position:absolute;top:0;left:0;right:0;height:var(--vgai-stage-bar-height);padding-inline:var(--vgai-space-2);display:flex;align-items:center;justify-content:space-between;gap:var(--vgai-space-2);z-index:calc(var(--vgai-z-dropdown, 1000) - 1);pointer-events:none}.vgai-stage-bar[data-form=strip]{pointer-events:auto;background:var(--vgai-surface-header);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-structural-divider)}.vgai-stage-bar-group{display:flex;align-items:center;gap:var(--vgai-space-2);min-width:0;pointer-events:auto}.vgai-stage-bar-slot{display:contents}.vgai-stage-bar .vgai-viewport-toolbar{position:static}.vgai-stage-bar :is(.vgai-floating-toolbar,.vgai-toolbar){height:var(--vgai-stage-bar-control);align-items:center}.vgai-stage-bar[data-form=strip] :is(.vgai-floating-toolbar,.vgai-toolbar){padding:0;border:0;background:none;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none}.vgai-stage-bar[data-form=pills] :is(.vgai-floating-toolbar,.vgai-toolbar){padding:0;border:0;background:none;box-shadow:none;gap:var(--vgai-space-2)}.vgai-stage-bar[data-form=pills] .vgai-stage-display>*,.vgai-stage-bar[data-form=pills] .vgai-transform-header-controls>*{display:inline-flex;align-items:center;height:var(--vgai-stage-bar-control);padding-inline:var(--vgai-space-1);border-radius:var(--vgai-radius-full);background:var(--vgai-island-surface, var(--vgai-surface-overlay))}.vgai-stage-bar[data-form=pills] .vgai-viewport-toolbar-left{display:inline-flex;align-items:center;height:var(--vgai-stage-bar-control);padding-inline:var(--vgai-space-1);border-radius:var(--vgai-radius-full);background:var(--vgai-island-surface, var(--vgai-surface-overlay))}.vgai-dock-document-content[data-vgai-stage-rail=empty]{--vgai-stage-name-left: var(--vgai-space-2)}.vgai-viewport-view-pill .vgai-btn[data-testid=viewport-view-name]{border-radius:var(--vgai-radius-sm);background:var(--vgai-island-surface, var(--vgai-surface-overlay))}.vgai-dock-document-toolbar-own{flex:1 1 auto;min-width:0}.vgai-toolbar.vgai-transform-header-controls{flex:0 0 auto;gap:var(--vgai-space-3);border:0}.vgai-toolbar.vgai-transform-header-controls>*{flex:0 0 auto}.vgai-transform-orientation-trigger{display:inline-flex;align-items:center;gap:var(--vgai-space-1);white-space:nowrap}[data-vgai-chrome=islands] .vgai-regular-panel-portal{color:var(--vgai-content-primary);text-shadow:var(--vgai-content-text-shadow, none);background:var( --vgai-glass-regular-panel-adaptive-bg, var(--vgai-glass-regular-panel-bg, var(--vgai-surface-panel)) );backdrop-filter:var(--vgai-glass-regular-panel-backdrop-filter, none);-webkit-backdrop-filter:var(--vgai-glass-regular-panel-backdrop-filter, none);border-color:color-mix(in srgb,var(--vgai-content-primary) 22%,transparent)}[data-vgai-chrome=islands] .vgai-regular-panel-portal .vgai-content-frost{background:var( --vgai-glass-regular-content-adaptive-bg, var(--vgai-content-frost-bg, transparent) );backdrop-filter:none;-webkit-backdrop-filter:none}.vgai-regular-panel-portal>.vgai-surface{background:transparent}.vgai-dock-document,.vgai-dock-document-content,.vgai-dock-document-toolbar{background:transparent}@keyframes vgai-play-dissolve{0%{opacity:1;transform:none;filter:blur(0) brightness(1)}42%{opacity:1;transform:translate(var(--vgai-play-dx, 0px),var(--vgai-play-dy, 0px)) scale(.985);filter:blur(2px) brightness(1.06)}to{opacity:0;transform:translate(var(--vgai-play-dx, 0px),var(--vgai-play-dy, 0px)) scale(.985);filter:blur(8px) brightness(1)}}@keyframes vgai-play-materialize{0%{opacity:0;transform:translate(var(--vgai-play-dx, 0px),var(--vgai-play-dy, 0px)) scale(.985);filter:blur(6px) brightness(1.02)}to{opacity:1;transform:none;filter:blur(0) brightness(1)}}.vgai-play-chrome-exit,.vgai-play-chrome-enter{--vgai-play-dx: 0px;--vgai-play-dy: 0px;--vgai-play-stagger: 0ms}.vgai-play-chrome-exit{animation:vgai-play-dissolve var(--vgai-play-dissolve-duration) var(--vgai-ease-standard) both;animation-delay:var(--vgai-play-stagger, 0ms);pointer-events:none}.vgai-play-chrome-enter{animation:vgai-play-materialize var(--vgai-play-materialize-duration) var(--vgai-ease-standard) both}.vgai-dock-document-toolbar,.vgai-editor-bottom-bar{transition:transform var(--vgai-duration-slow) var(--vgai-ease-standard),opacity var(--vgai-duration-slow) var(--vgai-ease-standard)}[data-vgai-play-chrome=hidden] .vgai-dock-document-toolbar:not([data-runtime-toolbar]){opacity:0;visibility:hidden;transform:translateY(-10px);pointer-events:none;transition:transform var(--vgai-duration-base) var(--vgai-ease-standard),opacity var(--vgai-duration-base) var(--vgai-ease-standard) .1s,visibility 0s linear .28s}[data-vgai-play-chrome=hidden] .vgai-editor-bottom-bar{opacity:0;visibility:hidden;transform:translateY(calc(100% + 8px));pointer-events:none;transition:transform var(--vgai-duration-base) var(--vgai-ease-standard),opacity var(--vgai-duration-base) var(--vgai-ease-standard) .1s,visibility 0s linear .28s}[data-vgai-play-chrome=hidden][data-vgai-play-revealed] .vgai-dock-document-toolbar,[data-vgai-play-chrome=hidden][data-vgai-play-revealed] .vgai-editor-bottom-bar{opacity:1;visibility:visible;transform:none;pointer-events:auto;transition:transform var(--vgai-duration-base) var(--vgai-ease-standard),opacity var(--vgai-duration-fast) var(--vgai-ease-standard),visibility 0s}.vgai-glass-island.vgai-play-restart-pill{position:fixed;top:14px;left:50%;z-index:40;display:none;align-items:center;gap:var(--vgai-space-2);padding:6px 14px;border-radius:var(--vgai-radius-full);font:inherit;font-size:var(--vgai-font-md);line-height:var(--vgai-leading-tight);color:var(--vgai-content-muted);cursor:pointer}.vgai-editor-theme[data-vgai-play-chrome=hidden]:not([data-vgai-play-revealed]) .vgai-glass-island.vgai-play-restart-pill{display:flex;animation:vgai-restart-pill-in var(--vgai-duration-slow) var(--vgai-ease-standard) both}.vgai-glass-island.vgai-play-restart-pill:hover{color:var(--vgai-content-primary)}@keyframes vgai-restart-pill-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}@media(prefers-reduced-motion:reduce){.vgai-play-chrome-exit,.vgai-play-chrome-enter,.vgai-editor-theme[data-vgai-play-chrome=hidden]:not([data-vgai-play-revealed]) .vgai-glass-island.vgai-play-restart-pill{animation:none}.vgai-play-chrome-exit{opacity:0}.vgai-dock-document-toolbar,.vgai-editor-bottom-bar,[data-vgai-play-chrome=hidden] .vgai-dock-document-toolbar,[data-vgai-play-chrome=hidden] .vgai-editor-bottom-bar{transition:none}}.vgai-editor-theme{--vgai-bg-0: var(--vgai-surface-shell);--vgai-bg-1: var(--vgai-surface-panel);--vgai-bg-2: var(--vgai-surface-chrome);--vgai-bg-3: var(--vgai-surface-raised);--vgai-bg-inset: var(--vgai-surface-inset);--vgai-border-1: var(--vgai-boundary-default);--vgai-border-2: var(--vgai-boundary-strong);--vgai-text-1: var(--vgai-content-primary);--vgai-text-2: var(--vgai-content-muted);--vgai-text-3: var(--vgai-content-dim);--vgai-asset-icon-folder: #e8a740;--vgai-asset-icon-model: #6bc5f7;--vgai-asset-icon-prefab: #3b82f6;--vgai-asset-icon-component: #9ca3af;--vgai-asset-icon-audio: #34d399;--vgai-asset-icon-image: #f472b6;--vgai-asset-icon-video: #c084fc;--vgai-asset-icon-json: #fbbf24;--vgai-asset-icon-unknown: #6b7280;--vgai-asset-icon-source: #fb923c;text-shadow:var(--vgai-content-text-shadow, none);font-family:var(--vgai-font-sans);font-size:var(--vgai-font-base);line-height:var(--vgai-leading-normal);color:var(--vgai-content-primary)}.vgai-content-frost{background:var(--vgai-content-frost-bg, transparent);backdrop-filter:var(--vgai-content-frost-filter, none);-webkit-backdrop-filter:var(--vgai-content-frost-filter, none);border-radius:var(--vgai-radius-md)}.vgai-editor-theme [data-vgai-adaptive-ink=bright]{--vgai-backdrop-dim: none;--vgai-content-primary: var(--vgai-content-primary-on-bright);--vgai-content-muted: var(--vgai-content-muted-on-bright);--vgai-content-dim: var(--vgai-content-dim-on-bright);--vgai-content-text-shadow: var(--vgai-content-text-shadow-on-bright);--vgai-content-frost-bg: var(--vgai-content-frost-bg-on-bright);--vgai-island-border-color: color-mix( in srgb, var(--vgai-content-primary-on-bright) 30%, transparent );--vgai-text-1: var(--vgai-content-primary);--vgai-text-2: var(--vgai-content-muted);--vgai-text-3: var(--vgai-content-dim);--dv-activegroup-visiblepanel-tab-color: var(--vgai-content-primary);--dv-activegroup-hiddenpanel-tab-color: var(--vgai-content-muted);--dv-inactivegroup-visiblepanel-tab-color: var(--vgai-content-muted);--dv-inactivegroup-hiddenpanel-tab-color: var(--vgai-content-dim);text-shadow:var(--vgai-content-text-shadow, none)}.vgai-editor-theme [data-vgai-panel-backdrop-policy=dark-frost]{--vgai-content-primary: #f4f8ff;--vgai-content-muted: #c3cedd;--vgai-content-dim: #94a2b5;--vgai-content-text-shadow: 0 1px 3px rgb(0 0 0 / 72%);--vgai-text-1: var(--vgai-content-primary);--vgai-text-2: var(--vgai-content-muted);--vgai-text-3: var(--vgai-content-dim);--dv-activegroup-visiblepanel-tab-color: var(--vgai-content-primary);--dv-activegroup-hiddenpanel-tab-color: var(--vgai-content-muted);--dv-inactivegroup-visiblepanel-tab-color: var(--vgai-content-muted);--dv-inactivegroup-hiddenpanel-tab-color: var(--vgai-content-dim)}.vgai-editor-shell button,.vgai-editor-shell input,.vgai-editor-shell select,.vgai-editor-shell textarea{font-family:inherit}.vgai-editor-shell button{font-size:inherit}.vgai-sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.vgai-tooltip-anchor{position:relative;display:inline-flex}.vgai-tooltip{position:fixed;z-index:var(--vgai-z-dropdown);display:flex;align-items:center;gap:var(--vgai-space-4);padding:var(--vgai-space-2) var(--vgai-space-4);color:var(--vgai-content-primary);background:var(--vgai-surface-inset);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-md);box-shadow:var(--vgai-shadow-sm);font-size:var(--vgai-font-base);white-space:nowrap;pointer-events:none}.vgai-tooltip kbd{padding:1px var(--vgai-space-3);color:var(--vgai-content-primary);background:var(--vgai-surface-raised);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-sm);font-family:var(--vgai-font-mono);font-size:var(--vgai-font-sm)}[data-vgai-chrome=islands] .vgai-tooltip{--vgai-content-primary: var(--vgai-content-primary-on-bright);--vgai-content-muted: var(--vgai-content-muted-on-bright);--vgai-content-dim: var(--vgai-content-dim-on-bright);--vgai-content-text-shadow: var(--vgai-content-text-shadow-on-bright);--vgai-text-1: var(--vgai-content-primary);--vgai-text-2: var(--vgai-content-muted);--vgai-text-3: var(--vgai-content-dim);text-shadow:var(--vgai-content-text-shadow, none);background:var(--vgai-glass-regular-bg, var(--vgai-surface-chrome));border-color:var(--vgai-border-1);backdrop-filter:var(--vgai-glass-regular-backdrop-filter, none);-webkit-backdrop-filter:var(--vgai-glass-regular-backdrop-filter, none)}[data-vgai-chrome=islands] .vgai-tooltip kbd{color:inherit;background:color-mix(in srgb,currentColor 10%,transparent);border-color:color-mix(in srgb,currentColor 28%,transparent)}.vgai-btn{display:inline-flex;width:max-content;max-width:100%;align-items:center;justify-content:center;gap:var(--vgai-space-2);font-family:var(--vgai-font-sans);font-size:var(--vgai-font-md);line-height:var(--vgai-leading-tight);border-radius:var(--vgai-radius-sm);cursor:pointer;border:1px solid transparent;box-sizing:border-box;transition:background-color .12s var(--vgai-ease-standard),border-color .12s var(--vgai-ease-standard),color .12s var(--vgai-ease-standard),filter .12s var(--vgai-ease-standard)}.vgai-btn[data-size=compact]{height:var(--vgai-control-compact-height);padding-top:0;padding-bottom:0;font-size:var(--vgai-font-base)}.vgai-btn:not([data-size]),.vgai-btn[data-size=default]{height:var(--vgai-control-default-height);padding-top:0;padding-bottom:0;font-size:var(--vgai-font-base)}.vgai-btn[data-size=comfortable]{height:var(--vgai-control-comfortable-height);padding-top:0;padding-bottom:0;font-size:var(--vgai-font-md)}.vgai-btn[data-variant=primary]{background:var(--vgai-accent);color:var(--vgai-content-on-accent);border-color:var(--vgai-accent);padding:var(--vgai-space-3) var(--vgai-space-6);font-weight:600}.vgai-btn[data-variant=primary]:hover:not(:disabled){filter:brightness(1.08)}.vgai-btn[data-variant=primary]:active:not(:disabled){filter:brightness(.92)}.vgai-btn:not([data-variant]),.vgai-btn[data-variant=secondary]{background:var(--vgai-widget-regular);color:var(--vgai-content-primary);border-color:var(--vgai-boundary-default);padding-inline:var(--vgai-space-4);box-shadow:var(--vgai-widget-emboss-shadow)}.vgai-btn:not([data-variant]):hover:not(:disabled),.vgai-btn[data-variant=secondary]:hover:not(:disabled){background:var(--vgai-widget-regular-hover);border-color:var(--vgai-boundary-strong)}.vgai-btn:is(:not([data-variant]),[data-variant=secondary]):is([aria-haspopup=menu],[aria-haspopup=listbox],[aria-haspopup=dialog]){background:var(--vgai-widget-menu)}.vgai-btn:is(:not([data-variant]),[data-variant=secondary]):is([aria-haspopup=menu],[aria-haspopup=listbox],[aria-haspopup=dialog]):hover:not(:disabled){background:var(--vgai-widget-menu-hover)}.vgai-btn:not([data-variant]):active:not(:disabled),.vgai-btn[data-variant=secondary]:active:not(:disabled){background:var(--vgai-surface-inset)}.vgai-btn[data-variant=outline]{background:transparent;color:var(--vgai-content-primary);border-color:var(--vgai-boundary-default);padding-inline:var(--vgai-space-4)}.vgai-btn[data-variant=outline]:hover:not(:disabled){background:var(--vgai-neutral-hover);border-color:var(--vgai-boundary-strong)}.vgai-btn[data-variant=outline]:active:not(:disabled){background:var(--vgai-neutral-active)}.vgai-btn[data-variant=ghost]{background:transparent;color:var(--vgai-content-muted);border-color:transparent;padding-inline:var(--vgai-space-3)}.vgai-btn[data-variant=ghost]:hover:not(:disabled){color:var(--vgai-content-primary);background:var(--vgai-neutral-hover)}.vgai-btn[data-variant=ghost]:active:not(:disabled){background:var(--vgai-neutral-active)}.vgai-btn[data-variant=danger]{color:var(--vgai-content-primary);background:var(--vgai-danger-muted);border-color:var(--vgai-danger);padding-inline:var(--vgai-space-4);font-weight:600}.vgai-btn[data-variant=danger]:hover:not(:disabled){filter:brightness(1.12)}.vgai-btn[data-variant=danger]:active:not(:disabled){filter:brightness(.9)}.vgai-btn[data-variant=success]{color:var(--vgai-content-on-accent);background:var(--vgai-success);border-color:var(--vgai-success);padding-inline:var(--vgai-space-4);font-weight:600}.vgai-btn[data-variant=success]:hover:not(:disabled){filter:brightness(1.1)}.vgai-btn[data-variant=success]:active:not(:disabled){filter:brightness(.92)}.vgai-btn[aria-pressed=true]{color:var(--vgai-content-on-selection, var(--vgai-content-primary));background:var(--vgai-selection-bg);border-color:var(--vgai-selection-border)}.vgai-btn[aria-busy=true]{cursor:progress}.vgai-btn.vgai-sprite-frame-option{width:100%;min-width:0;height:72px;flex-direction:column;gap:var(--vgai-space-1);padding:var(--vgai-space-1);background:var(--vgai-surface-inset);border-color:var(--vgai-boundary-default)}.vgai-btn.vgai-sprite-frame-option[aria-pressed=true]{background:var(--vgai-selection-bg);border-color:var(--vgai-selection-border)}.vgai-btn[data-icon=true]{width:var(--vgai-control-default-height);padding:0}.vgai-btn[data-icon=true][data-size=compact]{width:var(--vgai-control-compact-height)}.vgai-btn[data-icon=true][data-size=comfortable]{width:var(--vgai-control-comfortable-height)}.vgai-btn[data-icon=true][data-label-placement=below]{width:68px;min-width:68px;height:42px;flex-direction:column;gap:3px;padding:4px 8px 3px}.vgai-icon-button-label{max-width:100%;min-width:0;overflow:hidden;font-size:var(--vgai-font-xs);line-height:var(--vgai-leading-tight);text-overflow:ellipsis;white-space:nowrap}.vgai-btn:disabled,.vgai-btn[aria-disabled=true]{opacity:.4;cursor:not-allowed;filter:none}.vgai-btn:focus-visible{outline:var(--vgai-focus-ring);outline-offset:1px}.vgai-machine-list-entry{display:block;width:100%;height:auto;justify-content:flex-start;border-left:var(--vgai-stroke-active) solid transparent;padding:var(--vgai-space-3) var(--vgai-space-4);text-align:left}.vgai-machine-list-entry[data-selected=true]{border-left-color:var(--vgai-selection-indicator);background:var(--vgai-selection-bg)}.vgai-performance-overlay{pointer-events:auto;display:grid;grid-template-columns:repeat(5,auto);width:auto;height:auto;gap:var(--vgai-space-5);border-color:var(--vgai-boundary-default);background:var(--vgai-surface-overlay);color:var(--vgai-content-primary);padding:var(--vgai-space-3) var(--vgai-space-4);font-family:var(--vgai-font-mono);font-size:var(--vgai-font-sm)}.vgai-performance-overlay[data-enabled=true]{border-color:var(--vgai-accent)}.vgai-hud-overlay{background:var(--vgai-surface-overlay);border-radius:var(--vgai-radius-md)}.vgai-hud-overlay[data-hud-border=strong]{border:var(--vgai-stroke-resting) solid var(--vgai-boundary-strong)}.vgai-hud-overlay[data-hud-border=default]{border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default)}.vgai-hud-overlay[data-hud-shadow=true]{box-shadow:var(--vgai-shadow-sm)}.vgai-field-trigger{width:100%;justify-content:space-between;overflow:hidden;font-family:var(--vgai-font-mono);text-align:left}.vgai-inspector-group-trigger{width:100%;height:auto;justify-content:flex-start;padding:var(--vgai-space-4);font-weight:600;text-align:left;text-transform:uppercase;letter-spacing:.4px}.vgai-hierarchy-more{width:100%;height:var(--vgai-tree-row-height);justify-content:flex-start;font-style:italic;text-align:left}.vgai-btn.vgai-tree-caret{width:var(--vgai-tree-indent);height:18px;flex:0 0 var(--vgai-tree-indent);padding-inline:0;font-size:var(--vgai-icon-xs)}.vgai-chat-icon{width:var(--vgai-control-default-height);padding-inline:0}.vgai-chat-session-row{width:100%;height:auto;justify-content:flex-start;padding:var(--vgai-space-4);text-align:left}.vgai-chat-session-row[data-selected=true]{background:var(--vgai-surface-raised)}.vgai-chat-harness-trigger{max-width:190px;overflow:hidden;white-space:nowrap}.vgai-chat-header-trigger{min-width:0;flex:1;justify-content:flex-start;overflow:hidden;text-align:left}.vgai-input{background:var(--vgai-input-surface, var(--vgai-bg-inset));color:var(--vgai-text-1);border:1px solid var(--vgai-input-border, var(--vgai-border-1));border-radius:var(--vgai-radius-sm);box-shadow:var(--vgai-input-shadow, none);padding:var(--vgai-space-1) var(--vgai-space-3);font-size:var(--vgai-font-base);font-family:var(--vgai-font-sans);outline:none;min-width:0;min-height:var(--vgai-control-default-height);box-sizing:border-box}.vgai-input::placeholder{color:var(--vgai-content-placeholder);opacity:1}input.vgai-input,select.vgai-input{height:var(--vgai-control-default-height);padding-block:0}.vgai-input:hover:not(:disabled){border-color:var(--vgai-border-2)}.vgai-input:focus-visible{border-color:var(--vgai-accent);outline:var(--vgai-focus-ring);outline-offset:-1px}.vgai-input[aria-invalid=true]{border-color:var(--vgai-danger)}.vgai-input[data-tone=danger]{color:var(--vgai-danger)}.vgai-input[data-state=editing]{border-color:var(--vgai-accent)}.vgai-input[data-emphasis=strong]{font-size:var(--vgai-font-md);font-weight:600}.vgai-input[data-emphasis=semibold]{font-weight:600}.vgai-input[data-monospace=true]{font-family:var(--vgai-font-mono)}.vgai-input[data-density=compact],.vgai-select[data-density=compact]{min-height:var(--vgai-control-compact-height);font-size:var(--vgai-font-sm)}.vgai-input[data-density=comfortable],.vgai-select[data-density=comfortable]{min-height:var(--vgai-control-comfortable-height);font-size:var(--vgai-font-md)}.vgai-input[data-density=compact-tall],.vgai-select[data-density=compact-tall]{min-height:var(--vgai-control-comfortable-height);font-size:var(--vgai-font-sm)}.vgai-input[data-leading-icon=true]{padding-left:calc(var(--vgai-space-12) + 1px)}.vgai-input[data-variant=entity-name]{min-height:var(--vgai-control-comfortable-height);padding:var(--vgai-space-2) var(--vgai-space-3);font-size:var(--vgai-font-lg);font-weight:600}.vgai-input[data-variant=tree-edit]{min-height:var(--vgai-control-compact-height);padding:0 var(--vgai-space-2);border-color:var(--vgai-accent);font-size:var(--vgai-font-lg);outline:none}.vgai-input[data-variant=prominent]{min-height:var(--vgai-command-bar-height);padding:var(--vgai-space-5) calc(var(--vgai-space-6) + var(--vgai-space-1));border:0;border-bottom:var(--vgai-stroke-resting) solid var(--vgai-boundary-strong);border-radius:0;font-size:var(--vgai-font-xl)}.vgai-input[data-variant=prominent]:focus-visible{outline-offset:-2px}.vgai-input[data-variant=seamless]{padding:var(--vgai-space-4);color:var(--vgai-content-primary);background:transparent;border:0;border-radius:0}.vgai-input[data-dynamic=true],.vgai-select[data-dynamic=true]{color:var(--vgai-dynamic);background-color:var(--vgai-dynamic-muted);border-color:var(--vgai-dynamic)}.vgai-input[data-mixed=true],.vgai-select[data-mixed=true]{color:var(--vgai-content-dim);font-style:italic}.vgai-input:disabled{opacity:.5;cursor:not-allowed}.vgai-select{appearance:none;-webkit-appearance:none;background-color:var(--vgai-input-surface, var(--vgai-bg-inset));background-image:var(--vgai-select-chevron);background-repeat:no-repeat;background-position:right 6px center;background-size:8px 5px;color:var(--vgai-text-1);border:1px solid var(--vgai-input-border, var(--vgai-border-1));border-radius:var(--vgai-radius-sm);box-shadow:var(--vgai-input-shadow, none);padding:var(--vgai-space-1) var(--vgai-space-6) var(--vgai-space-1) var(--vgai-space-3);font-size:var(--vgai-font-base);font-family:var(--vgai-font-sans);outline:none;min-height:var(--vgai-control-default-height);box-sizing:border-box;cursor:pointer}.vgai-select:hover:not(:disabled){border-color:var(--vgai-border-2)}.vgai-select:focus-visible{border-color:var(--vgai-accent);outline:var(--vgai-focus-ring);outline-offset:-1px}.vgai-select:disabled{opacity:.5;cursor:not-allowed}.vgai-select option{background:var(--vgai-bg-2);color:var(--vgai-text-1)}.vgai-textarea{display:block;width:100%;min-height:calc(var(--vgai-control-default-height) * 2);resize:vertical;line-height:var(--vgai-leading-normal)}.vgai-textarea[data-variant=code]{padding:var(--vgai-space-5);font-family:var(--vgai-font-mono);font-size:var(--vgai-font-base);line-height:var(--vgai-leading-relaxed)}.vgai-textarea[data-variant=inline-editor]{padding:var(--vgai-space-1);color:var(--vgai-content-primary);background:var(--vgai-input-surface, var(--vgai-surface-inset));border:var(--vgai-stroke-active) solid var(--vgai-accent);font:inherit;font-size:var(--vgai-font-lg);line-height:1.3;outline:none}.vgai-tool-page{width:100%;max-width:960px;min-height:100%;margin:0 auto;padding:var(--vgai-space-6);color:var(--vgai-content-primary);box-sizing:border-box}.vgai-tool-header{max-width:720px;margin-bottom:var(--vgai-space-5)}.vgai-tool-eyebrow{margin-bottom:var(--vgai-space-2);color:var(--vgai-content-dim);font-size:var(--vgai-font-sm);font-weight:600;letter-spacing:.06em;text-transform:uppercase}.vgai-tool-title{margin:0 0 var(--vgai-space-2);font-size:var(--vgai-font-xl)}.vgai-tool-description{margin:0;color:var(--vgai-content-muted);line-height:var(--vgai-leading-relaxed)}.vgai-tool-card{padding:var(--vgai-space-5);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-md);background:var(--vgai-surface-panel)}.vgai-tool-form{display:grid;max-width:720px;gap:var(--vgai-space-4)}.vgai-tool-field{display:grid;min-width:0;gap:var(--vgai-space-2)}.vgai-tool-field>.vgai-input,.vgai-tool-field>.vgai-select{width:100%}.vgai-tool-field-label{color:var(--vgai-content-primary);font-weight:500}.vgai-tool-help{color:var(--vgai-content-dim);font-size:var(--vgai-font-sm);line-height:var(--vgai-leading-normal)}.vgai-tool-advanced{padding:var(--vgai-space-3);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-sm);background:var(--vgai-surface-inset)}.vgai-tool-advanced>summary{color:var(--vgai-content-muted);cursor:pointer;font-weight:500}.vgai-tool-advanced[open]>summary{margin-bottom:var(--vgai-space-3);color:var(--vgai-content-primary)}.vgai-tool-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--vgai-space-3);padding-top:var(--vgai-space-1)}.vgai-cost-disclosure{display:grid;gap:var(--vgai-space-1);padding:var(--vgai-space-3) var(--vgai-space-4);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-left:var(--vgai-stroke-active) solid var(--vgai-accent);border-radius:var(--vgai-radius-sm);background:var(--vgai-surface-inset)}.vgai-cost-disclosure[data-route=mock]{border-left-color:var(--vgai-success)}.vgai-cost-disclosure[data-route=managed]{border-left-color:var(--vgai-accent)}.vgai-cost-disclosure[data-route=direct]{border-left-color:var(--vgai-warn)}.vgai-cost-disclosure-title{font-weight:600}.vgai-cost-disclosure-detail{color:var(--vgai-content-muted);font-size:var(--vgai-font-sm)}.vgai-tool-confirmation{display:grid;gap:var(--vgai-space-3);padding:var(--vgai-space-4);border:var(--vgai-stroke-resting) solid var(--vgai-warn);border-radius:var(--vgai-radius-sm);background:var(--vgai-warn-muted)}.vgai-tool-status{max-width:720px;margin-top:var(--vgai-space-4);padding:var(--vgai-space-3) var(--vgai-space-4);border-radius:var(--vgai-radius-sm);color:var(--vgai-content-primary);background:var(--vgai-surface-raised)}.vgai-tool-status[data-tone=error]{color:var(--vgai-danger);background:var(--vgai-danger-faint)}.vgai-tool-status[data-tone=success]{color:var(--vgai-success);background:var(--vgai-success-muted)}.vgai-generation-job-meta{color:var(--vgai-content-muted);font-size:var(--vgai-font-sm)}.vgai-generation-document{display:grid;width:100%;max-width:1120px;min-height:100%;margin:0 auto;padding:var(--vgai-space-6);gap:var(--vgai-space-4);color:var(--vgai-content-primary);box-sizing:border-box}.vgai-generation-document-header{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--vgai-space-4)}.vgai-generation-result{min-height:280px;padding:var(--vgai-space-4);overflow:auto;border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-md);background:var(--vgai-surface-inset)}.vgai-generation-document-empty,.vgai-generation-result-empty{padding:var(--vgai-space-5);color:var(--vgai-content-muted)}.vgai-generation-native-result{margin:0;overflow:auto;color:var(--vgai-content-muted);font-size:var(--vgai-font-sm);white-space:pre-wrap;overflow-wrap:anywhere}.vgai-generation-image-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--vgai-space-3)}.vgai-generation-image-grid img,.vgai-generation-panorama,.vgai-generation-world-result img{display:block;width:100%;max-height:620px;border-radius:var(--vgai-radius-sm);object-fit:contain}.vgai-generation-media{display:block;width:min(100%,860px);margin:auto}.vgai-generation-result-links,.vgai-generation-world-result,.vgai-generation-output-paths{display:grid;align-content:start;justify-items:start;gap:var(--vgai-space-3)}.vgai-generation-output-paths code{color:var(--vgai-content-muted);overflow-wrap:anywhere}.vgai-generation-document-footer{display:flex;justify-content:flex-end}.vgai-generation-create-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--vgai-space-2)}.vgai-generation-create-card{display:grid;gap:var(--vgai-space-1);padding:var(--vgai-space-3);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-sm);color:var(--vgai-content-primary);text-align:left;background:var(--vgai-surface-raised);cursor:pointer}.vgai-generation-create-card:hover{border-color:var(--vgai-boundary-strong);background:var(--vgai-neutral-hover)}.vgai-generation-create-card:focus-visible{outline:var(--vgai-focus-ring);outline-offset:1px}.vgai-generation-create-card span{color:var(--vgai-content-muted);font-size:var(--vgai-font-sm)}.vgai-provider-connections{display:grid;gap:var(--vgai-space-4)}@media(max-width:720px){.vgai-tool-page,.vgai-generation-document{padding:var(--vgai-space-4)}.vgai-generation-document-header{display:grid}}.vgai-checkbox{accent-color:var(--vgai-accent);width:13px;height:13px;cursor:pointer;margin:0}.vgai-checkbox:focus-visible{outline:var(--vgai-focus-ring);outline-offset:2px}.vgai-checkbox:indeterminate{accent-color:var(--vgai-warn)}.vgai-checkbox:disabled{opacity:.5;cursor:not-allowed}.vgai-color-swatch{width:var(--vgai-control-compact-height);height:var(--vgai-control-compact-height);flex:0 0 auto;padding:0;overflow:hidden;background:transparent;border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-sm);cursor:pointer}.vgai-color-swatch:hover:not(:disabled){border-color:var(--vgai-boundary-strong)}.vgai-color-swatch:focus-visible,.vgai-file-input:focus-visible,.vgai-range:focus-visible{outline:var(--vgai-focus-ring);outline-offset:2px}.vgai-color-swatch:disabled,.vgai-file-input:disabled,.vgai-range:disabled{opacity:.5;cursor:not-allowed}.vgai-file-input{color:var(--vgai-content-muted);font:inherit}.vgai-range{min-width:0;accent-color:var(--vgai-accent)}.vgai-number-input,.vgai-color-input{display:flex;min-width:0;align-items:center;gap:var(--vgai-space-2)}.vgai-number-input-label{width:12px;flex:0 0 auto;color:var(--vgai-content-muted);font-size:var(--vgai-font-sm);font-weight:600;text-align:center;user-select:none}.vgai-number-input-editor,.vgai-number-input-scrub,.vgai-color-input>.vgai-input{width:100%;min-width:0}.vgai-number-input-scrub{box-sizing:border-box;overflow:hidden;padding:var(--vgai-space-1) var(--vgai-space-3);color:var(--vgai-content-primary);background:var(--vgai-input-surface, var(--vgai-surface-inset));border:var(--vgai-stroke-resting) solid var(--vgai-input-border, var(--vgai-boundary-default));border-radius:var(--vgai-radius-sm);box-shadow:var(--vgai-input-shadow, none);font-size:var(--vgai-font-base);text-overflow:ellipsis;white-space:nowrap;cursor:ew-resize;user-select:none}.vgai-number-input-scrub:hover{border-color:var(--vgai-boundary-strong)}.vgai-scrub-label{transition:color .12s var(--vgai-ease-standard),filter .12s var(--vgai-ease-standard)}.vgai-scrub-label{color:var(--vgai-content-muted)}.vgai-scrub-label:hover:not([data-disabled=true]){color:var(--vgai-content-primary)}.vgai-number-input-scrub[data-disabled]{opacity:.5;cursor:not-allowed}.vgai-number-input-scrub[data-mixed=true],.vgai-color-input>.vgai-input[data-mixed=true]{color:var(--vgai-content-dim);font-style:italic}.vgai-color-input-mixed{width:var(--vgai-control-compact-height);height:var(--vgai-control-compact-height);flex:0 0 auto;border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-sm);background-color:var(--vgai-surface-inset);background-image:linear-gradient(45deg,var(--vgai-content-dim) 25%,transparent 25%,transparent 75%,var(--vgai-content-dim) 75%),linear-gradient(45deg,var(--vgai-content-dim) 25%,transparent 25%,transparent 75%,var(--vgai-content-dim) 75%);background-position:0 0,4px 4px;background-size:8px 8px}.vgai-section{border-bottom:var(--vgai-stroke-resting) solid var(--vgai-structural-divider)}.vgai-section-header{display:flex;width:100%;min-height:var(--vgai-control-default-height);align-items:center;gap:var(--vgai-space-1);color:var(--vgai-content-primary);background:var(--vgai-surface-section)}.vgai-section-trigger{display:flex;min-width:0;min-height:var(--vgai-control-default-height);flex:1;align-items:center;gap:var(--vgai-space-2);padding:var(--vgai-space-2) var(--vgai-space-4);color:inherit;background:transparent;border:0;font:inherit;font-size:var(--vgai-font-base);font-weight:600;text-align:left;cursor:pointer}.vgai-section-trigger:hover{background:var(--vgai-neutral-hover)}.vgai-section-trigger[data-vgai-static],.vgai-section-trigger[data-vgai-static]:hover{cursor:default;background:transparent}.vgai-section-trigger:focus-visible{outline:var(--vgai-focus-ring);outline-offset:-2px}.vgai-section-title{display:grid;min-width:0;flex:1}.vgai-section-title>span,.vgai-section-title>small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vgai-section-title>small{color:var(--vgai-content-dim);font-size:var(--vgai-font-sm);font-weight:400}.vgai-section-actions{display:flex;flex:0 0 auto;align-items:center;gap:var(--vgai-space-1);padding-right:var(--vgai-space-2)}.vgai-section-body{padding:0 var(--vgai-space-4) var(--vgai-space-4)}.vgai-inspector-tool-section{padding:var(--vgai-space-4);margin-top:var(--vgai-space-2);border-top:var(--vgai-stroke-resting) solid var(--vgai-structural-divider)}.vgai-xstate-node{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:var(--vgai-space-1);padding:var(--vgai-space-3) var(--vgai-space-5);color:var(--vgai-content-primary);background:var(--vgai-surface-panel);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);font-size:var(--vgai-font-base);text-align:left;transition:background .1s var(--vgai-ease-standard),border-color .1s var(--vgai-ease-standard),box-shadow .1s var(--vgai-ease-standard)}.vgai-xstate-node:hover{background:var(--vgai-surface-chrome)}.vgai-xstate-node[data-active=true]{border-color:var(--vgai-success)}.vgai-xstate-node[data-selected=true]{border-color:var(--vgai-selection-border);box-shadow:0 0 0 var(--vgai-stroke-resting) var(--vgai-selection-border)}.vgai-xstate-node-type{color:var(--vgai-content-dim);transition:color .1s var(--vgai-ease-standard)}.vgai-xstate-node:hover .vgai-xstate-node-type,.vgai-xstate-node[data-selected=true] .vgai-xstate-node-type{color:var(--vgai-content-primary)}.vgai-stack{display:flex;min-width:0;flex-direction:column}.vgai-inline{display:flex;min-width:0}.vgai-spacer{min-width:0;flex:1 1 auto}.vgai-actions{flex:0 0 auto}.vgai-divider{flex:0 0 auto;background:var(--vgai-boundary-default)}.vgai-divider[data-orientation=horizontal]{width:100%;height:var(--vgai-stroke-resting)}.vgai-divider[data-orientation=vertical]{width:var(--vgai-stroke-resting);height:var(--vgai-control-compact-height)}.vgai-text{min-width:0;margin:0;color:var(--vgai-content-primary);font-size:var(--vgai-font-base);font-weight:400;line-height:1.35}.vgai-text[data-variant=caption]{font-size:var(--vgai-font-sm)}.vgai-text[data-variant=body]{font-size:var(--vgai-font-base)}.vgai-text[data-variant=label]{font-size:var(--vgai-font-base);font-weight:600}.vgai-text[data-variant=title]{font-size:var(--vgai-font-md);font-weight:600}.vgai-text[data-variant=heading]{font-size:var(--vgai-font-xl);font-weight:600}.vgai-text[data-variant=display]{font-size:var(--vgai-font-heading);font-weight:600}.vgai-text[data-variant=code]{font-family:var(--vgai-font-mono);font-size:var(--vgai-font-base)}.vgai-text[data-tone=muted]{color:var(--vgai-content-muted)}.vgai-text[data-tone=dim]{color:var(--vgai-content-dim)}.vgai-text[data-tone=accent]{color:var(--vgai-accent)}.vgai-text[data-tone=danger]{color:var(--vgai-danger)}.vgai-text[data-tone=warning]{color:var(--vgai-warn)}.vgai-text[data-tone=success]{color:var(--vgai-success)}.vgai-text[data-truncate=true]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vgai-text[data-selectable=true]{user-select:text}.vgai-surface{min-width:0;color:var(--vgai-content-primary);background:var(--vgai-surface-panel);box-sizing:border-box}.vgai-surface[data-variant=shell]{background:var(--vgai-surface-shell)}.vgai-surface[data-variant=panel]{background:var(--vgai-surface-panel)}.vgai-surface[data-variant=chrome]{background:var(--vgai-surface-chrome)}.vgai-surface[data-variant=raised]{background:var(--vgai-surface-raised)}.vgai-surface[data-variant=inset]{background:var(--vgai-surface-inset)}.vgai-surface[data-variant=overlay]{background:var(--vgai-surface-overlay)}.vgai-surface[data-border=true]{border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default)}.vgai-surface[data-scroll=true]{min-height:0;overflow:auto}.vgai-dialog-scrim{position:fixed;inset:0;z-index:var(--vgai-z-modal);display:flex;align-items:center;justify-content:center;padding:var(--vgai-space-10);background:var(--vgai-scrim);backdrop-filter:var(--vgai-scrim-backdrop-filter, none);-webkit-backdrop-filter:var(--vgai-scrim-backdrop-filter, none);pointer-events:auto;box-sizing:border-box}.vgai-dialog-scrim[data-variant=command]{align-items:flex-start;padding-top:calc(var(--vgai-space-12) + var(--vgai-space-10) + var(--vgai-space-8))}.vgai-dialog{display:flex;width:min(520px,calc(100vw - 48px));max-height:calc(100vh - 48px);min-width:360px;flex-direction:column;overflow:hidden;color:var(--vgai-content-primary);background:var(--vgai-glass-regular-bg, var(--vgai-surface-chrome));border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-lg);box-shadow:var(--vgai-shadow-lg);box-sizing:border-box}.vgai-dialog[data-size=compact]{width:min(420px,calc(100vw - 48px))}.vgai-dialog[data-size=wide]{width:min(920px,calc(100vw - 48px));height:min(720px,calc(100vh - 48px))}.vgai-dialog[data-variant=command]{width:min(500px,calc(100vw - 48px));max-height:min(480px,calc(100vh - 48px))}.vgai-command-results{min-height:0;max-height:400px;flex:1;overflow-y:auto}.vgai-command-category{padding:var(--vgai-space-3) calc(var(--vgai-space-6) + var(--vgai-space-1)) var(--vgai-space-1);color:var(--vgai-content-muted);font-size:var(--vgai-font-base);font-weight:600;letter-spacing:.5px;text-transform:uppercase}.vgai-command-row{display:flex;align-items:center;gap:var(--vgai-space-4);padding:5px calc(var(--vgai-space-6) + var(--vgai-space-1));cursor:pointer}.vgai-command-row[data-highlighted=true]{background:var(--vgai-selection-bg)}.vgai-command-icon{width:14px;flex-shrink:0;color:var(--vgai-content-dim);font-size:var(--vgai-font-sm);text-align:center}.vgai-command-label{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vgai-command-shortcut{flex-shrink:0;color:var(--vgai-content-dim);font-size:var(--vgai-font-base)}.vgai-command-empty{padding:var(--vgai-space-8) calc(var(--vgai-space-6) + var(--vgai-space-1));color:var(--vgai-content-dim);text-align:center}.vgai-dialog-header{padding:var(--vgai-space-8) var(--vgai-space-10);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-structural-divider)}.vgai-dialog-body{min-height:0;padding:var(--vgai-space-8) var(--vgai-space-10);overflow:auto}.vgai-dialog-footer{justify-content:flex-end;padding:var(--vgai-space-6) var(--vgai-space-10);border-top:var(--vgai-stroke-resting) solid var(--vgai-boundary-default)}.vgai-dialog-field{display:grid;min-width:0;gap:var(--vgai-space-2)}.vgai-dialog-field>.vgai-input{width:100%}.vgai-joined-field{align-items:stretch;gap:0}.vgai-joined-field>.vgai-input{width:100%;border-top-right-radius:0;border-bottom-right-radius:0}.vgai-joined-field-suffix{display:inline-flex;flex:0 0 auto;align-items:center;padding:0 var(--vgai-space-4);color:var(--vgai-content-dim);background:var(--vgai-surface-raised);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-left:0;border-radius:0 var(--vgai-radius-sm) var(--vgai-radius-sm) 0;white-space:nowrap}.vgai-menu,.vgai-popover,.vgai-dialog{--vgai-content-primary: var(--vgai-content-primary-on-bright);--vgai-content-muted: var(--vgai-content-muted-on-bright);--vgai-content-dim: var(--vgai-content-dim-on-bright);--vgai-content-text-shadow: var(--vgai-content-text-shadow-on-bright);--vgai-content-frost-bg: var(--vgai-content-frost-bg-on-bright);--vgai-text-1: var(--vgai-content-primary);--vgai-text-2: var(--vgai-content-muted);--vgai-text-3: var(--vgai-content-dim);text-shadow:var(--vgai-content-text-shadow, none);backdrop-filter:var(--vgai-glass-regular-backdrop-filter, none);-webkit-backdrop-filter:var(--vgai-glass-regular-backdrop-filter, none)}.vgai-menu{background:var(--vgai-glass-regular-bg, var(--vgai-surface-shell));border:1px solid var(--vgai-border-1);border-radius:var(--vgai-radius-md);box-shadow:var(--vgai-shadow-md);padding:var(--vgai-space-2);z-index:var(--vgai-z-dropdown)}.vgai-menu-item{display:flex;align-items:center;width:100%;min-height:var(--vgai-control-default-height);box-sizing:border-box;border:0;background:transparent;padding:var(--vgai-space-2) var(--vgai-space-4);border-radius:var(--vgai-radius-sm);font-size:var(--vgai-font-base);color:var(--vgai-text-1);cursor:pointer;user-select:none;font-family:inherit;text-align:left;white-space:nowrap}.vgai-menu-item:hover{background:var(--vgai-selection-bg)}.vgai-menu-item:focus-visible{outline:var(--vgai-focus-ring);outline-offset:-1px}.vgai-menu-item:disabled{color:var(--vgai-text-3);cursor:default}.vgai-menu-item:disabled:hover{background:transparent}.vgai-menu-separator{height:var(--vgai-stroke-resting);margin:var(--vgai-space-1) var(--vgai-space-2);border:0;background:var(--vgai-boundary-default)}.vgai-menu-trigger{height:100%;min-height:var(--vgai-control-compact-height);border:0;border-radius:var(--vgai-radius-sm);background:transparent;color:var(--vgai-content-menu);padding:0 var(--vgai-space-4);cursor:pointer;font:inherit}.vgai-menu-trigger:hover,.vgai-menu-trigger[aria-expanded=true]{color:var(--vgai-text-1);background:var(--vgai-bg-3)}.vgai-menu-trigger:focus-visible{outline:var(--vgai-focus-ring);outline-offset:-1px}[data-vgai-chrome=islands] .vgai-glass-regular-panel{color:var(--vgai-content-primary);text-shadow:var(--vgai-content-text-shadow, none);background:var( --vgai-glass-regular-panel-adaptive-bg, var(--vgai-glass-regular-panel-bg, var(--vgai-surface-panel)) );backdrop-filter:var(--vgai-glass-regular-panel-backdrop-filter, none);-webkit-backdrop-filter:var(--vgai-glass-regular-panel-backdrop-filter, none);border:var(--vgai-stroke-resting) solid color-mix(in srgb,var(--vgai-content-primary) 22%,transparent);border-radius:var(--vgai-radius-lg);box-shadow:var(--vgai-card-specular-shadow, var(--vgai-shadow-lg))}[data-vgai-chrome=islands] .vgai-glass-regular-panel .vgai-content-frost{background:var( --vgai-glass-regular-content-adaptive-bg, var(--vgai-content-frost-bg, transparent) );backdrop-filter:none;-webkit-backdrop-filter:none}.vgai-toolbar{display:flex;min-width:0;min-height:var(--vgai-local-toolbar-height);align-items:center;gap:var(--vgai-space-2);padding:0 var(--vgai-space-3);color:var(--vgai-content-primary);background:transparent;border-bottom:var(--vgai-stroke-resting) solid var(--vgai-structural-divider);box-sizing:border-box}.vgai-toolbar[data-compact=true]{min-height:var(--vgai-control-default-height);padding-inline:var(--vgai-space-2)}.vgai-toolbar-group{display:inline-flex;min-width:0;align-items:center;gap:var(--vgai-space-2)}.vgai-toolbar-divider{width:1px;height:16px;flex:0 0 auto;margin:0 var(--vgai-space-1);background:var(--vgai-boundary-default)}.vgai-floating-toolbar{position:relative;min-height:auto;padding:var(--vgai-space-2) var(--vgai-space-3);border:var(--vgai-stroke-resting) solid var(--vgai-island-border-color, var(--vgai-boundary-default));border-radius:var(--vgai-island-radius, var(--vgai-radius-md));background:var(--vgai-ambient-lift, none),var(--vgai-backdrop-dim, none),var(--vgai-island-surface, color-mix(in srgb, var(--vgai-surface-panel) 90%, transparent));box-shadow:var(--vgai-island-shadow, var(--vgai-shadow-sm));backdrop-filter:var(--vgai-island-backdrop-filter, blur(8px));-webkit-backdrop-filter:var(--vgai-island-backdrop-filter, blur(8px));text-shadow:var(--vgai-content-text-shadow, none);pointer-events:auto}.vgai-floating-toolbar .vgai-btn[aria-pressed=true]{color:var(--vgai-content-primary);background:var(--vgai-selection-bg);border-color:transparent}.vgai-floating-toolbar[data-selection-mode=single] .vgai-btn[aria-pressed=true]{color:var(--vgai-accent);background:var(--vgai-neutral-active)}.vgai-floating-toolbar .vgai-btn[data-shape=segment]{width:calc(var(--vgai-control-comfortable-height) + 12px)}.vgai-floating-toolbar:before{content:"";position:absolute;inset:0;z-index:var(--vgai-z-base);padding:1px;border-radius:inherit;background:var(--vgai-island-specular-ring, none);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0);pointer-events:none}.vgai-floating-toolbar>*{position:relative;z-index:1}.vgai-viewport-navigation{--vgai-control-compact-height: 28px;--vgai-control-default-height: 28px;--vgai-control-comfortable-height: 28px}.vgai-viewport-navigation .vgai-btn[data-variant=ghost]{color:color-mix(in srgb,var(--vgai-content-primary) 85.56%,transparent)}[data-vgai-chrome=islands] .vgai-chrome-island:not(:empty){position:relative;border:var(--vgai-stroke-resting) solid var(--vgai-island-border-color, var(--vgai-boundary-default));border-radius:var(--vgai-island-radius, var(--vgai-radius-md));background:var(--vgai-ambient-lift, none),var(--vgai-backdrop-dim, none),var(--vgai-island-surface, color-mix(in srgb, var(--vgai-surface-panel) 90%, transparent));box-shadow:var(--vgai-island-shadow, var(--vgai-shadow-sm));backdrop-filter:var(--vgai-island-backdrop-filter, blur(8px));-webkit-backdrop-filter:var(--vgai-island-backdrop-filter, blur(8px));text-shadow:var(--vgai-content-text-shadow, none);box-sizing:border-box;pointer-events:auto}[data-vgai-chrome=islands] .vgai-chrome-island:not(:empty):before{content:"";position:absolute;inset:0;z-index:0;padding:1px;border-radius:inherit;background:var(--vgai-island-specular-ring, none);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box exclude,linear-gradient(#000 0 0);pointer-events:none}[data-vgai-chrome=islands] .vgai-chrome-island:not(:empty)>*{position:relative;z-index:1}[data-vgai-chrome=islands] .vgai-chrome-island[data-island-scale=compact]:not(:empty){border-radius:12px;box-shadow:var(--vgai-shadow-sm)}[data-vgai-chrome=islands] .vgai-chrome-island[data-island-scale=compact]:not(:empty):before{opacity:.55}[data-vgai-chrome=islands] .vgai-camera-info.vgai-chrome-island:not(:empty){pointer-events:none}[data-vgai-chrome=islands] .vgai-performance-overlay.vgai-chrome-island[data-enabled=true]:not(:empty){border-color:var(--vgai-accent)}[data-vgai-chrome=islands] .vgai-chrome-island .vgai-btn,.vgai-floating-toolbar .vgai-btn{border-radius:var(--vgai-island-control-radius, var(--vgai-radius-sm))}[data-vgai-chrome=islands] .vgai-btn.vgai-chrome-island:not(:empty){border-radius:var(--vgai-island-control-radius, var(--vgai-radius-sm))}[data-vgai-chrome=islands] .vgai-btn.vgai-chrome-island[data-variant=primary]:not(:empty){background:var(--vgai-island-primary-bg, var(--vgai-accent))}.vgai-split-button{display:inline-flex;min-width:0;align-items:stretch}.vgai-split-button>.vgai-btn:first-child,.vgai-split-button>:first-child>.vgai-btn{border-top-right-radius:0;border-bottom-right-radius:0}.vgai-split-button>.vgai-btn+.vgai-btn,.vgai-split-button>*+.vgai-btn,.vgai-split-button>*+*>.vgai-btn{min-width:20px;padding-inline:var(--vgai-space-1);border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.vgai-keycap{padding:1px var(--vgai-space-2);color:var(--vgai-content-primary);background:var(--vgai-surface-raised);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-sm);font-family:var(--vgai-font-mono);font-size:var(--vgai-font-sm)}.vgai-viewport-toolbar{position:absolute;top:var(--vgai-viewport-overlay-top, var(--vgai-space-4));z-index:calc(var(--vgai-z-dropdown, 1000) - 1);isolation:isolate}.vgai-viewport-toolbar-left{left:var(--vgai-space-4)}.vgai-viewport-toolbar-right{right:var(--vgai-space-4)}[data-vgai-chrome=islands]{--vgai-viewport-overlay-hud-top: 54px}[data-vgai-chrome=islands] .vgai-editor-shell:has(.vgai-workspace-dock[data-vgai-backdrop]){--vgai-viewport-overlay-top: 56px;--vgai-viewport-overlay-hud-top: 102px}.vgai-viewport-popover-anchor{position:relative;display:inline-flex;align-items:center}.vgai-snap-popover{position:absolute;top:calc(100% + var(--vgai-space-2));left:0;z-index:var(--vgai-z-dropdown);width:170px;padding:var(--vgai-space-4)}.vgai-helpers-menu{position:absolute;top:calc(100% + var(--vgai-space-2));right:0;z-index:var(--vgai-z-dropdown);min-width:140px}.vgai-menu-check{display:inline-flex;width:14px;flex:0 0 auto;justify-content:center;margin-right:var(--vgai-space-2)}.vgai-selectable{transition:background-color .12s var(--vgai-ease-standard),border-color .12s var(--vgai-ease-standard),color .12s var(--vgai-ease-standard)}.vgai-selectable:hover{background:var(--vgai-neutral-hover)}.vgai-selectable[data-selected=true]{background:var(--vgai-selection-bg)}.vgai-list-button{display:block;width:100%;min-width:0;border:0;border-left:var(--vgai-stroke-active) solid transparent;background:transparent;color:var(--vgai-content-muted);padding:var(--vgai-space-3) var(--vgai-space-4);text-align:left;font:inherit;cursor:pointer;box-sizing:border-box}.vgai-list-button:hover{color:var(--vgai-content-primary);background:var(--vgai-neutral-hover)}.vgai-list-button[data-selected=true]{color:var(--vgai-content-primary);background:var(--vgai-selection-bg)}.vgai-list-button[data-selected=true][data-accent=bar]{border-left-color:var(--vgai-selection-indicator)}.vgai-list-button:disabled{opacity:.5;cursor:default}.vgai-list-button:focus-visible{outline:var(--vgai-focus-ring);outline-offset:-2px}.vgai-playbar{pointer-events:auto}.vgai-play-edit-regime{display:inline-flex;width:var(--vgai-control-compact-height);height:var(--vgai-control-compact-height);align-items:center;justify-content:center;color:var(--vgai-warn)}.vgai-play-edit-regime[data-regime=overlay]{color:var(--vgai-success)}.vgai-playbar-popover-anchor{position:relative}.vgai-resolution-menu{z-index:var(--vgai-z-dropdown);min-width:220px}.vgai-resolution-menu [aria-checked=true]{color:var(--vgai-content-primary);background:var(--vgai-selection-bg)}.vgai-camera-info{position:absolute;left:var(--vgai-space-4);bottom:var(--vgai-space-4);padding:var(--vgai-space-2) var(--vgai-space-3);border-radius:var(--vgai-radius-md);backdrop-filter:blur(8px);pointer-events:none}.vgai-camera-preview{position:absolute;z-index:calc(var(--vgai-z-dropdown, 1000) - 2);left:var(--vgai-space-4);bottom:52px;width:clamp(220px,26vw,360px);max-width:calc(100% - var(--vgai-space-8));overflow:visible;border-radius:var(--vgai-radius-md);background:transparent;box-shadow:var(--vgai-shadow-md)}.vgai-camera-preview-header{min-height:28px;flex-wrap:nowrap;padding:0 var(--vgai-space-2);border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-bottom:0;border-radius:var(--vgai-radius-md) var(--vgai-radius-md) 0 0;background:var(--vgai-surface-overlay);backdrop-filter:blur(12px)}.vgai-camera-preview-title{min-width:0;flex:1}.vgai-camera-preview-image{width:100%;min-height:120px;overflow:hidden;border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-top:0;border-radius:0 0 var(--vgai-radius-md) var(--vgai-radius-md);cursor:zoom-in}.vgai-camera-preview-menu-anchor{position:relative;display:flex}.vgai-camera-preview-menu{position:absolute;z-index:var(--vgai-z-dropdown);top:calc(100% + var(--vgai-space-1));right:0;display:grid;width:max-content;min-width:210px;padding:var(--vgai-space-1)}.vgai-camera-preview-menu .vgai-btn{justify-content:flex-start}.vgai-camera-view-banner{position:absolute;z-index:calc(var(--vgai-z-dropdown, 1000) - 1);top:var(--vgai-viewport-overlay-top, var(--vgai-space-4));left:50%;max-width:calc(100% - 520px);padding:var(--vgai-space-1) var(--vgai-space-2);border-radius:var(--vgai-radius-full);transform:translate(-50%);backdrop-filter:blur(12px)}.vgai-camera-guides{position:absolute;z-index:calc(var(--vgai-z-sticky, 100) - 1);inset:0;overflow:hidden;pointer-events:none}.vgai-camera-guide{position:absolute;background:color-mix(in srgb,var(--vgai-content-primary) 40%,transparent);box-shadow:0 0 1px color-mix(in srgb,var(--vgai-surface-shell) 70%,transparent)}.vgai-camera-guide-v1,.vgai-camera-guide-v2{top:0;bottom:0;width:1px}.vgai-camera-guide-v1{left:33.333%}.vgai-camera-guide-v2{left:66.666%}.vgai-camera-guide-h1,.vgai-camera-guide-h2{right:0;left:0;height:1px}.vgai-camera-guide-h1{top:33.333%}.vgai-camera-guide-h2{top:66.666%}.vgai-camera-safe-frame{position:absolute;inset:6%;border:1px solid color-mix(in srgb,var(--vgai-content-primary) 48%,transparent)}.vgai-camera-center-mark{position:absolute;top:50%;left:50%;width:18px;height:18px;transform:translate(-50%,-50%)}.vgai-camera-center-mark:before,.vgai-camera-center-mark:after{position:absolute;background:color-mix(in srgb,var(--vgai-content-primary) 60%,transparent);content:""}.vgai-camera-center-mark:before{top:8px;left:0;width:18px;height:1px}.vgai-camera-center-mark:after{top:0;left:8px;width:1px;height:18px}@media(max-width:900px){.vgai-camera-view-banner{top:calc(var(--vgai-viewport-overlay-top, var(--vgai-space-4)) + 44px);max-width:calc(100% - var(--vgai-space-8))}}.vgai-react-canvas-controls{position:absolute;right:var(--vgai-space-6);bottom:var(--vgai-space-6);z-index:var(--vgai-z-sticky);overflow:visible}.vgai-canvas-scene-navigation{position:absolute;top:calc(var(--vgai-viewport-overlay-top, var(--vgai-space-4)) + 44px);left:var(--vgai-space-4);z-index:calc(var(--vgai-z-dropdown, 1000) - 1);overflow:visible}.vgai-react-viewport-select{border-color:transparent;background-color:transparent}.vgai-tabs{display:flex;height:var(--vgai-panel-header-height);min-width:0;align-items:stretch;gap:var(--vgai-space-1);padding-inline:var(--vgai-space-2);overflow:hidden;background:var(--vgai-surface-sticky);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-structural-divider)}.vgai-tab{position:relative;display:inline-flex;min-width:0;max-width:220px;align-items:center;gap:var(--vgai-space-2);padding:0 var(--vgai-space-4);color:var(--vgai-content-muted);background:transparent;border:0;font:inherit;cursor:pointer}.vgai-tab:hover{color:var(--vgai-content-primary);background:var(--vgai-surface-raised)}.vgai-tab[data-selected=true]{color:var(--vgai-content-primary);background:var(--vgai-surface-panel)}.vgai-tab[data-selected=true]:after{position:absolute;right:var(--vgai-space-4);bottom:0;left:var(--vgai-space-4);height:var(--vgai-stroke-active);border-radius:2px 2px 0 0;background:var(--vgai-selection-indicator);content:""}.vgai-tab:focus-visible{outline:var(--vgai-focus-ring);outline-offset:-2px}.vgai-tab-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vgai-tab-dirty{width:6px;height:6px;flex:0 0 auto;border-radius:var(--vgai-radius-full);background:var(--vgai-warn)}.vgai-tab-badge{display:inline-flex;width:max-content;max-width:100%;min-width:15px;height:15px;align-items:center;justify-content:center;padding:0 var(--vgai-space-2);border-radius:var(--vgai-radius-full);color:var(--vgai-surface-shell);background:var(--vgai-content-muted);font-size:var(--vgai-font-xs);line-height:var(--vgai-leading-tight);box-sizing:border-box}.vgai-badge{display:inline-flex;flex:0 0 auto;align-self:center;width:fit-content;max-width:100%;min-width:0;min-height:18px;align-items:center;justify-content:center;padding:1px var(--vgai-space-2);overflow:hidden;border-radius:var(--vgai-radius-sm);color:var(--vgai-surface-shell);background:var(--vgai-content-muted);font-size:var(--vgai-font-xs);line-height:var(--vgai-leading-tight);white-space:nowrap;text-overflow:ellipsis;vertical-align:middle;box-sizing:border-box}.vgai-badge[data-shape=count]{min-width:15px;min-height:15px;height:15px;padding:0 var(--vgai-space-2);border-radius:var(--vgai-radius-full)}.vgai-tree{min-width:0;color:var(--vgai-content-primary)}.vgai-tree-row{display:flex;height:var(--vgai-tree-row-height);min-width:0;align-items:center;gap:var(--vgai-space-2);padding-right:var(--vgai-space-2);color:var(--vgai-content-muted);border-left:var(--vgai-stroke-active) solid transparent;box-sizing:border-box;cursor:default;user-select:none}.vgai-tree-row[data-row-alt]{background:var(--vgai-surface-row-alt)}.vgai-tree-body[data-vgai-region=outliner]{background-image:repeating-linear-gradient(to bottom,transparent 0,transparent var(--vgai-tree-row-height),var(--vgai-surface-row-alt) var(--vgai-tree-row-height),var(--vgai-surface-row-alt) calc(var(--vgai-tree-row-height) * 2));background-attachment:local}.vgai-tree-row:hover{color:var(--vgai-content-primary);background:var(--vgai-neutral-hover)}.vgai-tree-row[data-selected=true]{color:var(--vgai-content-primary);background-image:linear-gradient(var(--vgai-tree-row-selected-bg),var(--vgai-tree-row-selected-bg));background-repeat:no-repeat;background-position:0 1px;background-size:100% calc(100% - 2px)}.vgai-tree-row[data-selection-active=true]{background-image:linear-gradient(var(--vgai-tree-row-active-bg),var(--vgai-tree-row-active-bg)),linear-gradient(var(--vgai-tree-row-active-border),var(--vgai-tree-row-active-border));background-position:1px 2px,0 1px;background-size:calc(100% - 2px) calc(100% - 4px),100% calc(100% - 2px)}.vgai-tree-row[data-muted=true]{color:var(--vgai-content-dim)}.vgai-tree-row[data-dragging=true]{color:var(--vgai-content-muted);background:var(--vgai-neutral-hover);outline:1px dashed var(--vgai-boundary-strong);outline-offset:-1px}.vgai-tree-indent-guide{position:absolute;width:.5px;background:var(--vgai-tree-indent-guide);pointer-events:none}.vgai-tree-remote-selection{display:inline-flex;flex:0 0 auto;align-items:center}.vgai-tree-remote-selection>span{width:7px;height:7px;margin-left:-2px;border:1px solid var(--vgai-surface-panel);border-radius:var(--vgai-radius-full)}.vgai-tree-row:focus-visible{outline:var(--vgai-focus-ring);outline-offset:-2px}.vgai-tree-row{--vgai-tree-glyph-plate-width: var(--vgai-tree-indent);--vgai-tree-glyph-plate-height: calc(var(--vgai-tree-row-height) - var(--vgai-space-1));--vgai-tree-glyph-plate-radius: 5px}.vgai-tree-type-glyph{position:relative;z-index:0}.vgai-tree-type-glyph>*{opacity:.8}.vgai-tree-row[data-selection-active=true] .vgai-tree-type-glyph:before{content:"";position:absolute;z-index:-1;top:50%;left:50%;box-sizing:border-box;width:var(--vgai-tree-glyph-plate-width);height:var(--vgai-tree-glyph-plate-height);transform:translate(-50%,-50%);border:var(--vgai-stroke-resting) solid color-mix(in srgb,var(--vgai-content-muted) 20.3%,transparent);border-radius:var(--vgai-tree-glyph-plate-radius);background:color-mix(in srgb,var(--vgai-content-muted) 26%,transparent);pointer-events:none}.vgai-tree-datablock{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;flex-shrink:0;vertical-align:middle;width:var(--vgai-tree-glyph-plate-width);height:var(--vgai-tree-glyph-plate-height);margin-left:var(--vgai-tree-indent);font-size:var(--vgai-icon-sm);border:var(--vgai-stroke-resting) solid transparent;border-radius:var(--vgai-tree-glyph-plate-radius)}.vgai-tree-datablock>*{opacity:.8}.vgai-tree-datablock[data-active=true]{background:var(--vgai-tree-datablock-fill);border-color:var(--vgai-tree-datablock-border)}.vgai-tree-row-leading{display:inline-flex;width:14px;flex:0 0 auto;justify-content:center}.vgai-tree-row-label{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vgai-tree-row-actions{display:inline-flex;flex:0 0 auto;align-items:center;gap:var(--vgai-space-1)}.vgai-tree-row .vgai-btn[data-variant=ghost]:not(.vgai-tree-caret){color:var(--vgai-content-primary)}.vgai-tree-row .vgai-btn.vgai-tree-caret{color:var(--vgai-content-muted)}.vgai-field-group{display:grid;gap:var(--vgai-space-3);padding:var(--vgai-space-4)}.vgai-field-row{display:grid;grid-template-columns:minmax(64px,84px) minmax(0,1fr);min-width:0;align-items:center;gap:var(--vgai-space-3)}.vgai-field-row[data-compact=true]{grid-template-columns:minmax(52px,72px) minmax(0,1fr)}.vgai-field-label{min-width:0;color:var(--vgai-content-muted);font-size:var(--vgai-font-base)}.vgai-field-control{display:flex;min-width:0;align-items:center;gap:var(--vgai-space-2)}.vgai-field-hint{grid-column:2;color:var(--vgai-content-dim);font-size:var(--vgai-font-sm);line-height:1.35}.vgai-state-surface{display:flex;min-width:0;min-height:120px;flex-direction:column;align-items:center;justify-content:center;gap:var(--vgai-space-3);padding:var(--vgai-space-8);color:var(--vgai-content-muted);text-align:center;box-sizing:border-box}.vgai-state-surface[data-compact=true]{min-height:64px;padding:var(--vgai-space-4)}.vgai-state-surface[data-tone=error]{color:var(--vgai-danger)}.vgai-state-surface[data-tone=success]{color:var(--vgai-success)}.vgai-state-surface[data-tone=loading] .vgai-state-surface-icon{animation:vgai-editor-spin .8s linear infinite}.vgai-state-surface-icon{color:currentColor;font-size:var(--vgai-font-2xl)}.vgai-state-surface-title{color:var(--vgai-content-primary);font-size:var(--vgai-font-md)}.vgai-state-surface-description{max-width:42ch;color:var(--vgai-content-dim);line-height:var(--vgai-leading-normal)}.vgai-state-surface-action{margin-top:var(--vgai-space-2)}.vgai-banner{--vgai-banner-tone-tint: var(--vgai-accent-muted);display:flex;min-width:0;align-items:center;gap:var(--vgai-space-3);padding:var(--vgai-space-3) var(--vgai-space-5);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-accent);color:var(--vgai-accent);background:var(--vgai-banner-tone-tint);box-sizing:border-box}.vgai-banner[data-tone=warning]{--vgai-banner-tone-tint: var(--vgai-warn-muted);color:var(--vgai-warn);border-color:var(--vgai-warn)}.vgai-banner[data-tone=error]{--vgai-banner-tone-tint: var(--vgai-danger-faint);color:var(--vgai-danger);border-color:var(--vgai-danger)}.vgai-banner[data-tone=success]{--vgai-banner-tone-tint: var(--vgai-success-muted);color:var(--vgai-success);border-color:var(--vgai-success)}[data-vgai-chrome=islands] .vgai-banner{background:linear-gradient(var(--vgai-banner-tone-tint),var(--vgai-banner-tone-tint)),var(--vgai-island-surface, transparent);backdrop-filter:var(--vgai-island-backdrop-filter, none);-webkit-backdrop-filter:var(--vgai-island-backdrop-filter, none);text-shadow:var(--vgai-content-text-shadow, none)}.vgai-banner-icon{display:inline-flex;flex:0 0 auto}.vgai-banner-content{min-width:0;flex:1;color:var(--vgai-content-primary)}.vgai-banner-actions{display:flex;flex:0 0 auto;align-items:center;gap:var(--vgai-space-2)}.vgai-popover{color:var(--vgai-content-primary);background:var(--vgai-glass-regular-bg, var(--vgai-surface-chrome));border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-md);box-shadow:var(--vgai-shadow-md)}.vgai-drop-indicator{position:absolute;z-index:var(--vgai-z-overlay-low);pointer-events:none;border:var(--vgai-stroke-active) solid var(--vgai-selection-border);background:var(--vgai-selection-bg);box-sizing:border-box}.vgai-drop-indicator[data-position=before]{inset:0 0 auto;height:var(--vgai-stroke-active)}.vgai-drop-indicator[data-position=after]{inset:auto 0 0;height:var(--vgai-stroke-active)}.vgai-drop-indicator[data-position=inside]{inset:1px;border-radius:var(--vgai-radius-sm)}.vgai-model-tree-item{text-align:left}.vgai-btn.vgai-project-tool-card{display:grid;width:100%;height:auto;align-items:start;justify-content:normal;gap:var(--vgai-space-2);padding-block:var(--vgai-space-3);text-align:left}.vgai-resize-handle{position:relative;z-index:var(--vgai-z-overlay-low);flex:0 0 5px;background:transparent;touch-action:none}.vgai-resize-handle[data-orientation=vertical]{cursor:col-resize}.vgai-resize-handle[data-orientation=horizontal]{cursor:row-resize}.vgai-resize-handle:before{position:absolute;background:var(--vgai-boundary-default);content:"";transition:background-color 80ms var(--vgai-ease-standard),transform 80ms var(--vgai-ease-standard)}.vgai-resize-handle[data-orientation=vertical]:before{inset:0 auto 0 2px;width:1px}.vgai-resize-handle[data-orientation=horizontal]:before{inset:2px 0 auto;height:1px}.vgai-resize-handle:hover:before,.vgai-resize-handle:focus-visible:before{background:var(--vgai-selection-indicator)}.vgai-resize-handle[data-orientation=vertical]:hover:before,.vgai-resize-handle[data-orientation=vertical]:focus-visible:before{transform:scaleX(2)}.vgai-resize-handle[data-orientation=horizontal]:hover:before,.vgai-resize-handle[data-orientation=horizontal]:focus-visible:before{transform:scaleY(2)}.vgai-editor-theme,.vgai-editor-theme :where(*):not([data-vgai-world-surface],[data-vgai-world-surface] *){scrollbar-width:thin;scrollbar-color:var(--vgai-bg-3) transparent}.vgai-editor-theme::-webkit-scrollbar,.vgai-editor-theme :where(*):not([data-vgai-world-surface],[data-vgai-world-surface] *)::-webkit-scrollbar{width:9px;height:9px}.vgai-editor-theme::-webkit-scrollbar-track,.vgai-editor-theme :where(*):not([data-vgai-world-surface],[data-vgai-world-surface] *)::-webkit-scrollbar-track{background:transparent}.vgai-editor-theme::-webkit-scrollbar-thumb,.vgai-editor-theme :where(*):not([data-vgai-world-surface],[data-vgai-world-surface] *)::-webkit-scrollbar-thumb{background-color:var(--vgai-bg-3);border-radius:var(--vgai-radius-full);border:2px solid var(--vgai-bg-1);background-clip:padding-box}.vgai-editor-theme::-webkit-scrollbar-thumb:hover,.vgai-editor-theme :where(*):not([data-vgai-world-surface],[data-vgai-world-surface] *)::-webkit-scrollbar-thumb:hover{background-color:var(--vgai-border-2)}.vgai-editor-theme::-webkit-scrollbar-corner,.vgai-editor-theme :where(*):not([data-vgai-world-surface],[data-vgai-world-surface] *)::-webkit-scrollbar-corner{background:transparent}@keyframes vgai-editor-spin{to{transform:rotate(360deg)}}@keyframes vgai-editor-blink{0%,to{opacity:1}50%{opacity:0}}.vgai-anim-spin{animation:vgai-editor-spin .8s linear infinite}.vgai-anim-blink{animation:vgai-editor-blink 1s step-end infinite}.vgai-btn,.vgai-list-button,.vgai-split-button,.vgai-menu,.vgai-menu-trigger,.vgai-field-trigger,.vgai-inspector-group-trigger,.vgai-status-action,.vgai-toolbar,.vgai-dock-document-toolbar,.vgai-viewport-toolbar,.vgai-floating-toolbar,.vgai-playbar,.vgai-project-assets-toolbar,.vgai-section-header,.vgai-tabs,.vgai-tree-row,.vgai-asset-tree-row,.vgai-project-asset-entry,.vgai-model-tree-item,.vgai-number-input-label,.vgai-number-input-scrub,.vgai-scrub-label,.vgai-resize-handle,[data-vgai-noselect] button,[data-vgai-noselect] [role=button]{user-select:none}[data-vgai-noselect] input,[data-vgai-noselect] textarea,[data-vgai-noselect] [contenteditable=true],.vgai-toolbar input,.vgai-dock-document-toolbar input,.vgai-project-assets-toolbar input,.vgai-tree-row input,.vgai-selectable-text{user-select:text}.vgai-light-explorer{display:flex;flex-direction:column;min-width:0;height:100%;color:var(--vgai-content-primary);background:var(--vgai-surface-panel)}.vgai-light-explorer-toolbar{display:flex;align-items:center;gap:var(--vgai-space-2);min-height:38px;padding:var(--vgai-space-2) var(--vgai-space-3);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-structural-divider)}.vgai-light-explorer-toolbar>.vgai-input{width:min(280px,38vw)}.vgai-light-explorer-summary{margin-left:auto;color:var(--vgai-content-muted);font-size:var(--vgai-font-small);white-space:nowrap}.vgai-light-explorer-scroll{min-height:0;flex:1;overflow:auto}.vgai-light-explorer-table{width:100%;min-width:760px;border-collapse:separate;border-spacing:0;font-size:var(--vgai-font-base)}.vgai-light-explorer-table th{position:sticky;top:0;z-index:1;height:30px;padding:0 var(--vgai-space-2);text-align:left;font-weight:var(--vgai-font-weight-medium);color:var(--vgai-content-muted);background:var(--vgai-surface-raised);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-structural-divider)}.vgai-light-explorer-table td{height:34px;padding:var(--vgai-space-1) var(--vgai-space-2);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-structural-divider);vertical-align:middle}.vgai-light-explorer-table tbody tr[data-selected=true] td{background:var(--vgai-selection-bg)}.vgai-light-explorer-table tbody tr:hover td{background:var(--vgai-neutral-hover)}.vgai-light-explorer-table tbody tr[data-selected=true]:hover td{background:var(--vgai-selection-bg)}.vgai-light-explorer-check-column,.vgai-light-explorer-table td:first-child,.vgai-light-explorer-table td:last-child{width:54px;text-align:center}.vgai-light-explorer-sort.vgai-btn,.vgai-light-explorer-name.vgai-btn{justify-content:flex-start;min-width:0;padding-inline:0}.vgai-light-explorer-name.vgai-btn{width:100%;color:var(--vgai-content-primary)}.vgai-light-explorer-type,.vgai-light-explorer-color span{color:var(--vgai-content-muted);font-family:var(--vgai-font-mono);font-size:var(--vgai-font-small)}.vgai-light-explorer-color{display:flex;align-items:center;gap:var(--vgai-space-2);white-space:nowrap}.vgai-light-explorer-table .vgai-number-input{width:86px}.vgai-light-explorer-unavailable{color:var(--vgai-content-dim)}.vgai-light-explorer-empty{padding:var(--vgai-space-4);color:var(--vgai-content-muted);font-style:italic}@media(prefers-reduced-motion:reduce){.vgai-anim-spin,.vgai-state-surface[data-tone=loading] .vgai-state-surface-icon{animation-duration:1.6s;animation-timing-function:steps(8,end)}.vgai-anim-blink{animation:none;opacity:1}.vgai-resize-handle:before{transition-property:background-color}}.vgai-project-work-conflict{color:var(--vgai-warn);font-size:var(--vgai-font-sm);text-align:left}