@fps-games/editor 0.2.1-beta.1 → 0.2.1-beta.3

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 (335) hide show
  1. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
  2. package/dist/agent-bridge/capabilities/ui-regions.js +16 -0
  3. package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
  4. package/dist/build-info.json +46 -46
  5. package/dist/internal/material-preview.d.ts +22 -0
  6. package/dist/internal/material-preview.d.ts.map +1 -0
  7. package/dist/internal/material-preview.js +186 -0
  8. package/dist/internal/material-preview.js.map +1 -0
  9. package/dist/internal/project-model-preview.d.ts +4 -0
  10. package/dist/internal/project-model-preview.d.ts.map +1 -0
  11. package/dist/internal/project-model-preview.js +359 -0
  12. package/dist/internal/project-model-preview.js.map +1 -0
  13. package/dist/local-editor-agent-context.d.ts +12 -1
  14. package/dist/local-editor-agent-context.d.ts.map +1 -1
  15. package/dist/local-editor-agent-context.js +47 -0
  16. package/dist/local-editor-agent-context.js.map +1 -1
  17. package/dist/local-editor-harness.d.ts +15 -2
  18. package/dist/local-editor-harness.d.ts.map +1 -1
  19. package/dist/local-editor-harness.js +326 -28
  20. package/dist/local-editor-harness.js.map +1 -1
  21. package/dist/local-editor-tools.d.ts +1 -0
  22. package/dist/local-editor-tools.d.ts.map +1 -1
  23. package/dist/local-editor-tools.js +3 -0
  24. package/dist/local-editor-tools.js.map +1 -1
  25. package/dist/playable-babylon-rendering.d.ts +8 -7
  26. package/dist/playable-babylon-rendering.d.ts.map +1 -1
  27. package/dist/playable-babylon-rendering.js +77 -32
  28. package/dist/playable-babylon-rendering.js.map +1 -1
  29. package/dist/playable-local-editor-host.d.ts +4 -0
  30. package/dist/playable-local-editor-host.d.ts.map +1 -1
  31. package/dist/playable-local-editor-host.js +27 -0
  32. package/dist/playable-local-editor-host.js.map +1 -1
  33. package/dist/playable-product-projection-preview.d.ts +2 -0
  34. package/dist/playable-product-projection-preview.d.ts.map +1 -1
  35. package/dist/playable-product-projection-preview.js +7 -4
  36. package/dist/playable-product-projection-preview.js.map +1 -1
  37. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  38. package/dist/playable-product-scene-capabilities.js +9 -3
  39. package/dist/playable-product-scene-capabilities.js.map +1 -1
  40. package/dist/playable-sdk.d.ts +1 -1
  41. package/dist/playable-sdk.d.ts.map +1 -1
  42. package/dist/playable-sdk.js +1 -1
  43. package/dist/playable-sdk.js.map +1 -1
  44. package/dist/playable-standard-project.d.ts +0 -1
  45. package/dist/playable-standard-project.d.ts.map +1 -1
  46. package/dist/playable-standard-project.js +17 -5
  47. package/dist/playable-standard-project.js.map +1 -1
  48. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts +4 -2
  49. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts.map +1 -1
  50. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js +301 -121
  51. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js.map +1 -1
  52. package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js +5 -4
  53. package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js.map +1 -1
  54. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts +4 -4
  55. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts.map +1 -1
  56. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js +1 -1
  57. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js.map +1 -1
  58. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts +2 -0
  59. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts.map +1 -1
  60. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js +12 -1
  61. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js.map +1 -1
  62. package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts +6 -3
  63. package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts.map +1 -1
  64. package/node_modules/@fps-games/babylon-renderer/dist/plugin.js +100 -39
  65. package/node_modules/@fps-games/babylon-renderer/dist/plugin.js.map +1 -1
  66. package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts +1 -3
  67. package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts.map +1 -1
  68. package/node_modules/@fps-games/babylon-renderer/dist/reference.js.map +1 -1
  69. package/node_modules/@fps-games/babylon-renderer/package.json +11 -8
  70. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
  71. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
  72. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
  73. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  74. package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
  75. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  76. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
  77. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
  78. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
  79. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
  80. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  81. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
  82. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  83. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
  84. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  85. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
  86. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  87. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
  88. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
  89. package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
  90. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  91. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
  92. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  93. package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
  94. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  95. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
  96. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
  97. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
  98. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
  99. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
  100. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
  101. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
  102. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
  103. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
  104. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
  105. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
  106. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
  107. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
  108. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
  109. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
  110. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
  111. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
  112. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
  113. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
  114. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
  115. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
  116. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
  117. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
  118. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
  119. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
  120. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
  121. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
  122. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
  123. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
  124. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
  125. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
  126. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
  127. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
  128. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
  129. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
  130. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  131. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  132. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
  133. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  134. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
  135. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
  137. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  138. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
  139. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
  140. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
  141. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
  142. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
  143. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  144. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  145. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
  146. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
  147. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
  148. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  149. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
  157. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  158. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
  159. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
  161. package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
  162. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
  163. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
  165. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  166. package/node_modules/@fps-games/editor-core/package.json +6 -6
  167. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  168. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts.map +1 -1
  169. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js +10 -3
  170. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js.map +1 -1
  171. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts +2 -1
  172. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts.map +1 -1
  173. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js +1 -1
  174. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js.map +1 -1
  175. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
  176. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
  177. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
  178. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
  179. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
  180. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
  181. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
  182. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
  183. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
  184. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
  185. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
  186. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
  187. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
  188. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
  189. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
  190. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
  191. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
  192. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
  193. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
  194. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
  195. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  196. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts +1 -1
  197. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts.map +1 -1
  198. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js +4 -0
  199. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js.map +1 -1
  200. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
  201. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
  202. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
  203. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
  204. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
  205. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
  206. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
  207. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
  208. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
  209. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
  210. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
  211. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
  212. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
  213. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
  214. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
  215. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
  216. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
  217. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
  218. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
  219. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
  220. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +4 -4
  221. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
  222. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts +2 -1
  223. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts.map +1 -1
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.js.map +1 -1
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js +1 -5
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +53 -0
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts +2 -0
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts.map +1 -1
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.js.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
  252. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  253. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
  254. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
  255. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
  256. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  257. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  258. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
  259. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
  260. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
  261. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  262. package/node_modules/@fps-games/playable-assets/dist/identity.d.ts +1 -0
  263. package/node_modules/@fps-games/playable-assets/dist/identity.d.ts.map +1 -1
  264. package/node_modules/@fps-games/playable-assets/dist/identity.js +1 -1
  265. package/node_modules/@fps-games/playable-assets/dist/identity.js.map +1 -1
  266. package/node_modules/@fps-games/playable-assets/dist/index.d.ts +1 -0
  267. package/node_modules/@fps-games/playable-assets/dist/index.d.ts.map +1 -1
  268. package/node_modules/@fps-games/playable-assets/dist/index.js +1 -0
  269. package/node_modules/@fps-games/playable-assets/dist/index.js.map +1 -1
  270. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts +46 -0
  271. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts.map +1 -0
  272. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js +109 -0
  273. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js.map +1 -0
  274. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  275. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  276. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  277. package/node_modules/@fps-games/playable-runtime/dist/runtime.d.ts.map +1 -1
  278. package/node_modules/@fps-games/playable-runtime/dist/runtime.js +5 -0
  279. package/node_modules/@fps-games/playable-runtime/dist/runtime.js.map +1 -1
  280. package/node_modules/@fps-games/playable-runtime/dist/types.d.ts +2 -0
  281. package/node_modules/@fps-games/playable-runtime/dist/types.d.ts.map +1 -1
  282. package/node_modules/@fps-games/playable-runtime/dist/types.js.map +1 -1
  283. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  284. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  285. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  286. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  287. package/node_modules/@fps-games/plugin-assets/dist/reference.d.ts.map +1 -1
  288. package/node_modules/@fps-games/plugin-assets/dist/reference.js +11 -4
  289. package/node_modules/@fps-games/plugin-assets/dist/reference.js.map +1 -1
  290. package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts +8 -0
  291. package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts.map +1 -0
  292. package/node_modules/@fps-games/plugin-assets/dist/renderer.js +13 -0
  293. package/node_modules/@fps-games/plugin-assets/dist/renderer.js.map +1 -0
  294. package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts +12 -0
  295. package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts.map +1 -0
  296. package/node_modules/@fps-games/plugin-assets/dist/resources.js +8 -0
  297. package/node_modules/@fps-games/plugin-assets/dist/resources.js.map +1 -0
  298. package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts +2 -1
  299. package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts.map +1 -1
  300. package/node_modules/@fps-games/plugin-assets/dist/runtime.js +3 -0
  301. package/node_modules/@fps-games/plugin-assets/dist/runtime.js.map +1 -1
  302. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  303. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  304. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  305. package/node_modules/@fps-games/plugin-assets/package.json +32 -8
  306. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  307. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  308. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  309. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  310. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  311. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  312. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  313. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  314. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  315. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  316. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  317. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  318. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  319. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  320. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  321. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  322. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  323. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  324. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  325. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  326. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  327. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  328. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  329. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  330. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  331. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  332. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  333. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  334. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  335. package/package.json +24 -22
@@ -196,12 +196,13 @@ const EDITOR_UI_STYLES = `
196
196
  pointer-events: auto;
197
197
  overflow: hidden;
198
198
  }
199
- .fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region="left-dock"] { top:0; left:0; bottom:260px; width:300px; }
200
- .fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region="right-dock"] { top:0; right:0; bottom:0; width:340px; }
201
- .fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region="bottom-dock"] { left:0; right:340px; bottom:0; height:260px; }
199
+ .fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region="left-dock"] { top:0; left:0; bottom:30px; width:300px; }
200
+ .fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region="right-dock"] { top:0; right:0; bottom:30px; width:340px; }
201
+ .fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region="bottom-dock"] { left:300px; right:340px; bottom:30px; height:260px; }
202
+ .fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region="bottom-console"] { left:0; right:0; bottom:0; height:30px; z-index:3; }
202
203
  .fps-editor-workbench .fps-editor-ui-scene-frame {
203
204
  position: absolute;
204
- inset: 0 340px 260px 300px;
205
+ inset: 0 340px 30px 300px;
205
206
  display: flex;
206
207
  flex-direction: column;
207
208
  min-width: 0;
@@ -224,8 +225,10 @@ const EDITOR_UI_STYLES = `
224
225
  }
225
226
  .fps-editor-workbench .fps-editor-ui-workbench-resizer { position:absolute; z-index:4; background:transparent; pointer-events:auto; touch-action:none; }
226
227
  .fps-editor-workbench .fps-editor-ui-workbench-resizer:hover { background:var(--fps-editor-accent-soft); }
