@forgeax/view 0.5.0-dev.13472.92dbf4b81984 → 0.5.0-dev.13598.ab27e992befc

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 (146) hide show
  1. package/README.md +25 -7
  2. package/dist/build-revision.json +1 -1
  3. package/dist/modules/backend.mjs +12 -12
  4. package/dist/modules/browser.mjs +16 -16
  5. package/dist/modules/chunks/{App-E3M52XTQ.mjs → App-4XQ5SNNT.mjs} +2 -2
  6. package/dist/modules/chunks/{chunk-3GIGTM7E.mjs → chunk-27XASYEH.mjs} +2 -2
  7. package/dist/modules/chunks/{chunk-UAGQZPAB.mjs → chunk-2Z5KEV6L.mjs} +2 -2
  8. package/dist/modules/chunks/{chunk-4NGODRIE.mjs → chunk-46UEGAXY.mjs} +4 -4
  9. package/dist/modules/chunks/{chunk-UZHTLAIZ.mjs → chunk-47RJSHLM.mjs} +2 -2
  10. package/dist/modules/chunks/{chunk-ACOMGSSB.mjs → chunk-5PHAXNFO.mjs} +2 -2
  11. package/dist/modules/chunks/{chunk-IXPBGENY.mjs → chunk-6I7RY73G.mjs} +3 -3
  12. package/dist/modules/chunks/{chunk-BCTPTLA6.mjs → chunk-7725LLBM.mjs} +3 -3
  13. package/dist/modules/chunks/{chunk-45ZU2HHR.mjs → chunk-B6QUJ33G.mjs} +27 -23
  14. package/dist/modules/chunks/chunk-B6QUJ33G.mjs.map +7 -0
  15. package/dist/modules/chunks/{chunk-PG4AJFDC.mjs → chunk-BGWAT7SI.mjs} +12 -12
  16. package/dist/modules/chunks/{chunk-FKLYSAVN.mjs → chunk-CXOD7FW6.mjs} +7 -4
  17. package/dist/modules/chunks/chunk-CXOD7FW6.mjs.map +7 -0
  18. package/dist/modules/chunks/{chunk-CRNEX7YH.mjs → chunk-D25SR5FS.mjs} +2 -2
  19. package/dist/modules/chunks/{chunk-L5EV6NEE.mjs → chunk-D5GUFI74.mjs} +6 -6
  20. package/dist/modules/chunks/{chunk-TBZZ37VI.mjs → chunk-DZRJQVJF.mjs} +4 -4
  21. package/dist/modules/chunks/{chunk-MHE5EBU4.mjs → chunk-E3PJGTLI.mjs} +22 -14
  22. package/dist/modules/chunks/chunk-E3PJGTLI.mjs.map +7 -0
  23. package/dist/modules/chunks/{chunk-3Q26HNFS.mjs → chunk-FICPCJKR.mjs} +2 -2
  24. package/dist/modules/chunks/{chunk-CWNB67UF.mjs → chunk-FMCHH5R4.mjs} +2 -2
  25. package/dist/modules/chunks/{chunk-MO5LILCP.mjs → chunk-HWZCLROY.mjs} +6 -2
  26. package/dist/modules/chunks/chunk-HWZCLROY.mjs.map +7 -0
  27. package/dist/modules/chunks/{chunk-TTFLJHQZ.mjs → chunk-I5KQUTEE.mjs} +6 -6
  28. package/dist/modules/chunks/{chunk-TTFLJHQZ.mjs.map → chunk-I5KQUTEE.mjs.map} +1 -1
  29. package/dist/modules/chunks/{chunk-2VJPRNYB.mjs → chunk-IZAHIOFU.mjs} +4 -4
  30. package/dist/modules/chunks/{chunk-IBNFKPW4.mjs → chunk-JK7K7RG3.mjs} +2 -2
  31. package/dist/modules/chunks/{chunk-BGK4ZEQ5.mjs → chunk-KX2WU5Z6.mjs} +2 -2
  32. package/dist/modules/chunks/{chunk-M5X56JWH.mjs → chunk-PW5CE2Y6.mjs} +3 -3
  33. package/dist/modules/chunks/{chunk-OHVTNEQ2.mjs → chunk-PZIAKZJC.mjs} +2 -2
  34. package/dist/modules/chunks/{chunk-WHVPE2P6.mjs → chunk-RJ4PIQRU.mjs} +4 -4
  35. package/dist/modules/chunks/{chunk-WHVPE2P6.mjs.map → chunk-RJ4PIQRU.mjs.map} +1 -1
  36. package/dist/modules/chunks/{chunk-CDO6LELS.mjs → chunk-SYE5RTD4.mjs} +3 -3
  37. package/dist/modules/chunks/{chunk-N2GEQFFK.mjs → chunk-U5J7OTEB.mjs} +2 -2
  38. package/dist/modules/chunks/{chunk-N2GEQFFK.mjs.map → chunk-U5J7OTEB.mjs.map} +2 -2
  39. package/dist/modules/chunks/{chunk-JZ3V27HQ.mjs → chunk-U64FRQKP.mjs} +3 -3
  40. package/dist/modules/chunks/{chunk-W46L4HSP.mjs → chunk-U6UMATPV.mjs} +3 -3
  41. package/dist/modules/chunks/{chunk-7ICJKZYO.mjs → chunk-VKNIYV2W.mjs} +26 -21
  42. package/dist/modules/chunks/chunk-VKNIYV2W.mjs.map +7 -0
  43. package/dist/modules/chunks/{chunk-7R6CGQDU.mjs → chunk-VW2ZF3P4.mjs} +4 -4
  44. package/dist/modules/chunks/{chunk-AIIYGGGC.mjs → chunk-X4NNZ5X6.mjs} +2 -2
  45. package/dist/modules/chunks/{chunk-5AKXNYKX.mjs → chunk-XE6ITXHT.mjs} +2 -2
  46. package/dist/modules/chunks/{chunk-KSF2EQTE.mjs → chunk-YCMZAYBM.mjs} +2 -2
  47. package/dist/modules/chunks/chunk-YCMZAYBM.mjs.map +7 -0
  48. package/dist/modules/chunks/{chunk-6WCG6WPC.mjs → chunk-YNHEYXDG.mjs} +3 -3
  49. package/dist/modules/chunks/{chunk-7MJUWNVI.mjs → chunk-ZGOGO7SS.mjs} +1 -1
  50. package/dist/modules/chunks/{chunk-VXSD4FK5.mjs → chunk-ZHO2G4JR.mjs} +3 -3
  51. package/dist/modules/cli-contributions.mjs +3 -3
  52. package/dist/modules/cli.mjs +2 -2
  53. package/dist/modules/command-executor.mjs +2 -2
  54. package/dist/modules/embedded.mjs +100 -21
  55. package/dist/modules/embedded.mjs.map +3 -3
  56. package/dist/modules/frontend-root.mjs +15 -15
  57. package/dist/modules/index.mjs +26 -26
  58. package/dist/modules/plugin.mjs +14 -14
  59. package/dist/modules/plugins/asset/frontend.mjs +4 -4
  60. package/dist/modules/plugins/asset/identity.mjs +3 -3
  61. package/dist/modules/plugins/asset/ui.mjs +2 -2
  62. package/dist/modules/plugins/content-browser/ui.mjs +2 -2
  63. package/dist/modules/plugins/inspector/ui.mjs +2 -2
  64. package/dist/modules/plugins/material/frontend.mjs +4 -4
  65. package/dist/modules/plugins/material/identity.mjs +3 -3
  66. package/dist/modules/plugins/material/ui.mjs +5 -5
  67. package/dist/modules/plugins/mesh/frontend.mjs +4 -4
  68. package/dist/modules/plugins/mesh/identity.mjs +3 -3
  69. package/dist/modules/plugins/mesh/ui.mjs +5 -5
  70. package/dist/modules/plugins/plugins/ui/panel.mjs +2 -2
  71. package/dist/modules/plugins/plugins/ui.mjs +3 -3
  72. package/dist/modules/plugins/scene-tree/ui.mjs +2 -2
  73. package/dist/modules/plugins/texture/frontend.mjs +4 -4
  74. package/dist/modules/plugins/texture/identity.mjs +3 -3
  75. package/dist/modules/plugins/texture/ui.mjs +5 -5
  76. package/dist/modules/plugins/viewport/frontend.mjs +1 -1
  77. package/dist/modules/product.mjs +14 -14
  78. package/dist/modules/shell/frontend.mjs +1 -1
  79. package/dist/modules/start-cli.mjs +1 -1
  80. package/dist/modules/start.mjs +1 -1
  81. package/dist/modules/viewer/catalog/backend.mjs +10 -10
  82. package/dist/modules/viewer/catalog/frontend.mjs +14 -14
  83. package/dist/modules/viewer/catalog/shared.mjs +7 -7
  84. package/dist/modules/viewer/catalog.mjs +17 -17
  85. package/dist/modules/viewer-host/frontend.mjs +16 -16
  86. package/dist/modules/viewer.mjs +17 -17
  87. package/dist/modules/workspace/backend.mjs +2 -2
  88. package/dist/modules/workspace/broker.mjs +1 -1
  89. package/dist/modules/workspace/preview-surface.mjs +1 -1
  90. package/dist/modules/workspace/resident.mjs +1 -1
  91. package/dist/modules/workspace/resource-page.mjs +2 -2
  92. package/dist/viewer/assets/{embedded-Dv06jc6s.js → embedded-Ch4NawY-.js} +2 -2
  93. package/dist/viewer/assets/{embedded-Dv06jc6s.js.map → embedded-Ch4NawY-.js.map} +1 -1
  94. package/dist/viewer/assets/main-DUQJ1NlR.js +22 -0
  95. package/dist/viewer/assets/main-DUQJ1NlR.js.map +1 -0
  96. package/dist/viewer/assets/{panels-lazy-DjINjNT-.js → panels-lazy-DbOAvYN1.js} +3 -3
  97. package/dist/viewer/assets/panels-lazy-DbOAvYN1.js.map +1 -0
  98. package/dist/viewer/assets/panels-ui-DICIsCag.js +12 -0
  99. package/dist/viewer/assets/panels-ui-DICIsCag.js.map +1 -0
  100. package/dist/viewer/assets/style-gOtSMZif.css +2 -0
  101. package/dist/viewer/index.html +4 -4
  102. package/dist/viewer/panels.js +1 -1
  103. package/package.json +3 -4
  104. package/scripts/browser-proof-workload.mjs +0 -1
  105. package/scripts/verify-runtime-content-engine.mjs +12 -6
  106. package/dist/modules/chunks/chunk-45ZU2HHR.mjs.map +0 -7
  107. package/dist/modules/chunks/chunk-7ICJKZYO.mjs.map +0 -7
  108. package/dist/modules/chunks/chunk-FKLYSAVN.mjs.map +0 -7
  109. package/dist/modules/chunks/chunk-KSF2EQTE.mjs.map +0 -7
  110. package/dist/modules/chunks/chunk-MHE5EBU4.mjs.map +0 -7
  111. package/dist/modules/chunks/chunk-MO5LILCP.mjs.map +0 -7
  112. package/dist/viewer/assets/main-De95aP3K.js +0 -22
  113. package/dist/viewer/assets/main-De95aP3K.js.map +0 -1
  114. package/dist/viewer/assets/panels-lazy-DjINjNT-.js.map +0 -1
  115. package/dist/viewer/assets/panels-ui-DEJVGEKx.js +0 -12
  116. package/dist/viewer/assets/panels-ui-DEJVGEKx.js.map +0 -1
  117. package/dist/viewer/assets/style-BM0losky.css +0 -2
  118. package/scripts/verify-game3d-workspace.mjs +0 -318
  119. /package/dist/modules/chunks/{App-E3M52XTQ.mjs.map → App-4XQ5SNNT.mjs.map} +0 -0
  120. /package/dist/modules/chunks/{chunk-3GIGTM7E.mjs.map → chunk-27XASYEH.mjs.map} +0 -0
  121. /package/dist/modules/chunks/{chunk-UAGQZPAB.mjs.map → chunk-2Z5KEV6L.mjs.map} +0 -0
  122. /package/dist/modules/chunks/{chunk-4NGODRIE.mjs.map → chunk-46UEGAXY.mjs.map} +0 -0
  123. /package/dist/modules/chunks/{chunk-UZHTLAIZ.mjs.map → chunk-47RJSHLM.mjs.map} +0 -0
  124. /package/dist/modules/chunks/{chunk-ACOMGSSB.mjs.map → chunk-5PHAXNFO.mjs.map} +0 -0
  125. /package/dist/modules/chunks/{chunk-IXPBGENY.mjs.map → chunk-6I7RY73G.mjs.map} +0 -0
  126. /package/dist/modules/chunks/{chunk-BCTPTLA6.mjs.map → chunk-7725LLBM.mjs.map} +0 -0
  127. /package/dist/modules/chunks/{chunk-PG4AJFDC.mjs.map → chunk-BGWAT7SI.mjs.map} +0 -0
  128. /package/dist/modules/chunks/{chunk-CRNEX7YH.mjs.map → chunk-D25SR5FS.mjs.map} +0 -0
  129. /package/dist/modules/chunks/{chunk-L5EV6NEE.mjs.map → chunk-D5GUFI74.mjs.map} +0 -0
  130. /package/dist/modules/chunks/{chunk-TBZZ37VI.mjs.map → chunk-DZRJQVJF.mjs.map} +0 -0
  131. /package/dist/modules/chunks/{chunk-3Q26HNFS.mjs.map → chunk-FICPCJKR.mjs.map} +0 -0
  132. /package/dist/modules/chunks/{chunk-CWNB67UF.mjs.map → chunk-FMCHH5R4.mjs.map} +0 -0
  133. /package/dist/modules/chunks/{chunk-2VJPRNYB.mjs.map → chunk-IZAHIOFU.mjs.map} +0 -0
  134. /package/dist/modules/chunks/{chunk-IBNFKPW4.mjs.map → chunk-JK7K7RG3.mjs.map} +0 -0
  135. /package/dist/modules/chunks/{chunk-BGK4ZEQ5.mjs.map → chunk-KX2WU5Z6.mjs.map} +0 -0
  136. /package/dist/modules/chunks/{chunk-M5X56JWH.mjs.map → chunk-PW5CE2Y6.mjs.map} +0 -0
  137. /package/dist/modules/chunks/{chunk-OHVTNEQ2.mjs.map → chunk-PZIAKZJC.mjs.map} +0 -0
  138. /package/dist/modules/chunks/{chunk-CDO6LELS.mjs.map → chunk-SYE5RTD4.mjs.map} +0 -0
  139. /package/dist/modules/chunks/{chunk-JZ3V27HQ.mjs.map → chunk-U64FRQKP.mjs.map} +0 -0
  140. /package/dist/modules/chunks/{chunk-W46L4HSP.mjs.map → chunk-U6UMATPV.mjs.map} +0 -0
  141. /package/dist/modules/chunks/{chunk-7R6CGQDU.mjs.map → chunk-VW2ZF3P4.mjs.map} +0 -0
  142. /package/dist/modules/chunks/{chunk-AIIYGGGC.mjs.map → chunk-X4NNZ5X6.mjs.map} +0 -0
  143. /package/dist/modules/chunks/{chunk-5AKXNYKX.mjs.map → chunk-XE6ITXHT.mjs.map} +0 -0
  144. /package/dist/modules/chunks/{chunk-6WCG6WPC.mjs.map → chunk-YNHEYXDG.mjs.map} +0 -0
  145. /package/dist/modules/chunks/{chunk-7MJUWNVI.mjs.map → chunk-ZGOGO7SS.mjs.map} +0 -0
  146. /package/dist/modules/chunks/{chunk-VXSD4FK5.mjs.map → chunk-ZHO2G4JR.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  RESOURCE_PREVIEW_LAYOUT,
3
3
  RESOURCE_PROPERTIES_LAYOUT
4
- } from "./chunk-BGK4ZEQ5.mjs";
4
+ } from "./chunk-KX2WU5Z6.mjs";
5
5
  import {
6
6
  VIEW_PAGE_TYPES
7
7
  } from "./chunk-E3Z7GLFU.mjs";
