@sebastianwessel/isostate 0.4.0 → 0.6.0

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 (89) hide show
  1. package/dist/animation/animation-engine.d.ts +3 -0
  2. package/dist/animation/animation-engine.d.ts.map +1 -1
  3. package/dist/animation/controller.d.ts +36 -2
  4. package/dist/animation/controller.d.ts.map +1 -1
  5. package/dist/assets/software-architecture/IMAGEGEN-PROMPTS.md +66 -0
  6. package/dist/assets/software-architecture/LICENSE +21 -0
  7. package/dist/assets/software-architecture/NOTICE.md +17 -0
  8. package/dist/assets/software-architecture/README.md +105 -0
  9. package/dist/assets/software-architecture/agentic/AGENT-VISUAL-PROMPTS.md +42 -0
  10. package/dist/assets/software-architecture/agentic/HANDOFF-PROMPTS.md +19 -0
  11. package/dist/assets/software-architecture/agentic/PROCESS-VISUAL-PROMPTS.md +109 -0
  12. package/dist/assets/software-architecture/agentic/agents-sprites.png +0 -0
  13. package/dist/assets/software-architecture/agentic/ai-capabilities-sprites.png +0 -0
  14. package/dist/assets/software-architecture/agentic/ai-to-human-handoff.png +0 -0
  15. package/dist/assets/software-architecture/agentic/channels-sprites.png +0 -0
  16. package/dist/assets/software-architecture/agentic/human-to-ai-handoff.png +0 -0
  17. package/dist/assets/software-architecture/agentic/humans-sprites.png +0 -0
  18. package/dist/assets/software-architecture/agentic/infrastructure-sprites.png +0 -0
  19. package/dist/assets/software-architecture/agentic/lifecycle-sprites.png +0 -0
  20. package/dist/assets/software-architecture/agentic/orchestration-sprites.png +0 -0
  21. package/dist/assets/software-architecture/agentic/providers-sprites.png +0 -0
  22. package/dist/assets/software-architecture/agentic/servicenow-sprites.png +0 -0
  23. package/dist/assets/software-architecture/architecture/architecture-sprites.png +0 -0
  24. package/dist/assets/software-architecture/manifest.json +2095 -0
  25. package/dist/assets/software-architecture/workflow/workflow-process-sprites.png +0 -0
  26. package/dist/browser/isostate.runtime.js +4 -4
  27. package/dist/browser/isostate.runtime.js.map +12 -10
  28. package/dist/chunks/errors-2yA81Vfb.js +23 -0
  29. package/dist/chunks/{errors-DyqEkrm5.js.map → errors-2yA81Vfb.js.map} +1 -1
  30. package/dist/chunks/index-WmsNtuaZ.js +1685 -0
  31. package/dist/chunks/index-WmsNtuaZ.js.map +1 -0
  32. package/dist/chunks/rendering-engine-DLaM1XbU.js +1425 -0
  33. package/dist/chunks/rendering-engine-DLaM1XbU.js.map +1 -0
  34. package/dist/chunks/scene-parser-BNXXIAqj.js +3033 -0
  35. package/dist/chunks/scene-parser-BNXXIAqj.js.map +1 -0
  36. package/dist/chunks/sha256-BkgWUdh1.js +123 -0
  37. package/dist/chunks/sha256-BkgWUdh1.js.map +1 -0
  38. package/dist/dsl/browser.js +3 -3
  39. package/dist/dsl/index.js +3 -3
  40. package/dist/dsl/scene-parser.d.ts.map +1 -1
  41. package/dist/dsl/scene-validator.d.ts.map +1 -1
  42. package/dist/dsl/workflow-effects-validation.d.ts +8 -0
  43. package/dist/dsl/workflow-effects-validation.d.ts.map +1 -0
  44. package/dist/editor-support/adapter.d.ts.map +1 -1
  45. package/dist/editor-support/index.js +347 -394
  46. package/dist/editor-support/index.js.map +1 -1
  47. package/dist/index.d.ts +4 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +438 -40
  50. package/dist/index.js.map +1 -1
  51. package/dist/rendering/animation-css.d.ts.map +1 -1
  52. package/dist/rendering/rendering-engine.d.ts +11 -0
  53. package/dist/rendering/rendering-engine.d.ts.map +1 -1
  54. package/dist/rendering/scene-effects.d.ts +15 -0
  55. package/dist/rendering/scene-effects.d.ts.map +1 -0
  56. package/dist/rendering/theme.d.ts +4 -0
  57. package/dist/rendering/theme.d.ts.map +1 -1
  58. package/dist/runtime/diagnostics-overlay.d.ts +29 -0
  59. package/dist/runtime/diagnostics-overlay.d.ts.map +1 -0
  60. package/dist/runtime/export.d.ts +27 -0
  61. package/dist/runtime/export.d.ts.map +1 -0
  62. package/dist/runtime/index.d.ts +1 -0
  63. package/dist/runtime/index.d.ts.map +1 -1
  64. package/dist/runtime/index.js +4 -4
  65. package/dist/runtime/interactivity.d.ts +56 -0
  66. package/dist/runtime/interactivity.d.ts.map +1 -0
  67. package/dist/runtime/mount-scene.d.ts +11 -10
  68. package/dist/runtime/mount-scene.d.ts.map +1 -1
  69. package/dist/types/asset-registry.d.ts +1 -0
  70. package/dist/types/asset-registry.d.ts.map +1 -1
  71. package/dist/types/errors.d.ts.map +1 -1
  72. package/dist/types/index.d.ts +1 -1
  73. package/dist/types/index.d.ts.map +1 -1
  74. package/dist/types/node.d.ts +54 -1
  75. package/dist/types/node.d.ts.map +1 -1
  76. package/dist/types/runtime-bundle.d.ts +35 -0
  77. package/dist/types/runtime-bundle.d.ts.map +1 -1
  78. package/dist/types/scene.d.ts +2 -0
  79. package/dist/types/scene.d.ts.map +1 -1
  80. package/package.json +9 -8
  81. package/dist/chunks/errors-DyqEkrm5.js +0 -29
  82. package/dist/chunks/index-C3qcXbPI.js +0 -1542
  83. package/dist/chunks/index-C3qcXbPI.js.map +0 -1
  84. package/dist/chunks/rendering-engine-BUUV3Qq-.js +0 -1124
  85. package/dist/chunks/rendering-engine-BUUV3Qq-.js.map +0 -1
  86. package/dist/chunks/scene-parser-B9SPDLYs.js +0 -2688
  87. package/dist/chunks/scene-parser-B9SPDLYs.js.map +0 -1
  88. package/dist/chunks/sha256-4JuurR-b.js +0 -69
  89. package/dist/chunks/sha256-4JuurR-b.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rendering-engine-DLaM1XbU.js","sources":["../../src/types/asset-registry.ts","../../src/utils/projection.ts","../../src/rendering/animation-css.ts","../../src/rendering/asset-node.ts","../../src/rendering/scene-effects.ts","../../src/rendering/theme.ts","../../src/rendering/rendering-engine.ts"],"sourcesContent":["import type { AssetCategory, AssetDefinition, AssetRegistry, Theme } from \"./assets.ts\";\n\n// ── Built-in themes ────────────────────────────────────────────────────────\n\nconst BUILTIN_THEMES: Record<string, Record<string, string>> = {\n\tlight: {\n\t\t\"--color-top\": \"#e2e8f0\",\n\t\t\"--color-front\": \"#94a3b8\",\n\t\t\"--color-side\": \"#64748b\",\n\t\t\"--color-back\": \"#475569\",\n\t\t\"--color-leaf\": \"#15803d\",\n\t\t\"--color-trunk\": \"#78350f\",\n\t\t\"--color-accent\": \"#3b82f6\",\n\t},\n\tdark: {\n\t\t\"--color-top\": \"#334155\",\n\t\t\"--color-front\": \"#1e293b\",\n\t\t\"--color-side\": \"#0f172a\",\n\t\t\"--color-back\": \"#020617\",\n\t\t\"--color-leaf\": \"#166534\",\n\t\t\"--color-trunk\": \"#451a03\",\n\t\t\"--color-accent\": \"#60a5fa\",\n\t},\n\tbrand: {\n\t\t\"--color-top\": \"#c7d2fe\",\n\t\t\"--color-front\": \"#818cf8\",\n\t\t\"--color-side\": \"#6366f1\",\n\t\t\"--color-back\": \"#4338ca\",\n\t\t\"--color-leaf\": \"#22c55e\",\n\t\t\"--color-trunk\": \"#854d0e\",\n\t\t\"--color-accent\": \"#f59e0b\",\n\t},\n};\n\n/**\n * Resolve a theme name to its CSS variable map.\n * Returns undefined if the theme is not found.\n */\nexport function resolveTheme(name: string): Record<string, string> | undefined {\n\treturn Object.hasOwn(BUILTIN_THEMES, name) ? BUILTIN_THEMES[name] : undefined;\n}\n\n/**\n * Compose a new theme by extending an existing one with overrides.\n */\nexport function composeTheme(baseName: string, overrides: Record<string, string>): Theme {\n\tconst base = resolveTheme(baseName);\n\tif (!base) {\n\t\treturn { name: baseName, vars: { ...overrides } };\n\t}\n\treturn { name: baseName, vars: { ...base, ...overrides } };\n}\n\n// ── Asset registry implementation ──────────────────────────────────────────\n\n/**\n * Default asset registry implementation.\n * Maps asset ids to definitions and supports category filtering.\n */\nexport class AssetRegistryImpl implements AssetRegistry {\n\tprivate _assets = new Map<string, AssetDefinition>();\n\n\tregister(asset: AssetDefinition): void {\n\t\tthis._assets.set(asset.id, asset);\n\t}\n\n\tget(id: string): AssetDefinition | undefined {\n\t\treturn this._assets.get(id);\n\t}\n\n\tgetAll(category?: AssetCategory): AssetDefinition[] {\n\t\tif (category) {\n\t\t\treturn [...this._assets.values()].filter((a) => a.category === category);\n\t\t}\n\t\treturn [...this._assets.values()];\n\t}\n\n\thas(id: string): boolean {\n\t\treturn this._assets.has(id);\n\t}\n\n\tremove(id: string): void {\n\t\tthis._assets.delete(id);\n\t}\n}\n\n/** Create a registry populated with the given asset definitions. */\nexport function createAssetRegistry(assets: AssetDefinition[] = []): AssetRegistryImpl {\n\tconst registry = new AssetRegistryImpl();\n\tfor (const asset of assets) {\n\t\tregistry.register(asset);\n\t}\n\treturn registry;\n}\n\n/** Create a fresh registry populated with the built-in demo assets. */\nexport function createDefaultRegistry(): AssetRegistryImpl {\n\treturn createAssetRegistry([\n\t\t{\n\t\t\tid: \"iso-platform\",\n\t\t\tcategory: \"infrastructure\",\n\t\t},\n\t\t{\n\t\t\tid: \"iso-server\",\n\t\t\tcategory: \"equipment\",\n\t\t},\n\t\t{\n\t\t\tid: \"iso-database\",\n\t\t\tcategory: \"equipment\",\n\t\t},\n\t\t{\n\t\t\tid: \"iso-connector\",\n\t\t\tcategory: \"decoration\",\n\t\t},\n\t\t{\n\t\t\tid: \"iso-cloud\",\n\t\t\tcategory: \"decoration\",\n\t\t},\n\t]);\n}\n","/** Default cell size in pixels */\nexport const DEFAULT_CELL_SIZE = 64;\n\n/**\n * Calculate raw scene-space coordinates from isometric grid position.\n * Layout is applied separately by subtracting resolved bounds and adding padding.\n */\nexport function projectToRaw(gridX: number, gridY: number, cellSize: number): { rawX: number; rawY: number } {\n\treturn {\n\t\trawX: cellSize * (gridX - gridY) * 0.5,\n\t\trawY: cellSize * (gridX + gridY) * 0.25,\n\t};\n}\n\n/**\n * Calculate screen coordinates from raw isometric projection and resolved bounds.\n */\nexport function projectToScreen(\n\tgridX: number,\n\tgridY: number,\n\tcellSize: number,\n\tboundsMinX = 0,\n\tboundsMinY = 0,\n\tpaddingX = 0,\n\tpaddingY = 0,\n): { screenX: number; screenY: number } {\n\tconst { rawX, rawY } = projectToRaw(gridX, gridY, cellSize);\n\treturn {\n\t\tscreenX: rawX - boundsMinX + paddingX,\n\t\tscreenY: rawY - boundsMinY + paddingY,\n\t};\n}\n\n/** Calculate the screen size for an element based on its grid size. */\nexport function calculateVisualSize(gridSize: number, cellSize: number): number {\n\treturn cellSize * gridSize;\n}\n\n/** Calculate the element transform string for positioning and scaling. */\nexport function calculateTransform(screenX: number, screenY: number, visualSize: number, cellSize: number): string {\n\tconst scale = visualSize / cellSize;\n\treturn `translate(${screenX}px, ${screenY}px) scale(${scale})`;\n}\n","/** Build built-in entry, exit, ambient, and reduced-motion CSS keyframes. */\nexport function buildKeyframeCSS(): string {\n\treturn [\n\t\t\"@keyframes iso-anim-fade-in{from{opacity:0}to{opacity:1}}\",\n\t\t\"@keyframes iso-anim-fade-in-grow{from{opacity:0;scale:.01}to{opacity:1;scale:1}}\",\n\t\t\"@keyframes iso-anim-fall-in{from{opacity:0;translate:0 -40px}to{opacity:1;translate:0 0}}\",\n\t\t\"@keyframes iso-anim-rise-from-ground{from{opacity:0;translate:0 40px}to{opacity:1;translate:0 0}}\",\n\t\t\"@keyframes iso-anim-slide-in-left{from{opacity:0;translate:-60px 0}to{opacity:1;translate:0 0}}\",\n\t\t\"@keyframes iso-anim-slide-in-right{from{opacity:0;translate:60px 0}to{opacity:1;translate:0 0}}\",\n\t\t\"@keyframes iso-anim-flip-in{from{opacity:1;scale:0 1}to{opacity:1;scale:1 1}}\",\n\t\t\"@keyframes iso-anim-fade-out{from{opacity:1}to{opacity:0}}\",\n\t\t\"@keyframes iso-anim-fade-out-shrink{from{opacity:1;scale:1}to{opacity:0;scale:.01}}\",\n\t\t\"@keyframes iso-anim-fall-through-ground{from{opacity:1;translate:0 0}to{opacity:0;translate:0 40px}}\",\n\t\t\"@keyframes iso-anim-rise-away{from{opacity:1;translate:0 0}to{opacity:0;translate:0 -40px}}\",\n\t\t\"@keyframes iso-anim-slide-out-left{from{opacity:1;translate:0 0}to{opacity:0;translate:-60px 0}}\",\n\t\t\"@keyframes iso-anim-slide-out-right{from{opacity:1;translate:0 0}to{opacity:0;translate:60px 0}}\",\n\t\t\"@keyframes iso-anim-flip-out{from{opacity:1;scale:1 1}to{opacity:0;scale:0 1}}\",\n\t\t\"@keyframes iso-anim-pulse{0%,100%{opacity:.7}50%{opacity:1}}\",\n\t\t\"@keyframes iso-anim-float{0%,100%{translate:0 0}50%{translate:0 -6px}}\",\n\t\t\"@keyframes iso-anim-shake{0%,25%,75%,100%{translate:0 0}50%{translate:3px 0}}\",\n\t\t\"@keyframes iso-anim-glow{0%,100%{filter:drop-shadow(0 0 2px rgba(255,255,255,.5))}50%{filter:drop-shadow(0 0 8px rgba(255,255,255,.9))}}\",\n\t\t\"@keyframes iso-anim-spin{from{rotate:0deg}to{rotate:360deg}}\",\n\t\t\"@keyframes iso-anim-blink{0%,49%{opacity:1}50%,100%{opacity:0}}\",\n\t\t\".iso-ambient-pulse{animation:iso-anim-pulse 2s ease-in-out infinite}\",\n\t\t\".iso-ambient-float{animation:iso-anim-float 3s ease-in-out infinite}\",\n\t\t\".iso-ambient-shake{animation:iso-anim-shake 0.5s ease-in-out infinite}\",\n\t\t\".iso-ambient-glow{animation:iso-anim-glow 2s ease-in-out infinite}\",\n\t\t\".iso-ambient-spin{animation:iso-anim-spin 4s linear infinite}\",\n\t\t\".iso-ambient-blink{animation:iso-anim-blink 1.5s step-end infinite}\",\n\t\t\"@keyframes iso-connector-flow-route{from{stroke-dashoffset:0}to{stroke-dashoffset:calc(-1px * var(--iso-flow-distance,20))}}\",\n\t\t\"@keyframes iso-connector-flow-reverse{from{stroke-dashoffset:0}to{stroke-dashoffset:calc(1px * var(--iso-flow-distance,20))}}\",\n\t\t\".iso-connector-pattern-dashed .iso-connector-shaft,.iso-connector-pattern-dotted .iso-connector-shaft{--iso-flow-distance:20}\",\n\t\t\".iso-connector-direction-route .iso-connector-shaft.iso-ambient-flow{animation:iso-connector-flow-route 900ms linear infinite}\",\n\t\t\".iso-connector-direction-reverse .iso-connector-shaft.iso-ambient-flow{animation:iso-connector-flow-reverse 900ms linear infinite}\",\n\t\t\"@media (prefers-reduced-motion: reduce){.iso-element,.iso-connector{animation-duration:1ms!important}.iso-ambient-pulse,.iso-ambient-float,.iso-ambient-shake,.iso-ambient-glow,.iso-ambient-spin,.iso-ambient-blink,.iso-ambient-flow{animation:none!important}}\",\n\t\t\"@keyframes iso-message-travel{from{offset-distance:0%}to{offset-distance:100%}}\",\n\t\t\".iso-message{offset-anchor:0px 0px;offset-rotate:0deg;animation:iso-message-travel 1800ms linear infinite;pointer-events:none}\",\n\t\t\"@keyframes iso-activity-breathe{0%,100%{opacity:.45}50%{opacity:1}}\",\n\t\t\".iso-activity-processing .iso-activity-ring{animation:iso-activity-breathe 1800ms ease-in-out infinite}\",\n\t\t\".iso-activity-waiting .iso-activity-badge{animation:iso-activity-breathe 2600ms ease-in-out infinite}\",\n\t\t\".iso-motion-paused *{animation-play-state:paused!important}.iso-motion-stopped *{animation:none!important}\",\n\t\t\"@media (prefers-reduced-motion:reduce){.iso-message{animation:none!important;offset-distance:50%}.iso-activity *{animation:none!important}}\",\n\t\t\".iso-interactive g[data-id]{cursor:pointer}\",\n\t].join(\"\\n\");\n}\n","import { RenderError } from \"../types/errors.ts\";\nimport type { LinePrimitive, PrimitiveContent, PrimitiveStyle, TextAlign, TextContent } from \"../types/node.ts\";\nimport type { CompiledSprite, RuntimeBundle } from \"../types/runtime-bundle.ts\";\nimport { projectToRaw } from \"../utils/projection.ts\";\n\nconst NS = \"http://www.w3.org/2000/svg\";\n\ntype ResolvedAsset = { url: string; anchor?: [number, number]; sprite?: CompiledSprite };\n\nexport type AssetResolver = (name: string) => ResolvedAsset | undefined;\n\nexport function createAssetResolver(bundle?: RuntimeBundle): AssetResolver {\n\tconst embedded = new Map<string, ResolvedAsset>();\n\tconst bundleAssets = bundle?.assets;\n\n\tif (bundleAssets && typeof bundleAssets === \"object\") {\n\t\tfor (const [name, asset] of Object.entries(bundleAssets)) {\n\t\t\tif (asset && typeof asset === \"object\" && typeof asset.url === \"string\") {\n\t\t\t\tembedded.set(name, { url: asset.url, anchor: asset.anchor, sprite: asset.sprite });\n\t\t\t}\n\t\t}\n\t}\n\n\treturn (name: string) => embedded.get(name);\n}\n\nexport function createAssetNode(asset: ResolvedAsset, assetName: string, cellSize: number): SVGGElement {\n\tif (asset.sprite) {\n\t\treturn createSpriteAssetNode(asset.url, assetName, cellSize, asset.sprite, asset.anchor);\n\t}\n\treturn createUrlAssetNode(asset.url, assetName, cellSize, asset.anchor);\n}\n\nexport function createTextAssetNode(\n\ttextContent: TextContent | undefined,\n\tassetName: string,\n\tcellSize: number,\n): SVGGElement {\n\tif (!textContent?.value) {\n\t\tthrow new RenderError(\"TEXT_CONTENT_MISSING\", `Text content is missing for built-in asset: ${assetName}`, {\n\t\t\tasset: assetName,\n\t\t});\n\t}\n\n\tconst group = document.createElementNS(NS, \"g\") as SVGGElement;\n\tconst text = document.createElementNS(NS, \"text\") as SVGTextElement;\n\tconst align = textContent.align ?? \"middle\";\n\tconst placement = textContent.placement ?? \"cell\";\n\tconst fontSize = textContent.fontSize ?? 12;\n\tconst lineHeight = textContent.lineHeight ?? 1.2;\n\tconst anchorX = textAnchorX(align, cellSize);\n\tconst vertical = textVerticalAnchor(placement, cellSize);\n\n\ttext.setAttribute(\"x\", String(anchorX));\n\ttext.setAttribute(\"y\", String(vertical.y));\n\ttext.setAttribute(\"text-anchor\", align);\n\ttext.setAttribute(\"dominant-baseline\", vertical.baseline);\n\ttext.setAttribute(\"font-family\", \"Arial, Helvetica, sans-serif\");\n\ttext.setAttribute(\"font-size\", String(fontSize));\n\ttext.setAttribute(\"font-weight\", String(textContent.fontWeight ?? 700));\n\ttext.setAttribute(\"fill\", textContent.fill ?? \"currentColor\");\n\n\tconst lines = normalizeTextLines(textContent.value);\n\tfor (const [index, line] of lines.entries()) {\n\t\tconst tspan = document.createElementNS(NS, \"tspan\") as SVGTSpanElement;\n\t\ttspan.setAttribute(\"x\", String(anchorX));\n\t\ttspan.setAttribute(\"dy\", index === 0 ? \"0\" : String(fontSize * lineHeight));\n\t\ttspan.textContent = line;\n\t\ttext.appendChild(tspan);\n\t}\n\n\tgroup.appendChild(text);\n\treturn group;\n}\n\nexport function createPrimitiveAssetNode(\n\tassetName: string,\n\tprimitive: PrimitiveContent | undefined,\n\tcellSize: number,\n): SVGGElement {\n\tconst group = document.createElementNS(NS, \"g\") as SVGGElement;\n\tswitch (assetName) {\n\t\tcase \"rectangle\":\n\t\t\tappendProjectedPolygon(group, rectanglePoints(), primitive?.rectangle, cellSize);\n\t\t\treturn group;\n\t\tcase \"polygon\":\n\t\t\tappendProjectedPolygon(group, primitive?.polygon?.points, primitive?.polygon, cellSize);\n\t\t\treturn group;\n\t\tcase \"line\":\n\t\t\tappendProjectedPolyline(group, primitive?.line, primitive?.line, cellSize);\n\t\t\treturn group;\n\t\tcase \"circle\":\n\t\t\tappendCircle(group, primitive?.circle, cellSize);\n\t\t\treturn group;\n\t\tdefault:\n\t\t\tthrow new RenderError(\"PRIMITIVE_ASSET_UNKNOWN\", `Unknown built-in primitive asset: ${assetName}`, {\n\t\t\t\tasset: assetName,\n\t\t\t});\n\t}\n}\n\nfunction textAnchorX(align: TextAlign, cellSize: number): number {\n\tif (align === \"start\") return -cellSize / 2;\n\tif (align === \"end\") return cellSize / 2;\n\treturn 0;\n}\n\nfunction textVerticalAnchor(placement: TextContent[\"placement\"], cellSize: number): { y: number; baseline: string } {\n\tif (placement === \"caption\") return { y: -cellSize, baseline: \"text-before-edge\" };\n\treturn { y: -cellSize / 2, baseline: \"middle\" };\n}\n\nfunction normalizeTextLines(value: string): string[] {\n\tconst normalized = value.replace(/\\r\\n?/g, \"\\n\").replace(/\\n$/, \"\");\n\treturn normalized.split(\"\\n\");\n}\n\nfunction rectanglePoints(): [number, number][] {\n\treturn [\n\t\t[0, 0],\n\t\t[1, 0],\n\t\t[1, 1],\n\t\t[0, 1],\n\t];\n}\n\nfunction appendProjectedPolygon(\n\tgroup: SVGGElement,\n\tpoints: [number, number][] | undefined,\n\tstyle: PrimitiveStyle | undefined,\n\tcellSize: number,\n): void {\n\tif (!points) return;\n\tconst polygon = document.createElementNS(NS, \"polygon\") as SVGPolygonElement;\n\tpolygon.setAttribute(\"points\", points.map((point) => projectLocalPoint(point, cellSize)).join(\" \"));\n\tapplyPrimitiveStyle(polygon, style, { fill: \"currentColor\", stroke: \"none\" });\n\tgroup.appendChild(polygon);\n}\n\nfunction appendProjectedPolyline(\n\tgroup: SVGGElement,\n\tline: LinePrimitive | undefined,\n\tstyle: PrimitiveStyle | undefined,\n\tcellSize: number,\n): void {\n\tif (!line?.points) return;\n\tconst polyline = document.createElementNS(NS, \"polyline\") as SVGPolylineElement;\n\tpolyline.setAttribute(\"points\", line.points.map((point) => projectLocalPoint(point, cellSize)).join(\" \"));\n\tpolyline.setAttribute(\"fill\", \"none\");\n\tpolyline.setAttribute(\"stroke-linecap\", line.lineCap ?? \"round\");\n\tpolyline.setAttribute(\"stroke-linejoin\", line.lineJoin ?? \"round\");\n\tapplyPrimitiveStyle(polyline, style, {\n\t\tfill: \"none\",\n\t\tstroke: \"currentColor\",\n\t});\n\tgroup.appendChild(polyline);\n}\n\nfunction appendCircle(group: SVGGElement, style: PrimitiveStyle | undefined, cellSize: number): void {\n\tconst center = projectLocalPoint([0.5, 0.5], cellSize);\n\tconst circle = document.createElementNS(NS, \"circle\") as SVGCircleElement;\n\tconst [cx, cy] = center.split(\",\").map(Number);\n\tcircle.setAttribute(\"cx\", String(cx));\n\tcircle.setAttribute(\"cy\", String(cy));\n\tcircle.setAttribute(\"r\", String(cellSize * 0.2));\n\tapplyPrimitiveStyle(circle, style, {\n\t\tfill: \"currentColor\",\n\t\tstroke: \"none\",\n\t});\n\tgroup.appendChild(circle);\n}\n\nfunction projectLocalPoint(point: [number, number], cellSize: number): string {\n\tconst projected = projectToRaw(point[0], point[1], cellSize);\n\tconst anchor = projectToRaw(1, 1, cellSize);\n\treturn `${projected.rawX - anchor.rawX},${projected.rawY - anchor.rawY}`;\n}\n\nfunction applyPrimitiveStyle(\n\tnode: SVGElement,\n\tstyle: PrimitiveStyle | undefined,\n\tdefaults: { fill: string; stroke: string },\n): void {\n\tnode.setAttribute(\"fill\", style?.fill ?? defaults.fill);\n\tnode.setAttribute(\"stroke\", style?.stroke ?? defaults.stroke);\n\tnode.setAttribute(\"stroke-width\", String(style?.strokeWidth ?? 0));\n\tnode.setAttribute(\"opacity\", String(style?.opacity ?? 1));\n\tif (style?.dash) node.setAttribute(\"stroke-dasharray\", style.dash.join(\" \"));\n}\n\nfunction createUrlAssetNode(url: string, assetName: string, cellSize: number, anchor?: [number, number]): SVGGElement {\n\tif (!isSafeAssetUrl(url)) {\n\t\tthrow new RenderError(\"INVALID_ASSET_URL\", `Asset URL is unsafe: ${assetName}`, { asset: assetName });\n\t}\n\tconst group = document.createElementNS(NS, \"g\") as SVGGElement;\n\tconst image = document.createElementNS(NS, \"image\") as SVGImageElement;\n\tconst resolvedUrl = resolveBrowserAssetUrl(url);\n\tconst [anchorX, anchorY] = anchor ?? [0.5, 1];\n\timage.setAttribute(\"href\", resolvedUrl);\n\timage.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", resolvedUrl);\n\timage.setAttribute(\"x\", String(-cellSize * anchorX));\n\timage.setAttribute(\"y\", String(-cellSize * anchorY));\n\timage.setAttribute(\"width\", String(cellSize));\n\timage.setAttribute(\"height\", String(cellSize));\n\timage.setAttribute(\"preserveAspectRatio\", \"xMidYMax meet\");\n\tgroup.appendChild(image);\n\treturn group;\n}\n\nfunction createSpriteAssetNode(\n\turl: string,\n\tassetName: string,\n\tcellSize: number,\n\tsprite: CompiledSprite,\n\tanchor?: [number, number],\n): SVGGElement {\n\tif (!isSafeAssetUrl(url)) {\n\t\tthrow new RenderError(\"INVALID_ASSET_URL\", `Asset URL is unsafe: ${assetName}`, { asset: assetName });\n\t}\n\tconst group = document.createElementNS(NS, \"g\") as SVGGElement;\n\tconst viewport = document.createElementNS(NS, \"svg\") as SVGSVGElement;\n\tconst image = document.createElementNS(NS, \"image\") as SVGImageElement;\n\tconst resolvedUrl = resolveBrowserAssetUrl(url);\n\tconst [anchorX, anchorY] = anchor ?? [0.5, 1];\n\tconst [rectX, rectY, rectWidth, rectHeight] = sprite.rect;\n\n\tviewport.setAttribute(\"x\", String(-cellSize * anchorX));\n\tviewport.setAttribute(\"y\", String(-cellSize * anchorY));\n\tviewport.setAttribute(\"width\", String(cellSize));\n\tviewport.setAttribute(\"height\", String(cellSize));\n\tviewport.setAttribute(\"viewBox\", `${rectX} ${rectY} ${rectWidth} ${rectHeight}`);\n\tviewport.setAttribute(\"preserveAspectRatio\", \"xMidYMax meet\");\n\n\timage.setAttribute(\"href\", resolvedUrl);\n\timage.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", resolvedUrl);\n\timage.setAttribute(\"x\", \"0\");\n\timage.setAttribute(\"y\", \"0\");\n\timage.setAttribute(\"width\", String(sprite.sheetSize[0]));\n\timage.setAttribute(\"height\", String(sprite.sheetSize[1]));\n\tviewport.appendChild(image);\n\tgroup.appendChild(viewport);\n\treturn group;\n}\n\nfunction resolveBrowserAssetUrl(url: string): string {\n\ttry {\n\t\tconst baseURI = document.baseURI;\n\t\treturn typeof baseURI === \"string\" ? new URL(url, baseURI).href : url;\n\t} catch {\n\t\treturn url;\n\t}\n}\n\nfunction isSafeAssetUrl(url: string): boolean {\n\tconst normalized = url.trim().toLowerCase();\n\treturn normalized.length > 0 && !normalized.startsWith(\"javascript:\");\n}\n","import type { RuntimeConnectorState, RuntimeElementState } from \"../types/node.ts\";\n\nconst NS = \"http://www.w3.org/2000/svg\";\ntype Point = { x: number; y: number };\n\n/** Build rounded projected geometry shared by tracks and message motion. */\nexport function roundedPath(points: Point[], radius: number): string {\n\tif (!points.length) return \"\";\n\tlet result = `M ${points[0].x} ${points[0].y}`;\n\tfor (let i = 1; i < points.length; i++) {\n\t\tconst point = points[i];\n\t\tconst previous = points[i - 1];\n\t\tconst next = points[i + 1];\n\t\tconst before = Math.hypot(point.x - previous.x, point.y - previous.y);\n\t\tconst after = next ? Math.hypot(next.x - point.x, next.y - point.y) : 0;\n\t\tconst distance = Math.min(radius, before / 2, after / 2);\n\t\tif (!next || !distance) {\n\t\t\tresult += ` L ${point.x} ${point.y}`;\n\t\t\tcontinue;\n\t\t}\n\t\tconst a = {\n\t\t\tx: point.x + ((previous.x - point.x) * distance) / before,\n\t\t\ty: point.y + ((previous.y - point.y) * distance) / before,\n\t\t};\n\t\tconst b = {\n\t\t\tx: point.x + ((next.x - point.x) * distance) / after,\n\t\t\ty: point.y + ((next.y - point.y) * distance) / after,\n\t\t};\n\t\tresult += ` L ${a.x} ${a.y} Q ${point.x} ${point.y} ${b.x} ${b.y}`;\n\t}\n\treturn result;\n}\n\nfunction shape<K extends keyof SVGElementTagNameMap>(\n\ttag: K,\n\tattrs: Record<string, string | number>,\n): SVGElementTagNameMap[K] {\n\tconst node = document.createElementNS(NS, tag);\n\tfor (const [key, value] of Object.entries(attrs)) node.setAttribute(key, String(value));\n\treturn node;\n}\n\n/** Reconcile cheap layered beam lighting without allocating SVG filters. */\nexport function updateTrackEffects(\n\tnode: SVGGElement,\n\tshaft: SVGPathElement,\n\tdef: RuntimeConnectorState,\n\td: string,\n): void {\n\tfor (const old of node.querySelectorAll(\".iso-track-effect\")) node.removeChild(old);\n\tconst { style } = def;\n\tif (style.glow) {\n\t\tconst glow = shape(\"path\", {\n\t\t\td,\n\t\t\tfill: \"none\",\n\t\t\tstroke: style.glow,\n\t\t\t\"stroke-width\": style.strokeWidth + (style.glowWidth ?? 8),\n\t\t\topacity: style.opacity * 0.16,\n\t\t\t\"stroke-linecap\": \"round\",\n\t\t\t\"stroke-linejoin\": \"round\",\n\t\t\tclass: \"iso-track-effect iso-connector-glow\",\n\t\t});\n\t\tnode.insertBefore(glow, node.firstChild);\n\t}\n\tif (style.variant !== \"beam\") return;\n\tconst highlight = shape(\"path\", {\n\t\td,\n\t\tfill: \"none\",\n\t\tstroke: \"#efffff\",\n\t\t\"stroke-width\": Math.max(0.6, style.strokeWidth * 0.23),\n\t\topacity: style.opacity * 0.7,\n\t\t\"stroke-linecap\": \"round\",\n\t\t\"stroke-linejoin\": \"round\",\n\t\tclass: \"iso-track-effect iso-connector-highlight\",\n\t});\n\t// The highlight follows the main shaft but remains below moving tokens.\n\tnode.insertBefore(highlight, shaft.nextSibling);\n}\n\n/** Draw projected tokens with highlights; all motion is on the outer group. */\nfunction messageToken(kind: string, size: number, color: string): SVGGElement {\n\tconst group = shape(\"g\", { transform: `scale(${size / 16})`, fill: color });\n\tgroup.appendChild(shape(\"ellipse\", { cx: 1, cy: 5, rx: 9, ry: 3.5, fill: \"#07131f\", opacity: 0.35 }));\n\tif (kind === \"orb\") {\n\t\tgroup.appendChild(shape(\"circle\", { r: 7, fill: \"#173343\" }));\n\t\tgroup.appendChild(shape(\"circle\", { cx: -1, cy: -1.5, r: 5.6 }));\n\t\tgroup.appendChild(shape(\"ellipse\", { cx: -2, cy: -3.5, rx: 2.5, ry: 1.6, fill: \"#fff\", opacity: 0.85 }));\n\t} else if (kind === \"envelope\") {\n\t\tgroup.appendChild(shape(\"path\", { d: \"M-8-5 8-2 8 6-8 3Z\", fill: \"#142e3c\", stroke: color, \"stroke-width\": 1 }));\n\t\tgroup.appendChild(shape(\"path\", { d: \"M-8-5 8-2 0 2Z\" }));\n\t\tgroup.appendChild(\n\t\t\tshape(\"path\", { d: \"M-7-4 0 1 7-1\", fill: \"none\", stroke: \"#f0ffff\", \"stroke-width\": 0.8, opacity: 0.8 }),\n\t\t);\n\t} else {\n\t\tgroup.appendChild(shape(\"path\", { d: \"M-8-2 0-6 8-2 0 2Z\" }));\n\t\tgroup.appendChild(shape(\"path\", { d: \"M-8-2 0 2 0 7-8 3Z\", fill: \"#183544\", stroke: color, \"stroke-width\": 0.6 }));\n\t\tgroup.appendChild(shape(\"path\", { d: \"M0 2 8-2 8 3 0 7Z\", opacity: 0.65 }));\n\t\tgroup.appendChild(\n\t\t\tshape(\"path\", { d: \"M-6-2 0-5 6-2\", fill: \"none\", stroke: \"#fff\", \"stroke-width\": 0.9, opacity: 0.85 }),\n\t\t);\n\t}\n\treturn group;\n}\n\n/** Update motion paths in place so rerouting does not restart packet progress. */\nexport function updateMessages(node: SVGGElement, def: RuntimeConnectorState, d: string, recreate: boolean): void {\n\tif (recreate) for (const old of node.querySelectorAll(\".iso-message\")) node.removeChild(old);\n\tconst message = def.message;\n\tif (!message || message.enabled === false) return;\n\tif (recreate) {\n\t\tconst count = message.count ?? 1;\n\t\tconst duration = message.duration ?? 1800;\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst token = shape(\"g\", { class: \"iso-message\", \"aria-hidden\": \"true\", \"data-kind\": message.kind ?? \"packet\" });\n\t\t\ttoken.style.animationDuration = `${duration}ms`;\n\t\t\ttoken.style.animationDelay = `${(-duration * i) / count}ms`;\n\t\t\ttoken.appendChild(messageToken(message.kind ?? \"packet\", message.size ?? 10, message.color ?? def.style.stroke));\n\t\t\tnode.appendChild(token);\n\t\t}\n\t}\n\tfor (const token of node.querySelectorAll<SVGGElement>(\".iso-message\")) {\n\t\ttoken.style.offsetPath = `path(\"${d}\")`;\n\t\ttoken.style.opacity = String(def.style.opacity);\n\t\ttoken.style.animationDirection = def.direction === \"reverse\" ? \"reverse\" : \"normal\";\n\t\ttoken.style.display = def.presence === \"removed\" ? \"none\" : \"\";\n\t}\n}\n\n/** Keep activity geometry independent of asset artwork and ambient transforms. */\nexport function updateActivity(node: SVGGElement, activity: RuntimeElementState[\"activity\"], cellSize: number): void {\n\tfor (const old of node.querySelectorAll(\".iso-activity\")) node.removeChild(old);\n\tnode.setAttribute(\"data-activity\", activity?.state ?? \"idle\");\n\tif (!activity || activity.state === \"idle\") return;\n\tconst state = activity.state;\n\tconst color =\n\t\tactivity.color ?? { processing: \"#67e8f9\", waiting: \"#fbbf24\", complete: \"#6ee7b7\", error: \"#fb7185\" }[state];\n\tconst group = shape(\"g\", {\n\t\tclass: `iso-activity iso-activity-${state}`,\n\t\tcolor,\n\t\t\"aria-label\": state,\n\t\t\"pointer-events\": \"none\",\n\t});\n\tconst radius = cellSize * 0.36;\n\tconst halo = shape(\"ellipse\", {\n\t\tcx: 0,\n\t\tcy: -2,\n\t\trx: radius,\n\t\try: radius * 0.42,\n\t\tfill: color,\n\t\t\"fill-opacity\": 0.08,\n\t\tstroke: color,\n\t\t\"stroke-opacity\": 0.6,\n\t\t\"stroke-width\": 1.3,\n\t\tclass: \"iso-activity-ring\",\n\t});\n\tgroup.appendChild(halo);\n\tconst badge = shape(\"g\", {\n\t\ttransform: `translate(${cellSize * 0.29} ${-cellSize * 0.6})`,\n\t\tclass: \"iso-activity-badge\",\n\t});\n\tbadge.appendChild(shape(\"circle\", { r: 6, fill: \"#102330\", stroke: color, \"stroke-width\": 1 }));\n\tconst glyph = {\n\t\tprocessing: \"M-2 0h4M0-2v4\",\n\t\twaiting: \"M-2-2v4M2-2v4\",\n\t\tcomplete: \"M-3 0-1 2 3-2\",\n\t\terror: \"M0-3v3M0 2v.5\",\n\t}[state];\n\tbadge.appendChild(\n\t\tshape(\"path\", {\n\t\t\td: glyph,\n\t\t\tfill: \"none\",\n\t\t\tstroke: color,\n\t\t\t\"stroke-width\": 1.5,\n\t\t\t\"stroke-linecap\": \"round\",\n\t\t\t\"stroke-linejoin\": \"round\",\n\t\t}),\n\t);\n\tgroup.appendChild(badge);\n\tnode.appendChild(group);\n}\n","import { RenderError } from \"../types/errors.ts\";\n\nconst CSS_CUSTOM_PROPERTY_PATTERN = /^--[a-zA-Z0-9-_]+$/;\n\n/**\n * Apply theme CSS custom properties to an element's inline style.\n * Throws `RenderError` (`INVALID_THEME_VAR`) if a key is not a valid `--name` custom property.\n */\nexport function applyThemeToElement(element: SVGElement | HTMLElement, themeVars: Record<string, string>): void {\n\tfor (const [name, value] of Object.entries(themeVars)) {\n\t\tif (!CSS_CUSTOM_PROPERTY_PATTERN.test(name)) {\n\t\t\tthrow new RenderError(\"INVALID_THEME_VAR\", `Invalid CSS custom property name: ${name}`);\n\t\t}\n\t\telement.style.setProperty(name, value);\n\t}\n}\n","import { resolveTheme } from \"../types/asset-registry.ts\";\nimport { RenderError } from \"../types/errors.ts\";\nimport type { CameraGridArea, ConnectorEndpoint, RuntimeConnectorState, RuntimeElementState } from \"../types/node.ts\";\nimport type { RuntimeBundle } from \"../types/runtime-bundle.ts\";\nimport type { LayerDefinition } from \"../types/scene.ts\";\nimport { calculateVisualSize, projectToRaw, projectToScreen } from \"../utils/projection.ts\";\nimport { buildKeyframeCSS } from \"./animation-css.ts\";\nimport type { AssetResolver } from \"./asset-node.ts\";\nimport { createAssetNode, createAssetResolver, createPrimitiveAssetNode, createTextAssetNode } from \"./asset-node.ts\";\nimport { roundedPath, updateActivity, updateMessages, updateTrackEffects } from \"./scene-effects.ts\";\nimport { applyThemeToElement } from \"./theme.ts\";\n\nconst NS = \"http://www.w3.org/2000/svg\";\nconst BUILT_IN_TEXT_ASSET_ID = \"text\";\nconst BUILT_IN_PRIMITIVE_ASSET_IDS = new Set([\"rectangle\", \"circle\", \"polygon\", \"line\"]);\nconst DEFAULT_CONNECTOR_DASH: Record<\"dashed\" | \"dotted\", [number, number]> = {\n\tdashed: [12, 8],\n\tdotted: [0, 8],\n};\nconst ENDPOINT_RADIUS_GRID = 0.14;\nconst ARROW_LENGTH_GRID = 0.35;\nconst ARROW_WIDTH_GRID = 0.28;\nconst BAR_WIDTH_GRID = 0.4;\n\ninterface Bounds {\n\tminX: number;\n\tminY: number;\n\tmaxX: number;\n\tmaxY: number;\n}\n\ninterface ResolvedLayoutState {\n\tcellSize: number;\n\tpadding: { x: number; y: number };\n\tcontentBounds: Bounds;\n\tfloorBounds: Bounds;\n\tselectedBounds: Bounds;\n\tviewBox: { minX: number; minY: number; width: number; height: number };\n}\n\n/** Internal state tracked per element node. */\ninterface ElementState {\n\tnode: SVGGElement;\n\tcurrent: RuntimeElementState;\n\tanchor: [number, number];\n\tisHidden: boolean;\n\tentryKey?: string;\n\texitKey?: string;\n\tambient: Set<string>;\n}\n\nexport interface ViewBoxRect {\n\tminX: number;\n\tminY: number;\n\twidth: number;\n\theight: number;\n}\n\n/** Internal state tracked per connector node. */\ninterface ConnectorState {\n\tnode: SVGGElement;\n\tshaft: SVGPathElement;\n\toutline?: SVGPathElement;\n\tlane?: SVGPathElement;\n\tstartEndpoint?: SVGElement;\n\tendEndpoint?: SVGElement;\n\tisHidden: boolean;\n\tambient: Set<string>;\n\tprevious?: RuntimeConnectorState;\n}\n\n/** Extended SVG with engine internals stored on it. */\ninterface SceneSVG extends SVGSVGElement {\n\t_layerMap: Map<string, Required<LayerDefinition>>;\n\t_elementMap: Map<string, ElementState>;\n\t_connectorMap: Map<string, ConnectorState>;\n\t_layout: ResolvedLayoutState;\n\t_viewBoxW: number;\n\t_viewBoxH: number;\n\t_depthGroup: SVGGElement;\n\t_assetResolver: AssetResolver;\n}\n\n/** Options accepted by `buildSceneDOM()`. */\nexport interface RenderConfig {\n\t/** Accessible label for the mounted SVG root. */\n\tlabel?: string;\n\t/** CSS custom properties applied on top of the bundle theme. */\n\tthemeVars?: Record<string, string>;\n}\n\n// ── Public API ────────────────────────────────────────────────────────────\n\n/** Build the SVG DOM for a compiled runtime bundle and mount it into a container. */\nexport function buildSceneDOM(container: HTMLElement, bundle: RuntimeBundle, config?: RenderConfig): SVGSVGElement {\n\tconst layout = resolveSceneLayout(bundle);\n\tconst initialStop = bundle.scenes[0];\n\tconst allElements = collectElementDefinitions(bundle);\n\tconst allConnectors = collectConnectorDefinitions(bundle);\n\tconst initialById = new Map((initialStop?.elements ?? []).map((element) => [element.id, element]));\n\tconst initialConnectorsById = new Map((initialStop?.connectors ?? []).map((connector) => [connector.id, connector]));\n\n\tconst svg = createRootSvg(layout, config?.label, bundle.className);\n\tconst assetResolver = createAssetResolver(bundle);\n\tsvg._assetResolver = assetResolver;\n\n\tsvg.appendChild(createCssDefs());\n\n\tapplyThemeToElement(svg, {\n\t\t...(resolveTheme(bundle.theme) ?? {}),\n\t\t...(bundle.themeVars ?? {}),\n\t\t...(config?.themeVars ?? {}),\n\t});\n\n\tconst sortedLayers = sortLayers(bundle.layers);\n\tconst layerMap = createLayerMap(sortedLayers);\n\tif (bundle.floor.visible) {\n\t\tsvg.appendChild(createFloorGrid(bundle, layout));\n\t}\n\n\tconst connectorMap = new Map<string, ConnectorState>();\n\tfor (const def of allConnectors) {\n\t\tconst initial = initialConnectorsById.get(def.id) ?? {\n\t\t\t...def,\n\t\t\tpresence: \"removed\",\n\t\t};\n\t\tconst state = createConnectorInstance(initial, layout);\n\t\tif (initial.presence === \"removed\") {\n\t\t\tstate.isHidden = true;\n\t\t\thideElementAfterExit(state.node);\n\t\t}\n\t\tapplyConnectorAmbientClasses(state, initial.ambient ?? []);\n\t\tsvg.appendChild(state.node);\n\t\tconnectorMap.set(def.id, state);\n\t}\n\n\tconst depthGroup = document.createElementNS(NS, \"g\") as SVGGElement;\n\tdepthGroup.classList.add(\"iso-depth-layer\");\n\tdepthGroup.setAttribute(\"data-layer\", \"depth\");\n\tsvg.appendChild(depthGroup);\n\n\tconst labelGroup = document.createElementNS(NS, \"g\") as SVGGElement;\n\tlabelGroup.classList.add(\"iso-layer\", \"iso-layer-labels\");\n\tlabelGroup.setAttribute(\"data-layer\", \"labels\");\n\tsvg.appendChild(labelGroup);\n\n\tconst elementMap = new Map<string, ElementState>();\n\tconst sortedElements = sortElementsForPerspective(allElements);\n\tfor (const def of sortedElements) {\n\t\tconst declaredLayer = layerMap.get(def.layer);\n\t\tif (!declaredLayer) {\n\t\t\tthrow new RenderError(\"MISSING_LAYER\", `Unknown layer for \"${def.id}\": ${def.layer}`);\n\t\t}\n\n\t\tconst initial = initialById.get(def.id) ?? {\n\t\t\t...def,\n\t\t\tpresence: \"removed\",\n\t\t};\n\t\tconst instance = createElementInstance(initial, layout, assetResolver);\n\t\tinstance.anchor = assetAnchorForBounds(bundle, initial);\n\t\tinstance.node.classList.add(`iso-layer-${def.layer}`);\n\t\tinstance.node.setAttribute(\"data-layer\", def.layer);\n\t\tif (initial.presence === \"removed\") {\n\t\t\tinstance.isHidden = true;\n\t\t\thideElementAfterExit(instance.node);\n\t\t}\n\t\tapplyAmbientClasses(instance, initial.ambient ?? []);\n\t\tconst parent = isTextAsset(def.asset) ? labelGroup : depthGroup;\n\t\tparent.appendChild(instance.node);\n\t\telementMap.set(def.id, instance);\n\t}\n\n\tsvg._layerMap = layerMap;\n\tsvg._elementMap = elementMap;\n\tsvg._connectorMap = connectorMap;\n\tsvg._depthGroup = depthGroup;\n\tcontainer.appendChild(svg);\n\treturn svg;\n}\n\n/** Update transforms and ambient classes for a live set of interpolated runtime values. */\nexport function updateElementTransforms(\n\tsvg: SVGSVGElement & {\n\t\t_elementMap?: Map<string, ElementState | unknown>;\n\t\t_connectorMap?: Map<string, ConnectorState | unknown>;\n\t\t_layout?: ResolvedLayoutState;\n\t\t_depthGroup?: SVGGElement;\n\t\t_assetResolver?: AssetResolver;\n\t},\n\telements: RuntimeElementState[],\n\tconnectors: RuntimeConnectorState[] = [],\n): void {\n\tconst layout = svg._layout;\n\tif (!layout) return;\n\n\tconst map = svg._elementMap as Map<string, ElementState> | undefined;\n\tif (map) {\n\t\tfor (const def of elements) {\n\t\t\tconst state = map.get(def.id);\n\t\t\tif (!state) continue;\n\t\t\tconst previous = state.current;\n\t\t\tstate.current = def;\n\t\t\tif (!hasEqualGeneratedContent(previous, def)) {\n\t\t\t\tupdateGeneratedElementContent(state.node, def, layout, svg._assetResolver);\n\t\t\t\tstate.anchor = svg._assetResolver?.(def.asset)?.anchor ?? [0.5, 1];\n\t\t\t}\n\t\t\tif (!hasEqualGeneratedContent(previous, def) || !deepEqual(previous.activity, def.activity)) {\n\t\t\t\tupdateActivity(state.node, def.activity, layout.cellSize);\n\t\t\t}\n\t\t\tapplyElementTransform(state.node, def, layout);\n\t\t\tapplyAmbientClasses(state, def.ambient ?? []);\n\t\t}\n\t\tif (svg._depthGroup) {\n\t\t\treconcileDepthOrder(svg._depthGroup, map);\n\t\t}\n\t}\n\n\tconst connectorMap = svg._connectorMap;\n\tif (!connectorMap) return;\n\tfor (const def of connectors) {\n\t\tconst state = connectorMap.get(def.id) as ConnectorState | undefined;\n\t\tif (!state) continue;\n\t\tapplyConnectorState(state, def, layout);\n\t}\n}\n\n/** Read the internal ElementState for an element by its id. */\nexport function getElementState(\n\tsvg: SVGSVGElement & { _elementMap?: Map<string, ElementState | unknown> },\n\tid: string,\n): ElementState | undefined {\n\treturn svg._elementMap?.get(id) as ElementState | undefined;\n}\n\n/** Read the internal ConnectorState for a connector by its id. */\nexport function getConnectorState(\n\tsvg: SVGSVGElement & {\n\t\t_connectorMap?: Map<string, ConnectorState | unknown>;\n\t},\n\tid: string,\n): ConnectorState | undefined {\n\treturn svg._connectorMap?.get(id) as ConnectorState | undefined;\n}\n\nexport function getResolvedViewBox(bundle: RuntimeBundle): {\n\tminX: number;\n\tminY: number;\n\twidth: number;\n\theight: number;\n} {\n\treturn resolveSceneLayout(bundle).viewBox;\n}\n\nexport function getResolvedProjectionLayout(bundle: RuntimeBundle): {\n\tcellSize: number;\n\tpadding: { x: number; y: number };\n\tselectedBounds: { minX: number; minY: number; maxX: number; maxY: number };\n} {\n\tconst layout = resolveSceneLayout(bundle);\n\treturn {\n\t\tcellSize: layout.cellSize,\n\t\tpadding: layout.padding,\n\t\tselectedBounds: layout.selectedBounds,\n\t};\n}\n\nexport function getCurrentElementBounds(\n\tsvg: SVGSVGElement & { _elementMap?: Map<string, ElementState | unknown>; _layout?: ResolvedLayoutState },\n\tid: string,\n): ViewBoxRect | undefined {\n\tconst layout = svg._layout;\n\tconst state = svg._elementMap?.get(id) as ElementState | undefined;\n\tif (!layout || !state || state.current.presence === \"removed\") return undefined;\n\treturn boundsToViewBox(calculateElementBounds(state.current, layout, state.anchor));\n}\n\nexport function getGridAreaBounds(bundle: RuntimeBundle, area: CameraGridArea): ViewBoxRect {\n\tconst layout = resolveSceneLayout(bundle);\n\tconst [x, y] = area.at;\n\tconst [width, height] = area.size;\n\tlet bounds = emptyBounds();\n\tfor (const point of [\n\t\t[x, y],\n\t\t[x + width, y],\n\t\t[x, y + height],\n\t\t[x + width, y + height],\n\t] as Array<[number, number]>) {\n\t\tconst screen = projectToScreen(\n\t\t\tpoint[0],\n\t\t\tpoint[1],\n\t\t\tlayout.cellSize,\n\t\t\tlayout.selectedBounds.minX,\n\t\t\tlayout.selectedBounds.minY,\n\t\t\tlayout.padding.x,\n\t\t\tlayout.padding.y,\n\t\t);\n\t\tbounds = includePoint(bounds, screen.screenX, screen.screenY);\n\t}\n\treturn boundsToViewBox(bounds);\n}\n\nexport function applySceneViewBox(svg: SVGSVGElement, viewBox: ViewBoxRect): void {\n\tsvg.setAttribute(\"viewBox\", `${viewBox.minX} ${viewBox.minY} ${viewBox.width} ${viewBox.height}`);\n}\n\n// ── Lifecycle helpers ─────────────────────────────────────────────────────\n\n/** Hide an element after its exit animation completes. */\nexport function hideElementAfterExit(node: SVGElement): void {\n\tnode.classList.add(\"iso-motion-paused\");\n\tnode.style.visibility = \"hidden\";\n\tnode.style.pointerEvents = \"none\";\n}\n\n/** Show an element on re-addition. */\nexport function unhideElementOnReadd(node: SVGElement): void {\n\tnode.classList.remove(\"iso-motion-paused\");\n\tnode.style.visibility = \"visible\";\n\tnode.style.pointerEvents = \"auto\";\n}\n\n/** Create a new element SVG instance for lifecycle re-instantiation. */\nexport function createNewElementInstance(def: RuntimeElementState, parent?: SVGGElement | null): SVGGElement {\n\tconst layout: ResolvedLayoutState = {\n\t\tcellSize: 64,\n\t\tpadding: { x: 0, y: 0 },\n\t\tcontentBounds: emptyBounds(),\n\t\tfloorBounds: emptyBounds(),\n\t\tselectedBounds: { minX: 0, minY: 0, maxX: 64, maxY: 64 },\n\t\tviewBox: { minX: 0, minY: 0, width: 64, height: 64 },\n\t};\n\tconst instance = createElementInstance(def, layout, createAssetResolver());\n\tparent?.appendChild(instance.node);\n\treturn instance.node;\n}\n\n/** Remove an element node from the DOM. */\nexport function removeElementNode(node: SVGElement): void {\n\tnode.parentElement?.removeChild(node);\n}\n\n// ── Layout helpers ────────────────────────────────────────────────────────\n\nfunction resolveSceneLayout(bundle: RuntimeBundle): ResolvedLayoutState {\n\tconst cellSize = bundle.grid.cellSize;\n\tconst padding = bundle.layout.padding;\n\tconst contentBounds = calculateContentBounds(bundle, cellSize);\n\tconst floorBounds = calculateFloorBounds(bundle, cellSize);\n\tconst selectedBounds = selectBounds(bundle.layout.bounds, contentBounds, floorBounds);\n\tconst width = selectedBounds.maxX - selectedBounds.minX + padding.x * 2;\n\tconst height = selectedBounds.maxY - selectedBounds.minY + padding.y * 2;\n\tconst viewBox = {\n\t\tminX: 0,\n\t\tminY: 0,\n\t\twidth: roundDimension(width || cellSize),\n\t\theight: roundDimension(height || cellSize),\n\t};\n\n\treturn {\n\t\tcellSize,\n\t\tpadding,\n\t\tcontentBounds,\n\t\tfloorBounds,\n\t\tselectedBounds,\n\t\tviewBox,\n\t};\n}\n\nfunction calculateContentBounds(bundle: RuntimeBundle, cellSize: number): Bounds {\n\tlet bounds = emptyBounds();\n\tfor (const stop of bundle.scenes) {\n\t\tfor (const element of stop.elements ?? []) {\n\t\t\tif (element.presence === \"removed\") continue;\n\t\t\tbounds = includeBounds(bounds, calculateRawElementBounds(bundle, element, cellSize));\n\t\t}\n\t\tfor (const connector of stop.connectors ?? []) {\n\t\t\tif (connector.presence === \"removed\") continue;\n\t\t\tbounds = includeBounds(bounds, calculateConnectorBounds(connector, cellSize));\n\t\t}\n\t}\n\treturn normalizeBounds(bounds, cellSize);\n}\n\nfunction calculateRawElementBounds(bundle: RuntimeBundle, element: RuntimeElementState, cellSize: number): Bounds {\n\tconst { rawX, rawY } = projectToRaw(element.pos[0] + element.size, element.pos[1] + element.size, cellSize);\n\tconst visualSize = calculateVisualSize(element.size, cellSize);\n\tconst [anchorX, anchorY] = assetAnchorForBounds(bundle, element);\n\treturn activityBounds(\n\t\t{\n\t\t\tminX: rawX - visualSize * anchorX,\n\t\t\tminY: rawY - visualSize * anchorY,\n\t\t\tmaxX: rawX + visualSize * (1 - anchorX),\n\t\t\tmaxY: rawY + visualSize * (1 - anchorY),\n\t\t},\n\t\telement,\n\t\trawX,\n\t\trawY,\n\t\tvisualSize,\n\t);\n}\n\nfunction calculateElementBounds(\n\telement: RuntimeElementState,\n\tlayout: ResolvedLayoutState,\n\tanchor: [number, number],\n): Bounds {\n\tconst screen = projectToScreen(\n\t\telement.pos[0] + element.size,\n\t\telement.pos[1] + element.size,\n\t\tlayout.cellSize,\n\t\tlayout.selectedBounds.minX,\n\t\tlayout.selectedBounds.minY,\n\t\tlayout.padding.x,\n\t\tlayout.padding.y,\n\t);\n\tconst visualSize = calculateVisualSize(element.size, layout.cellSize);\n\treturn activityBounds(\n\t\t{\n\t\t\tminX: screen.screenX - visualSize * anchor[0],\n\t\t\tminY: screen.screenY - visualSize * anchor[1],\n\t\t\tmaxX: screen.screenX + visualSize * (1 - anchor[0]),\n\t\t\tmaxY: screen.screenY + visualSize * (1 - anchor[1]),\n\t\t},\n\t\telement,\n\t\tscreen.screenX,\n\t\tscreen.screenY,\n\t\tvisualSize,\n\t);\n}\n\nfunction activityBounds(bounds: Bounds, element: RuntimeElementState, x: number, y: number, size: number): Bounds {\n\tif (!element.activity || element.activity.state === \"idle\") return bounds;\n\treturn includeBounds(bounds, {\n\t\tminX: x - size * 0.4,\n\t\tmaxX: x + size * 0.4,\n\t\tminY: y - size * 0.72,\n\t\tmaxY: y + size * 0.18,\n\t});\n}\n\nfunction assetAnchorForBounds(bundle: RuntimeBundle, element: RuntimeElementState): [number, number] {\n\treturn bundle.assets?.[element.asset]?.anchor ?? [0.5, 1];\n}\n\nfunction calculateConnectorBounds(connector: RuntimeConnectorState, cellSize: number): Bounds {\n\tlet bounds = emptyBounds();\n\tfor (const [x, y] of connector.route) {\n\t\tconst { rawX, rawY } = projectToRaw(x, y, cellSize);\n\t\tbounds = includePoint(bounds, rawX, rawY);\n\t}\n\tconst endpointPadding = Math.max(ARROW_LENGTH_GRID, BAR_WIDTH_GRID, ENDPOINT_RADIUS_GRID * 2) * cellSize;\n\tconst strokePadding = connector.style.strokeWidth / 2 + (connector.style.outlineWidth ?? 0);\n\tconst padding =\n\t\tendpointPadding +\n\t\tstrokePadding +\n\t\t(connector.style.glow ? (connector.style.glowWidth ?? 8) / 2 : 0) +\n\t\t(connector.message?.size ?? 0) / 2;\n\treturn {\n\t\tminX: bounds.minX - padding,\n\t\tminY: bounds.minY - padding,\n\t\tmaxX: bounds.maxX + padding,\n\t\tmaxY: bounds.maxY + padding,\n\t};\n}\n\nfunction calculateFloorBounds(bundle: RuntimeBundle, cellSize: number): Bounds {\n\tconst origin = bundle.floor.origin;\n\tconst [width, height] = bundle.floor.size;\n\tconst points: Array<[number, number]> = [\n\t\torigin,\n\t\t[origin[0] + width, origin[1]],\n\t\t[origin[0], origin[1] + height],\n\t\t[origin[0] + width, origin[1] + height],\n\t];\n\tlet bounds = emptyBounds();\n\tfor (const [x, y] of points) {\n\t\tconst { rawX, rawY } = projectToRaw(x, y, cellSize);\n\t\tbounds = includePoint(bounds, rawX, rawY);\n\t}\n\treturn normalizeBounds(bounds, cellSize);\n}\n\nfunction selectBounds(mode: RuntimeBundle[\"layout\"][\"bounds\"], content: Bounds, floor: Bounds): Bounds {\n\tif (mode === \"content\") return content;\n\tif (mode === \"floor\") return floor;\n\treturn includeBounds(content, floor);\n}\n\nfunction emptyBounds(): Bounds {\n\treturn {\n\t\tminX: Number.POSITIVE_INFINITY,\n\t\tminY: Number.POSITIVE_INFINITY,\n\t\tmaxX: Number.NEGATIVE_INFINITY,\n\t\tmaxY: Number.NEGATIVE_INFINITY,\n\t};\n}\n\nfunction normalizeBounds(bounds: Bounds, cellSize: number): Bounds {\n\tif (Number.isFinite(bounds.minX)) return bounds;\n\treturn { minX: 0, minY: 0, maxX: cellSize, maxY: cellSize };\n}\n\nfunction boundsToViewBox(bounds: Bounds): ViewBoxRect {\n\tconst centerX = (bounds.minX + bounds.maxX) / 2;\n\tconst centerY = (bounds.minY + bounds.maxY) / 2;\n\tconst width = Math.max(1, bounds.maxX - bounds.minX);\n\tconst height = Math.max(1, bounds.maxY - bounds.minY);\n\treturn {\n\t\tminX: roundDimension(centerX - width / 2),\n\t\tminY: roundDimension(centerY - height / 2),\n\t\twidth: roundDimension(width),\n\t\theight: roundDimension(height),\n\t};\n}\n\nfunction includePoint(bounds: Bounds, x: number, y: number): Bounds {\n\treturn {\n\t\tminX: Math.min(bounds.minX, x),\n\t\tminY: Math.min(bounds.minY, y),\n\t\tmaxX: Math.max(bounds.maxX, x),\n\t\tmaxY: Math.max(bounds.maxY, y),\n\t};\n}\n\nfunction includeBounds(bounds: Bounds, next: Bounds): Bounds {\n\treturn {\n\t\tminX: Math.min(bounds.minX, next.minX),\n\t\tminY: Math.min(bounds.minY, next.minY),\n\t\tmaxX: Math.max(bounds.maxX, next.maxX),\n\t\tmaxY: Math.max(bounds.maxY, next.maxY),\n\t};\n}\n\nfunction roundDimension(value: number): number {\n\treturn Math.round(value * 1000) / 1000;\n}\n\n// ── Private helpers ───────────────────────────────────────────────────────\n\nfunction createRootSvg(layout: ResolvedLayoutState, label?: string, className?: string): SceneSVG {\n\tconst svg = document.createElementNS(NS, \"svg\") as SceneSVG;\n\tsvg.classList.add(\"iso-scene\");\n\tfor (const token of className?.trim().split(/\\s+/) ?? []) {\n\t\tif (token) svg.classList.add(token);\n\t}\n\tsvg.setAttribute(\"width\", \"100%\");\n\tsvg.setAttribute(\"height\", \"100%\");\n\tsvg.setAttribute(\n\t\t\"viewBox\",\n\t\t`${layout.viewBox.minX} ${layout.viewBox.minY} ${layout.viewBox.width} ${layout.viewBox.height}`,\n\t);\n\tsvg.setAttribute(\"preserveAspectRatio\", \"xMidYMid meet\");\n\tsvg.style.width = \"100%\";\n\tsvg.style.height = \"100%\";\n\tsvg.style.display = \"block\";\n\tif (label) {\n\t\tsvg.setAttribute(\"role\", \"img\");\n\t\tsvg.setAttribute(\"aria-label\", label);\n\t} else {\n\t\tsvg.setAttribute(\"aria-hidden\", \"true\");\n\t}\n\tsvg._layout = layout;\n\tsvg._viewBoxW = layout.viewBox.width;\n\tsvg._viewBoxH = layout.viewBox.height;\n\treturn svg;\n}\n\nfunction createCssDefs(): SVGStyleElement {\n\tconst styleEl = document.createElementNS(NS, \"style\") as SVGStyleElement;\n\tstyleEl.textContent = buildKeyframeCSS();\n\treturn styleEl;\n}\n\nfunction createFloorGrid(bundle: RuntimeBundle, layout: ResolvedLayoutState): SVGGElement {\n\tconst group = document.createElementNS(NS, \"g\") as SVGGElement;\n\tgroup.classList.add(\"iso-floor-grid\", `iso-layer-${bundle.floor.layer}`);\n\tgroup.setAttribute(\"data-layer\", bundle.floor.layer);\n\n\tconst [originX, originY] = bundle.floor.origin;\n\tconst [columns, rows] = bundle.floor.size;\n\tconst corners = [\n\t\tprojectGridPoint(originX, originY, layout),\n\t\tprojectGridPoint(originX + columns, originY, layout),\n\t\tprojectGridPoint(originX + columns, originY + rows, layout),\n\t\tprojectGridPoint(originX, originY + rows, layout),\n\t];\n\n\tconst slab = document.createElementNS(NS, \"polygon\");\n\tslab.classList.add(\"iso-floor-slab\");\n\tslab.setAttribute(\"points\", corners.map(pointToString).join(\" \"));\n\tslab.setAttribute(\"fill\", \"#dbe6f4\");\n\tslab.setAttribute(\"fill-opacity\", \"0.22\");\n\tslab.setAttribute(\"stroke\", \"#b9c9df\");\n\tslab.setAttribute(\"stroke-width\", \"1\");\n\tgroup.appendChild(slab);\n\n\tfor (let x = 0; x <= columns; x++) {\n\t\tgroup.appendChild(\n\t\t\tcreateFloorLine(\n\t\t\t\tprojectGridPoint(originX + x, originY, layout),\n\t\t\t\tprojectGridPoint(originX + x, originY + rows, layout),\n\t\t\t),\n\t\t);\n\t}\n\n\tfor (let y = 0; y <= rows; y++) {\n\t\tgroup.appendChild(\n\t\t\tcreateFloorLine(\n\t\t\t\tprojectGridPoint(originX, originY + y, layout),\n\t\t\t\tprojectGridPoint(originX + columns, originY + y, layout),\n\t\t\t),\n\t\t);\n\t}\n\n\treturn group;\n}\n\nfunction createFloorLine(start: { x: number; y: number }, end: { x: number; y: number }): SVGLineElement {\n\tconst line = document.createElementNS(NS, \"line\") as SVGLineElement;\n\tline.setAttribute(\"x1\", String(start.x));\n\tline.setAttribute(\"y1\", String(start.y));\n\tline.setAttribute(\"x2\", String(end.x));\n\tline.setAttribute(\"y2\", String(end.y));\n\tline.setAttribute(\"stroke\", \"#2563eb\");\n\tline.setAttribute(\"stroke-width\", \"1\");\n\tline.setAttribute(\"stroke-dasharray\", \"5 5\");\n\tline.setAttribute(\"stroke-opacity\", \"0.2\");\n\treturn line;\n}\n\nfunction projectGridPoint(x: number, y: number, layout: ResolvedLayoutState): { x: number; y: number } {\n\tconst screen = projectToScreen(\n\t\tx,\n\t\ty,\n\t\tlayout.cellSize,\n\t\tlayout.selectedBounds.minX,\n\t\tlayout.selectedBounds.minY,\n\t\tlayout.padding.x,\n\t\tlayout.padding.y,\n\t);\n\treturn { x: screen.screenX, y: screen.screenY };\n}\n\nfunction pointToString(point: { x: number; y: number }): string {\n\treturn `${point.x},${point.y}`;\n}\n\nfunction createLayerMap(layers: Required<LayerDefinition>[]): Map<string, Required<LayerDefinition>> {\n\treturn new Map(layers.map((layer) => [layer.name, layer]));\n}\n\nfunction sortLayers(layers: LayerDefinition[]): Required<LayerDefinition>[] {\n\treturn [...layers]\n\t\t.map((layer, index) => ({ name: layer.name, order: layer.order ?? index }))\n\t\t.sort((a, b) => a.order - b.order || a.name.localeCompare(b.name));\n}\n\nfunction sortElementsForPerspective(elements: RuntimeElementState[]): RuntimeElementState[] {\n\treturn elements.slice().sort((a, b) => {\n\t\tconst bucket = renderBucket(a) - renderBucket(b);\n\t\tif (bucket !== 0) return bucket;\n\t\tconst depth = a.pos[0] + a.pos[1] - (b.pos[0] + b.pos[1]);\n\t\tif (depth !== 0) return depth;\n\t\treturn a.id.localeCompare(b.id);\n\t});\n}\n\nfunction renderBucket(element: RuntimeElementState): number {\n\tif (isTextAsset(element.asset)) return 1;\n\treturn 0;\n}\n\n/**\n * Re-sort the depth group's live child nodes to match the current\n * `(x + y)` + id perspective order. Only elements whose relative order\n * changed are moved so in-flight CSS animation state on unaffected\n * elements is preserved. Text elements live in the label group and are\n * never part of this reconciliation.\n */\nfunction reconcileDepthOrder(depthGroup: SVGGElement, elementMap: Map<string, ElementState>): void {\n\tconst current: RuntimeElementState[] = [];\n\tfor (const state of elementMap.values()) {\n\t\tif ((state.node.parentElement as SVGGElement | null) !== depthGroup) continue;\n\t\tcurrent.push(state.current);\n\t}\n\tif (current.length < 2) return;\n\n\tconst desiredOrder = sortElementsForPerspective(current);\n\tconst existingOrder = [...depthGroup.childNodes] as unknown as SVGElement[];\n\n\tlet orderMatches = existingOrder.length === desiredOrder.length;\n\tif (orderMatches) {\n\t\tfor (let index = 0; index < desiredOrder.length; index++) {\n\t\t\tconst expectedId = desiredOrder[index]?.id;\n\t\t\tif (existingOrder[index]?.getAttribute(\"data-id\") !== expectedId) {\n\t\t\t\torderMatches = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif (orderMatches) return;\n\n\tfor (const def of desiredOrder) {\n\t\tconst state = elementMap.get(def.id);\n\t\tif (state) depthGroup.appendChild(state.node);\n\t}\n}\n\nfunction collectElementDefinitions(bundle: RuntimeBundle): RuntimeElementState[] {\n\tconst byId = new Map<string, RuntimeElementState>();\n\tfor (const stop of bundle.scenes) {\n\t\tfor (const element of stop.elements ?? []) {\n\t\t\tif (!byId.has(element.id) || byId.get(element.id)?.presence === \"removed\") {\n\t\t\t\tbyId.set(element.id, element);\n\t\t\t}\n\t\t}\n\t}\n\treturn [...byId.values()];\n}\n\nfunction collectConnectorDefinitions(bundle: RuntimeBundle): RuntimeConnectorState[] {\n\tconst byId = new Map<string, RuntimeConnectorState>();\n\tfor (const stop of bundle.scenes) {\n\t\tfor (const connector of stop.connectors ?? []) {\n\t\t\tif (!byId.has(connector.id) || byId.get(connector.id)?.presence === \"removed\") {\n\t\t\t\tbyId.set(connector.id, connector);\n\t\t\t}\n\t\t}\n\t}\n\treturn [...byId.values()];\n}\n\n/** Create a single element SVG instance applying entry animation. */\nfunction createElementInstance(\n\tdef: RuntimeElementState,\n\tlayout: ResolvedLayoutState,\n\tresolveAsset: AssetResolver,\n): ElementState {\n\tconst node =\n\t\tdef.asset === BUILT_IN_TEXT_ASSET_ID\n\t\t\t? createTextAssetNode(def.text, def.asset, layout.cellSize)\n\t\t\t: isPrimitiveAsset(def.asset)\n\t\t\t\t? createPrimitiveAssetNode(def.asset, def.primitive, layout.cellSize)\n\t\t\t\t: createResolvedAssetNode(def, resolveAsset, layout.cellSize);\n\tnode.classList.add(\"iso-element\", `iso-element-${def.id}`);\n\tnode.setAttribute(\"data-id\", def.id);\n\tnode.setAttribute(\"data-asset\", def.asset);\n\tnode.style.overflow = \"visible\";\n\tnode.style.pointerEvents = \"auto\";\n\tapplyElementTransform(node, def, layout);\n\tupdateActivity(node, def.activity, layout.cellSize);\n\n\tconst entryAnim = def.enter;\n\tif (entryAnim && entryAnim !== \"none\" && def.presence !== \"removed\") {\n\t\tconst keyName = `iso-anim-${entryAnim}`;\n\t\tanimateElement(node, keyName, \"enter\");\n\t\tconst expectedAnimation = node.style.animation;\n\t\tnode.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (node.style.animation === expectedAnimation) node.style.animation = \"\";\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t\treturn { node, current: def, anchor: [0.5, 1], isHidden: false, entryKey: entryAnim, ambient: new Set() };\n\t}\n\n\treturn { node, current: def, anchor: [0.5, 1], isHidden: false, ambient: new Set() };\n}\n\nfunction isTextAsset(assetId: string): boolean {\n\treturn assetId === BUILT_IN_TEXT_ASSET_ID;\n}\n\nfunction isPrimitiveAsset(assetId: string): boolean {\n\treturn BUILT_IN_PRIMITIVE_ASSET_IDS.has(assetId);\n}\n\nfunction createResolvedAssetNode(def: RuntimeElementState, resolveAsset: AssetResolver, cellSize: number): SVGGElement {\n\tconst asset = resolveAsset(def.asset);\n\tif (!asset) {\n\t\tthrow new RenderError(\"ASSET_NOT_FOUND\", `Asset not found: ${def.asset}`, {\n\t\t\tasset: def.asset,\n\t\t\telementId: def.id,\n\t\t});\n\t}\n\treturn createAssetNode(asset, def.asset, cellSize);\n}\n\nfunction updateGeneratedElementContent(\n\tnode: SVGGElement,\n\tdef: RuntimeElementState,\n\tlayout: ResolvedLayoutState,\n\tresolveAsset?: AssetResolver,\n): void {\n\tconst replacement = isTextAsset(def.asset)\n\t\t? createTextAssetNode(def.text, def.asset, layout.cellSize)\n\t\t: isPrimitiveAsset(def.asset)\n\t\t\t? createPrimitiveAssetNode(def.asset, def.primitive, layout.cellSize)\n\t\t\t: createResolvedAssetNode(def, resolveAsset ?? createAssetResolver(), layout.cellSize);\n\tnode.setAttribute(\"data-asset\", def.asset);\n\tclearChildren(node);\n\twhile (replacement.firstChild) {\n\t\tconst child = replacement.firstChild;\n\t\treplacement.removeChild(child);\n\t\tnode.appendChild(child);\n\t}\n}\n\n/**\n * Compare the generated-content payload (`text` or `primitive`) of two\n * element states for structural equality. Used to skip destructive\n * regeneration of text/primitive DOM content on frame updates where the\n * asset, id, and content payload are unchanged from the previous frame.\n */\nfunction hasEqualGeneratedContent(previous: RuntimeElementState | undefined, next: RuntimeElementState): boolean {\n\tif (!previous) return false;\n\tif (previous.asset !== next.asset) return false;\n\tif (!isTextAsset(next.asset) && !isPrimitiveAsset(next.asset)) return true;\n\tif (isTextAsset(next.asset)) return deepEqual(previous.text, next.text);\n\treturn deepEqual(previous.primitive, next.primitive);\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n\tif (a === b) return true;\n\tif (typeof a !== typeof b) return false;\n\tif (a === null || b === null || typeof a !== \"object\" || typeof b !== \"object\") return false;\n\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\tif (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;\n\t\treturn a.every((item, index) => deepEqual(item, b[index]));\n\t}\n\tconst aKeys = Object.keys(a as Record<string, unknown>);\n\tconst bKeys = Object.keys(b as Record<string, unknown>);\n\tif (aKeys.length !== bKeys.length) return false;\n\treturn aKeys.every((key) => deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key]));\n}\n\nfunction createConnectorInstance(def: RuntimeConnectorState, layout: ResolvedLayoutState): ConnectorState {\n\tconst node = document.createElementNS(NS, \"g\") as SVGGElement;\n\tconst shaft = document.createElementNS(NS, \"path\") as SVGPathElement;\n\tnode.appendChild(shaft);\n\tconst state: ConnectorState = { node, shaft, isHidden: false, ambient: new Set<string>() };\n\tapplyConnectorState(state, def, layout);\n\n\tconst entryAnim = def.enter;\n\tif (entryAnim && entryAnim !== \"none\" && def.presence !== \"removed\") {\n\t\tanimateElement(node, `iso-anim-${entryAnim}`, \"enter\");\n\t\tconst expectedAnimation = node.style.animation;\n\t\tnode.addEventListener(\n\t\t\t\"animationend\",\n\t\t\t() => {\n\t\t\t\tif (node.style.animation === expectedAnimation) node.style.animation = \"\";\n\t\t\t},\n\t\t\t{ once: true },\n\t\t);\n\t}\n\n\treturn state;\n}\n\nfunction applyConnectorState(state: ConnectorState, def: RuntimeConnectorState, layout: ResolvedLayoutState): void {\n\tconst previous = state.previous;\n\tconst routeChanged = !previous || !routesEqual(previous.route, def.route);\n\tconst styleChanged = !previous || !connectorStylesEqual(previous.style, def.style);\n\tconst shapeChanged =\n\t\t!previous ||\n\t\tshouldRenderOutline(previous) !== shouldRenderOutline(def) ||\n\t\tprevious.style.variant !== def.style.variant ||\n\t\tprevious.style.lane !== def.style.lane ||\n\t\tprevious.start !== def.start ||\n\t\tprevious.end !== def.end ||\n\t\tprevious.route.length !== def.route.length;\n\n\tapplyConnectorGroupAttrs(state.node, def, previous);\n\n\tconst geometryChanged = routeChanged || shapeChanged || styleChanged;\n\tconst d = geometryChanged\n\t\t? routePath(def.route, layout, def.style.cornerRadius ?? 0)\n\t\t: (state.shaft.getAttribute(\"d\") ?? \"\");\n\n\tif (shapeChanged) {\n\t\tif (state.outline) state.node.removeChild(state.outline);\n\t\tstate.outline = undefined;\n\t\tif (shouldRenderOutline(def)) {\n\t\t\tconst outline = document.createElementNS(NS, \"path\") as SVGPathElement;\n\t\t\toutline.classList.add(\"iso-connector-outline\");\n\t\t\tapplyConnectorPathAttrs(outline, def, d, {\n\t\t\t\tstroke: def.style.outline ?? def.style.stroke,\n\t\t\t\tstrokeWidth: def.style.strokeWidth + def.style.outlineWidth * 2,\n\t\t\t\tincludeDash: false,\n\t\t\t});\n\t\t\tstate.node.insertBefore(outline, state.shaft);\n\t\t\tstate.outline = outline;\n\t\t}\n\t} else if (state.outline && geometryChanged) {\n\t\tapplyConnectorPathAttrs(state.outline, def, d, {\n\t\t\tstroke: def.style.outline ?? def.style.stroke,\n\t\t\tstrokeWidth: def.style.strokeWidth + def.style.outlineWidth * 2,\n\t\t\tincludeDash: false,\n\t\t});\n\t}\n\n\tif (!state.shaft.parentNode) state.node.appendChild(state.shaft);\n\tstate.shaft.classList.add(\"iso-connector-shaft\");\n\tif (geometryChanged) {\n\t\tapplyConnectorPathAttrs(state.shaft, def, d, {\n\t\t\tstroke: def.style.stroke,\n\t\t\tstrokeWidth: def.style.strokeWidth,\n\t\t\tincludeDash: true,\n\t\t});\n\t}\n\n\tif (shapeChanged) {\n\t\tif (state.lane) state.node.removeChild(state.lane);\n\t\tstate.lane = undefined;\n\t\tif (def.style.variant === \"road\" && def.style.lane === \"center-dashed\") {\n\t\t\tconst lane = document.createElementNS(NS, \"path\") as SVGPathElement;\n\t\t\tlane.classList.add(\"iso-connector-lane\");\n\t\t\tapplyConnectorPathAttrs(lane, def, d, {\n\t\t\t\tstroke: \"#ffffff\",\n\t\t\t\tstrokeWidth: Math.max(1, def.style.strokeWidth * 0.12),\n\t\t\t\tincludeDash: false,\n\t\t\t});\n\t\t\tlane.setAttribute(\"stroke-dasharray\", \"8 8\");\n\t\t\tstate.node.appendChild(lane);\n\t\t\tstate.lane = lane;\n\t\t}\n\t} else if (state.lane && geometryChanged) {\n\t\tapplyConnectorPathAttrs(state.lane, def, d, {\n\t\t\tstroke: \"#ffffff\",\n\t\t\tstrokeWidth: Math.max(1, def.style.strokeWidth * 0.12),\n\t\t\tincludeDash: false,\n\t\t});\n\t\tstate.lane.setAttribute(\"stroke-dasharray\", \"8 8\");\n\t}\n\n\tif (geometryChanged) {\n\t\tif (state.startEndpoint) state.node.removeChild(state.startEndpoint);\n\t\tif (state.endEndpoint) state.node.removeChild(state.endEndpoint);\n\t\tstate.startEndpoint = appendEndpoint(state.node, def, \"start\", layout);\n\t\tstate.endEndpoint = appendEndpoint(state.node, def, \"end\", layout);\n\t}\n\n\tif (geometryChanged) updateTrackEffects(state.node, state.shaft, def, d);\n\tupdateMessages(\n\t\tstate.node,\n\t\tdef,\n\t\td,\n\t\t!previous || !deepEqual(previous.message, def.message) || previous.style.stroke !== def.style.stroke,\n\t);\n\tapplyConnectorAmbientClasses(state, def.ambient ?? []);\n\tstate.previous = def;\n}\n\nfunction clearChildren(node: SVGElement): void {\n\twhile (node.firstChild) node.removeChild(node.firstChild);\n}\n\nfunction routesEqual(a: [number, number][], b: [number, number][]): boolean {\n\tif (a === b) return true;\n\tif (a.length !== b.length) return false;\n\treturn a.every((point, index) => {\n\t\tconst other = b[index];\n\t\treturn other !== undefined && point[0] === other[0] && point[1] === other[1];\n\t});\n}\n\nfunction connectorStylesEqual(a: RuntimeConnectorState[\"style\"], b: RuntimeConnectorState[\"style\"]): boolean {\n\tif (a === b) return true;\n\treturn (\n\t\ta.variant === b.variant &&\n\t\ta.pattern === b.pattern &&\n\t\ta.stroke === b.stroke &&\n\t\ta.strokeWidth === b.strokeWidth &&\n\t\ta.opacity === b.opacity &&\n\t\ta.outline === b.outline &&\n\t\ta.outlineWidth === b.outlineWidth &&\n\t\ta.lane === b.lane &&\n\t\ta.cornerRadius === b.cornerRadius &&\n\t\ta.glow === b.glow &&\n\t\ta.glowWidth === b.glowWidth &&\n\t\t(a.dash ?? []).join(\",\") === (b.dash ?? []).join(\",\")\n\t);\n}\n\nfunction applyConnectorGroupAttrs(\n\tnode: SVGGElement,\n\tdef: RuntimeConnectorState,\n\tprevious?: RuntimeConnectorState,\n): void {\n\tconst nextClasses = [\n\t\t\"iso-connector\",\n\t\t`iso-connector-${def.id}`,\n\t\t`iso-connector-variant-${def.style.variant}`,\n\t\t`iso-connector-pattern-${def.style.pattern}`,\n\t\t`iso-connector-direction-${def.direction}`,\n\t\t`iso-layer-${def.layer}`,\n\t];\n\tif (!previous) {\n\t\tnode.classList.add(...nextClasses);\n\t} else {\n\t\tconst previousClasses = [\n\t\t\t\"iso-connector\",\n\t\t\t`iso-connector-${previous.id}`,\n\t\t\t`iso-connector-variant-${previous.style.variant}`,\n\t\t\t`iso-connector-pattern-${previous.style.pattern}`,\n\t\t\t`iso-connector-direction-${previous.direction}`,\n\t\t\t`iso-layer-${previous.layer}`,\n\t\t];\n\t\tfor (const name of previousClasses) {\n\t\t\tif (!nextClasses.includes(name)) node.classList.remove(name);\n\t\t}\n\t\tfor (const name of nextClasses) {\n\t\t\tif (!previousClasses.includes(name)) node.classList.add(name);\n\t\t}\n\t}\n\tnode.setAttribute(\"data-id\", def.id);\n\tnode.setAttribute(\"data-layer\", def.layer);\n\tnode.style.overflow = \"visible\";\n\tnode.style.pointerEvents = \"auto\";\n}\n\nfunction shouldRenderOutline(def: RuntimeConnectorState): boolean {\n\treturn Boolean(def.style.outline && def.style.outlineWidth > 0);\n}\n\nfunction applyConnectorPathAttrs(\n\tpath: SVGPathElement,\n\tdef: RuntimeConnectorState,\n\td: string,\n\toptions: { stroke: string; strokeWidth: number; includeDash: boolean },\n): void {\n\tpath.setAttribute(\"d\", d);\n\tpath.setAttribute(\"fill\", \"none\");\n\tpath.setAttribute(\"stroke\", options.stroke);\n\tpath.setAttribute(\"stroke-width\", String(options.strokeWidth));\n\tpath.setAttribute(\"stroke-linecap\", \"round\");\n\tpath.setAttribute(\"stroke-linejoin\", \"round\");\n\tpath.setAttribute(\"opacity\", String(def.style.opacity));\n\tif (options.includeDash && def.style.pattern !== \"solid\") {\n\t\tconst dash = def.style.dash ?? DEFAULT_CONNECTOR_DASH[def.style.pattern];\n\t\tpath.setAttribute(\"stroke-dasharray\", dash.join(\" \"));\n\t} else {\n\t\tpath.setAttribute(\"stroke-dasharray\", \"none\");\n\t}\n}\n\nfunction routePath(route: [number, number][], layout: ResolvedLayoutState, radius: number): string {\n\treturn roundedPath(\n\t\troute.map(([x, y]) => projectGridPoint(x, y, layout)),\n\t\tradius,\n\t);\n}\n\nfunction appendEndpoint(\n\tgroup: SVGGElement,\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGElement | undefined {\n\tconst endpoint = def[kind];\n\tif (endpoint === \"none\" || def.route.length < 2) return undefined;\n\n\tconst node = createEndpointNode(endpoint, def, kind, layout);\n\tnode.classList.add(`iso-connector-${kind}`);\n\tgroup.appendChild(node);\n\treturn node;\n}\n\nfunction createEndpointNode(\n\tendpoint: ConnectorEndpoint,\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGElement {\n\tswitch (endpoint) {\n\t\tcase \"arrow\":\n\t\t\treturn createArrowEndpoint(def, kind, layout);\n\t\tcase \"dot\":\n\t\t\treturn createCircleEndpoint(def, kind, layout, true);\n\t\tcase \"circle\":\n\t\t\treturn createCircleEndpoint(def, kind, layout, false);\n\t\tcase \"diamond\":\n\t\t\treturn createDiamondEndpoint(def, kind, layout);\n\t\tcase \"bar\":\n\t\t\treturn createBarEndpoint(def, kind, layout);\n\t\tcase \"none\":\n\t\t\tthrow new RenderError(\"CONNECTOR_ENDPOINT_NONE\", \"Cannot create geometry for endpoint none\");\n\t}\n}\n\nfunction createArrowEndpoint(\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGPolygonElement {\n\tconst tip = endpointPoint(def, kind);\n\tconst direction = endpointDirection(def, kind);\n\tconst perpendicular: [number, number] = [-direction[1], direction[0]];\n\tconst base: [number, number] = [tip[0] - direction[0] * ARROW_LENGTH_GRID, tip[1] - direction[1] * ARROW_LENGTH_GRID];\n\tconst halfWidth = ARROW_WIDTH_GRID / 2;\n\tconst points = [\n\t\ttip,\n\t\t[base[0] + perpendicular[0] * halfWidth, base[1] + perpendicular[1] * halfWidth] as [number, number],\n\t\t[base[0] - perpendicular[0] * halfWidth, base[1] - perpendicular[1] * halfWidth] as [number, number],\n\t].map((point) => projectGridPoint(point[0], point[1], layout));\n\n\tconst polygon = document.createElementNS(NS, \"polygon\") as SVGPolygonElement;\n\tpolygon.setAttribute(\"points\", points.map(pointToString).join(\" \"));\n\tpolygon.setAttribute(\"fill\", def.style.stroke);\n\tpolygon.setAttribute(\"opacity\", String(def.style.opacity));\n\treturn polygon;\n}\n\nfunction createCircleEndpoint(\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n\tfilled: boolean,\n): SVGCircleElement {\n\tconst point = endpointPoint(def, kind);\n\tconst projected = projectGridPoint(point[0], point[1], layout);\n\tconst circle = document.createElementNS(NS, \"circle\") as SVGCircleElement;\n\tcircle.setAttribute(\"cx\", String(projected.x));\n\tcircle.setAttribute(\"cy\", String(projected.y));\n\tcircle.setAttribute(\"r\", String(ENDPOINT_RADIUS_GRID * layout.cellSize));\n\tcircle.setAttribute(\"stroke\", def.style.stroke);\n\tcircle.setAttribute(\"stroke-width\", String(Math.max(1, def.style.strokeWidth)));\n\tcircle.setAttribute(\"opacity\", String(def.style.opacity));\n\tcircle.setAttribute(\"fill\", filled ? def.style.stroke : \"none\");\n\treturn circle;\n}\n\nfunction createDiamondEndpoint(\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGPolygonElement {\n\tconst center = endpointPoint(def, kind);\n\tconst radius = ENDPOINT_RADIUS_GRID;\n\tconst points: [number, number][] = [\n\t\t[center[0], center[1] - radius],\n\t\t[center[0] + radius, center[1]],\n\t\t[center[0], center[1] + radius],\n\t\t[center[0] - radius, center[1]],\n\t];\n\tconst polygon = document.createElementNS(NS, \"polygon\") as SVGPolygonElement;\n\tpolygon.setAttribute(\n\t\t\"points\",\n\t\tpoints\n\t\t\t.map((point) => projectGridPoint(point[0], point[1], layout))\n\t\t\t.map(pointToString)\n\t\t\t.join(\" \"),\n\t);\n\tpolygon.setAttribute(\"fill\", def.style.stroke);\n\tpolygon.setAttribute(\"opacity\", String(def.style.opacity));\n\treturn polygon;\n}\n\nfunction createBarEndpoint(\n\tdef: RuntimeConnectorState,\n\tkind: \"start\" | \"end\",\n\tlayout: ResolvedLayoutState,\n): SVGLineElement {\n\tconst center = endpointPoint(def, kind);\n\tconst direction = endpointDirection(def, kind);\n\tconst perpendicular: [number, number] = [-direction[1], direction[0]];\n\tconst half = BAR_WIDTH_GRID / 2;\n\tconst a = projectGridPoint(center[0] + perpendicular[0] * half, center[1] + perpendicular[1] * half, layout);\n\tconst b = projectGridPoint(center[0] - perpendicular[0] * half, center[1] - perpendicular[1] * half, layout);\n\tconst line = document.createElementNS(NS, \"line\") as SVGLineElement;\n\tline.setAttribute(\"x1\", String(a.x));\n\tline.setAttribute(\"y1\", String(a.y));\n\tline.setAttribute(\"x2\", String(b.x));\n\tline.setAttribute(\"y2\", String(b.y));\n\tline.setAttribute(\"stroke\", def.style.stroke);\n\tline.setAttribute(\"stroke-width\", String(Math.max(1, def.style.strokeWidth)));\n\tline.setAttribute(\"stroke-linecap\", \"round\");\n\tline.setAttribute(\"opacity\", String(def.style.opacity));\n\treturn line;\n}\n\nfunction endpointPoint(def: RuntimeConnectorState, kind: \"start\" | \"end\"): [number, number] {\n\treturn kind === \"start\" ? def.route[0] : def.route[def.route.length - 1];\n}\n\nfunction endpointDirection(def: RuntimeConnectorState, kind: \"start\" | \"end\"): [number, number] {\n\tconst point =\n\t\tkind === \"start\"\n\t\t\t? vectorBetween(def.route[0], def.route[1])\n\t\t\t: vectorBetween(def.route[def.route.length - 2], def.route[def.route.length - 1]);\n\tconst effective = def.direction === \"reverse\" ? ([-point[0], -point[1]] as [number, number]) : point;\n\treturn normalizeVector(effective);\n}\n\nfunction vectorBetween(start: [number, number], end: [number, number]): [number, number] {\n\treturn [end[0] - start[0], end[1] - start[1]];\n}\n\nfunction normalizeVector(vector: [number, number]): [number, number] {\n\tconst length = Math.hypot(vector[0], vector[1]);\n\tif (length === 0) return [1, 0];\n\treturn [vector[0] / length, vector[1] / length];\n}\n\nfunction applyElementTransform(node: SVGGElement, def: RuntimeElementState, layout: ResolvedLayoutState): void {\n\tconst screen = projectToScreen(\n\t\tdef.pos[0] + def.size,\n\t\tdef.pos[1] + def.size,\n\t\tlayout.cellSize,\n\t\tlayout.selectedBounds.minX,\n\t\tlayout.selectedBounds.minY,\n\t\tlayout.padding.x,\n\t\tlayout.padding.y,\n\t);\n\tconst visualSize = calculateVisualSize(def.size, layout.cellSize);\n\tconst scale = visualSize / layout.cellSize;\n\tnode.setAttribute(\"transform\", `translate(${screen.screenX} ${screen.screenY}) scale(${scale})`);\n}\n\nfunction applyAmbientClasses(state: ElementState, ambient: RuntimeElementState[\"ambient\"]): void {\n\tconst next = new Set((ambient ?? []).map((item) => item.name));\n\tfor (const name of state.ambient) {\n\t\tif (!next.has(name)) state.node.classList.remove(`iso-ambient-${name}`);\n\t}\n\tfor (const name of next) {\n\t\tif (!state.ambient.has(name)) state.node.classList.add(`iso-ambient-${name}`);\n\t}\n\tstate.ambient = next;\n}\n\nfunction applyConnectorAmbientClasses(state: ConnectorState, ambient: RuntimeConnectorState[\"ambient\"]): void {\n\tconst next = new Set((ambient ?? []).map((item) => item.name));\n\tfor (const name of state.ambient) {\n\t\tif (!next.has(name)) state.shaft.classList.remove(`iso-ambient-${name}`);\n\t}\n\tfor (const name of next) {\n\t\tstate.shaft.classList.add(`iso-ambient-${name}`);\n\t}\n\tstate.ambient = next;\n}\n\n/** Apply a CSS keyframe animation to an element. */\nexport function animateElement(node: SVGElement, keyframeName: string, type: \"enter\" | \"exit\" = \"enter\"): void {\n\tnode.style.opacity = \"1\";\n\tnode.style.animation = \"none\";\n\tnode.getBoundingClientRect();\n\tconst duration = type === \"exit\" ? \"var(--iso-anim-duration-exit, 300ms)\" : \"var(--iso-anim-duration-enter, 400ms)\";\n\tconst easing = type === \"exit\" ? \"var(--iso-anim-easing-exit, ease-in)\" : \"var(--iso-anim-easing-enter, ease-out)\";\n\tnode.style.animation = `${keyframeName} ${duration} ${easing} forwards`;\n}\n"],"names":["NS"],"mappings":"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"}