227
- .fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer="bottom"] { height:7px; cursor:row-resize; }
228
- .fps-editor-workbench .fps-editor-ui-workbench-resizer:not([data-editor-workbench-resizer="bottom"]) { width:7px; cursor:col-resize; }
228
+ .fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer="bottom"],
229
+ .fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer="console"] { height:7px; cursor:row-resize; }
230
+ .fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer="left"],
231
+ .fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer="right"] { width:7px; cursor:col-resize; }
229
232
  .fps-editor-workbench .fps-editor-ui-workbench-toggle {
230
233
  position: absolute;
231
234
  z-index: 5;
@@ -244,6 +247,44 @@ const EDITOR_UI_STYLES = `
244
247
  pointer-events: auto;
245
248
  }
246
249
  .fps-editor-workbench .fps-editor-ui-workbench-toggle:hover { background:var(--fps-editor-button-hover); border-color:var(--fps-editor-accent); }
250
+ .fps-editor-workbench .fps-editor-ui-console { background:var(--fps-editor-chrome-dark); }
251
+ .fps-editor-workbench .fps-editor-ui-console-header { height:29px; flex:0 0 29px; display:flex; align-items:center; gap:10px; padding:0 5px 0 10px; border-bottom:1px solid var(--fps-editor-divider); background:var(--fps-editor-chrome-dark); }
252
+ .fps-editor-workbench .fps-editor-ui-console-title-group { min-width:88px; height:100%; display:flex; align-items:center; gap:6px; padding:0; border:0; background:transparent; color:var(--fps-editor-text-strong); cursor:pointer; }
253
+ .fps-editor-workbench .fps-editor-ui-console-title-group:hover { color:var(--fps-editor-accent-strong); }
254
+ .fps-editor-workbench .fps-editor-ui-console-title-group:focus-visible { outline:1px solid var(--fps-editor-accent); outline-offset:-2px; }
255
+ .fps-editor-workbench .fps-editor-ui-console-title { font-size:11px; font-weight:750; }
256
+ .fps-editor-workbench .fps-editor-ui-console-total { min-width:15px; height:15px; display:inline-flex; align-items:center; justify-content:center; padding:0 4px; border-radius:7px; background:var(--fps-editor-panel-soft); color:var(--fps-editor-muted); font-size:9px; line-height:15px; }
257
+ .fps-editor-workbench .fps-editor-ui-console-total:empty { display:none; }
258
+ .fps-editor-workbench .fps-editor-ui-console-total[data-has-errors="true"] { background:var(--fps-editor-danger-soft); color:var(--fps-editor-danger-text); }
259
+ .fps-editor-workbench .fps-editor-ui-console-filters { min-width:0; display:flex; align-self:stretch; }
260
+ .fps-editor-workbench .fps-editor-ui-console-filter { height:100%; padding:0 8px; border:0; border-bottom:2px solid transparent; background:transparent; color:var(--fps-editor-muted); font-size:10px; cursor:pointer; }
261
+ .fps-editor-workbench .fps-editor-ui-console-filter:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text); }
262
+ .fps-editor-workbench .fps-editor-ui-console-filter[data-active="true"] { border-bottom-color:var(--fps-editor-accent); color:var(--fps-editor-text-strong); }
263
+ .fps-editor-workbench .fps-editor-ui-console-actions { margin-left:auto; display:flex; align-items:center; gap:2px; }
264
+ .fps-editor-workbench .fps-editor-ui-console-icon-button { width:24px; height:24px; display:inline-flex; align-items:center; justify-content:center; padding:0; border:0; border-radius:3px; background:transparent; color:var(--fps-editor-muted); cursor:pointer; }
265
+ .fps-editor-workbench .fps-editor-ui-console-icon-button:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text-strong); }
266
+ .fps-editor-workbench .fps-editor-ui-console-icon-button:disabled { opacity:.35; cursor:not-allowed; }
267
+ .fps-editor-workbench .fps-editor-ui-console-icon-button[data-copy-state="success"] { color:var(--fps-editor-success); }
268
+ .fps-editor-workbench .fps-editor-ui-console-icon-button[data-copy-state="error"] { color:var(--fps-editor-danger-strong); }
269
+ .fps-editor-workbench .fps-editor-ui-console-list { min-height:0; flex:1 1 auto; overflow:auto; background:var(--fps-editor-bg); font-family:var(--fps-editor-mono-font); font-size:10px; line-height:1.4; }
270
+ .fps-editor-workbench .fps-editor-ui-console-entry { min-height:28px; border-bottom:1px solid var(--fps-editor-border-soft); color:var(--fps-editor-text); }
271
+ .fps-editor-workbench .fps-editor-ui-console-entry-summary { min-height:27px; display:grid; grid-template-columns:22px 68px 54px 72px minmax(0,1fr) 24px; gap:7px; align-items:center; padding:2px 5px 2px 4px; }
272
+ .fps-editor-workbench .fps-editor-ui-console-entry:hover .fps-editor-ui-console-entry-summary { background:color-mix(in srgb,var(--fps-editor-panel-soft) 45%,transparent); }
273
+ .fps-editor-workbench .fps-editor-ui-console-entry time { color:var(--fps-editor-muted); font-variant-numeric:tabular-nums; }
274
+ .fps-editor-workbench .fps-editor-ui-console-severity { font-size:9px; font-weight:800; color:var(--fps-editor-muted-strong); }
275
+ .fps-editor-workbench .fps-editor-ui-console-entry[data-severity="warning"] .fps-editor-ui-console-severity { color:var(--fps-editor-warn); }
276
+ .fps-editor-workbench .fps-editor-ui-console-entry[data-severity="error"] .fps-editor-ui-console-severity { color:var(--fps-editor-danger-strong); }
277
+ .fps-editor-workbench .fps-editor-ui-console-source { overflow:hidden; color:var(--fps-editor-accent-strong); text-overflow:ellipsis; white-space:nowrap; }
278
+ .fps-editor-workbench .fps-editor-ui-console-message { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
279
+ .fps-editor-workbench .fps-editor-ui-console-entry-toggle,
280
+ .fps-editor-workbench .fps-editor-ui-console-entry-copy { width:22px; height:22px; }
281
+ .fps-editor-workbench .fps-editor-ui-console-entry-copy { opacity:.55; }
282
+ .fps-editor-workbench .fps-editor-ui-console-entry:hover .fps-editor-ui-console-entry-copy,
283
+ .fps-editor-workbench .fps-editor-ui-console-entry-copy:focus-visible { opacity:1; }
284
+ .fps-editor-workbench .fps-editor-ui-console-entry-details { margin:0; padding:7px 10px 9px 33px; border-top:1px solid var(--fps-editor-border-soft); background:color-mix(in srgb,var(--fps-editor-field) 72%,transparent); color:var(--fps-editor-muted-strong); font:inherit; white-space:pre-wrap; overflow-wrap:anywhere; }
285
+ .fps-editor-workbench .fps-editor-ui-console-empty { padding:18px; color:var(--fps-editor-muted); text-align:center; }
286
+ .fps-editor-workbench .fps-editor-ui-console[data-editor-console-collapsed="true"] .fps-editor-ui-console-filters { display:none; }
287
+ .fps-editor-workbench .fps-editor-ui-console[data-editor-console-collapsed="true"] .fps-editor-ui-console-list { display:none; }
247
288
  .fps-editor-workbench .fps-editor-ui-panel-content { flex:1; min-height:0; overflow:auto; padding:8px; }
248
289
  .fps-editor-workbench .fps-editor-ui-scene-toolbar { width:100%; height:100%; max-width:100%; display:flex; align-items:center; gap:7px; padding:5px 8px; pointer-events:auto; overflow:hidden; }
249
290
  .fps-editor-workbench .fps-editor-ui-dock-panel { display:flex; flex-direction:column; min-height:0; overflow:hidden; }
@@ -274,7 +315,7 @@ const EDITOR_UI_STYLES = `
274
315
  .fps-editor-workbench .fps-editor-ui-empty-state { padding:12px 10px; border:1px dashed var(--fps-editor-border); border-radius:6px; background:color-mix(in srgb,var(--fps-editor-field) 70%,transparent); color:var(--fps-editor-muted); font-size:11px; line-height:1.45; text-align:center; }
275
316
  .fps-editor-workbench .fps-editor-ui-list-item { padding:8px 9px; border:1px solid var(--fps-editor-border-soft); border-radius:5px; background:var(--fps-editor-panel-soft); }
276
317
  .fps-editor-workbench .fps-editor-ui-asset-list { display:flex; flex-direction:column; gap:3px; max-height:220px; overflow:auto; padding-right:2px; }
277
- .fps-editor-workbench .fps-editor-ui-asset-list[data-grid="true"] { display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:6px; max-height:none; }
318
+ .fps-editor-workbench .fps-editor-ui-asset-list[data-grid="true"] { display:grid; grid-template-columns:repeat(auto-fill,minmax(108px,1fr)); align-content:start; gap:4px; max-height:none; }
278
319
  .fps-editor-workbench.fps-editor-ui-context-menu,
279
320
  .fps-editor-workbench .fps-editor-ui-context-menu { position:fixed; display:none; min-width:176px; padding:5px; border:1px solid var(--fps-editor-border); border-radius:6px; background:var(--fps-editor-chrome); box-shadow:var(--fps-editor-shadow-popover); z-index:2147483641; pointer-events:auto; }
280
321
  .fps-editor-workbench .fps-editor-ui-context-menu-item { width:100%; min-height:28px; display:flex; align-items:center; gap:8px; padding:5px 8px; border:0; border-radius:4px; background:transparent; color:var(--fps-editor-text); text-align:left; cursor:pointer; }
@@ -329,6 +370,41 @@ const EDITOR_UI_STYLES = `
329
370
  .fps-editor-workbench .fps-editor-ui-shortcut-description { color:var(--fps-editor-muted); line-height:1.35; }
330
371
  .fps-editor-workbench .fps-editor-ui-panel-title { min-width:0; display:flex; align-items:center; gap:6px; margin:0 0 9px; color:var(--fps-editor-text-strong); font-size:13px; font-weight:750; }
331
372
  .fps-editor-workbench .fps-editor-ui-search { width:100%; height:29px; margin:0 0 8px; padding:0 9px; border:1px solid var(--fps-editor-border); border-radius:5px; background:var(--fps-editor-field); color:var(--fps-editor-text); font-size:12px; }
373
+ .fps-editor-workbench .fps-editor-ui-asset-filesystem { padding:0; }
374
+ .fps-editor-workbench .fps-editor-ui-asset-toolbar { min-height:34px; display:flex; align-items:center; gap:4px; padding:2px 4px; border-bottom:1px solid var(--fps-editor-divider); background:var(--fps-editor-chrome-dark); }
375
+ .fps-editor-workbench .fps-editor-ui-asset-toolbar-group { flex:0 0 auto; display:flex; align-items:center; gap:2px; }
376
+ .fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon="true"] { width:28px; min-width:28px; height:28px; padding:0; justify-content:center; border-color:transparent; border-radius:3px; background:transparent; color:var(--fps-editor-muted-strong); }
377
+ .fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon="true"] .fps-editor-ui-button__label { display:none; }
378
+ .fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon="true"]:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text-strong); }
379
+ .fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon="true"]:disabled { opacity:.35; background:transparent; cursor:default; }
380
+ .fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon="true"][data-active="true"] { background:var(--fps-editor-button-active); color:var(--fps-editor-text-strong); box-shadow:inset 0 -2px 0 var(--fps-editor-accent); }
381
+ .fps-editor-workbench .fps-editor-ui-asset-type-filter { width:clamp(104px,18%,168px); min-width:0; height:30px; padding:0 26px 0 8px; border:1px solid transparent; border-left-color:var(--fps-editor-divider); border-right-color:var(--fps-editor-divider); border-radius:0; background:var(--fps-editor-field); color:var(--fps-editor-text); font-size:12px; }
382
+ .fps-editor-workbench .fps-editor-ui-asset-type-filter:hover,.fps-editor-workbench .fps-editor-ui-asset-type-filter:focus { border-color:var(--fps-editor-border); outline:0; }
383
+ .fps-editor-workbench .fps-editor-ui-asset-search { min-width:120px; height:30px; flex:1 1 220px; position:relative; background:var(--fps-editor-field); }
384
+ .fps-editor-workbench .fps-editor-ui-asset-toolbar .fps-editor-ui-search { width:100%; height:30px; margin:0; padding:0 31px 0 31px; border:1px solid transparent; border-right-color:var(--fps-editor-divider); border-radius:0; background:transparent; }
385
+ .fps-editor-workbench .fps-editor-ui-asset-toolbar .fps-editor-ui-search:hover,.fps-editor-workbench .fps-editor-ui-asset-toolbar .fps-editor-ui-search:focus { border-color:var(--fps-editor-border); outline:0; }
386
+ .fps-editor-workbench .fps-editor-ui-asset-search-icon { position:absolute; top:7px; left:8px; z-index:1; color:var(--fps-editor-muted); pointer-events:none; }
387
+ .fps-editor-workbench .fps-editor-ui-asset-search [data-editor-asset-filter-clear="true"] { position:absolute; top:0; right:0; }
388
+ .fps-editor-workbench .fps-editor-ui-asset-search [data-editor-asset-filter-clear="true"][hidden] { display:none; }
389
+ .fps-editor-workbench .fps-editor-ui-asset-filesystem-body { flex:1; min-height:0; display:grid; grid-template-columns:clamp(148px,21%,210px) minmax(0,1fr); overflow:hidden; }
390
+ .fps-editor-workbench .fps-editor-ui-asset-folder-tree { min-width:0; overflow:auto; padding:4px 3px 8px; border-right:1px solid var(--fps-editor-divider); background:var(--fps-editor-panel); }
391
+ .fps-editor-workbench .fps-editor-ui-asset-folder-tree-row { min-width:0; display:flex; align-items:center; padding-left:calc(var(--fps-editor-asset-folder-depth,0) * 14px); }
392
+ .fps-editor-workbench .fps-editor-ui-asset-folder-toggle { width:19px; height:25px; flex:0 0 19px; display:grid; place-items:center; padding:0; border:0; background:transparent; color:var(--fps-editor-muted); cursor:pointer; }
393
+ .fps-editor-workbench .fps-editor-ui-asset-folder-toggle:hover:not(:disabled) { color:var(--fps-editor-text-strong); }
394
+ .fps-editor-workbench .fps-editor-ui-asset-folder-toggle:disabled { cursor:default; }
395
+ .fps-editor-workbench .fps-editor-ui-asset-folder-row { min-width:0; min-height:25px; flex:1; display:flex; align-items:center; gap:6px; padding:2px 5px 2px 1px; border:0; border-radius:2px; background:transparent; color:var(--fps-editor-muted-strong); text-align:left; font-size:12px; font-weight:550; cursor:pointer; }
396
+ .fps-editor-workbench .fps-editor-ui-asset-folder-row:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text-strong); }
397
+ .fps-editor-workbench .fps-editor-ui-asset-folder-row[data-selected="true"] { background:transparent; color:var(--fps-editor-accent-strong); box-shadow:none; }
398
+ .fps-editor-workbench .fps-editor-ui-asset-folder-row > .fps-editor-ui-ellipsis { min-width:0; flex:1; }
399
+ .fps-editor-workbench .fps-editor-ui-asset-browser { min-width:0; min-height:0; display:flex; flex-direction:column; overflow:hidden; }
400
+ .fps-editor-workbench .fps-editor-ui-asset-browser-summary { min-height:27px; display:flex; align-items:center; gap:10px; padding:3px 8px; border-bottom:1px solid var(--fps-editor-border-soft); }
401
+ .fps-editor-workbench .fps-editor-ui-asset-breadcrumb { min-width:0; flex:1; display:flex; align-items:center; gap:3px; overflow:hidden; color:var(--fps-editor-text-strong); font-size:11px; font-weight:600; }
402
+ .fps-editor-workbench .fps-editor-ui-asset-breadcrumb-button { min-width:0; max-width:150px; height:21px; padding:0 3px; border:0; border-radius:2px; background:transparent; color:var(--fps-editor-muted-strong); font:inherit; cursor:pointer; }
403
+ .fps-editor-workbench .fps-editor-ui-asset-breadcrumb-button:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text-strong); }
404
+ .fps-editor-workbench .fps-editor-ui-asset-breadcrumb-separator { flex:0 0 auto; color:var(--fps-editor-muted); }
405
+ .fps-editor-workbench .fps-editor-ui-asset-breadcrumb-current { min-width:24px; color:var(--fps-editor-text-strong); }
406
+ .fps-editor-workbench .fps-editor-ui-asset-browser-summary .fps-editor-ui-asset-count { flex:0 0 auto; margin:0; }
407
+ .fps-editor-workbench .fps-editor-ui-asset-browser .fps-editor-ui-dock-viewport { padding:6px; }
332
408
  .fps-editor-workbench .fps-editor-ui-segmented-tabs { min-height:27px; display:flex; align-items:center; gap:4px; margin:0 0 8px; }
333
409
  .fps-editor-workbench .fps-editor-ui-segmented-tab { height:25px; padding:0 8px; border-radius:5px; color:var(--fps-editor-muted); font-size:11px; }
334
410
  .fps-editor-workbench .fps-editor-ui-segmented-tab[data-active="true"] { border-color:var(--fps-editor-control-active-border); background:var(--fps-editor-control-active-bg); color:var(--fps-editor-text-strong); box-shadow:inset 0 -2px 0 var(--fps-editor-accent); }
@@ -338,10 +414,27 @@ const EDITOR_UI_STYLES = `
338
414
  .fps-editor-workbench .fps-editor-ui-asset-card[aria-selected="true"] { border-color:var(--fps-editor-accent-strong); background:var(--fps-editor-accent-soft); }
339
415
  .fps-editor-workbench .fps-editor-ui-asset-card:disabled { opacity:.62; cursor:not-allowed; }
340
416
  .fps-editor-workbench .fps-editor-ui-asset-card[data-has-preview="true"] { min-height:38px; padding:7px 8px; }
341
- .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"] { min-height:48px; }
342
- .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"][data-has-preview="true"] { min-height:66px; }
417
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="list"] { min-height:29px; gap:7px; padding:3px 6px; border-color:transparent; border-radius:2px; background:transparent; }
418
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="list"][data-has-preview="true"] { min-height:34px; padding:4px 6px; }
419
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="list"]:hover { border-color:transparent; background:var(--fps-editor-button-hover); }
420
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="list"][aria-selected="true"] { border-color:transparent; background:var(--fps-editor-row-selected); box-shadow:inset 2px 0 0 var(--fps-editor-accent); }
421
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"] { height:104px; min-height:104px; flex-direction:column; justify-content:center; gap:5px; padding:7px 6px 6px; border-color:transparent; border-radius:3px; background:transparent; text-align:center; }
422
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"]:hover { border-color:transparent; background:var(--fps-editor-button-hover); }
423
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"][aria-selected="true"] { border-color:var(--fps-editor-accent-strong); background:var(--fps-editor-button-active); }
424
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"][data-has-preview="true"] { min-height:104px; }
425
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"] .fps-editor-ui-asset-card-body { width:100%; flex:0 0 auto; }
426
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"] .fps-editor-ui-asset-card-meta { display:none; }
427
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"][data-search-result="true"] { height:116px; min-height:116px; }
428
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"][data-search-result="true"] .fps-editor-ui-asset-card-meta { display:block; margin-top:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:center; }
429
+ .fps-editor-workbench .fps-editor-ui-asset-card[data-variant="grid"] .fps-editor-ui-asset-card-label { text-align:center; }
430
+ .fps-editor-workbench .fps-editor-ui-project-media-thumbnail { position:relative; flex:0 0 auto; width:24px; height:24px; display:grid; place-items:center; overflow:hidden; border:1px solid var(--fps-editor-divider); border-radius:2px; background:var(--fps-editor-field); color:var(--fps-editor-muted); }
431
+ .fps-editor-workbench .fps-editor-ui-project-media-thumbnail[data-variant="grid"] { width:64px; height:64px; }
432
+ .fps-editor-workbench .fps-editor-ui-project-media-thumbnail img { position:absolute; inset:0; width:100%; height:100%; display:block; object-fit:cover; }
433
+ .fps-editor-workbench .fps-editor-ui-project-media-thumbnail[data-editor-project-media-thumbnail-kind="model"] img { object-fit:contain; padding:3px; box-sizing:border-box; }
434
+ .fps-editor-workbench .fps-editor-ui-project-media-thumbnail[data-thumbnail-state="ready"] > .fps-editor-ui-project-media-thumbnail-fallback { display:none !important; }
435
+ .fps-editor-workbench .fps-editor-ui-project-media-thumbnail[data-thumbnail-state="failed"] { background:color-mix(in srgb,var(--fps-editor-field) 72%,var(--fps-editor-panel)); }
343
436
  .fps-editor-workbench .fps-editor-ui-asset-card-body { min-width:0; flex:1; }
344
- .fps-editor-workbench .fps-editor-ui-asset-card-label { color:var(--fps-editor-text-strong); font-weight:700; }
437
+ .fps-editor-workbench .fps-editor-ui-asset-card-label { color:var(--fps-editor-text-strong); font-weight:600; }
345
438
  .fps-editor-workbench .fps-editor-ui-asset-card-meta { color:var(--fps-editor-muted); font-size:11px; }
346
439
  .fps-editor-workbench .fps-editor-ui-history-list { display:flex; flex-direction:column; gap:4px; }
347
440
  .fps-editor-workbench .fps-editor-ui-history-label { color:var(--fps-editor-text); font-size:12px; font-weight:700; }