@@ -74,4 +74,4 @@ export {
74
74
  PROPERTIES_TITLE_I18N_KEY,
75
75
  identity_exports
76
76
  };
77
- //# sourceMappingURL=chunk-AIIYGGGC.mjs.map
77
+ //# sourceMappingURL=chunk-X4NNZ5X6.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveProjectRoot
3
- } from "./chunk-KSF2EQTE.mjs";
3
+ } from "./chunk-YCMZAYBM.mjs";
4
4
  import {
5
5
  VIEW_WORKSPACE_TAB_ID
6
6
  } from "./chunk-E3Z7GLFU.mjs";
@@ -116,4 +116,4 @@ export {
116
116
  openViewProject,
117
117
  runViewProjectOpen
118
118
  };
119
- //# sourceMappingURL=chunk-5AKXNYKX.mjs.map
119
+ //# sourceMappingURL=chunk-XE6ITXHT.mjs.map
@@ -3,7 +3,7 @@ import { resolve } from "node:path";
3
3
  import { existsSync, realpathSync } from "node:fs";
4
4
  var projectPath = (value) => {
5
5
  const absolute = resolve(value);
6
- return existsSync(absolute) ? realpathSync(absolute) : absolute;
6
+ return existsSync(absolute) ? realpathSync.native(absolute) : absolute;
7
7
  };
8
8
  function resolveProjectRoot(argv = [], env = process.env) {
9
9
  const index = argv.indexOf("--root");
@@ -53,4 +53,4 @@ export {
53
53
  runViewStatus,
54
54
  runViewStop
55
55
  };
56
- //# sourceMappingURL=chunk-KSF2EQTE.mjs.map
56
+ //# sourceMappingURL=chunk-YCMZAYBM.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/view-start.ts"],
4
+ "sourcesContent": ["import { resolve } from 'node:path';\nimport { existsSync, realpathSync } from 'node:fs';\nimport type { ViewFrontendConfig } from '@forgeax/view-viewer/config';\n\nconst projectPath = (value: string) => {\n const absolute = resolve(value);\n // Match Engine's native realpath identity, including Windows short-path aliases.\n return existsSync(absolute) ? realpathSync.native(absolute) : absolute;\n};\n\nexport function resolveProjectRoot(argv: readonly string[] = [], env = process.env) {\n const index = argv.indexOf('--root');\n if (index >= 0 && (!argv[index + 1] || argv[index + 1].startsWith('--'))) {\n throw new TypeError('--root requires a backend workspace directory');\n }\n return resolve(index < 0 ? env.FORGEAX_PROJECT_ROOT ?? process.cwd() : argv[index + 1]);\n}\n\nexport function resolveProjectIntent(argv: readonly string[] = [], backendRoot?: string) {\n const index = argv.indexOf('--project');\n if (index < 0) return backendRoot && existsSync(resolve(backendRoot, 'forge.json')) ? projectPath(backendRoot) : undefined;\n const value = argv[index + 1];\n if (!value?.trim() || value.startsWith('--')) throw new TypeError('--project requires a project directory');\n return projectPath(value);\n}\n\nexport function withProjectIntent(status: unknown, project?: string) {\n if (!project || !status || typeof status !== 'object' || !('url' in status) || typeof status.url !== 'string' || !status.url) return status;\n const url = new URL(status.url);\n url.searchParams.set('project', project);\n return { ...status, url: url.href };\n}\n\nasync function call(operation: string, argv: readonly string[], env: NodeJS.ProcessEnv, frontendConfig?: Pick<ViewFrontendConfig, 'layout'>) {\n if (argv.some(arg => ['--headless', '--software', '--serve'].includes(arg))) {\n throw new TypeError('View startup does not launch a browser. Open the returned URL in your browser; configure Engine runs separately.');\n }\n const { callDevKitBackend } = await import('@forgeax/engine/devkit');\n if (!callDevKitBackend) throw new Error('Install the matching Engine SDK with the independent backend capability.');\n return callDevKitBackend(resolveProjectRoot(argv, env), operation,\n frontendConfig === undefined ? {} : { frontendConfig });\n}\n\nexport async function runViewStartInteractive(argv: readonly string[] = [], env = process.env, frontendConfig?: Pick<ViewFrontendConfig, 'layout'>) {\n const backendRoot = resolveProjectRoot(argv, env);\n const project = resolveProjectIntent(argv, backendRoot);\n return withProjectIntent(await call('view.start', argv, env, frontendConfig), project);\n}\nexport const runViewStatus = (argv: readonly string[] = [], env = process.env) => call('view.status', argv, env);\nexport const runViewStop = (argv: readonly string[] = [], env = process.env) => call('view.stop', argv, env);\n"],
5
+ "mappings": ";AAAA,SAAS,eAAe;AACxB,SAAS,YAAY,oBAAoB;AAGzC,IAAM,cAAc,CAAC,UAAkB;AACrC,QAAM,WAAW,QAAQ,KAAK;AAE9B,SAAO,WAAW,QAAQ,IAAI,aAAa,OAAO,QAAQ,IAAI;AAChE;AAEO,SAAS,mBAAmB,OAA0B,CAAC,GAAG,MAAM,QAAQ,KAAK;AAClF,QAAM,QAAQ,KAAK,QAAQ,QAAQ;AACnC,MAAI,SAAS,MAAM,CAAC,KAAK,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,EAAE,WAAW,IAAI,IAAI;AACxE,UAAM,IAAI,UAAU,+CAA+C;AAAA,EACrE;AACA,SAAO,QAAQ,QAAQ,IAAI,IAAI,wBAAwB,QAAQ,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC;AACxF;AAEO,SAAS,qBAAqB,OAA0B,CAAC,GAAG,aAAsB;AACvF,QAAM,QAAQ,KAAK,QAAQ,WAAW;AACtC,MAAI,QAAQ,EAAG,QAAO,eAAe,WAAW,QAAQ,aAAa,YAAY,CAAC,IAAI,YAAY,WAAW,IAAI;AACjH,QAAM,QAAQ,KAAK,QAAQ,CAAC;AAC5B,MAAI,CAAC,OAAO,KAAK,KAAK,MAAM,WAAW,IAAI,EAAG,OAAM,IAAI,UAAU,wCAAwC;AAC1G,SAAO,YAAY,KAAK;AAC1B;AAEO,SAAS,kBAAkB,QAAiB,SAAkB;AACnE,MAAI,CAAC,WAAW,CAAC,UAAU,OAAO,WAAW,YAAY,EAAE,SAAS,WAAW,OAAO,OAAO,QAAQ,YAAY,CAAC,OAAO,IAAK,QAAO;AACrI,QAAM,MAAM,IAAI,IAAI,OAAO,GAAG;AAC9B,MAAI,aAAa,IAAI,WAAW,OAAO;AACvC,SAAO,EAAE,GAAG,QAAQ,KAAK,IAAI,KAAK;AACpC;AAEA,eAAe,KAAK,WAAmB,MAAyB,KAAwB,gBAAqD;AAC3I,MAAI,KAAK,KAAK,SAAO,CAAC,cAAc,cAAc,SAAS,EAAE,SAAS,GAAG,CAAC,GAAG;AAC3E,UAAM,IAAI,UAAU,kHAAkH;AAAA,EACxI;AACA,QAAM,EAAE,kBAAkB,IAAI,MAAM,OAAO,wBAAwB;AACnE,MAAI,CAAC,kBAAmB,OAAM,IAAI,MAAM,0EAA0E;AAClH,SAAO;AAAA,IAAkB,mBAAmB,MAAM,GAAG;AAAA,IAAG;AAAA,IACtD,mBAAmB,SAAY,CAAC,IAAI,EAAE,eAAe;AAAA,EAAC;AAC1D;AAEA,eAAsB,wBAAwB,OAA0B,CAAC,GAAG,MAAM,QAAQ,KAAK,gBAAqD;AAClJ,QAAM,cAAc,mBAAmB,MAAM,GAAG;AAChD,QAAM,UAAU,qBAAqB,MAAM,WAAW;AACtD,SAAO,kBAAkB,MAAM,KAAK,cAAc,MAAM,KAAK,cAAc,GAAG,OAAO;AACvF;AACO,IAAM,gBAAgB,CAAC,OAA0B,CAAC,GAAG,MAAM,QAAQ,QAAQ,KAAK,eAAe,MAAM,GAAG;AACxG,IAAM,cAAc,CAAC,OAA0B,CAAC,GAAG,MAAM,QAAQ,QAAQ,KAAK,aAAa,MAAM,GAAG;",
6
+ "names": []
7
+ }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  FRONTEND_PLUGIN_ID,
3
3
  identity_exports
4
- } from "./chunk-CRNEX7YH.mjs";
4
+ } from "./chunk-D25SR5FS.mjs";
5
5
  import {
6
6
  applyResourcePagePlugin
7
- } from "./chunk-BGK4ZEQ5.mjs";
7
+ } from "./chunk-KX2WU5Z6.mjs";
8
8
 
9
9
  // packages/view-plugin-asset/src/frontend.ts
10
10
  var VIEW_ASSET_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
@@ -22,4 +22,4 @@ export {
22
22
  viewAssetFrontendPlugin,
23
23
  frontend_default
24
24
  };
25
- //# sourceMappingURL=chunk-6WCG6WPC.mjs.map
25
+ //# sourceMappingURL=chunk-YNHEYXDG.mjs.map
@@ -17,4 +17,4 @@ var shell_default = {
17
17
  export {
18
18
  shell_default
19
19
  };
20
- //# sourceMappingURL=chunk-7MJUWNVI.mjs.map
20
+ //# sourceMappingURL=chunk-ZGOGO7SS.mjs.map
@@ -2,10 +2,10 @@ import {
2
2
  FRONTEND_MODULE,
3
3
  FRONTEND_PLUGIN_ID,
4
4
  identity_exports
5
- } from "./chunk-OHVTNEQ2.mjs";
5
+ } from "./chunk-PZIAKZJC.mjs";
6
6
  import {
7
7
  applyResourcePagePlugin
8
- } from "./chunk-BGK4ZEQ5.mjs";
8
+ } from "./chunk-KX2WU5Z6.mjs";
9
9
 
10
10
  // packages/view-plugin-material/src/frontend.ts
11
11
  var VIEW_MATERIAL_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
@@ -29,4 +29,4 @@ export {
29
29
  viewMaterialFrontendPlugin,
30
30
  frontend_default
31
31
  };
32
- //# sourceMappingURL=chunk-VXSD4FK5.mjs.map
32
+ //# sourceMappingURL=chunk-ZHO2G4JR.mjs.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createViewCliContributions,
3
3
  createViewHostCliContributions
4
- } from "./chunks/chunk-IXPBGENY.mjs";
4
+ } from "./chunks/chunk-6I7RY73G.mjs";
5
5
  import "./chunks/chunk-SRYQLFBV.mjs";
6
6
  import "./chunks/chunk-QELNKFSI.mjs";
7
7
  import {
@@ -13,9 +13,9 @@ import "./chunks/chunk-KGA5CEJD.mjs";
13
13
  import "./chunks/chunk-TNYITXOZ.mjs";
14
14
  import "./chunks/chunk-VGCFVNFW.mjs";
15
15
  import "./chunks/chunk-OVJ3UJJB.mjs";
16
- import "./chunks/chunk-5AKXNYKX.mjs";
16
+ import "./chunks/chunk-XE6ITXHT.mjs";
17
17
  import "./chunks/chunk-55F55BQY.mjs";
18
- import "./chunks/chunk-KSF2EQTE.mjs";
18
+ import "./chunks/chunk-YCMZAYBM.mjs";
19
19
  import "./chunks/chunk-4D3Q7K44.mjs";
20
20
  import "./chunks/chunk-7IGFAI5H.mjs";
21
21
  import "./chunks/chunk-OKQ5RBKO.mjs";
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runViewWorkspaceCli
4
- } from "./chunks/chunk-IBNFKPW4.mjs";
5
- import "./chunks/chunk-N2GEQFFK.mjs";
4
+ } from "./chunks/chunk-JK7K7RG3.mjs";
5
+ import "./chunks/chunk-U5J7OTEB.mjs";
6
6
  import "./chunks/chunk-FNRGLCZW.mjs";
7
7
  import "./chunks/chunk-U5R6MVM4.mjs";
8
8
  import "./chunks/chunk-E3Z7GLFU.mjs";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  runViewProjectOpen
3
- } from "./chunks/chunk-5AKXNYKX.mjs";
3
+ } from "./chunks/chunk-XE6ITXHT.mjs";
4
4
  import {
5
5
  runViewStartInteractive,
6
6
  runViewStatus,
7
7
  runViewStop
8
- } from "./chunks/chunk-KSF2EQTE.mjs";
8
+ } from "./chunks/chunk-YCMZAYBM.mjs";
9
9
  import {
10
10
  workspaceDiagnosticRecord
11
11
  } from "./chunks/chunk-U5R6MVM4.mjs";
@@ -1,40 +1,40 @@
1
1
  import {
2
2
  mountAssetPropertiesPanel
3
- } from "./chunks/chunk-UAGQZPAB.mjs";
3
+ } from "./chunks/chunk-2Z5KEV6L.mjs";
4
4
  import {
5
5
  mountTexturePreviewPanel,
6
6
  mountTexturePropertiesPanel
7
- } from "./chunks/chunk-7R6CGQDU.mjs";
7
+ } from "./chunks/chunk-VW2ZF3P4.mjs";
8
8
  import "./chunks/chunk-LJWOHJ5J.mjs";
9
9
  import "./chunks/chunk-R6BDHFU3.mjs";
10
10
  import {
11
11
  mountMaterialPanel,
12
12
  mountMaterialPreviewPanel,
13
13
  mountMaterialPropertiesPanel
14
- } from "./chunks/chunk-2VJPRNYB.mjs";
14
+ } from "./chunks/chunk-IZAHIOFU.mjs";
15
15
  import {
16
16
  mountMeshPreviewPanel,
17
17
  mountMeshPropertiesPanel
18
- } from "./chunks/chunk-4NGODRIE.mjs";
18
+ } from "./chunks/chunk-46UEGAXY.mjs";
19
19
  import "./chunks/chunk-KZUXFEY4.mjs";
20
20
  import {
21
21
  mountSceneTreePanel
22
- } from "./chunks/chunk-3Q26HNFS.mjs";
22
+ } from "./chunks/chunk-FICPCJKR.mjs";
23
23
  import "./chunks/chunk-NLPIM3SO.mjs";
24
24
  import "./chunks/chunk-LPWEUDT5.mjs";
25
25
  import "./chunks/chunk-DVMSDYK7.mjs";
26
26
  import {
27
27
  mountPluginsPanel
28
- } from "./chunks/chunk-M5X56JWH.mjs";
29
- import "./chunks/chunk-ACOMGSSB.mjs";
28
+ } from "./chunks/chunk-PW5CE2Y6.mjs";
29
+ import "./chunks/chunk-5PHAXNFO.mjs";
30
30
  import {
31
31
  mountInspectorPanel
32
- } from "./chunks/chunk-UZHTLAIZ.mjs";
32
+ } from "./chunks/chunk-47RJSHLM.mjs";
33
33
  import "./chunks/chunk-YHX6NYXX.mjs";
34
34
  import "./chunks/chunk-C7KUVPDA.mjs";
35
35
  import {
36
36
  mountContentBrowserPanel
37
- } from "./chunks/chunk-7ICJKZYO.mjs";
37
+ } from "./chunks/chunk-VKNIYV2W.mjs";
38
38
  import "./chunks/chunk-B65OFRMW.mjs";
39
39
  import {
40
40
  Button,
@@ -54,7 +54,7 @@ import {
54
54
  showErrorNotice,
55
55
  themeNames,
56
56
  useTheme
57
- } from "./chunks/chunk-FKLYSAVN.mjs";
57
+ } from "./chunks/chunk-CXOD7FW6.mjs";
58
58
  import "./chunks/chunk-LV4USO43.mjs";
59
59
  import "./chunks/chunk-ABRO535N.mjs";
60
60
  import "./chunks/chunk-GRSJED6K.mjs";
@@ -84,20 +84,20 @@ import {
84
84
  createViewSlotRegistry
85
85
  } from "./chunks/chunk-GQOXQ4AV.mjs";
86
86
  import "./chunks/chunk-INTTYJVW.mjs";
87
- import "./chunks/chunk-AIIYGGGC.mjs";
88
- import "./chunks/chunk-CWNB67UF.mjs";
87
+ import "./chunks/chunk-X4NNZ5X6.mjs";
88
+ import "./chunks/chunk-FMCHH5R4.mjs";
89
89
  import {
90
90
  PANEL_LAYOUT as PANEL_LAYOUT3
91
91
  } from "./chunks/chunk-STQPRNEO.mjs";
92
- import "./chunks/chunk-OHVTNEQ2.mjs";
92
+ import "./chunks/chunk-PZIAKZJC.mjs";
93
93
  import {
94
94
  PANEL_LAYOUT
95
95
  } from "./chunks/chunk-QUFVUMSY.mjs";
96
96
  import {
97
97
  PANEL_LAYOUT as PANEL_LAYOUT2
98
98
  } from "./chunks/chunk-HRKW766Y.mjs";
99
- import "./chunks/chunk-BGK4ZEQ5.mjs";
100
- import "./chunks/chunk-45ZU2HHR.mjs";
99
+ import "./chunks/chunk-KX2WU5Z6.mjs";
100
+ import "./chunks/chunk-B6QUJ33G.mjs";
101
101
  import "./chunks/chunk-PJFFCRRD.mjs";
102
102
  import "./chunks/chunk-IM3H4F4X.mjs";
103
103
  import {
@@ -17662,6 +17662,13 @@ var ANIM_CLASS = "fx-edge-drawer-animating";
17662
17662
  var ENSURED_EDGES = ["left", "right", "bottom"];
17663
17663
  var PORTAL_HOST_CLASS = "fx-edge-drawer-portal-host";
17664
17664
  var FLYOUT_CLASS = "fx-edge-drawer-flyout";
17665
+ var BOTTOM_SPAN_CLASS = "fx-bottom-edge-spanning";
17666
+ var BOTTOM_SPAN_VARS = [
17667
+ "--fx-bottom-edge-left",
17668
+ "--fx-bottom-edge-bottom",
17669
+ "--fx-bottom-edge-width",
17670
+ "--fx-bottom-edge-height"
17671
+ ];
17665
17672
  var DRAWER_VAR_NAMES = [
17666
17673
  "--fx-edge-drawer-width",
17667
17674
  "--fx-edge-drawer-height",
@@ -17989,6 +17996,39 @@ function installEdgeDrawer(api, root) {
17989
17996
  }
17990
17997
  }
17991
17998
  };