@@ -1 +1 @@
1
- {"version":3,"file":"editor-ui-theme.js","sourceRoot":"","sources":["../src/editor-ui-theme.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAEhE,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkoBxB,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,IAAI,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;QAAE,OAAO;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,GAAG,kBAAkB,CAAC;IAC9B,KAAK,CAAC,WAAW,GAAG,gBAAgB,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["export const EDITOR_UI_STYLE_ID = 'fps-editor-ui-system-styles';\n\nconst EDITOR_UI_STYLES = `\n.fps-editor-workbench[data-fps-editor-theme=\"dark\"] {\n --fps-editor-font: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n --fps-editor-mono-font: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n --fps-editor-bg: #0c0d0f;\n --fps-editor-chrome: #17181b;\n --fps-editor-chrome-dark: #121316;\n --fps-editor-panel: #1f2023;\n --fps-editor-panel-soft: #292a2e;\n --fps-editor-field: #242529;\n --fps-editor-border: rgba(255,255,255,.075);\n --fps-editor-border-soft: rgba(255,255,255,.055);\n --fps-editor-inspector-section-border: rgba(255,255,255,.075);\n --fps-editor-divider: rgba(255,255,255,.07);\n --fps-editor-text: #d7d8db;\n --fps-editor-text-strong: #f0f1f2;\n --fps-editor-text-inverse: #ffffff;\n --fps-editor-muted: #8b8d94;\n --fps-editor-muted-strong: #b4b6bb;\n --fps-editor-accent: #5f88b0;\n --fps-editor-accent-soft: rgba(95,136,176,.18);\n --fps-editor-accent-strong: #82acd3;\n --fps-editor-control-active-bg: #343a42;\n --fps-editor-control-active-border: #596572;\n --fps-editor-control-on: #556b7f;\n --fps-editor-control-thumb: #f2f4f6;\n --fps-editor-editable-bg: #242529;\n --fps-editor-editable-border: rgba(255,255,255,.10);\n --fps-editor-editable-shadow: 0 0 0 1px rgba(0,0,0,.18) inset;\n --fps-editor-readonly-bg: rgba(255,255,255,.035);\n --fps-editor-readonly-border: rgba(255,255,255,.075);\n --fps-editor-readonly-text: #c8c8c8;\n --fps-editor-warn: #e5b454;\n --fps-editor-warn-soft: rgba(248,196,79,.08);\n --fps-editor-warn-border: rgba(229,180,84,.45);\n --fps-editor-warn-strong: rgba(248,196,79,.95);\n --fps-editor-danger: #ef6a6a;\n --fps-editor-danger-text: #ffd7d5;\n --fps-editor-danger-soft: rgba(239,106,106,.16);\n --fps-editor-danger-border: rgba(239,106,106,.45);\n --fps-editor-danger-strong: #ff9b95;\n --fps-editor-success: #68b88a;\n --fps-editor-success-soft: rgba(104,184,138,.12);\n --fps-editor-success-border: rgba(104,184,138,.38);\n --fps-editor-button: #292a2e;\n --fps-editor-button-hover: #323338;\n --fps-editor-button-active: #343a42;\n --fps-editor-shadow-panel: 0 10px 28px rgba(0,0,0,.24);\n --fps-editor-shadow-popover: 0 12px 32px rgba(0,0,0,.35);\n --fps-editor-shadow-modal: 0 16px 42px rgba(0,0,0,.35);\n --fps-editor-shadow-inset-highlight: 0 1px 0 rgba(255,255,255,.03) inset;\n --fps-editor-row-selected: rgba(95,136,176,.16);\n --fps-editor-row-selected-text: #ffffff;\n --fps-editor-row-active: rgba(95,136,176,.24);\n --fps-editor-drop-target: #82acd3;\n --fps-editor-locked-bg: #262626;\n --fps-editor-locked-text: #777777;\n --fps-editor-role-root-bg: #3a2f18;\n --fps-editor-role-group-bg: #243426;\n --fps-editor-role-object-bg: #252b34;\n --fps-editor-asset-card-bg: #243426;\n --fps-editor-box-select-bg: rgba(95,136,176,.18);\n --fps-editor-box-select-shadow: 0 0 0 1px rgba(10,15,23,.55) inset;\n --fps-editor-scrollbar-thumb: #4c4e54;\n --fps-editor-scrollbar-track: #17181b;\n color-scheme: dark;\n}\n.fps-editor-workbench,\n.fps-editor-workbench * { box-sizing: border-box; }\n.fps-editor-workbench button,\n.fps-editor-workbench input,\n.fps-editor-workbench select,\n.fps-editor-workbench textarea { font: inherit; }\n.fps-editor-workbench button:focus-visible,\n.fps-editor-workbench input:focus-visible,\n.fps-editor-workbench select:focus-visible,\n.fps-editor-workbench textarea:focus-visible {\n outline: 2px solid var(--fps-editor-accent);\n outline-offset: 1px;\n}\n.fps-editor-workbench .fps-editor-ui-button {\n min-width: 0;\n height: 26px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n gap: 5px;\n padding: 4px 8px;\n border: 1px solid var(--fps-editor-border);\n border-radius: 4px;\n color: var(--fps-editor-text);\n font-size: 12px;\n font-weight: 700;\n line-height: 16px;\n white-space: nowrap;\n cursor: pointer;\n transition: background-color 90ms ease, border-color 90ms ease, color 90ms ease;\n}\n.fps-editor-workbench .fps-editor-ui-button:disabled { opacity: .48; cursor: not-allowed; }\n.fps-editor-workbench .fps-editor-ui-button[data-editor-button-variant=\"toolbar-icon\"] {\n width: 32px;\n min-width: 32px;\n height: 28px;\n padding: 0;\n flex-basis: 32px;\n}\n.fps-editor-workbench .fps-editor-ui-button[data-editor-button-label-mode=\"icon-only\"] { gap: 0; }\n.fps-editor-workbench .fps-editor-ui-button[data-active=\"true\"],\n.fps-editor-workbench .fps-editor-ui-button[data-editor-ui-active=\"true\"] {\n border-color: var(--fps-editor-control-active-border);\n background: var(--fps-editor-button-active);\n color: var(--fps-editor-text-strong);\n box-shadow: inset 0 -2px 0 var(--fps-editor-accent);\n}\n.fps-editor-workbench .fps-editor-ui-button__label,\n.fps-editor-workbench .fps-editor-ui-ellipsis {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fps-editor-workbench .fps-editor-ui-panel-header {\n min-height: 34px;\n display: flex;\n align-items: center;\n gap: 8px;\n margin: -8px -8px 8px;\n padding: 0 9px;\n border-bottom: 1px solid var(--fps-editor-divider);\n background: linear-gradient(180deg, color-mix(in srgb, var(--fps-editor-panel-soft) 58%, transparent), var(--fps-editor-chrome-dark));\n}\n.fps-editor-workbench .fps-editor-ui-panel-heading {\n min-width: 0;\n flex: 1;\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 0;\n color: var(--fps-editor-text-strong);\n font-size: 12px;\n font-weight: 750;\n letter-spacing: .01em;\n}\n.fps-editor-workbench .fps-editor-ui-dock-tab-strip {\n height: 35px;\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-bottom: 1px solid var(--fps-editor-divider);\n background: var(--fps-editor-chrome-dark);\n}\n.fps-editor-workbench .fps-editor-ui-dock-tab-strip[data-editor-dock-area=\"bottom\"] { height: 29px; }\n.fps-editor-workbench .fps-editor-ui-dock-tab {\n height: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n padding: 0 11px;\n border: 0;\n border-right: 1px solid var(--fps-editor-divider);\n border-top: 2px solid transparent;\n background: transparent;\n color: var(--fps-editor-muted);\n font-size: 11px;\n font-weight: 700;\n white-space: nowrap;\n cursor: pointer;\n}\n.fps-editor-workbench .fps-editor-ui-dock-tab:hover { color: var(--fps-editor-text); background: var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-ui-dock-tab[data-active=\"true\"] {\n border-top-color: var(--fps-editor-accent);\n background: var(--fps-editor-panel);\n color: var(--fps-editor-text-strong);\n}\n.fps-editor-workbench.fps-editor-ui-workbench-root {\n position: fixed;\n inset: 0;\n z-index: 2147483639;\n display: block;\n color: var(--fps-editor-text);\n font-family: var(--fps-editor-font);\n font-size: 12px;\n pointer-events: none;\n}\n.fps-editor-workbench .fps-editor-ui-workbench-dock {\n position: absolute;\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n border: 1px solid var(--fps-editor-divider);\n background: var(--fps-editor-panel);\n pointer-events: auto;\n overflow: hidden;\n}\n.fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region=\"left-dock\"] { top:0; left:0; bottom:260px; width:300px; }\n.fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region=\"right-dock\"] { top:0; right:0; bottom:0; width:340px; }\n.fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region=\"bottom-dock\"] { left:0; right:340px; bottom:0; height:260px; }\n.fps-editor-workbench .fps-editor-ui-scene-frame {\n position: absolute;\n inset: 0 340px 260px 300px;\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n border: 1px solid var(--fps-editor-divider);\n border-top: 0;\n background: transparent;\n pointer-events: none;\n overflow: hidden;\n}\n.fps-editor-workbench .fps-editor-ui-scene-header {\n height: 38px;\n flex: 0 0 38px;\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--fps-editor-divider);\n background: color-mix(in srgb, var(--fps-editor-chrome) 92%, transparent);\n box-shadow: var(--fps-editor-shadow-inset-highlight);\n pointer-events: none;\n}\n.fps-editor-workbench .fps-editor-ui-workbench-resizer { position:absolute; z-index:4; background:transparent; pointer-events:auto; touch-action:none; }\n.fps-editor-workbench .fps-editor-ui-workbench-resizer:hover { background:var(--fps-editor-accent-soft); }\n.fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer=\"bottom\"] { height:7px; cursor:row-resize; }\n.fps-editor-workbench .fps-editor-ui-workbench-resizer:not([data-editor-workbench-resizer=\"bottom\"]) { width:7px; cursor:col-resize; }\n.fps-editor-workbench .fps-editor-ui-workbench-toggle {\n position: absolute;\n z-index: 5;\n width: 26px;\n height: 26px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: 1px solid var(--fps-editor-border);\n border-radius: 5px;\n background: var(--fps-editor-button);\n color: var(--fps-editor-text);\n box-shadow: var(--fps-editor-shadow-panel);\n cursor: pointer;\n pointer-events: auto;\n}\n.fps-editor-workbench .fps-editor-ui-workbench-toggle:hover { background:var(--fps-editor-button-hover); border-color:var(--fps-editor-accent); }\n.fps-editor-workbench .fps-editor-ui-panel-content { flex:1; min-height:0; overflow:auto; padding:8px; }\n.fps-editor-workbench .fps-editor-ui-scene-toolbar { width:100%; height:100%; max-width:100%; display:flex; align-items:center; gap:7px; padding:5px 8px; pointer-events:auto; overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-dock-panel { display:flex; flex-direction:column; min-height:0; overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-dock-viewport { flex:1; min-height:0; overflow:auto; padding:var(--fps-editor-dock-padding, 0 2px 0 0); }\n.fps-editor-workbench .fps-editor-ui-dock-viewport[data-editor-ui-column=\"true\"] { display:flex; flex-direction:column; gap:var(--fps-editor-dock-gap, 0); }\n.fps-editor-workbench .fps-editor-ui-tree { display:flex; flex-direction:column; gap:1px; }\n.fps-editor-workbench .fps-editor-ui-tree-item {\n width:100%; min-height:25px; position:relative; display:flex; align-items:center; gap:5px;\n padding:3px 8px 3px calc(8px + var(--fps-editor-tree-depth, 0) * 16px);\n border:1px solid transparent; border-radius:3px; background:transparent; color:var(--fps-editor-text);\n text-align:left; font-size:12px; font-weight:650; cursor:pointer; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;\n}\n.fps-editor-workbench .fps-editor-ui-tree-item:hover { background:var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-selected=\"true\"] { border-color:transparent; background:var(--fps-editor-row-selected); color:var(--fps-editor-row-selected-text); box-shadow:inset 2px 0 0 var(--fps-editor-accent); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-active=\"true\"] { border-color:transparent; background:var(--fps-editor-row-active); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-locked=\"true\"] { background:var(--fps-editor-locked-bg); color:var(--fps-editor-locked-text); cursor:not-allowed; }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-enabled=\"false\"] { opacity:.72; color:var(--fps-editor-muted); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-drop-placement=\"inside\"] { border-color:var(--fps-editor-drop-target); background:var(--fps-editor-accent-soft); box-shadow:inset 3px 0 0 var(--fps-editor-drop-target); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-drop-valid=\"false\"] { border-color:var(--fps-editor-muted); background:var(--fps-editor-field); box-shadow:inset 3px 0 0 var(--fps-editor-muted); }\n.fps-editor-workbench .fps-editor-ui-property-grid { display:flex; flex-direction:column; gap:4px; }\n.fps-editor-workbench .fps-editor-ui-property-row { min-height:24px; display:grid; grid-template-columns:92px minmax(0,1fr); gap:8px; align-items:center; }\n.fps-editor-workbench .fps-editor-ui-property-label { color:var(--fps-editor-muted); font-weight:650; }\n.fps-editor-workbench .fps-editor-ui-badge { display:inline-flex; align-items:center; justify-content:center; gap:3px; padding:2px 6px; border:1px solid var(--fps-editor-border); border-radius:999px; background:var(--fps-editor-field); color:var(--fps-editor-muted-strong); font-size:9px; font-weight:750; line-height:1.2; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-badge[data-compact=\"true\"] { padding:1px 4px; }\n.fps-editor-workbench .fps-editor-ui-badge[data-tone=\"warning\"] { border-color:var(--fps-editor-warn-border); background:var(--fps-editor-warn-soft); color:var(--fps-editor-warn); }\n.fps-editor-workbench .fps-editor-ui-badge[data-tone=\"danger\"] { border-color:var(--fps-editor-danger-border); background:var(--fps-editor-danger-soft); color:var(--fps-editor-danger-text); }\n.fps-editor-workbench .fps-editor-ui-badge[data-tone=\"success\"] { border-color:var(--fps-editor-success-border); background:var(--fps-editor-success-soft); color:var(--fps-editor-success); }\n.fps-editor-workbench .fps-editor-ui-empty-state { padding:12px 10px; border:1px dashed var(--fps-editor-border); border-radius:6px; background:color-mix(in srgb,var(--fps-editor-field) 70%,transparent); color:var(--fps-editor-muted); font-size:11px; line-height:1.45; text-align:center; }\n.fps-editor-workbench .fps-editor-ui-list-item { padding:8px 9px; border:1px solid var(--fps-editor-border-soft); border-radius:5px; background:var(--fps-editor-panel-soft); }\n.fps-editor-workbench .fps-editor-ui-asset-list { display:flex; flex-direction:column; gap:3px; max-height:220px; overflow:auto; padding-right:2px; }\n.fps-editor-workbench .fps-editor-ui-asset-list[data-grid=\"true\"] { display:grid; grid-template-columns:repeat(auto-fill,minmax(150px,1fr)); gap:6px; max-height:none; }\n.fps-editor-workbench.fps-editor-ui-context-menu,\n.fps-editor-workbench .fps-editor-ui-context-menu { position:fixed; display:none; min-width:176px; padding:5px; border:1px solid var(--fps-editor-border); border-radius:6px; background:var(--fps-editor-chrome); box-shadow:var(--fps-editor-shadow-popover); z-index:2147483641; pointer-events:auto; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item { width:100%; min-height:28px; display:flex; align-items:center; gap:8px; padding:5px 8px; border:0; border-radius:4px; background:transparent; color:var(--fps-editor-text); text-align:left; cursor:pointer; }\n.fps-editor-workbench .fps-editor-ui-context-menu-group { position:relative; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item[data-compact=\"false\"] { justify-content:space-between; gap:18px; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item[data-compact=\"true\"] { justify-content:center; border:1px solid var(--fps-editor-border); background:var(--fps-editor-bg); text-align:center; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item[data-danger=\"true\"] { color:var(--fps-editor-danger-text); }\n.fps-editor-workbench .fps-editor-ui-context-menu-label { flex:1; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item[data-compact=\"true\"] .fps-editor-ui-context-menu-label { width:100%; }\n.fps-editor-workbench .fps-editor-ui-context-menu-shortcut { color:var(--fps-editor-muted); font-size:11px; font-weight:650; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item:hover,\n.fps-editor-workbench .fps-editor-ui-context-menu-item:focus-visible { background:var(--fps-editor-accent-soft); color:var(--fps-editor-text-strong); }\n.fps-editor-workbench .fps-editor-ui-context-menu-item:disabled { opacity:.45; cursor:not-allowed; }\n.fps-editor-workbench .fps-editor-ui-context-menu-separator { height:1px; margin:4px; background:var(--fps-editor-divider); }\n.fps-editor-workbench.fps-editor-ui-modal-root,\n.fps-editor-workbench .fps-editor-ui-modal-root { position:fixed; inset:0; z-index:2147483643; display:none; align-items:center; justify-content:center; padding:32px; background:rgba(0,0,0,.54); backdrop-filter:blur(2px); color:var(--fps-editor-text); font-family:var(--fps-editor-font); pointer-events:auto; }\n.fps-editor-workbench .fps-editor-ui-modal { width:min(460px,calc(100vw - 64px)); max-height:calc(100vh - 64px); display:flex; flex-direction:column; gap:11px; padding:16px; border:1px solid var(--fps-editor-border); border-radius:8px; background:var(--fps-editor-panel); box-shadow:var(--fps-editor-shadow-modal); overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-modal-header { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; }\n.fps-editor-workbench .fps-editor-ui-modal-title { min-width:0; margin:0; overflow-wrap:anywhere; color:var(--fps-editor-text-strong); font-size:13px; font-weight:750; line-height:18px; }\n.fps-editor-workbench .fps-editor-ui-modal-message { color:var(--fps-editor-text); font-size:12px; font-weight:650; line-height:18px; overflow-wrap:anywhere; }\n.fps-editor-workbench .fps-editor-ui-modal-details { display:none; max-height:min(180px,calc(100vh - 260px)); margin:0; overflow:auto; padding:9px; border:1px solid var(--fps-editor-border-soft); border-radius:5px; background:var(--fps-editor-field); color:var(--fps-editor-muted-strong); font-family:var(--fps-editor-mono-font); font-size:11px; line-height:16px; white-space:pre-wrap; word-break:break-word; }\n.fps-editor-workbench .fps-editor-ui-modal-footer { display:flex; align-items:center; justify-content:flex-end; gap:8px; }\n.fps-editor-workbench.fps-editor-ui-tooltip,\n.fps-editor-workbench .fps-editor-ui-tooltip { position:fixed; z-index:2147483642; display:none; max-width:min(260px,calc(100vw - 16px)); padding:6px 8px; border:1px solid var(--fps-editor-border); border-radius:5px; background:var(--fps-editor-chrome); box-shadow:var(--fps-editor-shadow-popover); color:var(--fps-editor-text); font-family:var(--fps-editor-font); font-size:11px; font-weight:650; line-height:1.35; white-space:normal; pointer-events:none; }\n.fps-editor-workbench.fps-editor-ui-host-chrome { position:fixed; top:12px; left:50%; transform:translateX(-50%); z-index:2147483640; display:none; align-items:center; gap:8px; height:36px; padding:0 9px; border:1px solid var(--fps-editor-border); border-radius:7px; background:var(--fps-editor-chrome); box-shadow:var(--fps-editor-shadow-panel); color:var(--fps-editor-text); font-family:var(--fps-editor-font); pointer-events:auto; }\n.fps-editor-workbench .fps-editor-ui-toolbar-group { display:flex; align-items:center; gap:4px; padding-left:8px; border-left:1px solid var(--fps-editor-divider); }\n.fps-editor-workbench .fps-editor-ui-toolbar-group[data-editor-ui-first=\"true\"] { padding-left:0; border-left:0; }\n.fps-editor-workbench.fps-editor-ui-popover,\n.fps-editor-workbench .fps-editor-ui-popover { position:fixed; z-index:2147483641; display:none; flex-direction:column; gap:7px; min-width:180px; max-width:min(440px,calc(100vw - 16px)); max-height:calc(100vh - 72px); overflow:auto; padding:9px; border:1px solid var(--fps-editor-border); border-radius:7px; background:var(--fps-editor-panel); box-shadow:var(--fps-editor-shadow-popover); pointer-events:auto; }\n.fps-editor-workbench.fps-editor-ui-status-center,\n.fps-editor-workbench .fps-editor-ui-status-center { z-index:2147483642; width:min(440px,calc(100vw - 16px)); max-height:min(520px,calc(100vh - 56px)); overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-surface-header { display:flex; align-items:center; justify-content:space-between; gap:12px; }\n.fps-editor-workbench .fps-editor-ui-surface-title { min-width:0; margin:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--fps-editor-text-strong); font-size:13px; font-weight:750; }\n.fps-editor-workbench .fps-editor-ui-surface-actions { display:flex; align-items:center; gap:6px; }\n.fps-editor-workbench .fps-editor-ui-status-summary { color:var(--fps-editor-muted-strong); font-size:11px; line-height:1.45; }\n.fps-editor-workbench .fps-editor-ui-status-list { min-height:0; display:flex; flex-direction:column; gap:7px; overflow:auto; }\n.fps-editor-workbench .fps-editor-ui-overlay-card { border:1px solid color-mix(in srgb,var(--fps-editor-border) 78%,transparent); border-radius:7px; background:color-mix(in srgb,var(--fps-editor-chrome) 88%,transparent); box-shadow:var(--fps-editor-shadow-panel); backdrop-filter:blur(6px); color:var(--fps-editor-text); font-family:var(--fps-editor-font); }\n.fps-editor-workbench .fps-editor-ui-prefab-stage-layout { position:absolute; inset:38px 0 0; z-index:4; display:none; overflow:hidden; font-family:var(--fps-editor-font); pointer-events:none; }\n.fps-editor-workbench.fps-editor-ui-asset-modal .fps-editor-ui-modal,\n.fps-editor-workbench .fps-editor-ui-asset-modal .fps-editor-ui-modal { width:min(620px,calc(100vw - 64px)); }\n.fps-editor-workbench.fps-editor-ui-asset-preview-modal .fps-editor-ui-modal,\n.fps-editor-workbench .fps-editor-ui-asset-preview-modal .fps-editor-ui-modal { width:min(420px,calc(100vw - 64px)); overflow:auto; }\n.fps-editor-workbench .fps-editor-ui-modal-search { width:100%; height:30px; border:1px solid var(--fps-editor-border); border-radius:5px; background:var(--fps-editor-field); color:var(--fps-editor-text); padding:0 9px; }\n.fps-editor-workbench .fps-editor-ui-modal-grid { min-height:180px; max-height:min(430px,calc(100vh - 196px)); display:grid; grid-template-columns:repeat(auto-fill,minmax(176px,1fr)); gap:7px; overflow:auto; padding-right:2px; }\n.fps-editor-workbench.fps-editor-ui-shortcut-dialog,\n.fps-editor-workbench .fps-editor-ui-shortcut-dialog { position:fixed; top:104px; left:50%; transform:translateX(-50%); z-index:2147483638; display:none; width:min(620px,calc(100vw - 64px)); max-height:calc(100vh - 132px); flex-direction:column; overflow:hidden; border:1px solid var(--fps-editor-border); border-radius:8px; background:var(--fps-editor-panel); box-shadow:var(--fps-editor-shadow-modal); color:var(--fps-editor-text); pointer-events:auto; }\n.fps-editor-workbench .fps-editor-ui-shortcut-header { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:12px 14px; border-bottom:1px solid var(--fps-editor-divider); background:var(--fps-editor-chrome-dark); }\n.fps-editor-workbench .fps-editor-ui-shortcut-content { flex:1 1 auto; min-height:0; overflow:auto; padding:12px 14px 14px; }\n.fps-editor-workbench .fps-editor-ui-shortcut-section { margin:0 0 12px; }\n.fps-editor-workbench .fps-editor-ui-shortcut-grid { display:grid; grid-template-columns:130px 1fr; gap:6px 10px; align-items:center; }\n.fps-editor-workbench .fps-editor-ui-shortcut-key { min-height:24px; display:flex; align-items:center; padding:0 7px; border:1px solid var(--fps-editor-border); border-radius:4px; background:var(--fps-editor-field); color:var(--fps-editor-text-strong); font-weight:700; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-shortcut-description { color:var(--fps-editor-muted); line-height:1.35; }\n.fps-editor-workbench .fps-editor-ui-panel-title { min-width:0; display:flex; align-items:center; gap:6px; margin:0 0 9px; color:var(--fps-editor-text-strong); font-size:13px; font-weight:750; }\n.fps-editor-workbench .fps-editor-ui-search { width:100%; height:29px; margin:0 0 8px; padding:0 9px; border:1px solid var(--fps-editor-border); border-radius:5px; background:var(--fps-editor-field); color:var(--fps-editor-text); font-size:12px; }\n.fps-editor-workbench .fps-editor-ui-segmented-tabs { min-height:27px; display:flex; align-items:center; gap:4px; margin:0 0 8px; }\n.fps-editor-workbench .fps-editor-ui-segmented-tab { height:25px; padding:0 8px; border-radius:5px; color:var(--fps-editor-muted); font-size:11px; }\n.fps-editor-workbench .fps-editor-ui-segmented-tab[data-active=\"true\"] { border-color:var(--fps-editor-control-active-border); background:var(--fps-editor-control-active-bg); color:var(--fps-editor-text-strong); box-shadow:inset 0 -2px 0 var(--fps-editor-accent); }\n.fps-editor-workbench .fps-editor-ui-asset-count { margin-bottom:6px; color:var(--fps-editor-muted); font-size:11px; }\n.fps-editor-workbench .fps-editor-ui-asset-card { width:100%; min-height:32px; display:flex; align-items:center; gap:8px; padding:6px 8px; border:1px solid var(--fps-editor-border); border-radius:6px; background:color-mix(in srgb,var(--fps-editor-panel-soft) 68%,var(--fps-editor-panel)); color:var(--fps-editor-text); text-align:left; font-size:12px; cursor:pointer; transition:background-color 90ms ease,border-color 90ms ease; }\n.fps-editor-workbench .fps-editor-ui-asset-card:hover { border-color:var(--fps-editor-accent); background:var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-ui-asset-card[aria-selected=\"true\"] { border-color:var(--fps-editor-accent-strong); background:var(--fps-editor-accent-soft); }\n.fps-editor-workbench .fps-editor-ui-asset-card:disabled { opacity:.62; cursor:not-allowed; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-has-preview=\"true\"] { min-height:38px; padding:7px 8px; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"] { min-height:48px; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"][data-has-preview=\"true\"] { min-height:66px; }\n.fps-editor-workbench .fps-editor-ui-asset-card-body { min-width:0; flex:1; }\n.fps-editor-workbench .fps-editor-ui-asset-card-label { color:var(--fps-editor-text-strong); font-weight:700; }\n.fps-editor-workbench .fps-editor-ui-asset-card-meta { color:var(--fps-editor-muted); font-size:11px; }\n.fps-editor-workbench .fps-editor-ui-history-list { display:flex; flex-direction:column; gap:4px; }\n.fps-editor-workbench .fps-editor-ui-history-label { color:var(--fps-editor-text); font-size:12px; font-weight:700; }\n.fps-editor-workbench .fps-editor-ui-history-meta { margin-top:2px; color:var(--fps-editor-muted); font-size:11px; }\n.fps-editor-workbench .fps-editor-ui-hierarchy-search { margin:0 8px 7px; width:calc(100% - 16px); }\n.fps-editor-workbench .fps-editor-ui-hierarchy-canvas { position:relative; width:100%; min-height:100%; }\n.fps-editor-workbench .fps-editor-ui-prefab-preview-card { min-width:0; min-height:0; flex:1 1 0; display:flex; flex-direction:column; padding:8px; border:1px solid var(--fps-editor-border); border-radius:7px; color:var(--fps-editor-text); pointer-events:auto; overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-prefab-preview-header { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:7px; padding:6px 8px; border:1px solid var(--fps-editor-border); border-radius:6px; background:color-mix(in srgb,var(--fps-editor-chrome) 86%,transparent); box-shadow:0 6px 14px color-mix(in srgb,#000 18%,transparent); }\n.fps-editor-workbench .fps-editor-ui-prefab-preview-surface { width:100%; min-height:0; flex:1 1 auto; display:flex; align-items:center; justify-content:center; border:1px solid var(--fps-editor-border-soft); border-radius:5px; background:transparent; color:var(--fps-editor-muted); overflow:hidden; font-size:10px; font-weight:650; text-align:center; touch-action:none; user-select:none; cursor:grab; }\n.fps-editor-workbench .fps-editor-ui-control { min-width: 0; width: 100%; }\n.fps-editor-workbench .fps-editor-ui-layer-host {\n position: fixed;\n inset: 0;\n z-index: 240;\n overflow: visible;\n pointer-events: none;\n}\n.fps-editor-workbench .fps-editor-ui-layer-host > * { pointer-events: auto; }\n.fps-editor-workbench .fps-editor-ui-control.pcui-element,\n.fps-editor-workbench .fps-editor-ui-control > .pcui-element {\n color: var(--fps-editor-text);\n}\n.fps-editor-workbench .fps-editor-ui-control.pcui-input-element,\n.fps-editor-workbench .fps-editor-ui-control .pcui-input-element,\n.fps-editor-workbench .fps-editor-ui-control.pcui-color-input,\n.fps-editor-workbench .fps-editor-ui-control.pcui-select-input,\n.fps-editor-workbench .fps-editor-ui-button {\n border-color: var(--fps-editor-editable-border);\n background-color: var(--fps-editor-field);\n}\n.fps-editor-workbench .fps-editor-ui-control.pcui-input-element:hover,\n.fps-editor-workbench .fps-editor-ui-control .pcui-input-element:hover,\n.fps-editor-workbench .fps-editor-ui-button:hover {\n border-color: var(--fps-editor-border);\n background-color: var(--fps-editor-button-hover);\n}\n.fps-editor-workbench .fps-editor-ui-control.pcui-focus,\n.fps-editor-workbench .fps-editor-ui-control .pcui-focus {\n border-color: var(--fps-editor-accent);\n box-shadow: 0 0 0 2px var(--fps-editor-accent-soft);\n}\n.fps-editor-workbench .fps-editor-ui-boolean {\n position: relative;\n display: inline-flex;\n width: 32px;\n justify-self: end;\n}\n.fps-editor-workbench .fps-editor-ui-boolean > .pcui-element { width: 30px; }\n.fps-editor-workbench .fps-editor-ui-boolean .pcui-boolean-input-ticked {\n border-color: color-mix(in srgb, var(--fps-editor-control-on) 72%, var(--fps-editor-border));\n background-color: var(--fps-editor-control-on);\n}\n.fps-editor-workbench .fps-editor-ui-boolean .pcui-boolean-input-ticked::after {\n border-color: var(--fps-editor-control-thumb);\n background-color: var(--fps-editor-control-thumb);\n}\n.fps-editor-workbench .fps-editor-ui-select,\n.fps-editor-workbench .fps-editor-ui-color { position: relative; display: inline-flex; }\n.fps-editor-workbench .fps-editor-ui-select > .pcui-element,\n.fps-editor-workbench .fps-editor-ui-color > .pcui-element { width: 100%; }\n.fps-editor-workbench .fps-editor-ui-proxy-input {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n margin: -1px !important;\n padding: 0 !important;\n overflow: hidden !important;\n clip: rect(0 0 0 0) !important;\n clip-path: inset(50%) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n.fps-editor-workbench .fps-editor-ui-vector { display: flex; gap: 4px; }\n.fps-editor-workbench .fps-editor-ui-vector > .pcui-input-element { min-width: 0; }\n.fps-editor-workbench .fps-editor-ui-readonly {\n min-width: 0;\n padding: 6px 8px;\n border: 1px solid var(--fps-editor-readonly-border);\n border-radius: 4px;\n background: var(--fps-editor-readonly-bg);\n color: var(--fps-editor-readonly-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fps-editor-workbench .fps-editor-ui-error,\n.fps-editor-workbench .fps-editor-ui-error .pcui-input-element {\n border-color: var(--fps-editor-danger-border) !important;\n}\n.fps-editor-workbench .fps-editor-ui-mixed { opacity: .82; }\n.fps-editor-workbench .fps-editor-ui-section.pcui-panel {\n margin: 0 0 7px;\n border: 1px solid var(--fps-editor-border);\n border-radius: 7px;\n overflow: hidden;\n background: color-mix(in srgb, var(--fps-editor-panel-soft) 42%, transparent);\n}\n.fps-editor-workbench .fps-editor-ui-section .pcui-panel-header {\n min-height: 34px;\n border-bottom-color: var(--fps-editor-border);\n background: color-mix(in srgb, var(--fps-editor-panel-soft) 55%, transparent);\n}\n.fps-editor-workbench .fps-editor-ui-section .pcui-panel-header::before {\n border-color: var(--fps-editor-muted-strong);\n color: var(--fps-editor-muted-strong);\n}\n.fps-editor-workbench .fps-editor-ui-section .pcui-panel-header:hover::before {\n border-color: var(--fps-editor-text-strong);\n color: var(--fps-editor-text-strong);\n}\n.fps-editor-workbench .fps-editor-ui-section .pcui-panel-content { padding: 10px 11px 12px; }\n.fps-editor-workbench .fps-editor-inspector-title {\n min-height: 42px;\n display: flex;\n align-items: center;\n gap: 7px;\n margin: -8px -8px 10px;\n padding: 9px 11px;\n border-bottom: 1px solid var(--fps-editor-divider);\n background: linear-gradient(180deg, color-mix(in srgb, var(--fps-editor-panel-soft) 55%, transparent), transparent);\n color: var(--fps-editor-text-strong);\n font-size: 13px;\n font-weight: 700;\n}\n.fps-editor-workbench .fps-editor-inspector-search { display: block; margin: 0 0 9px; }\n.fps-editor-workbench .fps-editor-inspector-component {\n margin: 0 0 7px;\n padding: 10px 11px;\n border: 1px solid var(--fps-editor-border);\n border-radius: 7px;\n background: color-mix(in srgb, var(--fps-editor-panel-soft) 42%, transparent);\n}\n.fps-editor-workbench .fps-editor-inspector-component > div:first-child { margin-bottom: 7px; }\n.fps-editor-workbench .fps-editor-inspector-summary-header { display:flex; align-items:center; justify-content:space-between; gap:8px; margin:0 0 8px; }\n.fps-editor-workbench .fps-editor-inspector-summary-title { margin:0; color:var(--fps-editor-text-strong); font-size:12px; font-weight:700; }\n.fps-editor-workbench .fps-editor-inspector-property-row {\n min-height: 31px;\n display: grid;\n grid-template-columns: 96px minmax(0,1fr);\n align-items: center;\n gap: 9px;\n padding: 2px 0;\n}\n.fps-editor-workbench .fps-editor-inspector-property-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--fps-editor-muted);\n font-size: 11px;\n font-weight: 600;\n}\n.fps-editor-workbench .fps-editor-inspector-property-row[data-editor-inspector-access=\"editable\"] .fps-editor-inspector-property-label { color: var(--fps-editor-muted-strong); }\n.fps-editor-workbench .fps-editor-inspector-property-row[data-editor-inspector-effect=\"unsupported\"] .fps-editor-inspector-property-label { color: var(--fps-editor-danger-text); }\n.fps-editor-workbench .fps-editor-inspector-section-meta {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 5px;\n min-width: 0;\n color: var(--fps-editor-muted);\n font-size: 10px;\n}\n.fps-editor-workbench .fps-editor-inspector-section-summary {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-transform: none;\n font-size: 10px;\n}\n.fps-editor-workbench .fps-editor-inspector-readonly-value { display: flex; align-items: center; gap: 5px; }\n.fps-editor-workbench .fps-editor-inspector-readonly-details,\n.fps-editor-workbench .fps-editor-ui-expandable-readonly {\n min-width: 0;\n max-width: 100%;\n padding: 5px 7px;\n border: 1px solid var(--fps-editor-readonly-border);\n border-radius: 4px;\n background: var(--fps-editor-readonly-bg);\n color: var(--fps-editor-readonly-text);\n}\n.fps-editor-workbench .fps-editor-ui-expandable-readonly__summary {\n min-width:0;\n display:flex;\n align-items:center;\n gap:5px;\n overflow:hidden;\n white-space:nowrap;\n cursor:pointer;\n}\n.fps-editor-workbench .fps-editor-ui-expandable-readonly__summary-text { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-expandable-readonly__content {\n max-height:220px;\n overflow:auto;\n margin:6px 0 0;\n padding:7px;\n border:1px solid var(--fps-editor-readonly-border);\n border-radius:4px;\n background:var(--fps-editor-field);\n color:var(--fps-editor-readonly-text);\n font-size:11px;\n line-height:1.45;\n white-space:pre-wrap;\n word-break:break-word;\n}\n.fps-editor-workbench .fps-editor-ui-expandable-readonly.fps-editor-ui-warning,\n.fps-editor-workbench .fps-editor-ui-expandable-readonly.fps-editor-ui-warning .fps-editor-ui-expandable-readonly__content { border-color:var(--fps-editor-warn-border); }\n.fps-editor-workbench .fps-editor-inspector-readonly-value--warning {\n border-color: var(--fps-editor-warn-border);\n background: var(--fps-editor-warn-soft);\n color: var(--fps-editor-warn);\n font-style: italic;\n}\n.fps-editor-workbench [data-editor-inspector-access=\"readonly\"] .fps-editor-inspector-property-label { opacity: .78; }\n.fps-editor-workbench [data-editor-inspector-effect=\"unsupported\"].fps-editor-ui-section { border-color: var(--fps-editor-danger-border); }\n.fps-editor-workbench .fps-editor-inspector-vector-group { min-width:0; margin:8px 0; }\n.fps-editor-workbench .fps-editor-inspector-vector-header { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:5px; }\n.fps-editor-workbench .fps-editor-inspector-vector-actions { display:inline-flex; align-items:center; gap:5px; flex:0 0 auto; }\n.fps-editor-workbench .fps-editor-inspector-vector-fields {\n display:grid;\n grid-template-columns:repeat(var(--fps-editor-vector-dimensions, 3), minmax(0,1fr));\n gap:5px;\n width:100%;\n}\n.fps-editor-workbench .fps-editor-inspector-vector-axis-field { position:relative; min-width:0; }\n.fps-editor-workbench .fps-editor-inspector-vector-axis-label {\n position:absolute;\n z-index:1;\n left:7px;\n top:50%;\n transform:translateY(-50%);\n color:var(--fps-editor-muted-strong);\n font-size:9px;\n font-weight:800;\n line-height:1;\n pointer-events:none;\n}\n.fps-editor-workbench .fps-editor-inspector-vector-axis-field .fps-editor-ui-number input { padding-left:19px; }\n.fps-editor-workbench .fps-editor-inspector-icon-button {\n width:24px;\n min-width:24px;\n height:24px;\n padding:0;\n display:inline-flex;\n align-items:center;\n justify-content:center;\n flex:0 0 24px;\n}\n.fps-editor-workbench .fps-editor-inspector-icon-button[data-editor-ui-active=\"true\"] {\n border-color:var(--fps-editor-control-active-border);\n background:var(--fps-editor-control-active-bg);\n color:var(--fps-editor-text-strong);\n box-shadow:inset 0 -2px 0 var(--fps-editor-accent);\n}\n.fps-editor-workbench .fps-editor-inspector-action-button { min-height:30px; justify-content:center; gap:6px; }\n.fps-editor-workbench .fps-editor-inspector-copy-button {\n width:22px;\n min-width:22px;\n height:22px;\n margin-left:auto;\n padding:0;\n border-color:transparent;\n background:transparent;\n color:currentColor;\n opacity:.72;\n flex:0 0 22px;\n}\n.fps-editor-workbench .fps-editor-inspector-copy-button:hover { opacity:1; background:var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-inspector-special-control { display:flex; flex-direction:column; gap:8px; width:100%; min-width:0; }\n.fps-editor-workbench .fps-editor-inspector-material-slots { gap:6px; }\n.fps-editor-workbench .fps-editor-inspector-material-slot {\n min-width:0;\n border:1px solid var(--fps-editor-readonly-border);\n border-radius:5px;\n background:var(--fps-editor-readonly-bg);\n color:var(--fps-editor-readonly-text);\n overflow:hidden;\n}\n.fps-editor-workbench .fps-editor-inspector-material-slot-summary { min-width:0; min-height:46px; display:flex; align-items:center; gap:8px; padding:7px 8px; cursor:pointer; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-content { display:flex; flex-direction:column; gap:4px; padding:0 8px 8px; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-row { display:grid; grid-template-columns:88px minmax(0,1fr); gap:8px; align-items:start; font-size:11px; line-height:1.35; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-label { color:var(--fps-editor-muted); font-weight:700; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-value,\n.fps-editor-workbench .fps-editor-inspector-card-title,\n.fps-editor-workbench .fps-editor-inspector-card-subtitle { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-value { font-family:var(--fps-editor-mono-font); color:var(--fps-editor-readonly-text); }\n.fps-editor-workbench .fps-editor-inspector-card-body { min-width:0; flex:1; text-align:left; }\n.fps-editor-workbench .fps-editor-inspector-card-title { color:var(--fps-editor-text-strong); font-weight:700; }\n.fps-editor-workbench .fps-editor-inspector-card-subtitle { margin-top:2px; color:var(--fps-editor-muted); font-size:10px; font-weight:600; }\n.fps-editor-workbench .fps-editor-inspector-asset-picker {\n min-width:0;\n display:grid;\n grid-template-columns:minmax(0,1fr) auto;\n align-items:stretch;\n gap:6px;\n}\n.fps-editor-workbench .fps-editor-inspector-asset-picker[data-editor-inspector-asset-picker-actions=\"two\"] { grid-template-columns:minmax(0,1fr) auto auto; }\n.fps-editor-workbench .fps-editor-inspector-asset-card { min-width:0; min-height:44px; display:flex; align-items:center; gap:8px; padding:6px 7px; text-align:left; }\n.fps-editor-workbench .fps-editor-inspector-asset-action { width:auto; min-width:48px; min-height:44px; padding:0 9px; justify-content:center; font-size:11px; font-weight:700; }\n`;\n\nexport function ensureEditorUiStyles(document: Document): void {\n if (document.getElementById(EDITOR_UI_STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = EDITOR_UI_STYLE_ID;\n style.textContent = EDITOR_UI_STYLES;\n document.head.append(style);\n}\n"]}
1
+ {"version":3,"file":"editor-ui-theme.js","sourceRoot":"","sources":["../src/editor-ui-theme.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AAEhE,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+tBxB,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,IAAI,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;QAAE,OAAO;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,GAAG,kBAAkB,CAAC;IAC9B,KAAK,CAAC,WAAW,GAAG,gBAAgB,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["export const EDITOR_UI_STYLE_ID = 'fps-editor-ui-system-styles';\n\nconst EDITOR_UI_STYLES = `\n.fps-editor-workbench[data-fps-editor-theme=\"dark\"] {\n --fps-editor-font: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n --fps-editor-mono-font: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n --fps-editor-bg: #0c0d0f;\n --fps-editor-chrome: #17181b;\n --fps-editor-chrome-dark: #121316;\n --fps-editor-panel: #1f2023;\n --fps-editor-panel-soft: #292a2e;\n --fps-editor-field: #242529;\n --fps-editor-border: rgba(255,255,255,.075);\n --fps-editor-border-soft: rgba(255,255,255,.055);\n --fps-editor-inspector-section-border: rgba(255,255,255,.075);\n --fps-editor-divider: rgba(255,255,255,.07);\n --fps-editor-text: #d7d8db;\n --fps-editor-text-strong: #f0f1f2;\n --fps-editor-text-inverse: #ffffff;\n --fps-editor-muted: #8b8d94;\n --fps-editor-muted-strong: #b4b6bb;\n --fps-editor-accent: #5f88b0;\n --fps-editor-accent-soft: rgba(95,136,176,.18);\n --fps-editor-accent-strong: #82acd3;\n --fps-editor-control-active-bg: #343a42;\n --fps-editor-control-active-border: #596572;\n --fps-editor-control-on: #556b7f;\n --fps-editor-control-thumb: #f2f4f6;\n --fps-editor-editable-bg: #242529;\n --fps-editor-editable-border: rgba(255,255,255,.10);\n --fps-editor-editable-shadow: 0 0 0 1px rgba(0,0,0,.18) inset;\n --fps-editor-readonly-bg: rgba(255,255,255,.035);\n --fps-editor-readonly-border: rgba(255,255,255,.075);\n --fps-editor-readonly-text: #c8c8c8;\n --fps-editor-warn: #e5b454;\n --fps-editor-warn-soft: rgba(248,196,79,.08);\n --fps-editor-warn-border: rgba(229,180,84,.45);\n --fps-editor-warn-strong: rgba(248,196,79,.95);\n --fps-editor-danger: #ef6a6a;\n --fps-editor-danger-text: #ffd7d5;\n --fps-editor-danger-soft: rgba(239,106,106,.16);\n --fps-editor-danger-border: rgba(239,106,106,.45);\n --fps-editor-danger-strong: #ff9b95;\n --fps-editor-success: #68b88a;\n --fps-editor-success-soft: rgba(104,184,138,.12);\n --fps-editor-success-border: rgba(104,184,138,.38);\n --fps-editor-button: #292a2e;\n --fps-editor-button-hover: #323338;\n --fps-editor-button-active: #343a42;\n --fps-editor-shadow-panel: 0 10px 28px rgba(0,0,0,.24);\n --fps-editor-shadow-popover: 0 12px 32px rgba(0,0,0,.35);\n --fps-editor-shadow-modal: 0 16px 42px rgba(0,0,0,.35);\n --fps-editor-shadow-inset-highlight: 0 1px 0 rgba(255,255,255,.03) inset;\n --fps-editor-row-selected: rgba(95,136,176,.16);\n --fps-editor-row-selected-text: #ffffff;\n --fps-editor-row-active: rgba(95,136,176,.24);\n --fps-editor-drop-target: #82acd3;\n --fps-editor-locked-bg: #262626;\n --fps-editor-locked-text: #777777;\n --fps-editor-role-root-bg: #3a2f18;\n --fps-editor-role-group-bg: #243426;\n --fps-editor-role-object-bg: #252b34;\n --fps-editor-asset-card-bg: #243426;\n --fps-editor-box-select-bg: rgba(95,136,176,.18);\n --fps-editor-box-select-shadow: 0 0 0 1px rgba(10,15,23,.55) inset;\n --fps-editor-scrollbar-thumb: #4c4e54;\n --fps-editor-scrollbar-track: #17181b;\n color-scheme: dark;\n}\n.fps-editor-workbench,\n.fps-editor-workbench * { box-sizing: border-box; }\n.fps-editor-workbench button,\n.fps-editor-workbench input,\n.fps-editor-workbench select,\n.fps-editor-workbench textarea { font: inherit; }\n.fps-editor-workbench button:focus-visible,\n.fps-editor-workbench input:focus-visible,\n.fps-editor-workbench select:focus-visible,\n.fps-editor-workbench textarea:focus-visible {\n outline: 2px solid var(--fps-editor-accent);\n outline-offset: 1px;\n}\n.fps-editor-workbench .fps-editor-ui-button {\n min-width: 0;\n height: 26px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 auto;\n gap: 5px;\n padding: 4px 8px;\n border: 1px solid var(--fps-editor-border);\n border-radius: 4px;\n color: var(--fps-editor-text);\n font-size: 12px;\n font-weight: 700;\n line-height: 16px;\n white-space: nowrap;\n cursor: pointer;\n transition: background-color 90ms ease, border-color 90ms ease, color 90ms ease;\n}\n.fps-editor-workbench .fps-editor-ui-button:disabled { opacity: .48; cursor: not-allowed; }\n.fps-editor-workbench .fps-editor-ui-button[data-editor-button-variant=\"toolbar-icon\"] {\n width: 32px;\n min-width: 32px;\n height: 28px;\n padding: 0;\n flex-basis: 32px;\n}\n.fps-editor-workbench .fps-editor-ui-button[data-editor-button-label-mode=\"icon-only\"] { gap: 0; }\n.fps-editor-workbench .fps-editor-ui-button[data-active=\"true\"],\n.fps-editor-workbench .fps-editor-ui-button[data-editor-ui-active=\"true\"] {\n border-color: var(--fps-editor-control-active-border);\n background: var(--fps-editor-button-active);\n color: var(--fps-editor-text-strong);\n box-shadow: inset 0 -2px 0 var(--fps-editor-accent);\n}\n.fps-editor-workbench .fps-editor-ui-button__label,\n.fps-editor-workbench .fps-editor-ui-ellipsis {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fps-editor-workbench .fps-editor-ui-panel-header {\n min-height: 34px;\n display: flex;\n align-items: center;\n gap: 8px;\n margin: -8px -8px 8px;\n padding: 0 9px;\n border-bottom: 1px solid var(--fps-editor-divider);\n background: linear-gradient(180deg, color-mix(in srgb, var(--fps-editor-panel-soft) 58%, transparent), var(--fps-editor-chrome-dark));\n}\n.fps-editor-workbench .fps-editor-ui-panel-heading {\n min-width: 0;\n flex: 1;\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 0;\n color: var(--fps-editor-text-strong);\n font-size: 12px;\n font-weight: 750;\n letter-spacing: .01em;\n}\n.fps-editor-workbench .fps-editor-ui-dock-tab-strip {\n height: 35px;\n display: flex;\n align-items: stretch;\n flex: 0 0 auto;\n border-bottom: 1px solid var(--fps-editor-divider);\n background: var(--fps-editor-chrome-dark);\n}\n.fps-editor-workbench .fps-editor-ui-dock-tab-strip[data-editor-dock-area=\"bottom\"] { height: 29px; }\n.fps-editor-workbench .fps-editor-ui-dock-tab {\n height: 100%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 5px;\n padding: 0 11px;\n border: 0;\n border-right: 1px solid var(--fps-editor-divider);\n border-top: 2px solid transparent;\n background: transparent;\n color: var(--fps-editor-muted);\n font-size: 11px;\n font-weight: 700;\n white-space: nowrap;\n cursor: pointer;\n}\n.fps-editor-workbench .fps-editor-ui-dock-tab:hover { color: var(--fps-editor-text); background: var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-ui-dock-tab[data-active=\"true\"] {\n border-top-color: var(--fps-editor-accent);\n background: var(--fps-editor-panel);\n color: var(--fps-editor-text-strong);\n}\n.fps-editor-workbench.fps-editor-ui-workbench-root {\n position: fixed;\n inset: 0;\n z-index: 2147483639;\n display: block;\n color: var(--fps-editor-text);\n font-family: var(--fps-editor-font);\n font-size: 12px;\n pointer-events: none;\n}\n.fps-editor-workbench .fps-editor-ui-workbench-dock {\n position: absolute;\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n border: 1px solid var(--fps-editor-divider);\n background: var(--fps-editor-panel);\n pointer-events: auto;\n overflow: hidden;\n}\n.fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region=\"left-dock\"] { top:0; left:0; bottom:30px; width:300px; }\n.fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region=\"right-dock\"] { top:0; right:0; bottom:30px; width:340px; }\n.fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region=\"bottom-dock\"] { left:300px; right:340px; bottom:30px; height:260px; }\n.fps-editor-workbench .fps-editor-ui-workbench-dock[data-editor-workbench-region=\"bottom-console\"] { left:0; right:0; bottom:0; height:30px; z-index:3; }\n.fps-editor-workbench .fps-editor-ui-scene-frame {\n position: absolute;\n inset: 0 340px 30px 300px;\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n border: 1px solid var(--fps-editor-divider);\n border-top: 0;\n background: transparent;\n pointer-events: none;\n overflow: hidden;\n}\n.fps-editor-workbench .fps-editor-ui-scene-header {\n height: 38px;\n flex: 0 0 38px;\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--fps-editor-divider);\n background: color-mix(in srgb, var(--fps-editor-chrome) 92%, transparent);\n box-shadow: var(--fps-editor-shadow-inset-highlight);\n pointer-events: none;\n}\n.fps-editor-workbench .fps-editor-ui-workbench-resizer { position:absolute; z-index:4; background:transparent; pointer-events:auto; touch-action:none; }\n.fps-editor-workbench .fps-editor-ui-workbench-resizer:hover { background:var(--fps-editor-accent-soft); }\n.fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer=\"bottom\"],\n.fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer=\"console\"] { height:7px; cursor:row-resize; }\n.fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer=\"left\"],\n.fps-editor-workbench .fps-editor-ui-workbench-resizer[data-editor-workbench-resizer=\"right\"] { width:7px; cursor:col-resize; }\n.fps-editor-workbench .fps-editor-ui-workbench-toggle {\n position: absolute;\n z-index: 5;\n width: 26px;\n height: 26px;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: 1px solid var(--fps-editor-border);\n border-radius: 5px;\n background: var(--fps-editor-button);\n color: var(--fps-editor-text);\n box-shadow: var(--fps-editor-shadow-panel);\n cursor: pointer;\n pointer-events: auto;\n}\n.fps-editor-workbench .fps-editor-ui-workbench-toggle:hover { background:var(--fps-editor-button-hover); border-color:var(--fps-editor-accent); }\n.fps-editor-workbench .fps-editor-ui-console { background:var(--fps-editor-chrome-dark); }\n.fps-editor-workbench .fps-editor-ui-console-header { height:29px; flex:0 0 29px; display:flex; align-items:center; gap:10px; padding:0 5px 0 10px; border-bottom:1px solid var(--fps-editor-divider); background:var(--fps-editor-chrome-dark); }\n.fps-editor-workbench .fps-editor-ui-console-title-group { min-width:88px; height:100%; display:flex; align-items:center; gap:6px; padding:0; border:0; background:transparent; color:var(--fps-editor-text-strong); cursor:pointer; }\n.fps-editor-workbench .fps-editor-ui-console-title-group:hover { color:var(--fps-editor-accent-strong); }\n.fps-editor-workbench .fps-editor-ui-console-title-group:focus-visible { outline:1px solid var(--fps-editor-accent); outline-offset:-2px; }\n.fps-editor-workbench .fps-editor-ui-console-title { font-size:11px; font-weight:750; }\n.fps-editor-workbench .fps-editor-ui-console-total { min-width:15px; height:15px; display:inline-flex; align-items:center; justify-content:center; padding:0 4px; border-radius:7px; background:var(--fps-editor-panel-soft); color:var(--fps-editor-muted); font-size:9px; line-height:15px; }\n.fps-editor-workbench .fps-editor-ui-console-total:empty { display:none; }\n.fps-editor-workbench .fps-editor-ui-console-total[data-has-errors=\"true\"] { background:var(--fps-editor-danger-soft); color:var(--fps-editor-danger-text); }\n.fps-editor-workbench .fps-editor-ui-console-filters { min-width:0; display:flex; align-self:stretch; }\n.fps-editor-workbench .fps-editor-ui-console-filter { height:100%; padding:0 8px; border:0; border-bottom:2px solid transparent; background:transparent; color:var(--fps-editor-muted); font-size:10px; cursor:pointer; }\n.fps-editor-workbench .fps-editor-ui-console-filter:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text); }\n.fps-editor-workbench .fps-editor-ui-console-filter[data-active=\"true\"] { border-bottom-color:var(--fps-editor-accent); color:var(--fps-editor-text-strong); }\n.fps-editor-workbench .fps-editor-ui-console-actions { margin-left:auto; display:flex; align-items:center; gap:2px; }\n.fps-editor-workbench .fps-editor-ui-console-icon-button { width:24px; height:24px; display:inline-flex; align-items:center; justify-content:center; padding:0; border:0; border-radius:3px; background:transparent; color:var(--fps-editor-muted); cursor:pointer; }\n.fps-editor-workbench .fps-editor-ui-console-icon-button:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text-strong); }\n.fps-editor-workbench .fps-editor-ui-console-icon-button:disabled { opacity:.35; cursor:not-allowed; }\n.fps-editor-workbench .fps-editor-ui-console-icon-button[data-copy-state=\"success\"] { color:var(--fps-editor-success); }\n.fps-editor-workbench .fps-editor-ui-console-icon-button[data-copy-state=\"error\"] { color:var(--fps-editor-danger-strong); }\n.fps-editor-workbench .fps-editor-ui-console-list { min-height:0; flex:1 1 auto; overflow:auto; background:var(--fps-editor-bg); font-family:var(--fps-editor-mono-font); font-size:10px; line-height:1.4; }\n.fps-editor-workbench .fps-editor-ui-console-entry { min-height:28px; border-bottom:1px solid var(--fps-editor-border-soft); color:var(--fps-editor-text); }\n.fps-editor-workbench .fps-editor-ui-console-entry-summary { min-height:27px; display:grid; grid-template-columns:22px 68px 54px 72px minmax(0,1fr) 24px; gap:7px; align-items:center; padding:2px 5px 2px 4px; }\n.fps-editor-workbench .fps-editor-ui-console-entry:hover .fps-editor-ui-console-entry-summary { background:color-mix(in srgb,var(--fps-editor-panel-soft) 45%,transparent); }\n.fps-editor-workbench .fps-editor-ui-console-entry time { color:var(--fps-editor-muted); font-variant-numeric:tabular-nums; }\n.fps-editor-workbench .fps-editor-ui-console-severity { font-size:9px; font-weight:800; color:var(--fps-editor-muted-strong); }\n.fps-editor-workbench .fps-editor-ui-console-entry[data-severity=\"warning\"] .fps-editor-ui-console-severity { color:var(--fps-editor-warn); }\n.fps-editor-workbench .fps-editor-ui-console-entry[data-severity=\"error\"] .fps-editor-ui-console-severity { color:var(--fps-editor-danger-strong); }\n.fps-editor-workbench .fps-editor-ui-console-source { overflow:hidden; color:var(--fps-editor-accent-strong); text-overflow:ellipsis; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-console-message { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-console-entry-toggle,\n.fps-editor-workbench .fps-editor-ui-console-entry-copy { width:22px; height:22px; }\n.fps-editor-workbench .fps-editor-ui-console-entry-copy { opacity:.55; }\n.fps-editor-workbench .fps-editor-ui-console-entry:hover .fps-editor-ui-console-entry-copy,\n.fps-editor-workbench .fps-editor-ui-console-entry-copy:focus-visible { opacity:1; }\n.fps-editor-workbench .fps-editor-ui-console-entry-details { margin:0; padding:7px 10px 9px 33px; border-top:1px solid var(--fps-editor-border-soft); background:color-mix(in srgb,var(--fps-editor-field) 72%,transparent); color:var(--fps-editor-muted-strong); font:inherit; white-space:pre-wrap; overflow-wrap:anywhere; }\n.fps-editor-workbench .fps-editor-ui-console-empty { padding:18px; color:var(--fps-editor-muted); text-align:center; }\n.fps-editor-workbench .fps-editor-ui-console[data-editor-console-collapsed=\"true\"] .fps-editor-ui-console-filters { display:none; }\n.fps-editor-workbench .fps-editor-ui-console[data-editor-console-collapsed=\"true\"] .fps-editor-ui-console-list { display:none; }\n.fps-editor-workbench .fps-editor-ui-panel-content { flex:1; min-height:0; overflow:auto; padding:8px; }\n.fps-editor-workbench .fps-editor-ui-scene-toolbar { width:100%; height:100%; max-width:100%; display:flex; align-items:center; gap:7px; padding:5px 8px; pointer-events:auto; overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-dock-panel { display:flex; flex-direction:column; min-height:0; overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-dock-viewport { flex:1; min-height:0; overflow:auto; padding:var(--fps-editor-dock-padding, 0 2px 0 0); }\n.fps-editor-workbench .fps-editor-ui-dock-viewport[data-editor-ui-column=\"true\"] { display:flex; flex-direction:column; gap:var(--fps-editor-dock-gap, 0); }\n.fps-editor-workbench .fps-editor-ui-tree { display:flex; flex-direction:column; gap:1px; }\n.fps-editor-workbench .fps-editor-ui-tree-item {\n width:100%; min-height:25px; position:relative; display:flex; align-items:center; gap:5px;\n padding:3px 8px 3px calc(8px + var(--fps-editor-tree-depth, 0) * 16px);\n border:1px solid transparent; border-radius:3px; background:transparent; color:var(--fps-editor-text);\n text-align:left; font-size:12px; font-weight:650; cursor:pointer; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;\n}\n.fps-editor-workbench .fps-editor-ui-tree-item:hover { background:var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-selected=\"true\"] { border-color:transparent; background:var(--fps-editor-row-selected); color:var(--fps-editor-row-selected-text); box-shadow:inset 2px 0 0 var(--fps-editor-accent); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-active=\"true\"] { border-color:transparent; background:var(--fps-editor-row-active); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-locked=\"true\"] { background:var(--fps-editor-locked-bg); color:var(--fps-editor-locked-text); cursor:not-allowed; }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-enabled=\"false\"] { opacity:.72; color:var(--fps-editor-muted); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-drop-placement=\"inside\"] { border-color:var(--fps-editor-drop-target); background:var(--fps-editor-accent-soft); box-shadow:inset 3px 0 0 var(--fps-editor-drop-target); }\n.fps-editor-workbench .fps-editor-ui-tree-item[data-drop-valid=\"false\"] { border-color:var(--fps-editor-muted); background:var(--fps-editor-field); box-shadow:inset 3px 0 0 var(--fps-editor-muted); }\n.fps-editor-workbench .fps-editor-ui-property-grid { display:flex; flex-direction:column; gap:4px; }\n.fps-editor-workbench .fps-editor-ui-property-row { min-height:24px; display:grid; grid-template-columns:92px minmax(0,1fr); gap:8px; align-items:center; }\n.fps-editor-workbench .fps-editor-ui-property-label { color:var(--fps-editor-muted); font-weight:650; }\n.fps-editor-workbench .fps-editor-ui-badge { display:inline-flex; align-items:center; justify-content:center; gap:3px; padding:2px 6px; border:1px solid var(--fps-editor-border); border-radius:999px; background:var(--fps-editor-field); color:var(--fps-editor-muted-strong); font-size:9px; font-weight:750; line-height:1.2; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-badge[data-compact=\"true\"] { padding:1px 4px; }\n.fps-editor-workbench .fps-editor-ui-badge[data-tone=\"warning\"] { border-color:var(--fps-editor-warn-border); background:var(--fps-editor-warn-soft); color:var(--fps-editor-warn); }\n.fps-editor-workbench .fps-editor-ui-badge[data-tone=\"danger\"] { border-color:var(--fps-editor-danger-border); background:var(--fps-editor-danger-soft); color:var(--fps-editor-danger-text); }\n.fps-editor-workbench .fps-editor-ui-badge[data-tone=\"success\"] { border-color:var(--fps-editor-success-border); background:var(--fps-editor-success-soft); color:var(--fps-editor-success); }\n.fps-editor-workbench .fps-editor-ui-empty-state { padding:12px 10px; border:1px dashed var(--fps-editor-border); border-radius:6px; background:color-mix(in srgb,var(--fps-editor-field) 70%,transparent); color:var(--fps-editor-muted); font-size:11px; line-height:1.45; text-align:center; }\n.fps-editor-workbench .fps-editor-ui-list-item { padding:8px 9px; border:1px solid var(--fps-editor-border-soft); border-radius:5px; background:var(--fps-editor-panel-soft); }\n.fps-editor-workbench .fps-editor-ui-asset-list { display:flex; flex-direction:column; gap:3px; max-height:220px; overflow:auto; padding-right:2px; }\n.fps-editor-workbench .fps-editor-ui-asset-list[data-grid=\"true\"] { display:grid; grid-template-columns:repeat(auto-fill,minmax(108px,1fr)); align-content:start; gap:4px; max-height:none; }\n.fps-editor-workbench.fps-editor-ui-context-menu,\n.fps-editor-workbench .fps-editor-ui-context-menu { position:fixed; display:none; min-width:176px; padding:5px; border:1px solid var(--fps-editor-border); border-radius:6px; background:var(--fps-editor-chrome); box-shadow:var(--fps-editor-shadow-popover); z-index:2147483641; pointer-events:auto; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item { width:100%; min-height:28px; display:flex; align-items:center; gap:8px; padding:5px 8px; border:0; border-radius:4px; background:transparent; color:var(--fps-editor-text); text-align:left; cursor:pointer; }\n.fps-editor-workbench .fps-editor-ui-context-menu-group { position:relative; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item[data-compact=\"false\"] { justify-content:space-between; gap:18px; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item[data-compact=\"true\"] { justify-content:center; border:1px solid var(--fps-editor-border); background:var(--fps-editor-bg); text-align:center; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item[data-danger=\"true\"] { color:var(--fps-editor-danger-text); }\n.fps-editor-workbench .fps-editor-ui-context-menu-label { flex:1; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item[data-compact=\"true\"] .fps-editor-ui-context-menu-label { width:100%; }\n.fps-editor-workbench .fps-editor-ui-context-menu-shortcut { color:var(--fps-editor-muted); font-size:11px; font-weight:650; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-context-menu-item:hover,\n.fps-editor-workbench .fps-editor-ui-context-menu-item:focus-visible { background:var(--fps-editor-accent-soft); color:var(--fps-editor-text-strong); }\n.fps-editor-workbench .fps-editor-ui-context-menu-item:disabled { opacity:.45; cursor:not-allowed; }\n.fps-editor-workbench .fps-editor-ui-context-menu-separator { height:1px; margin:4px; background:var(--fps-editor-divider); }\n.fps-editor-workbench.fps-editor-ui-modal-root,\n.fps-editor-workbench .fps-editor-ui-modal-root { position:fixed; inset:0; z-index:2147483643; display:none; align-items:center; justify-content:center; padding:32px; background:rgba(0,0,0,.54); backdrop-filter:blur(2px); color:var(--fps-editor-text); font-family:var(--fps-editor-font); pointer-events:auto; }\n.fps-editor-workbench .fps-editor-ui-modal { width:min(460px,calc(100vw - 64px)); max-height:calc(100vh - 64px); display:flex; flex-direction:column; gap:11px; padding:16px; border:1px solid var(--fps-editor-border); border-radius:8px; background:var(--fps-editor-panel); box-shadow:var(--fps-editor-shadow-modal); overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-modal-header { display:flex; align-items:flex-start; justify-content:space-between; gap:12px; }\n.fps-editor-workbench .fps-editor-ui-modal-title { min-width:0; margin:0; overflow-wrap:anywhere; color:var(--fps-editor-text-strong); font-size:13px; font-weight:750; line-height:18px; }\n.fps-editor-workbench .fps-editor-ui-modal-message { color:var(--fps-editor-text); font-size:12px; font-weight:650; line-height:18px; overflow-wrap:anywhere; }\n.fps-editor-workbench .fps-editor-ui-modal-details { display:none; max-height:min(180px,calc(100vh - 260px)); margin:0; overflow:auto; padding:9px; border:1px solid var(--fps-editor-border-soft); border-radius:5px; background:var(--fps-editor-field); color:var(--fps-editor-muted-strong); font-family:var(--fps-editor-mono-font); font-size:11px; line-height:16px; white-space:pre-wrap; word-break:break-word; }\n.fps-editor-workbench .fps-editor-ui-modal-footer { display:flex; align-items:center; justify-content:flex-end; gap:8px; }\n.fps-editor-workbench.fps-editor-ui-tooltip,\n.fps-editor-workbench .fps-editor-ui-tooltip { position:fixed; z-index:2147483642; display:none; max-width:min(260px,calc(100vw - 16px)); padding:6px 8px; border:1px solid var(--fps-editor-border); border-radius:5px; background:var(--fps-editor-chrome); box-shadow:var(--fps-editor-shadow-popover); color:var(--fps-editor-text); font-family:var(--fps-editor-font); font-size:11px; font-weight:650; line-height:1.35; white-space:normal; pointer-events:none; }\n.fps-editor-workbench.fps-editor-ui-host-chrome { position:fixed; top:12px; left:50%; transform:translateX(-50%); z-index:2147483640; display:none; align-items:center; gap:8px; height:36px; padding:0 9px; border:1px solid var(--fps-editor-border); border-radius:7px; background:var(--fps-editor-chrome); box-shadow:var(--fps-editor-shadow-panel); color:var(--fps-editor-text); font-family:var(--fps-editor-font); pointer-events:auto; }\n.fps-editor-workbench .fps-editor-ui-toolbar-group { display:flex; align-items:center; gap:4px; padding-left:8px; border-left:1px solid var(--fps-editor-divider); }\n.fps-editor-workbench .fps-editor-ui-toolbar-group[data-editor-ui-first=\"true\"] { padding-left:0; border-left:0; }\n.fps-editor-workbench.fps-editor-ui-popover,\n.fps-editor-workbench .fps-editor-ui-popover { position:fixed; z-index:2147483641; display:none; flex-direction:column; gap:7px; min-width:180px; max-width:min(440px,calc(100vw - 16px)); max-height:calc(100vh - 72px); overflow:auto; padding:9px; border:1px solid var(--fps-editor-border); border-radius:7px; background:var(--fps-editor-panel); box-shadow:var(--fps-editor-shadow-popover); pointer-events:auto; }\n.fps-editor-workbench.fps-editor-ui-status-center,\n.fps-editor-workbench .fps-editor-ui-status-center { z-index:2147483642; width:min(440px,calc(100vw - 16px)); max-height:min(520px,calc(100vh - 56px)); overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-surface-header { display:flex; align-items:center; justify-content:space-between; gap:12px; }\n.fps-editor-workbench .fps-editor-ui-surface-title { min-width:0; margin:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--fps-editor-text-strong); font-size:13px; font-weight:750; }\n.fps-editor-workbench .fps-editor-ui-surface-actions { display:flex; align-items:center; gap:6px; }\n.fps-editor-workbench .fps-editor-ui-status-summary { color:var(--fps-editor-muted-strong); font-size:11px; line-height:1.45; }\n.fps-editor-workbench .fps-editor-ui-status-list { min-height:0; display:flex; flex-direction:column; gap:7px; overflow:auto; }\n.fps-editor-workbench .fps-editor-ui-overlay-card { border:1px solid color-mix(in srgb,var(--fps-editor-border) 78%,transparent); border-radius:7px; background:color-mix(in srgb,var(--fps-editor-chrome) 88%,transparent); box-shadow:var(--fps-editor-shadow-panel); backdrop-filter:blur(6px); color:var(--fps-editor-text); font-family:var(--fps-editor-font); }\n.fps-editor-workbench .fps-editor-ui-prefab-stage-layout { position:absolute; inset:38px 0 0; z-index:4; display:none; overflow:hidden; font-family:var(--fps-editor-font); pointer-events:none; }\n.fps-editor-workbench.fps-editor-ui-asset-modal .fps-editor-ui-modal,\n.fps-editor-workbench .fps-editor-ui-asset-modal .fps-editor-ui-modal { width:min(620px,calc(100vw - 64px)); }\n.fps-editor-workbench.fps-editor-ui-asset-preview-modal .fps-editor-ui-modal,\n.fps-editor-workbench .fps-editor-ui-asset-preview-modal .fps-editor-ui-modal { width:min(420px,calc(100vw - 64px)); overflow:auto; }\n.fps-editor-workbench .fps-editor-ui-modal-search { width:100%; height:30px; border:1px solid var(--fps-editor-border); border-radius:5px; background:var(--fps-editor-field); color:var(--fps-editor-text); padding:0 9px; }\n.fps-editor-workbench .fps-editor-ui-modal-grid { min-height:180px; max-height:min(430px,calc(100vh - 196px)); display:grid; grid-template-columns:repeat(auto-fill,minmax(176px,1fr)); gap:7px; overflow:auto; padding-right:2px; }\n.fps-editor-workbench.fps-editor-ui-shortcut-dialog,\n.fps-editor-workbench .fps-editor-ui-shortcut-dialog { position:fixed; top:104px; left:50%; transform:translateX(-50%); z-index:2147483638; display:none; width:min(620px,calc(100vw - 64px)); max-height:calc(100vh - 132px); flex-direction:column; overflow:hidden; border:1px solid var(--fps-editor-border); border-radius:8px; background:var(--fps-editor-panel); box-shadow:var(--fps-editor-shadow-modal); color:var(--fps-editor-text); pointer-events:auto; }\n.fps-editor-workbench .fps-editor-ui-shortcut-header { display:flex; align-items:center; justify-content:space-between; gap:12px; padding:12px 14px; border-bottom:1px solid var(--fps-editor-divider); background:var(--fps-editor-chrome-dark); }\n.fps-editor-workbench .fps-editor-ui-shortcut-content { flex:1 1 auto; min-height:0; overflow:auto; padding:12px 14px 14px; }\n.fps-editor-workbench .fps-editor-ui-shortcut-section { margin:0 0 12px; }\n.fps-editor-workbench .fps-editor-ui-shortcut-grid { display:grid; grid-template-columns:130px 1fr; gap:6px 10px; align-items:center; }\n.fps-editor-workbench .fps-editor-ui-shortcut-key { min-height:24px; display:flex; align-items:center; padding:0 7px; border:1px solid var(--fps-editor-border); border-radius:4px; background:var(--fps-editor-field); color:var(--fps-editor-text-strong); font-weight:700; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-shortcut-description { color:var(--fps-editor-muted); line-height:1.35; }\n.fps-editor-workbench .fps-editor-ui-panel-title { min-width:0; display:flex; align-items:center; gap:6px; margin:0 0 9px; color:var(--fps-editor-text-strong); font-size:13px; font-weight:750; }\n.fps-editor-workbench .fps-editor-ui-search { width:100%; height:29px; margin:0 0 8px; padding:0 9px; border:1px solid var(--fps-editor-border); border-radius:5px; background:var(--fps-editor-field); color:var(--fps-editor-text); font-size:12px; }\n.fps-editor-workbench .fps-editor-ui-asset-filesystem { padding:0; }\n.fps-editor-workbench .fps-editor-ui-asset-toolbar { min-height:34px; display:flex; align-items:center; gap:4px; padding:2px 4px; border-bottom:1px solid var(--fps-editor-divider); background:var(--fps-editor-chrome-dark); }\n.fps-editor-workbench .fps-editor-ui-asset-toolbar-group { flex:0 0 auto; display:flex; align-items:center; gap:2px; }\n.fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon=\"true\"] { width:28px; min-width:28px; height:28px; padding:0; justify-content:center; border-color:transparent; border-radius:3px; background:transparent; color:var(--fps-editor-muted-strong); }\n.fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon=\"true\"] .fps-editor-ui-button__label { display:none; }\n.fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon=\"true\"]:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text-strong); }\n.fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon=\"true\"]:disabled { opacity:.35; background:transparent; cursor:default; }\n.fps-editor-workbench .fps-editor-ui-asset-toolbar [data-editor-asset-toolbar-icon=\"true\"][data-active=\"true\"] { background:var(--fps-editor-button-active); color:var(--fps-editor-text-strong); box-shadow:inset 0 -2px 0 var(--fps-editor-accent); }\n.fps-editor-workbench .fps-editor-ui-asset-type-filter { width:clamp(104px,18%,168px); min-width:0; height:30px; padding:0 26px 0 8px; border:1px solid transparent; border-left-color:var(--fps-editor-divider); border-right-color:var(--fps-editor-divider); border-radius:0; background:var(--fps-editor-field); color:var(--fps-editor-text); font-size:12px; }\n.fps-editor-workbench .fps-editor-ui-asset-type-filter:hover,.fps-editor-workbench .fps-editor-ui-asset-type-filter:focus { border-color:var(--fps-editor-border); outline:0; }\n.fps-editor-workbench .fps-editor-ui-asset-search { min-width:120px; height:30px; flex:1 1 220px; position:relative; background:var(--fps-editor-field); }\n.fps-editor-workbench .fps-editor-ui-asset-toolbar .fps-editor-ui-search { width:100%; height:30px; margin:0; padding:0 31px 0 31px; border:1px solid transparent; border-right-color:var(--fps-editor-divider); border-radius:0; background:transparent; }\n.fps-editor-workbench .fps-editor-ui-asset-toolbar .fps-editor-ui-search:hover,.fps-editor-workbench .fps-editor-ui-asset-toolbar .fps-editor-ui-search:focus { border-color:var(--fps-editor-border); outline:0; }\n.fps-editor-workbench .fps-editor-ui-asset-search-icon { position:absolute; top:7px; left:8px; z-index:1; color:var(--fps-editor-muted); pointer-events:none; }\n.fps-editor-workbench .fps-editor-ui-asset-search [data-editor-asset-filter-clear=\"true\"] { position:absolute; top:0; right:0; }\n.fps-editor-workbench .fps-editor-ui-asset-search [data-editor-asset-filter-clear=\"true\"][hidden] { display:none; }\n.fps-editor-workbench .fps-editor-ui-asset-filesystem-body { flex:1; min-height:0; display:grid; grid-template-columns:clamp(148px,21%,210px) minmax(0,1fr); overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-asset-folder-tree { min-width:0; overflow:auto; padding:4px 3px 8px; border-right:1px solid var(--fps-editor-divider); background:var(--fps-editor-panel); }\n.fps-editor-workbench .fps-editor-ui-asset-folder-tree-row { min-width:0; display:flex; align-items:center; padding-left:calc(var(--fps-editor-asset-folder-depth,0) * 14px); }\n.fps-editor-workbench .fps-editor-ui-asset-folder-toggle { width:19px; height:25px; flex:0 0 19px; display:grid; place-items:center; padding:0; border:0; background:transparent; color:var(--fps-editor-muted); cursor:pointer; }\n.fps-editor-workbench .fps-editor-ui-asset-folder-toggle:hover:not(:disabled) { color:var(--fps-editor-text-strong); }\n.fps-editor-workbench .fps-editor-ui-asset-folder-toggle:disabled { cursor:default; }\n.fps-editor-workbench .fps-editor-ui-asset-folder-row { min-width:0; min-height:25px; flex:1; display:flex; align-items:center; gap:6px; padding:2px 5px 2px 1px; border:0; border-radius:2px; background:transparent; color:var(--fps-editor-muted-strong); text-align:left; font-size:12px; font-weight:550; cursor:pointer; }\n.fps-editor-workbench .fps-editor-ui-asset-folder-row:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text-strong); }\n.fps-editor-workbench .fps-editor-ui-asset-folder-row[data-selected=\"true\"] { background:transparent; color:var(--fps-editor-accent-strong); box-shadow:none; }\n.fps-editor-workbench .fps-editor-ui-asset-folder-row > .fps-editor-ui-ellipsis { min-width:0; flex:1; }\n.fps-editor-workbench .fps-editor-ui-asset-browser { min-width:0; min-height:0; display:flex; flex-direction:column; overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-asset-browser-summary { min-height:27px; display:flex; align-items:center; gap:10px; padding:3px 8px; border-bottom:1px solid var(--fps-editor-border-soft); }\n.fps-editor-workbench .fps-editor-ui-asset-breadcrumb { min-width:0; flex:1; display:flex; align-items:center; gap:3px; overflow:hidden; color:var(--fps-editor-text-strong); font-size:11px; font-weight:600; }\n.fps-editor-workbench .fps-editor-ui-asset-breadcrumb-button { min-width:0; max-width:150px; height:21px; padding:0 3px; border:0; border-radius:2px; background:transparent; color:var(--fps-editor-muted-strong); font:inherit; cursor:pointer; }\n.fps-editor-workbench .fps-editor-ui-asset-breadcrumb-button:hover { background:var(--fps-editor-button-hover); color:var(--fps-editor-text-strong); }\n.fps-editor-workbench .fps-editor-ui-asset-breadcrumb-separator { flex:0 0 auto; color:var(--fps-editor-muted); }\n.fps-editor-workbench .fps-editor-ui-asset-breadcrumb-current { min-width:24px; color:var(--fps-editor-text-strong); }\n.fps-editor-workbench .fps-editor-ui-asset-browser-summary .fps-editor-ui-asset-count { flex:0 0 auto; margin:0; }\n.fps-editor-workbench .fps-editor-ui-asset-browser .fps-editor-ui-dock-viewport { padding:6px; }\n.fps-editor-workbench .fps-editor-ui-segmented-tabs { min-height:27px; display:flex; align-items:center; gap:4px; margin:0 0 8px; }\n.fps-editor-workbench .fps-editor-ui-segmented-tab { height:25px; padding:0 8px; border-radius:5px; color:var(--fps-editor-muted); font-size:11px; }\n.fps-editor-workbench .fps-editor-ui-segmented-tab[data-active=\"true\"] { border-color:var(--fps-editor-control-active-border); background:var(--fps-editor-control-active-bg); color:var(--fps-editor-text-strong); box-shadow:inset 0 -2px 0 var(--fps-editor-accent); }\n.fps-editor-workbench .fps-editor-ui-asset-count { margin-bottom:6px; color:var(--fps-editor-muted); font-size:11px; }\n.fps-editor-workbench .fps-editor-ui-asset-card { width:100%; min-height:32px; display:flex; align-items:center; gap:8px; padding:6px 8px; border:1px solid var(--fps-editor-border); border-radius:6px; background:color-mix(in srgb,var(--fps-editor-panel-soft) 68%,var(--fps-editor-panel)); color:var(--fps-editor-text); text-align:left; font-size:12px; cursor:pointer; transition:background-color 90ms ease,border-color 90ms ease; }\n.fps-editor-workbench .fps-editor-ui-asset-card:hover { border-color:var(--fps-editor-accent); background:var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-ui-asset-card[aria-selected=\"true\"] { border-color:var(--fps-editor-accent-strong); background:var(--fps-editor-accent-soft); }\n.fps-editor-workbench .fps-editor-ui-asset-card:disabled { opacity:.62; cursor:not-allowed; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-has-preview=\"true\"] { min-height:38px; padding:7px 8px; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"list\"] { min-height:29px; gap:7px; padding:3px 6px; border-color:transparent; border-radius:2px; background:transparent; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"list\"][data-has-preview=\"true\"] { min-height:34px; padding:4px 6px; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"list\"]:hover { border-color:transparent; background:var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"list\"][aria-selected=\"true\"] { border-color:transparent; background:var(--fps-editor-row-selected); box-shadow:inset 2px 0 0 var(--fps-editor-accent); }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"] { height:104px; min-height:104px; flex-direction:column; justify-content:center; gap:5px; padding:7px 6px 6px; border-color:transparent; border-radius:3px; background:transparent; text-align:center; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"]:hover { border-color:transparent; background:var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"][aria-selected=\"true\"] { border-color:var(--fps-editor-accent-strong); background:var(--fps-editor-button-active); }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"][data-has-preview=\"true\"] { min-height:104px; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"] .fps-editor-ui-asset-card-body { width:100%; flex:0 0 auto; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"] .fps-editor-ui-asset-card-meta { display:none; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"][data-search-result=\"true\"] { height:116px; min-height:116px; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"][data-search-result=\"true\"] .fps-editor-ui-asset-card-meta { display:block; margin-top:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:center; }\n.fps-editor-workbench .fps-editor-ui-asset-card[data-variant=\"grid\"] .fps-editor-ui-asset-card-label { text-align:center; }\n.fps-editor-workbench .fps-editor-ui-project-media-thumbnail { position:relative; flex:0 0 auto; width:24px; height:24px; display:grid; place-items:center; overflow:hidden; border:1px solid var(--fps-editor-divider); border-radius:2px; background:var(--fps-editor-field); color:var(--fps-editor-muted); }\n.fps-editor-workbench .fps-editor-ui-project-media-thumbnail[data-variant=\"grid\"] { width:64px; height:64px; }\n.fps-editor-workbench .fps-editor-ui-project-media-thumbnail img { position:absolute; inset:0; width:100%; height:100%; display:block; object-fit:cover; }\n.fps-editor-workbench .fps-editor-ui-project-media-thumbnail[data-editor-project-media-thumbnail-kind=\"model\"] img { object-fit:contain; padding:3px; box-sizing:border-box; }\n.fps-editor-workbench .fps-editor-ui-project-media-thumbnail[data-thumbnail-state=\"ready\"] > .fps-editor-ui-project-media-thumbnail-fallback { display:none !important; }\n.fps-editor-workbench .fps-editor-ui-project-media-thumbnail[data-thumbnail-state=\"failed\"] { background:color-mix(in srgb,var(--fps-editor-field) 72%,var(--fps-editor-panel)); }\n.fps-editor-workbench .fps-editor-ui-asset-card-body { min-width:0; flex:1; }\n.fps-editor-workbench .fps-editor-ui-asset-card-label { color:var(--fps-editor-text-strong); font-weight:600; }\n.fps-editor-workbench .fps-editor-ui-asset-card-meta { color:var(--fps-editor-muted); font-size:11px; }\n.fps-editor-workbench .fps-editor-ui-history-list { display:flex; flex-direction:column; gap:4px; }\n.fps-editor-workbench .fps-editor-ui-history-label { color:var(--fps-editor-text); font-size:12px; font-weight:700; }\n.fps-editor-workbench .fps-editor-ui-history-meta { margin-top:2px; color:var(--fps-editor-muted); font-size:11px; }\n.fps-editor-workbench .fps-editor-ui-hierarchy-search { margin:0 8px 7px; width:calc(100% - 16px); }\n.fps-editor-workbench .fps-editor-ui-hierarchy-canvas { position:relative; width:100%; min-height:100%; }\n.fps-editor-workbench .fps-editor-ui-prefab-preview-card { min-width:0; min-height:0; flex:1 1 0; display:flex; flex-direction:column; padding:8px; border:1px solid var(--fps-editor-border); border-radius:7px; color:var(--fps-editor-text); pointer-events:auto; overflow:hidden; }\n.fps-editor-workbench .fps-editor-ui-prefab-preview-header { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:7px; padding:6px 8px; border:1px solid var(--fps-editor-border); border-radius:6px; background:color-mix(in srgb,var(--fps-editor-chrome) 86%,transparent); box-shadow:0 6px 14px color-mix(in srgb,#000 18%,transparent); }\n.fps-editor-workbench .fps-editor-ui-prefab-preview-surface { width:100%; min-height:0; flex:1 1 auto; display:flex; align-items:center; justify-content:center; border:1px solid var(--fps-editor-border-soft); border-radius:5px; background:transparent; color:var(--fps-editor-muted); overflow:hidden; font-size:10px; font-weight:650; text-align:center; touch-action:none; user-select:none; cursor:grab; }\n.fps-editor-workbench .fps-editor-ui-control { min-width: 0; width: 100%; }\n.fps-editor-workbench .fps-editor-ui-layer-host {\n position: fixed;\n inset: 0;\n z-index: 240;\n overflow: visible;\n pointer-events: none;\n}\n.fps-editor-workbench .fps-editor-ui-layer-host > * { pointer-events: auto; }\n.fps-editor-workbench .fps-editor-ui-control.pcui-element,\n.fps-editor-workbench .fps-editor-ui-control > .pcui-element {\n color: var(--fps-editor-text);\n}\n.fps-editor-workbench .fps-editor-ui-control.pcui-input-element,\n.fps-editor-workbench .fps-editor-ui-control .pcui-input-element,\n.fps-editor-workbench .fps-editor-ui-control.pcui-color-input,\n.fps-editor-workbench .fps-editor-ui-control.pcui-select-input,\n.fps-editor-workbench .fps-editor-ui-button {\n border-color: var(--fps-editor-editable-border);\n background-color: var(--fps-editor-field);\n}\n.fps-editor-workbench .fps-editor-ui-control.pcui-input-element:hover,\n.fps-editor-workbench .fps-editor-ui-control .pcui-input-element:hover,\n.fps-editor-workbench .fps-editor-ui-button:hover {\n border-color: var(--fps-editor-border);\n background-color: var(--fps-editor-button-hover);\n}\n.fps-editor-workbench .fps-editor-ui-control.pcui-focus,\n.fps-editor-workbench .fps-editor-ui-control .pcui-focus {\n border-color: var(--fps-editor-accent);\n box-shadow: 0 0 0 2px var(--fps-editor-accent-soft);\n}\n.fps-editor-workbench .fps-editor-ui-boolean {\n position: relative;\n display: inline-flex;\n width: 32px;\n justify-self: end;\n}\n.fps-editor-workbench .fps-editor-ui-boolean > .pcui-element { width: 30px; }\n.fps-editor-workbench .fps-editor-ui-boolean .pcui-boolean-input-ticked {\n border-color: color-mix(in srgb, var(--fps-editor-control-on) 72%, var(--fps-editor-border));\n background-color: var(--fps-editor-control-on);\n}\n.fps-editor-workbench .fps-editor-ui-boolean .pcui-boolean-input-ticked::after {\n border-color: var(--fps-editor-control-thumb);\n background-color: var(--fps-editor-control-thumb);\n}\n.fps-editor-workbench .fps-editor-ui-select,\n.fps-editor-workbench .fps-editor-ui-color { position: relative; display: inline-flex; }\n.fps-editor-workbench .fps-editor-ui-select > .pcui-element,\n.fps-editor-workbench .fps-editor-ui-color > .pcui-element { width: 100%; }\n.fps-editor-workbench .fps-editor-ui-proxy-input {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n margin: -1px !important;\n padding: 0 !important;\n overflow: hidden !important;\n clip: rect(0 0 0 0) !important;\n clip-path: inset(50%) !important;\n white-space: nowrap !important;\n border: 0 !important;\n}\n.fps-editor-workbench .fps-editor-ui-vector { display: flex; gap: 4px; }\n.fps-editor-workbench .fps-editor-ui-vector > .pcui-input-element { min-width: 0; }\n.fps-editor-workbench .fps-editor-ui-readonly {\n min-width: 0;\n padding: 6px 8px;\n border: 1px solid var(--fps-editor-readonly-border);\n border-radius: 4px;\n background: var(--fps-editor-readonly-bg);\n color: var(--fps-editor-readonly-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fps-editor-workbench .fps-editor-ui-error,\n.fps-editor-workbench .fps-editor-ui-error .pcui-input-element {\n border-color: var(--fps-editor-danger-border) !important;\n}\n.fps-editor-workbench .fps-editor-ui-mixed { opacity: .82; }\n.fps-editor-workbench .fps-editor-ui-section.pcui-panel {\n margin: 0 0 7px;\n border: 1px solid var(--fps-editor-border);\n border-radius: 7px;\n overflow: hidden;\n background: color-mix(in srgb, var(--fps-editor-panel-soft) 42%, transparent);\n}\n.fps-editor-workbench .fps-editor-ui-section .pcui-panel-header {\n min-height: 34px;\n border-bottom-color: var(--fps-editor-border);\n background: color-mix(in srgb, var(--fps-editor-panel-soft) 55%, transparent);\n}\n.fps-editor-workbench .fps-editor-ui-section .pcui-panel-header::before {\n border-color: var(--fps-editor-muted-strong);\n color: var(--fps-editor-muted-strong);\n}\n.fps-editor-workbench .fps-editor-ui-section .pcui-panel-header:hover::before {\n border-color: var(--fps-editor-text-strong);\n color: var(--fps-editor-text-strong);\n}\n.fps-editor-workbench .fps-editor-ui-section .pcui-panel-content { padding: 10px 11px 12px; }\n.fps-editor-workbench .fps-editor-inspector-title {\n min-height: 42px;\n display: flex;\n align-items: center;\n gap: 7px;\n margin: -8px -8px 10px;\n padding: 9px 11px;\n border-bottom: 1px solid var(--fps-editor-divider);\n background: linear-gradient(180deg, color-mix(in srgb, var(--fps-editor-panel-soft) 55%, transparent), transparent);\n color: var(--fps-editor-text-strong);\n font-size: 13px;\n font-weight: 700;\n}\n.fps-editor-workbench .fps-editor-inspector-search { display: block; margin: 0 0 9px; }\n.fps-editor-workbench .fps-editor-inspector-component {\n margin: 0 0 7px;\n padding: 10px 11px;\n border: 1px solid var(--fps-editor-border);\n border-radius: 7px;\n background: color-mix(in srgb, var(--fps-editor-panel-soft) 42%, transparent);\n}\n.fps-editor-workbench .fps-editor-inspector-component > div:first-child { margin-bottom: 7px; }\n.fps-editor-workbench .fps-editor-inspector-summary-header { display:flex; align-items:center; justify-content:space-between; gap:8px; margin:0 0 8px; }\n.fps-editor-workbench .fps-editor-inspector-summary-title { margin:0; color:var(--fps-editor-text-strong); font-size:12px; font-weight:700; }\n.fps-editor-workbench .fps-editor-inspector-property-row {\n min-height: 31px;\n display: grid;\n grid-template-columns: 96px minmax(0,1fr);\n align-items: center;\n gap: 9px;\n padding: 2px 0;\n}\n.fps-editor-workbench .fps-editor-inspector-property-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--fps-editor-muted);\n font-size: 11px;\n font-weight: 600;\n}\n.fps-editor-workbench .fps-editor-inspector-property-row[data-editor-inspector-access=\"editable\"] .fps-editor-inspector-property-label { color: var(--fps-editor-muted-strong); }\n.fps-editor-workbench .fps-editor-inspector-property-row[data-editor-inspector-effect=\"unsupported\"] .fps-editor-inspector-property-label { color: var(--fps-editor-danger-text); }\n.fps-editor-workbench .fps-editor-inspector-section-meta {\n margin-left: auto;\n display: flex;\n align-items: center;\n gap: 5px;\n min-width: 0;\n color: var(--fps-editor-muted);\n font-size: 10px;\n}\n.fps-editor-workbench .fps-editor-inspector-section-summary {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n text-transform: none;\n font-size: 10px;\n}\n.fps-editor-workbench .fps-editor-inspector-readonly-value { display: flex; align-items: center; gap: 5px; }\n.fps-editor-workbench .fps-editor-inspector-readonly-details,\n.fps-editor-workbench .fps-editor-ui-expandable-readonly {\n min-width: 0;\n max-width: 100%;\n padding: 5px 7px;\n border: 1px solid var(--fps-editor-readonly-border);\n border-radius: 4px;\n background: var(--fps-editor-readonly-bg);\n color: var(--fps-editor-readonly-text);\n}\n.fps-editor-workbench .fps-editor-ui-expandable-readonly__summary {\n min-width:0;\n display:flex;\n align-items:center;\n gap:5px;\n overflow:hidden;\n white-space:nowrap;\n cursor:pointer;\n}\n.fps-editor-workbench .fps-editor-ui-expandable-readonly__summary-text { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-ui-expandable-readonly__content {\n max-height:220px;\n overflow:auto;\n margin:6px 0 0;\n padding:7px;\n border:1px solid var(--fps-editor-readonly-border);\n border-radius:4px;\n background:var(--fps-editor-field);\n color:var(--fps-editor-readonly-text);\n font-size:11px;\n line-height:1.45;\n white-space:pre-wrap;\n word-break:break-word;\n}\n.fps-editor-workbench .fps-editor-ui-expandable-readonly.fps-editor-ui-warning,\n.fps-editor-workbench .fps-editor-ui-expandable-readonly.fps-editor-ui-warning .fps-editor-ui-expandable-readonly__content { border-color:var(--fps-editor-warn-border); }\n.fps-editor-workbench .fps-editor-inspector-readonly-value--warning {\n border-color: var(--fps-editor-warn-border);\n background: var(--fps-editor-warn-soft);\n color: var(--fps-editor-warn);\n font-style: italic;\n}\n.fps-editor-workbench [data-editor-inspector-access=\"readonly\"] .fps-editor-inspector-property-label { opacity: .78; }\n.fps-editor-workbench [data-editor-inspector-effect=\"unsupported\"].fps-editor-ui-section { border-color: var(--fps-editor-danger-border); }\n.fps-editor-workbench .fps-editor-inspector-vector-group { min-width:0; margin:8px 0; }\n.fps-editor-workbench .fps-editor-inspector-vector-header { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:5px; }\n.fps-editor-workbench .fps-editor-inspector-vector-actions { display:inline-flex; align-items:center; gap:5px; flex:0 0 auto; }\n.fps-editor-workbench .fps-editor-inspector-vector-fields {\n display:grid;\n grid-template-columns:repeat(var(--fps-editor-vector-dimensions, 3), minmax(0,1fr));\n gap:5px;\n width:100%;\n}\n.fps-editor-workbench .fps-editor-inspector-vector-axis-field { position:relative; min-width:0; }\n.fps-editor-workbench .fps-editor-inspector-vector-axis-label {\n position:absolute;\n z-index:1;\n left:7px;\n top:50%;\n transform:translateY(-50%);\n color:var(--fps-editor-muted-strong);\n font-size:9px;\n font-weight:800;\n line-height:1;\n pointer-events:none;\n}\n.fps-editor-workbench .fps-editor-inspector-vector-axis-field .fps-editor-ui-number input { padding-left:19px; }\n.fps-editor-workbench .fps-editor-inspector-icon-button {\n width:24px;\n min-width:24px;\n height:24px;\n padding:0;\n display:inline-flex;\n align-items:center;\n justify-content:center;\n flex:0 0 24px;\n}\n.fps-editor-workbench .fps-editor-inspector-icon-button[data-editor-ui-active=\"true\"] {\n border-color:var(--fps-editor-control-active-border);\n background:var(--fps-editor-control-active-bg);\n color:var(--fps-editor-text-strong);\n box-shadow:inset 0 -2px 0 var(--fps-editor-accent);\n}\n.fps-editor-workbench .fps-editor-inspector-action-button { min-height:30px; justify-content:center; gap:6px; }\n.fps-editor-workbench .fps-editor-inspector-copy-button {\n width:22px;\n min-width:22px;\n height:22px;\n margin-left:auto;\n padding:0;\n border-color:transparent;\n background:transparent;\n color:currentColor;\n opacity:.72;\n flex:0 0 22px;\n}\n.fps-editor-workbench .fps-editor-inspector-copy-button:hover { opacity:1; background:var(--fps-editor-button-hover); }\n.fps-editor-workbench .fps-editor-inspector-special-control { display:flex; flex-direction:column; gap:8px; width:100%; min-width:0; }\n.fps-editor-workbench .fps-editor-inspector-material-slots { gap:6px; }\n.fps-editor-workbench .fps-editor-inspector-material-slot {\n min-width:0;\n border:1px solid var(--fps-editor-readonly-border);\n border-radius:5px;\n background:var(--fps-editor-readonly-bg);\n color:var(--fps-editor-readonly-text);\n overflow:hidden;\n}\n.fps-editor-workbench .fps-editor-inspector-material-slot-summary { min-width:0; min-height:46px; display:flex; align-items:center; gap:8px; padding:7px 8px; cursor:pointer; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-content { display:flex; flex-direction:column; gap:4px; padding:0 8px 8px; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-row { display:grid; grid-template-columns:88px minmax(0,1fr); gap:8px; align-items:start; font-size:11px; line-height:1.35; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-label { color:var(--fps-editor-muted); font-weight:700; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-value,\n.fps-editor-workbench .fps-editor-inspector-card-title,\n.fps-editor-workbench .fps-editor-inspector-card-subtitle { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.fps-editor-workbench .fps-editor-inspector-material-slot-value { font-family:var(--fps-editor-mono-font); color:var(--fps-editor-readonly-text); }\n.fps-editor-workbench .fps-editor-inspector-card-body { min-width:0; flex:1; text-align:left; }\n.fps-editor-workbench .fps-editor-inspector-card-title { color:var(--fps-editor-text-strong); font-weight:700; }\n.fps-editor-workbench .fps-editor-inspector-card-subtitle { margin-top:2px; color:var(--fps-editor-muted); font-size:10px; font-weight:600; }\n.fps-editor-workbench .fps-editor-inspector-asset-picker {\n min-width:0;\n display:grid;\n grid-template-columns:minmax(0,1fr) auto;\n align-items:stretch;\n gap:6px;\n}\n.fps-editor-workbench .fps-editor-inspector-asset-picker[data-editor-inspector-asset-picker-actions=\"two\"] { grid-template-columns:minmax(0,1fr) auto auto; }\n.fps-editor-workbench .fps-editor-inspector-asset-card { min-width:0; min-height:44px; display:flex; align-items:center; gap:8px; padding:6px 7px; text-align:left; }\n.fps-editor-workbench .fps-editor-inspector-asset-action { width:auto; min-width:48px; min-height:44px; padding:0 9px; justify-content:center; font-size:11px; font-weight:700; }\n`;\n\nexport function ensureEditorUiStyles(document: Document): void {\n if (document.getElementById(EDITOR_UI_STYLE_ID)) return;\n const style = document.createElement('style');\n style.id = EDITOR_UI_STYLE_ID;\n style.textContent = EDITOR_UI_STYLES;\n document.head.append(style);\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fps-games/editor-ui",
3
- "version": "0.2.1-beta.1",
3
+ "version": "0.2.1-beta.3",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Vendor-backed UI components and visual fixtures for fps-game-editor.",
@@ -15,6 +15,7 @@ export declare function guidToPlayableEditorAssetStableToken(guid: unknown): str
15
15
  export declare function createPlayableEditorAssetId(kind: PlayableEditorAssetKind, guid: string): string;
16
16
  export declare function toPlayableEditorAssetImportName(value: unknown): string;
17
17
  export declare function normalizePlayableEditorAssetKind(value: unknown, filePath?: string): PlayableEditorAssetKind | null;
18
+ export declare function getPlayableEditorAssetPathExtension(filePath: string): string;
18
19
  export declare function stripKnownPlayableEditorAssetExtension(value: unknown): string;
19
20
  export declare function normalizePlayableEditorAssetDisplayName(value: unknown, fallback: unknown): string;
20
21
  export declare function normalizePlayableEditorAssetCodeKey(value: unknown, fallback: unknown): string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9E,eAAO,MAAM,mCAAmC,iDAAkD,CAAC;AAEnG,eAAO,MAAM,gCAAgC,4BAA6B,CAAC;AAC3E,eAAO,MAAM,gCAAgC,6CAA8C,CAAC;AAC5F,eAAO,MAAM,8CAA8C,oDAAqD,CAAC;AACjH,eAAO,MAAM,kCAAkC,sFAGrC,CAAC;AACX,eAAO,MAAM,gCAAgC,4DAA6D,CAAC;AAC3G,eAAO,MAAM,kCAAkC,wJAIrC,CAAC;AAEX,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,IAAI,MAAM,CAAC;IACtB,eAAe,CAAC,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC3C;AAED,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,yBAAyB,GAAG,MAAM,CAG7F;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE1E;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAU/F;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUtE;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,EACd,QAAQ,SAAK,GACZ,uBAAuB,GAAG,IAAI,CAYhC;AAuBD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAU7E;AAED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAGjG;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASpG;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,uBAAuB,GAAG,SAAS,MAAM,EAAE,CAMrG"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9E,eAAO,MAAM,mCAAmC,iDAAkD,CAAC;AAEnG,eAAO,MAAM,gCAAgC,4BAA6B,CAAC;AAC3E,eAAO,MAAM,gCAAgC,6CAA8C,CAAC;AAC5F,eAAO,MAAM,8CAA8C,oDAAqD,CAAC;AACjH,eAAO,MAAM,kCAAkC,sFAGrC,CAAC;AACX,eAAO,MAAM,gCAAgC,4DAA6D,CAAC;AAC3G,eAAO,MAAM,kCAAkC,wJAIrC,CAAC;AAEX,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,IAAI,MAAM,CAAC;IACtB,eAAe,CAAC,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC3C;AAED,wBAAgB,6BAA6B,CAAC,YAAY,EAAE,yBAAyB,GAAG,MAAM,CAG7F;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE1E;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAU/F;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUtE;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,EACd,QAAQ,SAAK,GACZ,uBAAuB,GAAG,IAAI,CAYhC;AAED,wBAAgB,mCAAmC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM5E;AAeD,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAU7E;AAED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAGjG;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASpG;AAED,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,uBAAuB,GAAG,SAAS,MAAM,EAAE,CAMrG"}
@@ -61,7 +61,7 @@ export function normalizePlayableEditorAssetKind(value, filePath = '') {
61
61
  return 'texture';
62
62
  return null;
63
63
  }
64
- function getPlayableEditorAssetPathExtension(filePath) {
64
+ export function getPlayableEditorAssetPathExtension(filePath) {
65
65
  const cleanPath = filePath.split(/[?#]/, 1)[0] ?? '';
66
66
  const slashIndex = Math.max(cleanPath.lastIndexOf('/'), cleanPath.lastIndexOf('\\'));
67
67
  const fileName = cleanPath.slice(slashIndex + 1);
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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","sourcesContent":["export type PlayableEditorAssetKind = 'model' | 'texture' | 'image' | 'sound';\n\nexport const PLAYABLE_EDITOR_ASSET_CATALOG_KINDS = ['model', 'texture', 'image', 'sound'] as const;\n\nexport const PLAYABLE_EDITOR_MODEL_EXTENSIONS = ['.glb', '.gltf'] as const;\nexport const PLAYABLE_EDITOR_IMAGE_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.webp'] as const;\nexport const PLAYABLE_EDITOR_ENVIRONMENT_TEXTURE_EXTENSIONS = ['.env', '.hdr', '.dds', '.ktx', '.ktx2'] as const;\nexport const PLAYABLE_EDITOR_TEXTURE_EXTENSIONS = [\n ...PLAYABLE_EDITOR_IMAGE_EXTENSIONS,\n ...PLAYABLE_EDITOR_ENVIRONMENT_TEXTURE_EXTENSIONS,\n] as const;\nexport const PLAYABLE_EDITOR_SOUND_EXTENSIONS = ['.mp3', '.wav', '.ogg', '.flac', '.aac', '.m4a'] as const;\nexport const PLAYABLE_EDITOR_DEFAULT_EXTENSIONS = [\n ...PLAYABLE_EDITOR_MODEL_EXTENSIONS,\n ...PLAYABLE_EDITOR_TEXTURE_EXTENSIONS,\n ...PLAYABLE_EDITOR_SOUND_EXTENSIONS,\n] as const;\n\nexport interface PlayableAssetRandomSource {\n randomUUID?(): string;\n fillRandomBytes?(bytes: Uint8Array): void;\n}\n\nexport function createPlayableEditorAssetGuid(randomSource: PlayableAssetRandomSource): string {\n if (randomSource.randomUUID) return randomSource.randomUUID();\n return createFallbackPlayableEditorAssetGuid(randomSource);\n}\n\nexport function guidToPlayableEditorAssetStableToken(guid: unknown): string {\n return String(guid ?? '').trim().toLowerCase().replace(/-/g, '');\n}\n\nexport function createPlayableEditorAssetId(kind: PlayableEditorAssetKind, guid: string): string {\n const token = guidToPlayableEditorAssetStableToken(guid);\n const prefix = kind === 'model'\n ? 'asset'\n : kind === 'texture'\n ? 'texture'\n : kind === 'sound'\n ? 'sound'\n : 'image';\n return `${prefix}_${token}`;\n}\n\nexport function toPlayableEditorAssetImportName(value: unknown): string {\n const raw = String(value ?? '').trim();\n const segments = raw.split(/[^a-zA-Z0-9_$]+/).filter(Boolean);\n const camel = segments\n .map((segment, index) => index === 0\n ? segment\n : `${segment.charAt(0).toUpperCase()}${segment.slice(1)}`)\n .join('');\n const safe = camel.replace(/[^a-zA-Z0-9_$]/g, '') || 'assetUrl';\n return /^[a-zA-Z_$]/.test(safe) ? safe : `asset${safe}`;\n}\n\nexport function normalizePlayableEditorAssetKind(\n value: unknown,\n filePath = '',\n): PlayableEditorAssetKind | null {\n const raw = String(value ?? '').trim().toLowerCase();\n if (raw === 'glb' || raw === 'gltf' || raw === 'model') return 'model';\n if (raw === 'groundtexture' || raw === 'ground-texture' || raw === 'texture') return 'texture';\n if (raw === 'ui' || raw === 'image' || raw === 'img') return 'image';\n if (raw === 'audio' || raw === 'sound') return 'sound';\n\n const extension = getPlayableEditorAssetPathExtension(filePath);\n if ((PLAYABLE_EDITOR_MODEL_EXTENSIONS as readonly string[]).includes(extension)) return 'model';\n if ((PLAYABLE_EDITOR_SOUND_EXTENSIONS as readonly string[]).includes(extension)) return 'sound';\n if ((PLAYABLE_EDITOR_TEXTURE_EXTENSIONS as readonly string[]).includes(extension)) return 'texture';\n return null;\n}\n\nfunction getPlayableEditorAssetPathExtension(filePath: string): string {\n const cleanPath = filePath.split(/[?#]/, 1)[0] ?? '';\n const slashIndex = Math.max(cleanPath.lastIndexOf('/'), cleanPath.lastIndexOf('\\\\'));\n const fileName = cleanPath.slice(slashIndex + 1);\n const dotIndex = fileName.lastIndexOf('.');\n return dotIndex >= 0 ? fileName.slice(dotIndex).toLowerCase() : '';\n}\n\nfunction createFallbackPlayableEditorAssetGuid(randomSource: PlayableAssetRandomSource): string {\n const bytes = new Uint8Array(16);\n if (!randomSource.fillRandomBytes) throw new Error('Asset GUID random source must provide randomUUID or fillRandomBytes.');\n randomSource.fillRandomBytes(bytes);\n if (bytes.every((byte) => byte === 0)) {\n throw new Error('Asset GUID random source returned no entropy.');\n }\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nexport function stripKnownPlayableEditorAssetExtension(value: unknown): string {\n let raw = String(value ?? '').trim();\n const lower = raw.toLowerCase();\n for (const extension of [...PLAYABLE_EDITOR_DEFAULT_EXTENSIONS].sort((a, b) => b.length - a.length)) {\n if (lower.endsWith(extension)) {\n raw = raw.slice(0, -extension.length);\n break;\n }\n }\n return raw;\n}\n\nexport function normalizePlayableEditorAssetDisplayName(value: unknown, fallback: unknown): string {\n const displayName = String(value ?? '').trim() || stripKnownPlayableEditorAssetExtension(fallback);\n return displayName || 'Asset';\n}\n\nexport function normalizePlayableEditorAssetCodeKey(value: unknown, fallback: unknown): string | null {\n const raw = stripKnownPlayableEditorAssetExtension(value || fallback)\n .trim()\n .toLowerCase()\n .normalize('NFKD')\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .replace(/_{2,}/g, '_');\n return raw || null;\n}\n\nexport function getPlayableEditorAssetKindExtensions(kind: PlayableEditorAssetKind): readonly string[] {\n if (kind === 'model') return PLAYABLE_EDITOR_MODEL_EXTENSIONS;\n if (kind === 'sound') return PLAYABLE_EDITOR_SOUND_EXTENSIONS;\n if (kind === 'texture') return PLAYABLE_EDITOR_TEXTURE_EXTENSIONS;\n if (kind === 'image') return PLAYABLE_EDITOR_IMAGE_EXTENSIONS;\n return [];\n}\n"]}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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","sourcesContent":["export type PlayableEditorAssetKind = 'model' | 'texture' | 'image' | 'sound';\n\nexport const PLAYABLE_EDITOR_ASSET_CATALOG_KINDS = ['model', 'texture', 'image', 'sound'] as const;\n\nexport const PLAYABLE_EDITOR_MODEL_EXTENSIONS = ['.glb', '.gltf'] as const;\nexport const PLAYABLE_EDITOR_IMAGE_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.webp'] as const;\nexport const PLAYABLE_EDITOR_ENVIRONMENT_TEXTURE_EXTENSIONS = ['.env', '.hdr', '.dds', '.ktx', '.ktx2'] as const;\nexport const PLAYABLE_EDITOR_TEXTURE_EXTENSIONS = [\n ...PLAYABLE_EDITOR_IMAGE_EXTENSIONS,\n ...PLAYABLE_EDITOR_ENVIRONMENT_TEXTURE_EXTENSIONS,\n] as const;\nexport const PLAYABLE_EDITOR_SOUND_EXTENSIONS = ['.mp3', '.wav', '.ogg', '.flac', '.aac', '.m4a'] as const;\nexport const PLAYABLE_EDITOR_DEFAULT_EXTENSIONS = [\n ...PLAYABLE_EDITOR_MODEL_EXTENSIONS,\n ...PLAYABLE_EDITOR_TEXTURE_EXTENSIONS,\n ...PLAYABLE_EDITOR_SOUND_EXTENSIONS,\n] as const;\n\nexport interface PlayableAssetRandomSource {\n randomUUID?(): string;\n fillRandomBytes?(bytes: Uint8Array): void;\n}\n\nexport function createPlayableEditorAssetGuid(randomSource: PlayableAssetRandomSource): string {\n if (randomSource.randomUUID) return randomSource.randomUUID();\n return createFallbackPlayableEditorAssetGuid(randomSource);\n}\n\nexport function guidToPlayableEditorAssetStableToken(guid: unknown): string {\n return String(guid ?? '').trim().toLowerCase().replace(/-/g, '');\n}\n\nexport function createPlayableEditorAssetId(kind: PlayableEditorAssetKind, guid: string): string {\n const token = guidToPlayableEditorAssetStableToken(guid);\n const prefix = kind === 'model'\n ? 'asset'\n : kind === 'texture'\n ? 'texture'\n : kind === 'sound'\n ? 'sound'\n : 'image';\n return `${prefix}_${token}`;\n}\n\nexport function toPlayableEditorAssetImportName(value: unknown): string {\n const raw = String(value ?? '').trim();\n const segments = raw.split(/[^a-zA-Z0-9_$]+/).filter(Boolean);\n const camel = segments\n .map((segment, index) => index === 0\n ? segment\n : `${segment.charAt(0).toUpperCase()}${segment.slice(1)}`)\n .join('');\n const safe = camel.replace(/[^a-zA-Z0-9_$]/g, '') || 'assetUrl';\n return /^[a-zA-Z_$]/.test(safe) ? safe : `asset${safe}`;\n}\n\nexport function normalizePlayableEditorAssetKind(\n value: unknown,\n filePath = '',\n): PlayableEditorAssetKind | null {\n const raw = String(value ?? '').trim().toLowerCase();\n if (raw === 'glb' || raw === 'gltf' || raw === 'model') return 'model';\n if (raw === 'groundtexture' || raw === 'ground-texture' || raw === 'texture') return 'texture';\n if (raw === 'ui' || raw === 'image' || raw === 'img') return 'image';\n if (raw === 'audio' || raw === 'sound') return 'sound';\n\n const extension = getPlayableEditorAssetPathExtension(filePath);\n if ((PLAYABLE_EDITOR_MODEL_EXTENSIONS as readonly string[]).includes(extension)) return 'model';\n if ((PLAYABLE_EDITOR_SOUND_EXTENSIONS as readonly string[]).includes(extension)) return 'sound';\n if ((PLAYABLE_EDITOR_TEXTURE_EXTENSIONS as readonly string[]).includes(extension)) return 'texture';\n return null;\n}\n\nexport function getPlayableEditorAssetPathExtension(filePath: string): string {\n const cleanPath = filePath.split(/[?#]/, 1)[0] ?? '';\n const slashIndex = Math.max(cleanPath.lastIndexOf('/'), cleanPath.lastIndexOf('\\\\'));\n const fileName = cleanPath.slice(slashIndex + 1);\n const dotIndex = fileName.lastIndexOf('.');\n return dotIndex >= 0 ? fileName.slice(dotIndex).toLowerCase() : '';\n}\n\nfunction createFallbackPlayableEditorAssetGuid(randomSource: PlayableAssetRandomSource): string {\n const bytes = new Uint8Array(16);\n if (!randomSource.fillRandomBytes) throw new Error('Asset GUID random source must provide randomUUID or fillRandomBytes.');\n randomSource.fillRandomBytes(bytes);\n if (bytes.every((byte) => byte === 0)) {\n throw new Error('Asset GUID random source returned no entropy.');\n }\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nexport function stripKnownPlayableEditorAssetExtension(value: unknown): string {\n let raw = String(value ?? '').trim();\n const lower = raw.toLowerCase();\n for (const extension of [...PLAYABLE_EDITOR_DEFAULT_EXTENSIONS].sort((a, b) => b.length - a.length)) {\n if (lower.endsWith(extension)) {\n raw = raw.slice(0, -extension.length);\n break;\n }\n }\n return raw;\n}\n\nexport function normalizePlayableEditorAssetDisplayName(value: unknown, fallback: unknown): string {\n const displayName = String(value ?? '').trim() || stripKnownPlayableEditorAssetExtension(fallback);\n return displayName || 'Asset';\n}\n\nexport function normalizePlayableEditorAssetCodeKey(value: unknown, fallback: unknown): string | null {\n const raw = stripKnownPlayableEditorAssetExtension(value || fallback)\n .trim()\n .toLowerCase()\n .normalize('NFKD')\n .replace(/[^a-z0-9]+/g, '_')\n .replace(/^_+|_+$/g, '')\n .replace(/_{2,}/g, '_');\n return raw || null;\n}\n\nexport function getPlayableEditorAssetKindExtensions(kind: PlayableEditorAssetKind): readonly string[] {\n if (kind === 'model') return PLAYABLE_EDITOR_MODEL_EXTENSIONS;\n if (kind === 'sound') return PLAYABLE_EDITOR_SOUND_EXTENSIONS;\n if (kind === 'texture') return PLAYABLE_EDITOR_TEXTURE_EXTENSIONS;\n if (kind === 'image') return PLAYABLE_EDITOR_IMAGE_EXTENSIONS;\n return [];\n}\n"]}
@@ -1,3 +1,4 @@
1
1
  export * from './identity.js';
2
2
  export * from './portable-path.js';
3
+ export * from './resource-resolver.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './identity.js';
2
2
  export * from './portable-path.js';
3
+ export * from './resource-resolver.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC","sourcesContent":["export * from './identity.js';\nexport * from './portable-path.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC","sourcesContent":["export * from './identity.js';\nexport * from './portable-path.js';\nexport * from './resource-resolver.js';\n"]}
@@ -0,0 +1,46 @@
1
+ export type PlayableAssetFormat = `.${string}`;
2
+ export type PlayableAssetResourceTransport = 'path-url' | 'http-url' | 'data-url' | 'blob-url';
3
+ /** The browser-safe subset emitted by the generated project asset catalog. */
4
+ export interface PlayableGeneratedAssetCatalogEntry {
5
+ readonly assetId: string;
6
+ readonly url: string;
7
+ readonly format: PlayableAssetFormat;
8
+ readonly relativePath: string;
9
+ readonly originalFileName?: string;
10
+ }
11
+ export interface PlayableResolvedAssetResource {
12
+ readonly assetId: string | null;
13
+ readonly url: string;
14
+ readonly format: PlayableAssetFormat;
15
+ readonly transport: PlayableAssetResourceTransport;
16
+ readonly relativePath: string | null;
17
+ readonly originalFileName: string | null;
18
+ }
19
+ export interface PlayableAssetResourceReference {
20
+ readonly assetId?: string | null;
21
+ readonly url?: string | null;
22
+ }
23
+ export type PlayableAssetResourceResolutionCode = 'asset.resource.not-found' | 'asset.resource.format-missing' | 'asset.resource.format-unsupported' | 'asset.resource.invalid-reference';
24
+ export interface PlayableAssetResourceResolutionDiagnostic {
25
+ readonly code: PlayableAssetResourceResolutionCode;
26
+ readonly assetId: string | null;
27
+ readonly format: PlayableAssetFormat | null;
28
+ readonly transport: PlayableAssetResourceTransport | null;
29
+ /** A safe bounded URL description. It never includes a data/blob payload. */
30
+ readonly urlSummary: string | null;
31
+ }
32
+ export type PlayableAssetResourceResolution = Readonly<{
33
+ ok: true;
34
+ resource: PlayableResolvedAssetResource;
35
+ }> | Readonly<{
36
+ ok: false;
37
+ diagnostic: PlayableAssetResourceResolutionDiagnostic;
38
+ }>;
39
+ export interface PlayableAssetResourceResolver {
40
+ resolve(reference: PlayableAssetResourceReference): PlayableAssetResourceResolution;
41
+ }
42
+ export declare function createPlayableAssetResourceResolver(catalog: Readonly<Record<string, PlayableGeneratedAssetCatalogEntry>>): PlayableAssetResourceResolver;
43
+ export declare function getPlayableAssetFormat(value: unknown): PlayableAssetFormat | null;
44
+ export declare function isPlayableAssetFormatSupported(format: PlayableAssetFormat): boolean;
45
+ export declare function getPlayableAssetResourceTransport(url: string): PlayableAssetResourceTransport;
46
+ //# sourceMappingURL=resource-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-resolver.d.ts","sourceRoot":"","sources":["../src/resource-resolver.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,mBAAmB,GAAG,IAAI,MAAM,EAAE,CAAC;AAC/C,MAAM,MAAM,8BAA8B,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;AAE/F,8EAA8E;AAC9E,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,8BAA8B,CAAC;IACnD,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,MAAM,mCAAmC,GAC3C,0BAA0B,GAC1B,+BAA+B,GAC/B,mCAAmC,GACnC,kCAAkC,CAAC;AAEvC,MAAM,WAAW,yCAAyC;IACxD,QAAQ,CAAC,IAAI,EAAE,mCAAmC,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,8BAA8B,GAAG,IAAI,CAAC;IAC1D,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,MAAM,+BAA+B,GACvC,QAAQ,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,6BAA6B,CAAA;CAAE,CAAC,GAC/D,QAAQ,CAAC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,yCAAyC,CAAA;CAAE,CAAC,CAAC;AAEnF,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,SAAS,EAAE,8BAA8B,GAAG,+BAA+B,CAAC;CACrF;AAED,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC,GACpE,6BAA6B,CAoC/B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,IAAI,CAGjF;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAEnF;AAED,wBAAgB,iCAAiC,CAAC,GAAG,EAAE,MAAM,GAAG,8BAA8B,CAK7F"}