17999
+ let bottomSpanSlot = null;
18000
+ const clearBottomSpan = () => {
18001
+ bottomSpanSlot?.classList.remove(BOTTOM_SPAN_CLASS);
18002
+ bottomSpanSlot = null;
18003
+ for (const name of BOTTOM_SPAN_VARS) root.style.removeProperty(name);
18004
+ };
18005
+ const syncBottomSpan = () => {
18006
+ const group = edgeGroups(api).find((candidate) => edgeOf(candidate) === "bottom");
18007
+ const slot = group?.element.parentElement;
18008
+ const host = root.getBoundingClientRect();
18009
+ if (!group || !(slot instanceof HTMLElement) || !group.panels.length || host.width <= 0) {
18010
+ clearBottomSpan();
18011
+ return;
18012
+ }
18013
+ if (bottomSpanSlot !== slot) {
18014
+ bottomSpanSlot?.classList.remove(BOTTOM_SPAN_CLASS);
18015
+ bottomSpanSlot = slot;
18016
+ }
18017
+ const strip = slot.getBoundingClientRect();
18018
+ root.style.setProperty("--fx-bottom-edge-left", `${host.left}px`);
18019
+ root.style.setProperty("--fx-bottom-edge-bottom", `${window.innerHeight - host.bottom}px`);
18020
+ root.style.setProperty("--fx-bottom-edge-width", `${host.width}px`);
18021
+ root.style.setProperty("--fx-bottom-edge-height", `${strip.height}px`);
18022
+ slot.classList.add(BOTTOM_SPAN_CLASS);
18023
+ };
18024
+ let bottomSpanFrame = null;
18025
+ const scheduleBottomSpan = () => {
18026
+ if (bottomSpanFrame !== null) cancelAnimationFrame(bottomSpanFrame);
18027
+ bottomSpanFrame = requestAnimationFrame(() => {
18028
+ bottomSpanFrame = null;
18029
+ syncBottomSpan();
18030
+ });
18031
+ };
17992
18032
  const onClickCapture = (event) => {
17993
18033
  const target = event.target;
17994
18034
  const tabEl = target?.closest(".dv-tab");
@@ -18089,12 +18129,14 @@ function installEdgeDrawer(api, root) {
18089
18129
  const onDragEnd = () => clearEdgeDropPreview(api);
18090
18130
  ensureEdgeSlots();
18091
18131
  syncEmptyEdges();
18132
+ syncBottomSpan();
18092
18133
  root.addEventListener("click", onClickCapture, true);
18093
18134
  document.addEventListener("pointerdown", onOutside, true);
18094
18135
  document.addEventListener("dragend", onDragEnd, true);
18095
18136
  document.addEventListener("drop", onDragEnd, true);
18096
18137
  const layoutSub = api.onDidLayoutChange?.(() => {
18097
18138
  syncEmptyEdges();
18139
+ scheduleBottomSpan();
18098
18140
  if (openGroup) {
18099
18141
  positionDrawer(openGroup);
18100
18142
  if (portaledFlyout && drawerPortalHost) {
@@ -18106,7 +18148,12 @@ function installEdgeDrawer(api, root) {
18106
18148
  }
18107
18149
  }
18108
18150
  });
18109
- const panelSub = api.onDidRemovePanel?.(() => syncEmptyEdges());
18151
+ const panelSub = api.onDidRemovePanel?.(() => {
18152
+ syncEmptyEdges();
18153
+ scheduleBottomSpan();
18154
+ });
18155
+ const hostResize = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(scheduleBottomSpan);
18156
+ hostResize?.observe(root);
18110
18157
  return {
18111
18158
  close,
18112
18159
  forceClose,
@@ -18116,6 +18163,7 @@ function installEdgeDrawer(api, root) {
18116
18163
  pinPanel,
18117
18164
  unpinPanel,
18118
18165
  onWillDrop,
18166
+ refreshBottomSpan: scheduleBottomSpan,
18119
18167
  dispose: () => {
18120
18168
  gripResize.dispose();
18121
18169
  forceClose();
@@ -18132,6 +18180,9 @@ function installEdgeDrawer(api, root) {
18132
18180
  document.removeEventListener("drop", onDragEnd, true);
18133
18181
  layoutSub?.dispose?.();
18134
18182
  panelSub?.dispose?.();
18183
+ hostResize?.disconnect();
18184
+ if (bottomSpanFrame !== null) cancelAnimationFrame(bottomSpanFrame);
18185
+ clearBottomSpan();
18135
18186
  }
18136
18187
  };
18137
18188
  }
@@ -19828,6 +19879,7 @@ function WorkspaceProjectRecovery({ client, required }) {
19828
19879
  Dialog,
19829
19880
  {
19830
19881
  open: true,
19882
+ modal: false,
19831
19883
  dismissible: false,
19832
19884
  className: "fx-view-project-open",
19833
19885
  title: t2("view.projectOpen.title"),
@@ -19974,6 +20026,7 @@ function pageIdFor(pageType) {
19974
20026
  function useViewPages(pageTypes, titleFor) {
19975
20027
  const [pages, setPages] = useState4([]);
19976
20028
  const [activePageId, setActivePageId] = useState4(null);
20029
+ const explicitlySelected = useRef4(false);
19977
20030
  const typesById = useMemo3(
19978
20031
  () => new Map(pageTypes.map((pageType) => [pageType.typeId, pageType])),
19979
20032
  [pageTypes]
@@ -19986,22 +20039,33 @@ function useViewPages(pageTypes, titleFor) {
19986
20039
  });
19987
20040
  for (const pageType of pageTypes) {
19988
20041
  if (pageType.initial && !next.some((page) => page.typeId === pageType.typeId)) {
19989
- next.push({
20042
+ const page = {
19990
20043
  id: pageIdFor(pageType),
19991
20044
  title: titleFor(pageType),
19992
20045
  typeId: pageType.typeId,
19993
20046
  closable: pageType.closable
20047
+ };
20048
+ const index = next.findIndex((existing) => {
20049
+ const type = typesById.get(existing.typeId);
20050
+ return type && (type.order > pageType.order || type.order === pageType.order && type.typeId > pageType.typeId);
19994
20051
  });
20052
+ next.splice(index < 0 ? next.length : index, 0, page);
19995
20053
  }
19996
20054
  }
19997
20055
  return next;
19998
20056
  });
19999
20057
  }, [pageTypes, titleFor, typesById]);
20000
20058
  useEffect5(() => {
20059
+ const scene = pages.find((page) => page.typeId === VIEW_PAGE_TYPES.editor);
20060
+ if (scene && !explicitlySelected.current && activePageId !== scene.id) {
20061
+ setActivePageId(scene.id);
20062
+ return;
20063
+ }
20001
20064
  if (pages.some((page) => page.id === activePageId)) return;
20002
20065
  setActivePageId(pages[0]?.id ?? null);
20003
20066
  }, [activePageId, pages]);
20004
20067
  const selectPage = useCallback4((pageId) => {
20068
+ explicitlySelected.current = true;
20005
20069
  setActivePageId(pageId);
20006
20070
  }, []);
20007
20071
  const closePage = useCallback4(
@@ -20019,6 +20083,7 @@ function useViewPages(pageTypes, titleFor) {
20019
20083
  [activePageId]
20020
20084
  );
20021
20085
  const closeOthers = useCallback4((pageId) => {
20086
+ explicitlySelected.current = true;
20022
20087
  setPages((current) => current.filter((page) => page.id === pageId || page.closable === false));
20023
20088
  setActivePageId(pageId);
20024
20089
  }, []);
@@ -20050,6 +20115,7 @@ function useViewPages(pageTypes, titleFor) {
20050
20115
  singleton: pageType?.singleton === true
20051
20116
  }, { level: plan.action === "none" ? "warn" : "info" });
20052
20117
  if (plan.action === "focus") {
20118
+ explicitlySelected.current = true;
20053
20119
  setActivePageId(plan.pageId);
20054
20120
  return;
20055
20121
  }
@@ -20059,6 +20125,7 @@ function useViewPages(pageTypes, titleFor) {
20059
20125
  ...current,
20060
20126
  { id, title: titleFor(pageType), typeId, closable: pageType.closable }
20061
20127
  ]);
20128
+ explicitlySelected.current = true;
20062
20129
  setActivePageId(id);
20063
20130
  }, [pages, titleFor, typesById]);
20064
20131
  const activePage = useMemo3(
@@ -20337,6 +20404,7 @@ function DockPageWorkbench({
20337
20404
  const availableWidth = dockExtent.width > 0 ? dockExtent.width : dockHostRef.current?.clientWidth ?? workbenchRef.current?.clientWidth ?? 0;
20338
20405
  const availableHeight = dockExtent.height > 0 ? dockExtent.height : dockHostRef.current?.clientHeight ?? workbenchRef.current?.clientHeight ?? 0;
20339
20406
  if (availableWidth > 0 && availableHeight > 0) api.layout(availableWidth, availableHeight);
20407
+ const hadContentBrowser = Boolean(api.getPanel("content-browser"));
20340
20408
  reconcileDockPanels(api, claims, {
20341
20409
  titleFor: titleForClaim,
20342
20410
  attach: (id) => {
@@ -20353,6 +20421,17 @@ function DockPageWorkbench({
20353
20421
  closeEdgeDrawer: () => edgeDrawerRef.current?.forceClose()
20354
20422
  });
20355
20423
  }
20424
+ if (!hadContentBrowser) {
20425
+ const panel = api.getPanel("content-browser");
20426
+ const bottom = api.groups.find((group) => group.api.location.type === "edge" && group.api.location.position === "bottom");
20427
+ if (panel && bottom) {
20428
+ panel.api.moveTo({ group: bottom, position: "center" });
20429
+ bottom.element.classList.remove("fx-edge-empty");
20430
+ api.setEdgeGroupVisible?.("bottom", true);
20431
+ bottom.api.collapse?.();
20432
+ edgeDrawerRef.current?.refreshBottomSpan();
20433
+ }
20434
+ }
20356
20435
  for (const claim of claims) {
20357
20436
  if (claim.dockTitleHidden !== true) continue;
20358
20437
  const panel = api.getPanel(claim.id);
@@ -20745,10 +20824,10 @@ __export(panels_exports, {
20745
20824
  });
20746
20825
 
20747
20826
  // packages/viewer/src/styles.css
20748
- var css3 = '/* packages/viewer/src/styles.css */\n:root {\n font-family: var(--fx-type-ui-font-family);\n font-size: var(--fx-type-ui-font-size);\n line-height: var(--fx-type-ui-line-height);\n}\nhtml,\nbody {\n margin: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n background: var(--fx-color-surface-canvas);\n color: var(--fx-color-text-primary);\n}\n#root {\n position: relative;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n.fx-view-root.fx-ui {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n --fx-view-shell-chrome-height: calc(var(--fx-component-editor-row-height) + var(--fx-component-navigation-row-height));\n --fx-view-header-band-height: var(--fx-component-editor-row-height);\n --fx-view-unconfigured-offset: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-8) - var(--fx-ref-space-6));\n}\n.fx-view-header__recovery-feedback {\n width: 100%;\n min-width: 0;\n padding: 0 var(--fx-ref-space-10);\n align-items: center;\n border-radius: var(--fx-radius-control);\n}\n.fx-view-header__recovery-feedback .fx-feedback__body {\n display: flex;\n flex-direction: column;\n gap: 0;\n min-width: 0;\n}\n.fx-view-header__recovery-feedback .fx-feedback__body strong {\n font: var(--fx-type-compact-font-weight) var(--fx-type-compact-font-size) / var(--fx-type-compact-line-height) var(--fx-type-compact-font-family);\n}\n.fx-view-header__connection-status {\n position: relative;\n display: inline-flex;\n flex-shrink: 0;\n flex-direction: column;\n align-items: flex-end;\n}\n.fx-view-connection-state {\n position: absolute;\n top: var(--fx-view-shell-chrome-height);\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 40;\n display: grid;\n place-items: center;\n overflow: auto;\n padding: var(--fx-space-section);\n background: var(--fx-color-surface-canvas);\n box-sizing: border-box;\n}\n.fx-view-connection-state > .fx-empty {\n width: min(100%, calc(var(--fx-component-panel-chat-min-width) + var(--fx-ref-space-48) + var(--fx-ref-space-32)));\n min-height: calc(var(--fx-ref-space-48) * 5 + var(--fx-ref-space-16) + var(--fx-ref-space-4));\n border: var(--fx-border-width) solid var(--fx-color-border-subtle);\n border-radius: var(--fx-radius-card);\n background: var(--fx-color-surface-sidebar);\n box-shadow: var(--fx-shadow-card);\n box-sizing: border-box;\n}\n.fx-view-connection-state__icon {\n width: var(--fx-component-control-height-default);\n height: var(--fx-component-control-height-default);\n color: var(--fx-color-status-error-fg);\n stroke-width: 1.5;\n}\n.fx-view-connection-state__description {\n display: grid;\n gap: var(--fx-ref-space-8);\n}\n.fx-view-connection-state__command {\n padding: var(--fx-border-width) var(--fx-ref-space-4);\n border-radius: var(--fx-ref-radius-4);\n background: var(--fx-color-surface-inset);\n color: var(--fx-color-text-primary);\n font-family: var(--fx-type-code-font-family);\n font-size: inherit;\n white-space: nowrap;\n}\n.fx-view-connection-state__reason {\n display: block;\n max-width: var(--fx-component-conversation-max-width);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-radius: var(--fx-ref-radius-4);\n background: var(--fx-color-surface-inset);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-ref-font-size-12);\n overflow-wrap: anywhere;\n}\n.fx-view-root > .fx-view-app {\n flex: 1 1 auto;\n min-height: 0;\n}\n.fx-view-app {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.fx-view-app > .fx-page-tab-strip {\n flex: 0 0 auto;\n}\n.fx-view-header {\n position: relative;\n z-index: 20;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 0 0 var(--fx-view-header-band-height);\n height: var(--fx-view-header-band-height);\n padding: 0 var(--fx-ref-space-12);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n background: var(--fx-color-surface-sidebar);\n box-sizing: border-box;\n user-select: none;\n}\n.fx-view-brand {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n min-width: calc(var(--fx-component-panel-config-min-width) - var(--fx-ref-space-48) - var(--fx-ref-space-8));\n color: var(--fx-color-text-primary);\n}\n.fx-view-brand strong {\n font-weight: var(--fx-ref-font-weight-600);\n}\n.fx-view-header__status-slot {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--fx-component-control-height-compact);\n height: var(--fx-component-control-height-compact);\n}\n.fx-view-header__status-dot {\n width: var(--fx-ref-space-6);\n height: var(--fx-ref-space-6);\n border-radius: var(--fx-radius-pill);\n background: var(--fx-color-status-success-fg);\n}\n.fx-view-header__status-dot--connected {\n background: var(--fx-color-status-success-fg);\n}\n.fx-view-header__status-dot--connecting {\n background: var(--fx-color-status-warning-fg);\n animation: fx-view-host-status-pulse 1.4s ease-in-out infinite;\n}\n.fx-view-header__status-dot--failed {\n background: var(--fx-color-status-error-fg);\n}\n@keyframes fx-view-host-status-pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.45;\n }\n}\n.fx-view-header__status-slot:focus-visible {\n outline: var(--fx-border-width) solid var(--fx-color-border-focus);\n outline-offset: var(--fx-ref-space-2);\n border-radius: var(--fx-radius-control);\n}\n.fx-view-unconfigured {\n position: absolute;\n right: var(--fx-view-unconfigured-offset);\n padding: var(--fx-ref-space-2) var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--fx-color-status-warning-fg);\n border-radius: var(--fx-ref-radius-4);\n background: var(--fx-color-status-warning-bg);\n color: var(--fx-color-status-warning-fg);\n font-family: var(--fx-type-code-font-family);\n font-size: var(--fx-ref-font-size-12);\n line-height: var(--fx-type-caption-line-height);\n letter-spacing: var(--fx-type-caption-letter-spacing);\n}\n.fx-view-header__prefs {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-4);\n}\n.fx-locale-trigger {\n min-width: var(--fx-ref-space-16);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size)/ var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n letter-spacing: 0.04em;\n}\n.fx-view-main-col {\n flex: 1;\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n overflow: hidden;\n}\n.fx-view-project-restoring {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--fx-ref-space-4);\n padding: var(--fx-ref-space-8);\n text-align: center;\n}\n.fx-view-workspace-row {\n position: absolute;\n inset: 0;\n display: flex;\n min-height: 0;\n width: 100%;\n overflow: hidden;\n background: var(--fx-color-surface-canvas);\n visibility: hidden;\n pointer-events: none;\n}\n.fx-view-workspace-row.is-active {\n visibility: visible;\n pointer-events: auto;\n}\n.fx-view-workspace-row[hidden] {\n display: none;\n}\n.fx-view-page-surface {\n flex: 1;\n display: grid;\n align-content: start;\n gap: var(--fx-ref-space-8);\n padding: var(--fx-space-section);\n min-height: 0;\n overflow: auto;\n}\n.fx-view-workbench {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n.fx-view-dockview-host {\n position: relative;\n flex: 1;\n min-width: 0;\n min-height: 0;\n --fx-edge-drawer-z: 1000;\n}\n.fx-view-dockview-host,\n.fx-view-dockview-host .dv-shell.dockview-theme-abyss {\n --fx-dock-container-background: var(--fx-color-surface-canvas);\n --fx-dock-panel-background: var(--fx-color-surface-sidebar);\n --dv-background-color: var(--fx-dock-container-background);\n --dv-group-view-background-color: var(--fx-dock-panel-background);\n --dv-tabs-and-actions-container-background-color: var(--fx-color-surface-inset);\n --dv-activegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-activegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-inset);\n --dv-inactivegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-raised);\n --dv-activegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-activegroup-hiddenpanel-tab-color: var(--fx-color-text-secondary);\n --dv-inactivegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-inactivegroup-hiddenpanel-tab-color: var(--fx-color-text-muted);\n --dv-tab-divider-color: var(--fx-color-border-subtle);\n --dv-separator-border: var(--fx-color-border-subtle);\n --dv-active-sash-color: transparent;\n --dv-paneview-active-outline-color: var(--fx-color-brand-accent);\n --dv-drag-over-background-color: var(--fx-color-brand-soft);\n --dv-drag-over-border-color: var(--fx-color-brand-accent);\n --dv-floating-border: none;\n --dv-floating-group-border: none;\n --dv-context-menu-background-color: var(--fx-color-surface-raised);\n --dv-context-menu-color: var(--fx-color-text-secondary);\n --dv-color-abyss-dark: var(--fx-color-surface-sidebar);\n --dv-color-abyss: var(--fx-color-surface-inset);\n --dv-color-abyss-light: var(--fx-color-surface-raised);\n --dv-color-abyss-lighter: var(--fx-color-surface-raised);\n --dv-color-abyss-accent: var(--fx-color-brand-accent);\n}\n.fx-view-workbench .dv-groupview-edge {\n --fx-dock-panel-background: var(--fx-color-surface-sidebar);\n --dv-color-abyss-dark: var(--fx-color-surface-sidebar);\n --dv-color-abyss: var(--fx-color-surface-inset);\n --dv-color-abyss-light: var(--fx-color-surface-inset);\n --dv-color-abyss-lighter: var(--fx-color-surface-raised);\n --dv-color-abyss-accent: var(--fx-color-brand-accent);\n --dv-group-view-background-color: var(--fx-dock-panel-background);\n --dv-tabs-and-actions-container-background-color: var(--fx-color-surface-inset);\n --dv-activegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-activegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-inset);\n --dv-inactivegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-raised);\n --dv-activegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-activegroup-hiddenpanel-tab-color: var(--fx-color-text-secondary);\n --dv-inactivegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-inactivegroup-hiddenpanel-tab-color: var(--fx-color-text-muted);\n --dv-tab-divider-color: var(--fx-color-border-subtle);\n --dv-separator-border: var(--fx-color-border-subtle);\n --dv-context-menu-background-color: var(--fx-color-surface-raised);\n --dv-context-menu-color: var(--fx-color-text-secondary);\n}\n.fx-edge-drawer-portal-host {\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 50;\n --fx-edge-drawer-z: 1000;\n --fx-dock-panel-background: var(--fx-color-surface-sidebar);\n --dv-color-abyss-dark: var(--fx-color-surface-sidebar);\n --dv-color-abyss: var(--fx-color-surface-inset);\n --dv-color-abyss-light: var(--fx-color-surface-inset);\n --dv-color-abyss-lighter: var(--fx-color-surface-raised);\n --dv-color-abyss-accent: var(--fx-color-brand-accent);\n --dv-group-view-background-color: var(--fx-dock-panel-background);\n --dv-tabs-and-actions-container-background-color: var(--fx-color-surface-inset);\n --dv-activegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-activegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-inset);\n --dv-inactivegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-raised);\n --dv-activegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-activegroup-hiddenpanel-tab-color: var(--fx-color-text-secondary);\n --dv-inactivegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-inactivegroup-hiddenpanel-tab-color: var(--fx-color-text-muted);\n --dv-tab-divider-color: var(--fx-color-border-subtle);\n --dv-separator-border: var(--fx-color-border-subtle);\n --dv-context-menu-background-color: var(--fx-color-surface-raised);\n --dv-context-menu-color: var(--fx-color-text-secondary);\n}\n.fx-view-dockview {\n width: 100%;\n height: 100%;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview {\n --dv-separator-border: transparent;\n background-color: var(--fx-dock-container-background, var(--fx-color-surface-canvas));\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-groupview:not(.dv-groupview-edge),\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .groupview:not(.groupview-edge) {\n border: 0 !important;\n outline: 0;\n box-shadow: none;\n}\n.fx-view-dockview-host .dv-shell > .dv-split-view-container.dv-separator-border > .dv-view-container > .dv-view:not(:first-child)::before,\n.fx-view-dockview-host .dv-shell-middle-column > .dv-split-view-container.dv-separator-border > .dv-view-container > .dv-view:not(:first-child)::before {\n display: none;\n}\n.fx-view-dockview .dv-tabs-and-actions-container {\n height: calc(var(--fx-component-navigation-row-height) - var(--fx-ref-space-6));\n min-height: calc(var(--fx-component-navigation-row-height) - var(--fx-ref-space-6));\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.fx-view-dockview .dv-tab {\n border-radius: var(--fx-ref-radius-4) var(--fx-ref-radius-4) 0 0 !important;\n font-size: var(--fx-ref-font-size-12);\n letter-spacing: var(--fx-type-caption-letter-spacing);\n}\n.fx-view-dockview .dv-groupview:not(.dv-groupview-edge) .fx-dock-tab {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: var(--fx-ref-space-6);\n}\n.fx-view-dockview .dv-groupview:not(.dv-groupview-edge) .fx-dock-tab .dv-default-tab-content {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n color: inherit;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fx-view-dockview .fx-dock-tab-icon {\n flex: 0 0 auto;\n color: var(--fx-color-text-muted);\n}\n.fx-view-dockview .dv-tab.dv-active-tab .fx-dock-tab-icon {\n color: var(--fx-color-text-secondary);\n}\n.fx-view-dockview .fx-dock-tab .dv-default-tab-action {\n display: grid;\n place-items: center;\n width: calc(var(--fx-ref-space-16) + var(--fx-ref-space-2));\n height: calc(var(--fx-ref-space-16) + var(--fx-ref-space-2));\n min-height: calc(var(--fx-ref-space-16) + var(--fx-ref-space-2));\n margin-left: var(--fx-ref-space-2);\n padding: 0;\n border: 0;\n border-radius: var(--fx-ref-radius-4);\n color: var(--fx-color-text-muted);\n}\n.fx-view-dockview .fx-dock-tab .dv-default-tab-action:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.fx-view-dockview .fx-dock-tab .dv-default-tab-action.fx-edge-pin--on {\n color: var(--fx-color-brand-accent);\n}\n.fx-view-dockview-host .dv-tab:focus-within::after,\n.fx-view-dockview-host .dv-tab:focus::after {\n content: none;\n}\n.fx-view-dockview-host .dv-groupview.dv-active-group:not(.dv-groupview-edge) > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab,\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.fx-view-dockview-host .dv-groupview.dv-active-group:not(.dv-groupview-edge) > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::before,\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::before {\n content: "";\n position: absolute;\n pointer-events: none;\n z-index: 2;\n background:\n linear-gradient(\n 90deg,\n transparent 0%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 22%,\n var(--fx-color-brand-accent) 50%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 78%,\n transparent 100%);\n left: 0;\n right: 0;\n top: 1px;\n height: 1px;\n width: auto;\n}\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open.dv-active-group.dv-groupview-header-left > .dv-tabs-and-actions-container .dv-tabs-container.dv-tabs-container-vertical > .dv-tab.dv-active-tab::before {\n top: 0;\n bottom: 0;\n left: 0;\n right: auto;\n width: 1px;\n height: auto;\n background:\n linear-gradient(\n 180deg,\n transparent 0%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 22%,\n var(--fx-color-brand-accent) 50%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 78%,\n transparent 100%);\n}\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open.dv-active-group.dv-groupview-header-right > .dv-tabs-and-actions-container .dv-tabs-container.dv-tabs-container-vertical > .dv-tab.dv-active-tab::before {\n top: 0;\n bottom: 0;\n right: 0;\n left: auto;\n width: 1px;\n height: auto;\n background:\n linear-gradient(\n 180deg,\n transparent 0%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 22%,\n var(--fx-color-brand-accent) 50%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 78%,\n transparent 100%);\n}\n.fx-view-workbench .dv-groupview-edge .dv-tabs-container.dv-tabs-container-vertical {\n text-orientation: sideways;\n padding-top: var(--fx-ref-space-6);\n}\n.fx-view-workbench .dv-groupview-edge .dv-default-tab .dv-default-tab-content {\n margin: 0;\n padding: var(--fx-ref-space-2) 0;\n}\n.fx-view-workbench .dv-groupview-edge.dv-active-group:not(.fx-edge-drawer-open) > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.fx-view-workbench .dv-groupview-edge.dv-inactive-group:not(.fx-edge-drawer-open) > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n.fx-view-workbench .dv-groupview-edge.fx-edge-empty {\n visibility: hidden;\n pointer-events: none;\n}\n.fx-view-workbench .dv-groupview-edge .dv-tabs-container.dv-tabs-container-vertical > .dv-tab {\n min-height: 104px;\n padding: var(--fx-ref-space-10) var(--fx-ref-space-6);\n box-sizing: border-box;\n}\n.fx-view-workbench .dv-groupview-edge .dv-tabs-container:not(.dv-tabs-container-vertical) > .dv-tab {\n min-width: 104px;\n padding: var(--fx-ref-space-6) var(--fx-ref-space-12);\n box-sizing: border-box;\n}\n.fx-view-workbench .dv-groupview-edge .dv-default-tab {\n padding: var(--fx-ref-space-4) var(--fx-ref-space-2);\n gap: var(--fx-ref-space-6);\n box-sizing: border-box;\n}\n.fx-view-workbench .dv-groupview-edge .dv-tabs-container-vertical .fx-dock-tab-icon {\n writing-mode: horizontal-tb;\n margin-right: 0;\n margin-bottom: var(--fx-ref-space-6);\n}\n.fx-view-workbench .dv-groupview-edge .dv-default-tab-action.fx-edge-pin {\n opacity: 0;\n}\n.fx-view-workbench .dv-groupview-edge .dv-tab:hover .dv-default-tab-action.fx-edge-pin,\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open .dv-tab.dv-active-tab .dv-default-tab-action.fx-edge-pin {\n opacity: 1;\n}\n.fx-edge-drawer-portal-host > .fx-edge-drawer-grip {\n pointer-events: auto;\n}\n.fx-view-dockview-host .dv-groupview-edge.fx-edge-drawer-open {\n position: relative;\n z-index: var(--fx-edge-drawer-z, 1000) !important;\n}\n.fx-view-dockview-host .dv-popover-anchor > * {\n z-index: calc(var(--fx-edge-drawer-z, 1000) + 1) !important;\n}\n.fx-view-dockview-host .dv-groupview-edge.fx-edge-drawer-open > .dv-content-container,\n.fx-edge-drawer-portal-host > .dv-content-container {\n --fx-edge-drawer-inset: var(--fx-ref-space-6);\n display: block !important;\n position: fixed;\n pointer-events: auto;\n width: var(--fx-edge-drawer-width, 300px);\n height: calc(var(--fx-edge-strip-height) - 2 * var(--fx-edge-drawer-inset));\n top: calc(var(--fx-edge-strip-top) + var(--fx-edge-drawer-inset));\n z-index: 60;\n box-sizing: border-box;\n background: var(--dv-group-view-background-color, var(--fx-color-surface-sidebar));\n color: var(--fx-color-text-primary);\n border: var(--fx-border-width) solid var(--dv-separator-border, var(--fx-color-border-subtle));\n border-radius: var(--fx-ref-radius-6);\n overflow: hidden;\n}\n.fx-view-dockview-host .dv-groupview-edge.dv-groupview-header-left.fx-edge-drawer-open > .dv-content-container,\n.fx-edge-drawer-portal-host > .dv-content-container.dv-groupview-header-left {\n left: calc(var(--fx-edge-drawer-left) - 3px);\n width: calc(var(--fx-edge-drawer-width, 300px) + 3px);\n box-shadow: 4px 0 12px color-mix(in srgb, var(--fx-color-scrim) 30%, transparent), 1px 0 3px color-mix(in srgb, var(--fx-color-scrim) 22%, transparent);\n}\n.fx-view-dockview-host .dv-groupview-edge.dv-groupview-header-right.fx-edge-drawer-open > .dv-content-container,\n.fx-edge-drawer-portal-host > .dv-content-container.dv-groupview-header-right {\n right: calc(var(--fx-edge-drawer-right) - 3px);\n width: calc(var(--fx-edge-drawer-width, 300px) + 3px);\n box-shadow: -4px 0 12px color-mix(in srgb, var(--fx-color-scrim) 30%, transparent), -1px 0 3px color-mix(in srgb, var(--fx-color-scrim) 22%, transparent);\n}\n.fx-view-dockview-host .dv-groupview-edge.dv-groupview-header-bottom.fx-edge-drawer-open > .dv-content-container,\n.fx-edge-drawer-portal-host > .dv-content-container.dv-groupview-header-bottom {\n top: auto;\n left: calc(var(--fx-edge-strip-left) + var(--fx-edge-drawer-inset));\n width: calc(var(--fx-edge-strip-width) - 2 * var(--fx-edge-drawer-inset));\n height: calc(var(--fx-edge-drawer-height, 300px) + 3px);\n bottom: calc(var(--fx-edge-drawer-bottom) - 3px);\n box-shadow: 0 -4px 12px color-mix(in srgb, var(--fx-color-scrim) 30%, transparent), 0 -1px 3px color-mix(in srgb, var(--fx-color-scrim) 22%, transparent);\n}\n.fx-ue-live-host .fx-ue-lifted,\n.fx-ue-live-host .dv-resize-container.fx-ue-lifted {\n box-shadow: none !important;\n}\n.fx-edge-drawer-grip {\n z-index: 61;\n background: transparent;\n transition: background 0.1s ease;\n}\n.fx-edge-drawer-grip.fx-edge-drawer-grip--dragging {\n background: var(--fx-color-brand-accent);\n}\n.fx-view-dockview-host .dv-groupview[data-fx-dock-title-state=hidden] > .dv-tabs-and-actions-container.dv-single-tab {\n height: 0 !important;\n min-height: 0 !important;\n max-height: 0 !important;\n overflow: hidden !important;\n opacity: 0;\n border: 0;\n pointer-events: none;\n}\n.fx-view-dockview-host .fx-dock-title-restore,\n.fx-edge-drawer-portal-host .fx-dock-title-restore {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 3;\n align-items: flex-start;\n justify-content: flex-start;\n width: var(--fx-component-choice-size) !important;\n height: calc(var(--fx-ref-space-16) + var(--fx-ref-space-4)) !important;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--fx-color-text-muted);\n cursor: pointer;\n}\n.fx-view-dockview-host .fx-dock-title-restore::before,\n.fx-edge-drawer-portal-host .fx-dock-title-restore::before {\n content: "";\n width: var(--fx-ref-space-12);\n height: var(--fx-ref-space-12);\n align-self: flex-start;\n background: var(--fx-color-text-muted);\n clip-path: polygon(0 0, 100% 0, 0 100%);\n transition: background var(--fx-motion-hover) var(--fx-motion-ease);\n}\n.fx-view-dockview-host .fx-dock-title-restore:hover::before,\n.fx-view-dockview-host .fx-dock-title-restore:focus-visible::before,\n.fx-edge-drawer-portal-host .fx-dock-title-restore:hover::before,\n.fx-edge-drawer-portal-host .fx-dock-title-restore:focus-visible::before {\n background: var(--fx-color-brand-accent);\n}\n.fx-view-dockview-host .fx-dock-title-restore:focus-visible,\n.fx-edge-drawer-portal-host .fx-dock-title-restore:focus-visible {\n outline: none;\n}\n.fx-view-dockview-host .dv-groupview[data-fx-dock-title-state=hidden] .fx-dock-title-restore,\n.fx-edge-drawer-portal-host > .dv-content-container[data-fx-dock-title-state=hidden] .fx-dock-title-restore {\n display: inline-flex !important;\n}\n.fx-view-dockview-host .dv-context-menu {\n min-width: calc(var(--fx-component-menu-min-width) - var(--fx-ref-space-48));\n padding: var(--fx-ref-space-4) !important;\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-radius-popover);\n background: var(--dv-context-menu-background-color, var(--fx-color-surface-raised)) !important;\n color: var(--dv-context-menu-color, var(--fx-color-text-secondary)) !important;\n box-shadow: var(--fx-shadow-floating);\n}\n.fx-view-dockview-host .dv-context-menu-item {\n min-height: var(--fx-component-control-height-compact);\n gap: var(--fx-ref-space-8);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-radius: var(--fx-ref-radius-4);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n color: var(--dv-context-menu-color, var(--fx-color-text-secondary));\n}\n.fx-view-dockview-host .dv-context-menu-item .dv-svg,\n.fx-view-dockview-host .dv-context-menu-item svg {\n width: var(--fx-ref-space-16);\n height: var(--fx-ref-space-16);\n flex-shrink: 0;\n}\n.fx-view-dockview-host .dv-context-menu-item:not(.dv-context-menu-item--disabled):hover {\n background: var(--fx-color-action-primary-bg) !important;\n color: var(--fx-color-action-primary-fg) !important;\n}\n.fx-view-dockview-host .dv-context-menu-item:not(.dv-context-menu-item--disabled):hover .dv-svg,\n.fx-view-dockview-host .dv-context-menu-item:not(.dv-context-menu-item--disabled):hover svg {\n color: var(--fx-color-action-primary-fg);\n fill: currentcolor;\n}\n.fx-view-dockview-host .dv-context-menu-item.dv-context-menu-item--disabled {\n opacity: 0.5;\n}\n.fx-view-dockview-host .dv-context-menu-separator {\n height: var(--fx-border-width);\n margin: var(--fx-ref-space-4);\n background: var(--fx-color-border-subtle);\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash {\n background: transparent !important;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash::after {\n content: "";\n position: absolute;\n pointer-events: none;\n opacity: 0;\n background: var(--fx-color-brand-accent);\n transition: opacity 100ms ease;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash::before {\n content: "";\n position: absolute;\n inset: 0 -1px;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash::before {\n content: "";\n position: absolute;\n inset: -1px 0;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash::after {\n inset: 0 -1px;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash::after {\n inset: -1px 0;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash:hover::after,\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash:active::after,\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash.dv-sash-active::after {\n opacity: 1;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-resize-container {\n border-radius: var(--fx-ref-radius-8);\n box-shadow: var(--fx-shadow-floating);\n overflow: hidden;\n}\n.fx-view-dock-panel,\n.fx-view-slot-mount,\n.fx-view-slot-mount-host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 auto;\n}\n.fx-view-dock-panel {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--fx-color-surface-sidebar);\n}\n.fx-view-page-mount {\n position: absolute;\n inset: 0;\n z-index: 0;\n min-height: 0;\n overflow: hidden;\n background: var(--fx-color-surface-inset);\n pointer-events: none;\n}\n.fx-view-page-mount.is-active {\n z-index: 2;\n pointer-events: auto;\n}\n.fx-view-slot-mount-host > * {\n flex: 1 1 0%;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n.fx-view-page-mount > .fx-view-display-surface,\n.fx-view-slot-mount-host > .fx-view-viewport-surface {\n width: 100%;\n height: 100%;\n min-height: 0;\n flex: 1 1 auto;\n border: 0;\n background: var(--fx-color-surface-inset);\n}\n.fx-view-page-mount > .fx-view-display-surface {\n visibility: visible !important;\n}\n.fx-view-slot-chrome {\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.fx-view-slot-chrome__title {\n margin: 0;\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n text-transform: uppercase;\n letter-spacing: var(--fx-type-caption-letter-spacing);\n color: var(--fx-color-text-muted);\n}\n.fx-view-slot-chrome__mount {\n min-height: var(--fx-ref-space-32);\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.fx-view-zone--left .fx-view-slot-chrome,\n.fx-view-zone--right .fx-view-slot-chrome {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.fx-view-zone--left .fx-view-slot-chrome__mount,\n.fx-view-zone--right .fx-view-slot-chrome__mount {\n flex: 1;\n min-height: calc(var(--fx-ref-space-48) * 4);\n}\n.fx-view-panel__header {\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.fx-view-panel__title {\n margin: 0;\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n text-transform: uppercase;\n letter-spacing: var(--fx-type-caption-letter-spacing);\n}\n.fx-view-panel__body {\n padding: var(--fx-ref-space-8);\n}\n.fx-view-input {\n width: 100%;\n box-sizing: border-box;\n margin-bottom: var(--fx-ref-space-8);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border: var(--fx-border-width) solid var(--fx-color-border-control);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n color: inherit;\n}\n.fx-view-list,\n.fx-view-tree {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.fx-view-list__item,\n.fx-view-tree__node {\n width: 100%;\n text-align: left;\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border: 0;\n border-radius: var(--fx-radius-control);\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n.fx-view-list__item:hover,\n.fx-view-tree__node:hover {\n background: var(--fx-color-surface-hover);\n}\n.fx-view-list__item--selected,\n.fx-view-tree__node--selected {\n background: var(--fx-color-selection-bg);\n outline: var(--fx-border-width) solid var(--fx-color-selection-indicator);\n}\n.fx-view-list__item {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--fx-ref-space-2);\n}\n.fx-view-list__label,\n.fx-view-tree__label {\n font-size: var(--fx-type-compact-font-size);\n line-height: var(--fx-type-compact-line-height);\n}\n.fx-view-list__meta {\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n color: var(--fx-color-text-muted);\n}\n.fx-view-selection-summary {\n display: flex;\n flex-wrap: wrap;\n gap: var(--fx-ref-space-8);\n margin: 0 0 var(--fx-ref-space-8);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n font-size: var(--fx-type-caption-font-size);\n line-height: var(--fx-type-caption-line-height);\n}\n.fx-view-selection-summary__kind {\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--fx-color-text-muted);\n}\n.fx-view-selection-summary__label {\n color: var(--fx-color-text-primary);\n}\n.fx-view-muted {\n color: var(--fx-color-text-secondary);\n font-size: var(--fx-type-ui-font-size);\n line-height: var(--fx-type-ui-line-height);\n}\n.fx-view-json {\n margin: 0;\n padding: var(--fx-ref-space-8);\n font: var(--fx-type-code-font-weight) var(--fx-type-code-font-size) / var(--fx-type-code-line-height) var(--fx-type-code-font-family);\n overflow: auto;\n max-height: 40vh;\n background: var(--fx-color-surface-inset);\n border-radius: var(--fx-radius-control);\n}\n.fx-view-content-browser-host {\n display: flex;\n flex-direction: column;\n min-height: 0;\n flex: 1;\n}\n.fx-view-content-browser-ui {\n flex: 1;\n overflow: auto;\n}\n.fx-view-content-browser-presentation {\n flex: 1;\n min-height: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-24));\n position: relative;\n}\n.fx-view-dockview .dv-render-overlay:has(.fx-view-viewport-surface) {\n transform: none;\n will-change: auto;\n}\n.fx-view-viewport-surface,\n.fx-view-viewport-surface [data-forgeax-view-workspace=root],\n.fx-view-viewport-surface [data-forgeax-view-workspace=workbench],\n.fx-view-viewport-surface [data-forgeax-view-workspace=preview],\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 auto;\n}\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] {\n position: relative;\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: minmax(0, 1fr);\n overflow: hidden;\n}\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] #app-shell,\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] #app {\n width: 100% !important;\n height: 100% !important;\n max-width: 100%;\n max-height: 100%;\n display: block;\n transform: none;\n}\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] #app-shell {\n position: relative;\n}\n#forgeax-fatal {\n display: none !important;\n}\n.fx-engine-fatal-banner {\n position: absolute;\n top: var(--fx-ref-space-12);\n left: 50%;\n z-index: var(--fx-layer-toast);\n box-sizing: border-box;\n display: flex;\n width: min(720px, calc(100% - var(--fx-ref-space-24)));\n max-height: 40%;\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n overflow: hidden;\n transform: translateX(-50%);\n align-items: flex-start;\n gap: var(--fx-space-control);\n border: var(--fx-border-width) solid var(--fx-color-status-error-fg);\n border-radius: var(--fx-radius-popover);\n background: var(--fx-color-status-error-bg);\n color: var(--fx-color-status-error-fg);\n box-shadow: var(--fx-shadow-floating);\n pointer-events: auto;\n}\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] > .fx-engine-fatal-banner {\n grid-area: 1 / 1;\n}\n.fx-engine-fatal-banner[hidden] {\n display: none;\n}\n.fx-engine-fatal-banner__message {\n margin: 0;\n flex: 1;\n min-width: 0;\n max-height: 100%;\n overflow: auto;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n font: var(--fx-type-code-font-weight) var(--fx-type-code-font-size)/var(--fx-type-code-line-height) var(--fx-type-code-font-family);\n}\n.fx-engine-fatal-banner__actions {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n gap: var(--fx-ref-space-4);\n}\n';
20749
- if (typeof document !== "undefined" && !document.querySelector('style[data-forgeax-css="e0021cc6d7c58f3d225fa287f1f1789bf6ca8aa82f86a0bf47a3c40f838f5da3"]')) {
20827
+ var css3 = '/* packages/viewer/src/styles.css */\n:root {\n font-family: var(--fx-type-ui-font-family);\n font-size: var(--fx-type-ui-font-size);\n line-height: var(--fx-type-ui-line-height);\n}\nhtml,\nbody {\n margin: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n background: var(--fx-color-surface-canvas);\n color: var(--fx-color-text-primary);\n}\n#root {\n position: relative;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n.fx-view-root.fx-ui {\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n --fx-view-shell-chrome-height: calc(var(--fx-component-editor-row-height) + var(--fx-component-navigation-row-height));\n --fx-view-header-band-height: var(--fx-component-editor-row-height);\n --fx-view-unconfigured-offset: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-8) - var(--fx-ref-space-6));\n}\n.fx-view-project-open {\n position: absolute;\n inset: var(--fx-view-shell-chrome-height) 0 0;\n z-index: 40;\n height: fit-content;\n}\n.fx-view-header__recovery-feedback {\n width: 100%;\n min-width: 0;\n padding: 0 var(--fx-ref-space-10);\n align-items: center;\n border-radius: var(--fx-radius-control);\n}\n.fx-view-header__recovery-feedback .fx-feedback__body {\n display: flex;\n flex-direction: column;\n gap: 0;\n min-width: 0;\n}\n.fx-view-header__recovery-feedback .fx-feedback__body strong {\n font: var(--fx-type-compact-font-weight) var(--fx-type-compact-font-size) / var(--fx-type-compact-line-height) var(--fx-type-compact-font-family);\n}\n.fx-view-header__connection-status {\n position: relative;\n display: inline-flex;\n flex-shrink: 0;\n flex-direction: column;\n align-items: flex-end;\n}\n.fx-view-connection-state {\n position: absolute;\n top: var(--fx-view-shell-chrome-height);\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 40;\n display: grid;\n place-items: center;\n overflow: auto;\n padding: var(--fx-space-section);\n background: var(--fx-color-surface-canvas);\n box-sizing: border-box;\n}\n.fx-view-connection-state > .fx-empty {\n width: min(100%, calc(var(--fx-component-panel-chat-min-width) + var(--fx-ref-space-48) + var(--fx-ref-space-32)));\n min-height: calc(var(--fx-ref-space-48) * 5 + var(--fx-ref-space-16) + var(--fx-ref-space-4));\n border: var(--fx-border-width) solid var(--fx-color-border-subtle);\n border-radius: var(--fx-radius-card);\n background: var(--fx-color-surface-sidebar);\n box-shadow: var(--fx-shadow-card);\n box-sizing: border-box;\n}\n.fx-view-connection-state__icon {\n width: var(--fx-component-control-height-default);\n height: var(--fx-component-control-height-default);\n color: var(--fx-color-status-error-fg);\n stroke-width: 1.5;\n}\n.fx-view-connection-state__description {\n display: grid;\n gap: var(--fx-ref-space-8);\n}\n.fx-view-connection-state__command {\n padding: var(--fx-border-width) var(--fx-ref-space-4);\n border-radius: var(--fx-ref-radius-4);\n background: var(--fx-color-surface-inset);\n color: var(--fx-color-text-primary);\n font-family: var(--fx-type-code-font-family);\n font-size: inherit;\n white-space: nowrap;\n}\n.fx-view-connection-state__reason {\n display: block;\n max-width: var(--fx-component-conversation-max-width);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-radius: var(--fx-ref-radius-4);\n background: var(--fx-color-surface-inset);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-ref-font-size-12);\n overflow-wrap: anywhere;\n}\n.fx-view-root > .fx-view-app {\n flex: 1 1 auto;\n min-height: 0;\n}\n.fx-view-app {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.fx-view-app > .fx-page-tab-strip {\n flex: 0 0 auto;\n}\n.fx-view-header {\n position: relative;\n z-index: 20;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 0 0 var(--fx-view-header-band-height);\n height: var(--fx-view-header-band-height);\n padding: 0 var(--fx-ref-space-12);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n background: var(--fx-color-surface-sidebar);\n box-sizing: border-box;\n user-select: none;\n}\n.fx-view-brand {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n min-width: calc(var(--fx-component-panel-config-min-width) - var(--fx-ref-space-48) - var(--fx-ref-space-8));\n color: var(--fx-color-text-primary);\n}\n.fx-view-brand strong {\n font-weight: var(--fx-ref-font-weight-600);\n}\n.fx-view-header__status-slot {\n display: inline-flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n width: var(--fx-component-control-height-compact);\n height: var(--fx-component-control-height-compact);\n}\n.fx-view-header__status-dot {\n width: var(--fx-ref-space-6);\n height: var(--fx-ref-space-6);\n border-radius: var(--fx-radius-pill);\n background: var(--fx-color-status-success-fg);\n}\n.fx-view-header__status-dot--connected {\n background: var(--fx-color-status-success-fg);\n}\n.fx-view-header__status-dot--connecting {\n background: var(--fx-color-status-warning-fg);\n animation: fx-view-host-status-pulse 1.4s ease-in-out infinite;\n}\n.fx-view-header__status-dot--failed {\n background: var(--fx-color-status-error-fg);\n}\n@keyframes fx-view-host-status-pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.45;\n }\n}\n.fx-view-header__status-slot:focus-visible {\n outline: var(--fx-border-width) solid var(--fx-color-border-focus);\n outline-offset: var(--fx-ref-space-2);\n border-radius: var(--fx-radius-control);\n}\n.fx-view-unconfigured {\n position: absolute;\n right: var(--fx-view-unconfigured-offset);\n padding: var(--fx-ref-space-2) var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--fx-color-status-warning-fg);\n border-radius: var(--fx-ref-radius-4);\n background: var(--fx-color-status-warning-bg);\n color: var(--fx-color-status-warning-fg);\n font-family: var(--fx-type-code-font-family);\n font-size: var(--fx-ref-font-size-12);\n line-height: var(--fx-type-caption-line-height);\n letter-spacing: var(--fx-type-caption-letter-spacing);\n}\n.fx-view-header__prefs {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-4);\n}\n.fx-locale-trigger {\n min-width: var(--fx-ref-space-16);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size)/ var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n letter-spacing: 0.04em;\n}\n.fx-view-main-col {\n flex: 1;\n position: relative;\n display: flex;\n flex-direction: column;\n min-height: 0;\n min-width: 0;\n overflow: hidden;\n}\n.fx-view-project-restoring {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--fx-ref-space-4);\n padding: var(--fx-ref-space-8);\n text-align: center;\n}\n.fx-view-workspace-row {\n position: absolute;\n inset: 0;\n display: flex;\n min-height: 0;\n width: 100%;\n overflow: hidden;\n background: var(--fx-color-surface-canvas);\n visibility: hidden;\n pointer-events: none;\n}\n.fx-view-workspace-row.is-active {\n visibility: visible;\n pointer-events: auto;\n}\n.fx-view-workspace-row[hidden] {\n display: none;\n}\n.fx-view-page-surface {\n flex: 1;\n display: grid;\n align-content: start;\n gap: var(--fx-ref-space-8);\n padding: var(--fx-space-section);\n min-height: 0;\n overflow: auto;\n}\n.fx-view-workbench {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n.fx-view-dockview-host {\n position: relative;\n flex: 1;\n min-width: 0;\n min-height: 0;\n --fx-edge-drawer-z: 1000;\n}\n.fx-view-dockview-host,\n.fx-view-dockview-host .dv-shell.dockview-theme-abyss {\n --fx-dock-container-background: var(--fx-color-surface-canvas);\n --fx-dock-panel-background: var(--fx-color-surface-sidebar);\n --dv-background-color: var(--fx-dock-container-background);\n --dv-group-view-background-color: var(--fx-dock-panel-background);\n --dv-tabs-and-actions-container-background-color: var(--fx-color-surface-inset);\n --dv-activegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-activegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-inset);\n --dv-inactivegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-raised);\n --dv-activegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-activegroup-hiddenpanel-tab-color: var(--fx-color-text-secondary);\n --dv-inactivegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-inactivegroup-hiddenpanel-tab-color: var(--fx-color-text-muted);\n --dv-tab-divider-color: var(--fx-color-border-subtle);\n --dv-separator-border: var(--fx-color-border-subtle);\n --dv-active-sash-color: transparent;\n --dv-paneview-active-outline-color: var(--fx-color-brand-accent);\n --dv-drag-over-background-color: var(--fx-color-brand-soft);\n --dv-drag-over-border-color: var(--fx-color-brand-accent);\n --dv-floating-border: none;\n --dv-floating-group-border: none;\n --dv-context-menu-background-color: var(--fx-color-surface-raised);\n --dv-context-menu-color: var(--fx-color-text-secondary);\n --dv-color-abyss-dark: var(--fx-color-surface-sidebar);\n --dv-color-abyss: var(--fx-color-surface-inset);\n --dv-color-abyss-light: var(--fx-color-surface-raised);\n --dv-color-abyss-lighter: var(--fx-color-surface-raised);\n --dv-color-abyss-accent: var(--fx-color-brand-accent);\n}\n.fx-view-workbench .dv-groupview-edge {\n --fx-dock-panel-background: var(--fx-color-surface-sidebar);\n --dv-color-abyss-dark: var(--fx-color-surface-sidebar);\n --dv-color-abyss: var(--fx-color-surface-inset);\n --dv-color-abyss-light: var(--fx-color-surface-inset);\n --dv-color-abyss-lighter: var(--fx-color-surface-raised);\n --dv-color-abyss-accent: var(--fx-color-brand-accent);\n --dv-group-view-background-color: var(--fx-dock-panel-background);\n --dv-tabs-and-actions-container-background-color: var(--fx-color-surface-inset);\n --dv-activegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-activegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-inset);\n --dv-inactivegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-raised);\n --dv-activegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-activegroup-hiddenpanel-tab-color: var(--fx-color-text-secondary);\n --dv-inactivegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-inactivegroup-hiddenpanel-tab-color: var(--fx-color-text-muted);\n --dv-tab-divider-color: var(--fx-color-border-subtle);\n --dv-separator-border: var(--fx-color-border-subtle);\n --dv-context-menu-background-color: var(--fx-color-surface-raised);\n --dv-context-menu-color: var(--fx-color-text-secondary);\n}\n.fx-edge-drawer-portal-host {\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 50;\n --fx-edge-drawer-z: 1000;\n --fx-dock-panel-background: var(--fx-color-surface-sidebar);\n --dv-color-abyss-dark: var(--fx-color-surface-sidebar);\n --dv-color-abyss: var(--fx-color-surface-inset);\n --dv-color-abyss-light: var(--fx-color-surface-inset);\n --dv-color-abyss-lighter: var(--fx-color-surface-raised);\n --dv-color-abyss-accent: var(--fx-color-brand-accent);\n --dv-group-view-background-color: var(--fx-dock-panel-background);\n --dv-tabs-and-actions-container-background-color: var(--fx-color-surface-inset);\n --dv-activegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-activegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-inset);\n --dv-inactivegroup-visiblepanel-tab-background-color: var(--fx-dock-panel-background);\n --dv-inactivegroup-hiddenpanel-tab-background-color: var(--fx-color-surface-raised);\n --dv-activegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-activegroup-hiddenpanel-tab-color: var(--fx-color-text-secondary);\n --dv-inactivegroup-visiblepanel-tab-color: var(--fx-color-text-primary);\n --dv-inactivegroup-hiddenpanel-tab-color: var(--fx-color-text-muted);\n --dv-tab-divider-color: var(--fx-color-border-subtle);\n --dv-separator-border: var(--fx-color-border-subtle);\n --dv-context-menu-background-color: var(--fx-color-surface-raised);\n --dv-context-menu-color: var(--fx-color-text-secondary);\n}\n.fx-view-dockview {\n width: 100%;\n height: 100%;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview {\n --dv-separator-border: transparent;\n background-color: var(--fx-dock-container-background, var(--fx-color-surface-canvas));\n}\n.fx-view-dockview-host .dv-view.fx-bottom-edge-spanning {\n position: fixed !important;\n left: var(--fx-bottom-edge-left) !important;\n top: auto !important;\n bottom: var(--fx-bottom-edge-bottom) !important;\n width: var(--fx-bottom-edge-width) !important;\n height: var(--fx-bottom-edge-height) !important;\n z-index: 1001;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-groupview:not(.dv-groupview-edge),\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .groupview:not(.groupview-edge) {\n border: 0 !important;\n outline: 0;\n box-shadow: none;\n}\n.fx-view-dockview-host .dv-shell > .dv-split-view-container.dv-separator-border > .dv-view-container > .dv-view:not(:first-child)::before,\n.fx-view-dockview-host .dv-shell-middle-column > .dv-split-view-container.dv-separator-border > .dv-view-container > .dv-view:not(:first-child)::before {\n display: none;\n}\n.fx-view-dockview .dv-tabs-and-actions-container {\n height: calc(var(--fx-component-navigation-row-height) - var(--fx-ref-space-6));\n min-height: calc(var(--fx-component-navigation-row-height) - var(--fx-ref-space-6));\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.fx-view-dockview .dv-tab {\n border-radius: var(--fx-ref-radius-4) var(--fx-ref-radius-4) 0 0 !important;\n font-size: var(--fx-ref-font-size-12);\n letter-spacing: var(--fx-type-caption-letter-spacing);\n}\n.fx-view-dockview .dv-groupview:not(.dv-groupview-edge) .fx-dock-tab {\n display: flex;\n align-items: center;\n min-width: 0;\n gap: var(--fx-ref-space-6);\n}\n.fx-view-dockview .dv-groupview:not(.dv-groupview-edge) .fx-dock-tab .dv-default-tab-content {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n color: inherit;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.fx-view-dockview .fx-dock-tab-icon {\n flex: 0 0 auto;\n color: var(--fx-color-text-muted);\n}\n.fx-view-dockview .dv-tab.dv-active-tab .fx-dock-tab-icon {\n color: var(--fx-color-text-secondary);\n}\n.fx-view-dockview .fx-dock-tab .dv-default-tab-action {\n display: grid;\n place-items: center;\n width: calc(var(--fx-ref-space-16) + var(--fx-ref-space-2));\n height: calc(var(--fx-ref-space-16) + var(--fx-ref-space-2));\n min-height: calc(var(--fx-ref-space-16) + var(--fx-ref-space-2));\n margin-left: var(--fx-ref-space-2);\n padding: 0;\n border: 0;\n border-radius: var(--fx-ref-radius-4);\n color: var(--fx-color-text-muted);\n}\n.fx-view-dockview .fx-dock-tab .dv-default-tab-action:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.fx-view-dockview .fx-dock-tab .dv-default-tab-action.fx-edge-pin--on {\n color: var(--fx-color-brand-accent);\n}\n.fx-view-dockview-host .dv-tab:focus-within::after,\n.fx-view-dockview-host .dv-tab:focus::after {\n content: none;\n}\n.fx-view-dockview-host .dv-groupview.dv-active-group:not(.dv-groupview-edge) > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab,\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n position: relative;\n}\n.fx-view-dockview-host .dv-groupview.dv-active-group:not(.dv-groupview-edge) > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::before,\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open.dv-active-group > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab::before {\n content: "";\n position: absolute;\n pointer-events: none;\n z-index: 2;\n background:\n linear-gradient(\n 90deg,\n transparent 0%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 22%,\n var(--fx-color-brand-accent) 50%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 78%,\n transparent 100%);\n left: 0;\n right: 0;\n top: 1px;\n height: 1px;\n width: auto;\n}\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open.dv-active-group.dv-groupview-header-left > .dv-tabs-and-actions-container .dv-tabs-container.dv-tabs-container-vertical > .dv-tab.dv-active-tab::before {\n top: 0;\n bottom: 0;\n left: 0;\n right: auto;\n width: 1px;\n height: auto;\n background:\n linear-gradient(\n 180deg,\n transparent 0%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 22%,\n var(--fx-color-brand-accent) 50%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 78%,\n transparent 100%);\n}\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open.dv-active-group.dv-groupview-header-right > .dv-tabs-and-actions-container .dv-tabs-container.dv-tabs-container-vertical > .dv-tab.dv-active-tab::before {\n top: 0;\n bottom: 0;\n right: 0;\n left: auto;\n width: 1px;\n height: auto;\n background:\n linear-gradient(\n 180deg,\n transparent 0%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 22%,\n var(--fx-color-brand-accent) 50%,\n color-mix(in srgb, var(--fx-color-brand-accent) 55%, transparent) 78%,\n transparent 100%);\n}\n.fx-view-workbench .dv-groupview-edge .dv-tabs-container.dv-tabs-container-vertical {\n text-orientation: sideways;\n padding-top: var(--fx-ref-space-6);\n}\n.fx-view-workbench .dv-groupview-edge .dv-default-tab .dv-default-tab-content {\n margin: 0;\n padding: var(--fx-ref-space-2) 0;\n}\n.fx-view-workbench .dv-groupview-edge.dv-active-group:not(.fx-edge-drawer-open) > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-activegroup-hiddenpanel-tab-background-color);\n color: var(--dv-activegroup-hiddenpanel-tab-color);\n}\n.fx-view-workbench .dv-groupview-edge.dv-inactive-group:not(.fx-edge-drawer-open) > .dv-tabs-and-actions-container .dv-tabs-container > .dv-tab.dv-active-tab {\n background-color: var(--dv-inactivegroup-hiddenpanel-tab-background-color);\n color: var(--dv-inactivegroup-hiddenpanel-tab-color);\n}\n.fx-view-workbench .dv-groupview-edge.fx-edge-empty {\n visibility: hidden;\n pointer-events: none;\n}\n.fx-view-workbench .dv-groupview-edge .dv-tabs-container.dv-tabs-container-vertical > .dv-tab {\n min-height: 104px;\n padding: var(--fx-ref-space-10) var(--fx-ref-space-6);\n box-sizing: border-box;\n}\n.fx-view-workbench .dv-groupview-edge .dv-tabs-container:not(.dv-tabs-container-vertical) > .dv-tab {\n min-width: 104px;\n padding: var(--fx-ref-space-6) var(--fx-ref-space-12);\n box-sizing: border-box;\n}\n.fx-view-workbench .dv-groupview-edge .dv-default-tab {\n padding: var(--fx-ref-space-4) var(--fx-ref-space-2);\n gap: var(--fx-ref-space-6);\n box-sizing: border-box;\n}\n.fx-view-workbench .dv-groupview-edge .dv-tabs-container-vertical .fx-dock-tab-icon {\n writing-mode: horizontal-tb;\n margin-right: 0;\n margin-bottom: var(--fx-ref-space-6);\n}\n.fx-view-workbench .dv-groupview-edge .dv-default-tab-action.fx-edge-pin {\n opacity: 0;\n}\n.fx-view-workbench .dv-groupview-edge .dv-tab:hover .dv-default-tab-action.fx-edge-pin,\n.fx-view-workbench .dv-groupview-edge.fx-edge-drawer-open .dv-tab.dv-active-tab .dv-default-tab-action.fx-edge-pin {\n opacity: 1;\n}\n.fx-edge-drawer-portal-host > .fx-edge-drawer-grip {\n pointer-events: auto;\n}\n.fx-view-dockview-host .dv-groupview-edge.fx-edge-drawer-open {\n position: relative;\n z-index: var(--fx-edge-drawer-z, 1000) !important;\n}\n.fx-view-dockview-host .dv-popover-anchor > * {\n z-index: calc(var(--fx-edge-drawer-z, 1000) + 1) !important;\n}\n.fx-view-dockview-host .dv-groupview-edge.fx-edge-drawer-open > .dv-content-container,\n.fx-edge-drawer-portal-host > .dv-content-container {\n --fx-edge-drawer-inset: var(--fx-ref-space-6);\n display: block !important;\n position: fixed;\n pointer-events: auto;\n width: var(--fx-edge-drawer-width, 300px);\n height: calc(var(--fx-edge-strip-height) - 2 * var(--fx-edge-drawer-inset));\n top: calc(var(--fx-edge-strip-top) + var(--fx-edge-drawer-inset));\n z-index: 60;\n box-sizing: border-box;\n background: var(--dv-group-view-background-color, var(--fx-color-surface-sidebar));\n color: var(--fx-color-text-primary);\n border: var(--fx-border-width) solid var(--dv-separator-border, var(--fx-color-border-subtle));\n border-radius: var(--fx-ref-radius-6);\n overflow: hidden;\n}\n.fx-view-dockview-host .dv-groupview-edge.dv-groupview-header-left.fx-edge-drawer-open > .dv-content-container,\n.fx-edge-drawer-portal-host > .dv-content-container.dv-groupview-header-left {\n left: calc(var(--fx-edge-drawer-left) - 3px);\n width: calc(var(--fx-edge-drawer-width, 300px) + 3px);\n box-shadow: 4px 0 12px color-mix(in srgb, var(--fx-color-scrim) 30%, transparent), 1px 0 3px color-mix(in srgb, var(--fx-color-scrim) 22%, transparent);\n}\n.fx-view-dockview-host .dv-groupview-edge.dv-groupview-header-right.fx-edge-drawer-open > .dv-content-container,\n.fx-edge-drawer-portal-host > .dv-content-container.dv-groupview-header-right {\n right: calc(var(--fx-edge-drawer-right) - 3px);\n width: calc(var(--fx-edge-drawer-width, 300px) + 3px);\n box-shadow: -4px 0 12px color-mix(in srgb, var(--fx-color-scrim) 30%, transparent), -1px 0 3px color-mix(in srgb, var(--fx-color-scrim) 22%, transparent);\n}\n.fx-view-dockview-host .dv-groupview-edge.dv-groupview-header-bottom.fx-edge-drawer-open > .dv-content-container,\n.fx-edge-drawer-portal-host > .dv-content-container.dv-groupview-header-bottom {\n top: auto;\n left: calc(var(--fx-edge-strip-left) + var(--fx-edge-drawer-inset));\n width: calc(var(--fx-edge-strip-width) - 2 * var(--fx-edge-drawer-inset));\n height: calc(var(--fx-edge-drawer-height, 300px) + 3px);\n bottom: calc(var(--fx-edge-drawer-bottom) - 3px);\n box-shadow: 0 -4px 12px color-mix(in srgb, var(--fx-color-scrim) 30%, transparent), 0 -1px 3px color-mix(in srgb, var(--fx-color-scrim) 22%, transparent);\n}\n.fx-ue-live-host .fx-ue-lifted,\n.fx-ue-live-host .dv-resize-container.fx-ue-lifted {\n box-shadow: none !important;\n}\n.fx-edge-drawer-grip {\n z-index: 61;\n background: transparent;\n transition: background 0.1s ease;\n}\n.fx-edge-drawer-grip.fx-edge-drawer-grip--dragging {\n background: var(--fx-color-brand-accent);\n}\n.fx-view-dockview-host .dv-groupview[data-fx-dock-title-state=hidden] > .dv-tabs-and-actions-container.dv-single-tab {\n height: 0 !important;\n min-height: 0 !important;\n max-height: 0 !important;\n overflow: hidden !important;\n opacity: 0;\n border: 0;\n pointer-events: none;\n}\n.fx-view-dockview-host .fx-dock-title-restore,\n.fx-edge-drawer-portal-host .fx-dock-title-restore {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 3;\n align-items: flex-start;\n justify-content: flex-start;\n width: var(--fx-component-choice-size) !important;\n height: calc(var(--fx-ref-space-16) + var(--fx-ref-space-4)) !important;\n margin: 0;\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--fx-color-text-muted);\n cursor: pointer;\n}\n.fx-view-dockview-host .fx-dock-title-restore::before,\n.fx-edge-drawer-portal-host .fx-dock-title-restore::before {\n content: "";\n width: var(--fx-ref-space-12);\n height: var(--fx-ref-space-12);\n align-self: flex-start;\n background: var(--fx-color-text-muted);\n clip-path: polygon(0 0, 100% 0, 0 100%);\n transition: background var(--fx-motion-hover) var(--fx-motion-ease);\n}\n.fx-view-dockview-host .fx-dock-title-restore:hover::before,\n.fx-view-dockview-host .fx-dock-title-restore:focus-visible::before,\n.fx-edge-drawer-portal-host .fx-dock-title-restore:hover::before,\n.fx-edge-drawer-portal-host .fx-dock-title-restore:focus-visible::before {\n background: var(--fx-color-brand-accent);\n}\n.fx-view-dockview-host .fx-dock-title-restore:focus-visible,\n.fx-edge-drawer-portal-host .fx-dock-title-restore:focus-visible {\n outline: none;\n}\n.fx-view-dockview-host .dv-groupview[data-fx-dock-title-state=hidden] .fx-dock-title-restore,\n.fx-edge-drawer-portal-host > .dv-content-container[data-fx-dock-title-state=hidden] .fx-dock-title-restore {\n display: inline-flex !important;\n}\n.fx-view-dockview-host .dv-context-menu {\n min-width: calc(var(--fx-component-menu-min-width) - var(--fx-ref-space-48));\n padding: var(--fx-ref-space-4) !important;\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-radius-popover);\n background: var(--dv-context-menu-background-color, var(--fx-color-surface-raised)) !important;\n color: var(--dv-context-menu-color, var(--fx-color-text-secondary)) !important;\n box-shadow: var(--fx-shadow-floating);\n}\n.fx-view-dockview-host .dv-context-menu-item {\n min-height: var(--fx-component-control-height-compact);\n gap: var(--fx-ref-space-8);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-radius: var(--fx-ref-radius-4);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n color: var(--dv-context-menu-color, var(--fx-color-text-secondary));\n}\n.fx-view-dockview-host .dv-context-menu-item .dv-svg,\n.fx-view-dockview-host .dv-context-menu-item svg {\n width: var(--fx-ref-space-16);\n height: var(--fx-ref-space-16);\n flex-shrink: 0;\n}\n.fx-view-dockview-host .dv-context-menu-item:not(.dv-context-menu-item--disabled):hover {\n background: var(--fx-color-action-primary-bg) !important;\n color: var(--fx-color-action-primary-fg) !important;\n}\n.fx-view-dockview-host .dv-context-menu-item:not(.dv-context-menu-item--disabled):hover .dv-svg,\n.fx-view-dockview-host .dv-context-menu-item:not(.dv-context-menu-item--disabled):hover svg {\n color: var(--fx-color-action-primary-fg);\n fill: currentcolor;\n}\n.fx-view-dockview-host .dv-context-menu-item.dv-context-menu-item--disabled {\n opacity: 0.5;\n}\n.fx-view-dockview-host .dv-context-menu-separator {\n height: var(--fx-border-width);\n margin: var(--fx-ref-space-4);\n background: var(--fx-color-border-subtle);\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash {\n background: transparent !important;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash::after {\n content: "";\n position: absolute;\n pointer-events: none;\n opacity: 0;\n background: var(--fx-color-brand-accent);\n transition: opacity 100ms ease;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash::before {\n content: "";\n position: absolute;\n inset: 0 -1px;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash::before {\n content: "";\n position: absolute;\n inset: -1px 0;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-split-view-container.dv-horizontal > .dv-sash-container > .dv-sash::after {\n inset: 0 -1px;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-split-view-container.dv-vertical > .dv-sash-container > .dv-sash::after {\n inset: -1px 0;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash:hover::after,\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash:active::after,\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-sash.dv-sash-active::after {\n opacity: 1;\n}\n.fx-view-dockview-host .fx-view-dockview .dv-dockview .dv-resize-container {\n border-radius: var(--fx-ref-radius-8);\n box-shadow: var(--fx-shadow-floating);\n overflow: hidden;\n}\n.fx-view-dock-panel,\n.fx-view-slot-mount,\n.fx-view-slot-mount-host {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 auto;\n}\n.fx-view-dock-panel {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n background: var(--fx-color-surface-sidebar);\n}\n.fx-view-page-mount {\n position: absolute;\n inset: 0;\n z-index: 0;\n min-height: 0;\n overflow: hidden;\n background: var(--fx-color-surface-inset);\n pointer-events: none;\n}\n.fx-view-page-mount.is-active {\n z-index: 2;\n pointer-events: auto;\n}\n.fx-view-slot-mount-host > * {\n flex: 1 1 0%;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n.fx-view-page-mount > .fx-view-display-surface,\n.fx-view-slot-mount-host > .fx-view-viewport-surface {\n width: 100%;\n height: 100%;\n min-height: 0;\n flex: 1 1 auto;\n border: 0;\n background: var(--fx-color-surface-inset);\n}\n.fx-view-page-mount > .fx-view-display-surface {\n visibility: visible !important;\n}\n.fx-view-slot-chrome {\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.fx-view-slot-chrome__title {\n margin: 0;\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n text-transform: uppercase;\n letter-spacing: var(--fx-type-caption-letter-spacing);\n color: var(--fx-color-text-muted);\n}\n.fx-view-slot-chrome__mount {\n min-height: var(--fx-ref-space-32);\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.fx-view-zone--left .fx-view-slot-chrome,\n.fx-view-zone--right .fx-view-slot-chrome {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.fx-view-zone--left .fx-view-slot-chrome__mount,\n.fx-view-zone--right .fx-view-slot-chrome__mount {\n flex: 1;\n min-height: calc(var(--fx-ref-space-48) * 4);\n}\n.fx-view-panel__header {\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.fx-view-panel__title {\n margin: 0;\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-caption-font-family);\n text-transform: uppercase;\n letter-spacing: var(--fx-type-caption-letter-spacing);\n}\n.fx-view-panel__body {\n padding: var(--fx-ref-space-8);\n}\n.fx-view-input {\n width: 100%;\n box-sizing: border-box;\n margin-bottom: var(--fx-ref-space-8);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border: var(--fx-border-width) solid var(--fx-color-border-control);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n color: inherit;\n}\n.fx-view-list,\n.fx-view-tree {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n.fx-view-list__item,\n.fx-view-tree__node {\n width: 100%;\n text-align: left;\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border: 0;\n border-radius: var(--fx-radius-control);\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n.fx-view-list__item:hover,\n.fx-view-tree__node:hover {\n background: var(--fx-color-surface-hover);\n}\n.fx-view-list__item--selected,\n.fx-view-tree__node--selected {\n background: var(--fx-color-selection-bg);\n outline: var(--fx-border-width) solid var(--fx-color-selection-indicator);\n}\n.fx-view-list__item {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--fx-ref-space-2);\n}\n.fx-view-list__label,\n.fx-view-tree__label {\n font-size: var(--fx-type-compact-font-size);\n line-height: var(--fx-type-compact-line-height);\n}\n.fx-view-list__meta {\n font: var(--fx-type-caption-font-weight) var(--fx-type-caption-font-size) / var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n color: var(--fx-color-text-muted);\n}\n.fx-view-selection-summary {\n display: flex;\n flex-wrap: wrap;\n gap: var(--fx-ref-space-8);\n margin: 0 0 var(--fx-ref-space-8);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n font-size: var(--fx-type-caption-font-size);\n line-height: var(--fx-type-caption-line-height);\n}\n.fx-view-selection-summary__kind {\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--fx-color-text-muted);\n}\n.fx-view-selection-summary__label {\n color: var(--fx-color-text-primary);\n}\n.fx-view-muted {\n color: var(--fx-color-text-secondary);\n font-size: var(--fx-type-ui-font-size);\n line-height: var(--fx-type-ui-line-height);\n}\n.fx-view-json {\n margin: 0;\n padding: var(--fx-ref-space-8);\n font: var(--fx-type-code-font-weight) var(--fx-type-code-font-size) / var(--fx-type-code-line-height) var(--fx-type-code-font-family);\n overflow: auto;\n max-height: 40vh;\n background: var(--fx-color-surface-inset);\n border-radius: var(--fx-radius-control);\n}\n.fx-view-content-browser-host {\n display: flex;\n flex-direction: column;\n min-height: 0;\n flex: 1;\n}\n.fx-view-content-browser-ui {\n flex: 1;\n overflow: auto;\n}\n.fx-view-content-browser-presentation {\n flex: 1;\n min-height: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-24));\n position: relative;\n}\n.fx-view-dockview .dv-render-overlay:has(.fx-view-viewport-surface) {\n transform: none;\n will-change: auto;\n}\n.fx-view-viewport-surface,\n.fx-view-viewport-surface [data-forgeax-view-workspace=root],\n.fx-view-viewport-surface [data-forgeax-view-workspace=workbench],\n.fx-view-viewport-surface [data-forgeax-view-workspace=preview],\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n flex: 1 1 auto;\n}\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] {\n position: relative;\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n grid-template-rows: minmax(0, 1fr);\n overflow: hidden;\n}\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] #app-shell,\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] #app {\n width: 100% !important;\n height: 100% !important;\n max-width: 100%;\n max-height: 100%;\n display: block;\n transform: none;\n}\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] #app-shell {\n position: relative;\n}\n#forgeax-fatal {\n display: none !important;\n}\n.fx-engine-fatal-banner {\n position: absolute;\n top: var(--fx-ref-space-12);\n left: 50%;\n z-index: var(--fx-layer-toast);\n box-sizing: border-box;\n display: flex;\n width: min(720px, calc(100% - var(--fx-ref-space-24)));\n max-height: 40%;\n padding: var(--fx-ref-space-8) var(--fx-ref-space-12);\n overflow: hidden;\n transform: translateX(-50%);\n align-items: flex-start;\n gap: var(--fx-space-control);\n border: var(--fx-border-width) solid var(--fx-color-status-error-fg);\n border-radius: var(--fx-radius-popover);\n background: var(--fx-color-status-error-bg);\n color: var(--fx-color-status-error-fg);\n box-shadow: var(--fx-shadow-floating);\n pointer-events: auto;\n}\n.fx-view-viewport-surface [data-forgeax-view-workspace=targets] > .fx-engine-fatal-banner {\n grid-area: 1 / 1;\n}\n.fx-engine-fatal-banner[hidden] {\n display: none;\n}\n.fx-engine-fatal-banner__message {\n margin: 0;\n flex: 1;\n min-width: 0;\n max-height: 100%;\n overflow: auto;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n font: var(--fx-type-code-font-weight) var(--fx-type-code-font-size)/var(--fx-type-code-line-height) var(--fx-type-code-font-family);\n}\n.fx-engine-fatal-banner__actions {\n display: flex;\n flex-shrink: 0;\n align-items: center;\n gap: var(--fx-ref-space-4);\n}\n';
20828
+ if (typeof document !== "undefined" && !document.querySelector('style[data-forgeax-css="c0fb89835ea6fd204d3177f4c3e976967d48fae31ad5ab4cadcc827e2415243b"]')) {
20750
20829
  const style = document.createElement("style");
20751
- style.dataset.forgeaxCss = "e0021cc6d7c58f3d225fa287f1f1789bf6ca8aa82f86a0bf47a3c40f838f5da3";
20830
+ style.dataset.forgeaxCss = "c0fb89835ea6fd204d3177f4c3e976967d48fae31ad5ab4cadcc827e2415243b";
20752
20831
  style.textContent = css3;
20753
20832
  document.head.append(style);
20754
20833
  }
@@ -20768,7 +20847,7 @@ if (typeof document !== "undefined" && !document.querySelector('style[data-forge
20768
20847
 
20769
20848
  // ../view-plugins/rhi-debug/ui.tsx
20770
20849
  import { jsx as jsx8 } from "react/jsx-runtime";
20771
- var TapeViewer = lazy(async () => ({ default: (await import("./chunks/App-E3M52XTQ.mjs")).App }));
20850
+ var TapeViewer = lazy(async () => ({ default: (await import("./chunks/App-4XQ5SNNT.mjs")).App }));
20772
20851
  function mountRhiDebugPanel({ mountElement }) {
20773
20852
  mountElement.classList.add("fx-rhi-tool");
20774
20853
  const root = createRoot(mountElement);