@cueframe/kernel 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/dist/_members/animate/index.d.ts +8 -2
  2. package/dist/_members/animate/layout/FlexLayout.d.ts +69 -0
  3. package/dist/_members/animate/layout/fit.d.ts +44 -0
  4. package/dist/_members/animate/layout/index.d.ts +3 -0
  5. package/dist/_members/animate/layout/solveFlex.d.ts +70 -0
  6. package/dist/_members/animate/media/MediaTileScene.d.ts +65 -0
  7. package/dist/_members/animate/media/recipes.d.ts +61 -0
  8. package/dist/_members/animate/scene/FocusPass.d.ts +76 -0
  9. package/dist/_members/animate/scene/UnlitPlane.d.ts +45 -0
  10. package/dist/_members/animate/scene/__oracle__/cssProjection.d.ts +24 -0
  11. package/dist/_members/animate/scene/assets.d.ts +21 -0
  12. package/dist/_members/animate/scene/backdrop.d.ts +7 -0
  13. package/dist/_members/animate/scene/coordinates.d.ts +58 -0
  14. package/dist/_members/animate/scene/deviceOpacity.d.ts +18 -0
  15. package/dist/_members/animate/scene/errors.d.ts +14 -0
  16. package/dist/_members/animate/scene/finishing.d.ts +69 -0
  17. package/dist/_members/animate/scene/finishingMath.d.ts +60 -0
  18. package/dist/_members/animate/scene/finishingPass.d.ts +35 -0
  19. package/dist/_members/animate/scene/focusBlur.d.ts +56 -0
  20. package/dist/_members/animate/scene/focusResources.d.ts +190 -0
  21. package/dist/_members/animate/scene/focusShaders.d.ts +68 -0
  22. package/dist/_members/animate/scene/fontReadiness.d.ts +27 -0
  23. package/dist/_members/animate/scene/grainNoise.d.ts +118 -0
  24. package/dist/_members/animate/scene/index.d.ts +19 -0
  25. package/dist/_members/animate/scene/internal.d.ts +29 -0
  26. package/dist/_members/animate/scene/planeFit.d.ts +46 -0
  27. package/dist/_members/animate/scene/preparedWorldText.d.ts +25 -0
  28. package/dist/_members/animate/scene/rasterCache.d.ts +30 -0
  29. package/dist/_members/animate/scene/rasterReadiness.d.ts +33 -0
  30. package/dist/_members/animate/scene/readiness.d.ts +69 -0
  31. package/dist/_members/animate/scene/redraw.d.ts +10 -0
  32. package/dist/_members/animate/scene/render.d.ts +9 -0
  33. package/dist/_members/animate/scene/scaling.d.ts +13 -0
  34. package/dist/_members/animate/scene/text.d.ts +40 -0
  35. package/dist/_members/animate/scene/textLayout.d.ts +78 -0
  36. package/dist/_members/animate/scene/textureImageSize.d.ts +4 -0
  37. package/dist/_members/animate/scene/useSceneImageTexture.d.ts +21 -0
  38. package/dist/_members/animate/scene/useWorldTextTexture.d.ts +21 -0
  39. package/dist/_members/animate/scene/v2/MeasuredPlaneGeometry.d.ts +7 -0
  40. package/dist/_members/animate/scene/v2/PhotographicStudioRig.d.ts +11 -0
  41. package/dist/_members/animate/scene/v2/PreparedSceneShotV1.d.ts +12 -0
  42. package/dist/_members/animate/scene/v2/SceneShotV2.d.ts +59 -0
  43. package/dist/_members/animate/scene/v2/builders.d.ts +170 -0
  44. package/dist/_members/animate/scene/v2/finishes.d.ts +152 -0
  45. package/dist/_members/animate/scene/v2/lighting.d.ts +119 -0
  46. package/dist/_members/animate/scene/v2/observePmremTargets.d.ts +4 -0
  47. package/dist/_members/animate/scene/v2/preparationFacts.d.ts +32 -0
  48. package/dist/_members/animate/scene/v2/preparedSurface.d.ts +17 -0
  49. package/dist/_members/animate/scene/v2/projectedResolution.d.ts +2 -0
  50. package/dist/_members/animate/scene/v2/renderTargetObserver.d.ts +5 -0
  51. package/dist/_members/animate/scene/v2/runtimeAllocations.d.ts +55 -0
  52. package/dist/_members/animate/scene/v2/shadow.d.ts +23 -0
  53. package/dist/_members/animate/scene/v2/slabGeometry.d.ts +134 -0
  54. package/dist/_members/animate/scene/v2/slots.d.ts +73 -0
  55. package/dist/_members/animate/scene/v2/videoBinding.d.ts +39 -0
  56. package/dist/_members/animate/scene/worldBounds.d.ts +19 -0
  57. package/dist/_members/animate/scene/worldTextRaster.d.ts +87 -0
  58. package/dist/_members/animate/scene/worldTextTexture.d.ts +32 -0
  59. package/dist/_members/animate/stage/PerspectiveStage.d.ts +73 -0
  60. package/dist/_members/animate/stage/camera.d.ts +143 -0
  61. package/dist/_members/animate/stage/dof.d.ts +9 -0
  62. package/dist/_members/animate/stage/index.d.ts +6 -0
  63. package/dist/_members/animate/stage/presets.d.ts +17 -0
  64. package/dist/_members/animate/three/DeviceMesh.d.ts +256 -0
  65. package/dist/_members/animate/three/SceneCameraRig.d.ts +12 -0
  66. package/dist/_members/animate/three/StageCameraRig.d.ts +7 -0
  67. package/dist/_members/animate/three/StudioRig.d.ts +228 -0
  68. package/dist/_members/animate/three/ThreeCanvas.d.ts +22 -0
  69. package/dist/_members/animate/three/defaultScreen.d.ts +23 -0
  70. package/dist/_members/animate/three/index.d.ts +7 -1
  71. package/dist/_members/animate/three/textureLifecycle.d.ts +29 -0
  72. package/dist/_members/animate/three/toneMapping.d.ts +113 -0
  73. package/dist/_members/animate/three/useImageTexture.d.ts +17 -0
  74. package/dist/_members/authoring/index.d.ts +2 -0
  75. package/dist/_members/authoring/scene/index.d.ts +6 -0
  76. package/dist/_members/authoring/scene/materialize.d.ts +47 -0
  77. package/dist/_members/authoring/scene/validate.d.ts +80 -0
  78. package/dist/_members/authoring/scene/wrapper.d.ts +41 -0
  79. package/dist/_members/component-runtime/allowedImports.d.ts +3 -0
  80. package/dist/_members/component-runtime/allowedImports.d.ts.map +1 -0
  81. package/dist/_members/component-runtime/bake.d.ts +8 -0
  82. package/dist/_members/component-runtime/bake.d.ts.map +1 -1
  83. package/dist/_members/component-runtime/browserFirewall.d.ts +7 -1
  84. package/dist/_members/component-runtime/browserFirewall.d.ts.map +1 -1
  85. package/dist/_members/component-runtime/browserOptions.d.ts +59 -3
  86. package/dist/_members/component-runtime/browserOptions.d.ts.map +1 -1
  87. package/dist/_members/component-runtime/canonicalIdentity.d.ts +14 -0
  88. package/dist/_members/component-runtime/canonicalIdentity.d.ts.map +1 -1
  89. package/dist/_members/component-runtime/contracts.d.ts +341 -1
  90. package/dist/_members/component-runtime/contracts.d.ts.map +1 -1
  91. package/dist/_members/component-runtime/fixtures/imageTileDriftWall.d.ts +5 -0
  92. package/dist/_members/component-runtime/fixtures/imageTileDriftWall.d.ts.map +1 -0
  93. package/dist/_members/component-runtime/fixtures/mediaTileMixed.d.ts +5 -0
  94. package/dist/_members/component-runtime/fixtures/mediaTileMixed.d.ts.map +1 -0
  95. package/dist/_members/component-runtime/fixtures/mediaTileVideo.d.ts +8 -0
  96. package/dist/_members/component-runtime/fixtures/mediaTileVideo.d.ts.map +1 -0
  97. package/dist/_members/component-runtime/importPolicy.d.ts +3 -2
  98. package/dist/_members/component-runtime/importPolicy.d.ts.map +1 -1
  99. package/dist/_members/component-runtime/index.d.ts +3 -0
  100. package/dist/_members/component-runtime/index.d.ts.map +1 -1
  101. package/dist/_members/component-runtime/livePreviewProxy.d.ts +7 -0
  102. package/dist/_members/component-runtime/livePreviewProxy.d.ts.map +1 -0
  103. package/dist/_members/component-runtime/localRoot.d.ts +37 -0
  104. package/dist/_members/component-runtime/localRoot.d.ts.map +1 -0
  105. package/dist/_members/component-runtime/mediaResolution.d.ts +25 -0
  106. package/dist/_members/component-runtime/mediaResolution.d.ts.map +1 -0
  107. package/dist/_members/component-runtime/render.d.ts +151 -13
  108. package/dist/_members/component-runtime/render.d.ts.map +1 -1
  109. package/dist/_members/component-runtime/renderDiagnostics.d.ts +14 -0
  110. package/dist/_members/component-runtime/renderDiagnostics.d.ts.map +1 -0
  111. package/dist/_members/component-runtime/sceneAdmission.d.ts +47 -0
  112. package/dist/_members/component-runtime/sceneAdmission.d.ts.map +1 -0
  113. package/dist/_members/component-runtime/sourceWorkspace.d.ts +8 -0
  114. package/dist/_members/component-runtime/sourceWorkspace.d.ts.map +1 -1
  115. package/dist/_members/component-runtime/webglProbe.d.ts +191 -0
  116. package/dist/_members/component-runtime/webglProbe.d.ts.map +1 -0
  117. package/dist/_members/composition/fonts/bundledFaces.d.ts +150 -0
  118. package/dist/_members/composition/fonts/captionFaces.d.ts +268 -0
  119. package/dist/_members/composition/fonts.d.ts +11 -4
  120. package/dist/_members/composition/graphics-plan/schemas.d.ts +4 -4
  121. package/dist/_members/composition/ops/types.d.ts +1 -1
  122. package/dist/_members/composition/primitive-catalog/types.d.ts +1 -0
  123. package/dist/_members/composition/projection/behind-readiness.d.ts +3 -0
  124. package/dist/_members/composition/projection/brandKit.d.ts +6 -0
  125. package/dist/_members/composition/projection/composition-floor.d.ts +2 -1
  126. package/dist/_members/composition/scene/animation.d.ts +25 -0
  127. package/dist/_members/composition/scene/budget.d.ts +29 -0
  128. package/dist/_members/composition/scene/budgetPolicy.d.mts +13 -0
  129. package/dist/_members/composition/scene/clipRules.d.ts +119 -0
  130. package/dist/_members/composition/scene/constraints.d.ts +61 -0
  131. package/dist/_members/composition/scene/device.d.ts +21 -0
  132. package/dist/_members/composition/scene/examples.d.ts +11 -0
  133. package/dist/_members/composition/scene/index.d.ts +11 -0
  134. package/dist/_members/composition/scene/photographicRig.d.ts +242 -0
  135. package/dist/_members/composition/scene/preparedRender.d.ts +239 -0
  136. package/dist/_members/composition/scene/resolution.d.ts +178 -0
  137. package/dist/_members/composition/scene/schema.d.ts +351 -0
  138. package/dist/_members/composition/scene/videoSchedule.d.ts +43 -0
  139. package/dist/_members/composition/validators/brandKit.d.ts +1 -0
  140. package/dist/_members/composition/validators/render.d.ts +2 -0
  141. package/dist/_members/composition-ops/index.d.ts +45 -0
  142. package/dist/_members/composition-ops/opRecorder.d.ts +1 -1
  143. package/dist/_members/core/render/compositionRender.d.ts +41 -9
  144. package/dist/_members/core/render/index.d.ts +9 -2
  145. package/dist/_members/core/render/sceneCaptureIdentity.d.ts +14 -0
  146. package/dist/_members/core/render/sceneShotPlan.d.ts +142 -0
  147. package/dist/_members/core/render/sceneShotPreparation.d.ts +57 -0
  148. package/dist/_members/core/render/slabDescriptor.d.ts +21 -0
  149. package/dist/_members/core/render/trackProjection.d.ts +33 -0
  150. package/dist/_members/core/render/types.d.ts +142 -0
  151. package/dist/_members/errors/registry.d.ts +6 -0
  152. package/dist/_members/mcp/adapter.d.ts +5 -0
  153. package/dist/_members/mcp/generated/sceneContract.d.ts +155 -0
  154. package/dist/_members/mcp/sceneShot.d.ts +38 -0
  155. package/dist/_members/mcp/sceneShotExample.d.ts +22 -0
  156. package/dist/_members/media-model/api.d.ts +1 -0
  157. package/dist/_members/media-model/media-kind.d.ts +1 -1
  158. package/dist/_members/media-model/testing/mediaStoreContract.d.ts +1 -1
  159. package/dist/_members/primitives/effects/index.d.ts +1 -0
  160. package/dist/_members/primitives/effects/stage-camera/config.d.ts +50 -0
  161. package/dist/_members/primitives/effects/stage-camera/index.d.ts +31 -0
  162. package/dist/_members/primitives/layouts/flex-layout/config.d.ts +73 -0
  163. package/dist/_members/primitives/layouts/flex-layout/index.d.ts +4 -0
  164. package/dist/_members/primitives/layouts/index.d.ts +1 -0
  165. package/dist/_members/primitives/layouts/picture-in-picture/config.d.ts +1 -1
  166. package/dist/_members/primitives/lib/frameScale.d.ts +4 -0
  167. package/dist/_members/primitives/lib/index.d.ts +1 -0
  168. package/dist/_members/primitives/lib/palette.d.ts +30 -30
  169. package/dist/_members/primitives/lib/text/contrast.d.ts +2 -1
  170. package/dist/_members/primitives/lib/text/spec.d.ts +0 -8
  171. package/dist/_members/primitives/lib/types.d.ts +2 -0
  172. package/dist/_members/primitives/scenes/device-showcase/config.d.ts +41 -0
  173. package/dist/_members/primitives/scenes/device-showcase/index.d.ts +36 -0
  174. package/dist/_members/primitives/scenes/hero-device-assemble/config.d.ts +1 -0
  175. package/dist/_members/primitives/scenes/hero-device-assemble/index.d.ts +2 -1
  176. package/dist/_members/primitives/scenes/index.d.ts +1 -0
  177. package/dist/_members/primitives/ui-blocks/badge-pop/config.d.ts +1 -1
  178. package/dist/_members/primitives/ui-blocks/device-mockup-zoom/config.d.ts +1 -0
  179. package/dist/_members/primitives/ui-blocks/device-mockup-zoom/index.d.ts +2 -1
  180. package/dist/_members/primitives/ui-blocks/terminal-simulator/config.d.ts +1 -1
  181. package/dist/_members/primitives/ui-blocks/toast-notification/config.d.ts +1 -1
  182. package/dist/_members/render-harness/cardAssetAdmission.d.ts.map +1 -1
  183. package/dist/_members/render-harness/cardRender.d.ts.map +1 -1
  184. package/dist/_members/render-harness/css-tree-subpaths.d.ts +11 -0
  185. package/dist/_members/render-harness/extractSegments.d.ts +1 -0
  186. package/dist/_members/render-harness/extractSegments.d.ts.map +1 -1
  187. package/dist/_members/render-harness/imageHeader.d.ts +14 -0
  188. package/dist/_members/render-harness/imageHeader.d.ts.map +1 -0
  189. package/dist/_members/render-harness/index.d.ts +6 -0
  190. package/dist/_members/render-harness/index.d.ts.map +1 -1
  191. package/dist/_members/render-harness/materializeSources.d.ts +46 -2
  192. package/dist/_members/render-harness/materializeSources.d.ts.map +1 -1
  193. package/dist/_members/render-harness/nodeScenePreparation.d.ts +97 -0
  194. package/dist/_members/render-harness/nodeScenePreparation.d.ts.map +1 -0
  195. package/dist/_members/render-harness/remotion-runtime.d.ts +16 -2
  196. package/dist/_members/render-harness/renderInputAssets.d.ts +1 -1
  197. package/dist/_members/render-harness/renderInputAssets.d.ts.map +1 -1
  198. package/dist/_members/render-harness/resolveAssets.d.ts +2 -2
  199. package/dist/_members/render-harness/resolveAssets.d.ts.map +1 -1
  200. package/dist/_members/render-harness/sceneShotAssets.d.ts +17 -0
  201. package/dist/_members/render-harness/sceneShotAssets.d.ts.map +1 -0
  202. package/dist/animate/preparation-facts.d.ts +1 -0
  203. package/dist/animate/preparation-facts.js +22 -0
  204. package/dist/animate.js +336 -1005
  205. package/dist/authoring/build-tools.js +7 -6
  206. package/dist/authoring/context.js +5 -4
  207. package/dist/authoring/prompts.js +1 -1
  208. package/dist/authoring/scene.d.ts +1 -0
  209. package/dist/authoring/scene.js +50 -0
  210. package/dist/authoring/tools.js +6 -5
  211. package/dist/authoring.js +49 -29
  212. package/dist/chunk-2L7PYYJK.js +23 -0
  213. package/dist/{chunk-ZN6P3KOJ.js → chunk-32TH76H3.js} +2 -2
  214. package/dist/chunk-5DJ3IEJR.js +4424 -0
  215. package/dist/chunk-6BVVCRRD.js +26488 -0
  216. package/dist/{chunk-DQKSCHFC.js → chunk-6EWRIAZA.js} +187 -66
  217. package/dist/{chunk-YQ7FFW3G.js → chunk-6VWICHOZ.js} +26 -5
  218. package/dist/{chunk-RETQFTGY.js → chunk-A74FZCPY.js} +42 -5
  219. package/dist/{chunk-C5SEPOWD.js → chunk-AS5EXBNS.js} +1792 -707
  220. package/dist/{chunk-U5LBYS3N.js → chunk-B3GSTQLR.js} +339 -272
  221. package/dist/chunk-BVA3537Z.js +63 -0
  222. package/dist/{chunk-DHKQ47Q6.js → chunk-DAARYRNT.js} +6 -1
  223. package/dist/chunk-DQLYWNLC.js +2063 -0
  224. package/dist/chunk-E6WHXIDF.js +3619 -0
  225. package/dist/{chunk-HXKTZPRH.js → chunk-E7GIZEPS.js} +1 -1
  226. package/dist/{chunk-M2TLRXEO.js → chunk-EXY4JJPH.js} +1 -1
  227. package/dist/{chunk-GEGRJKKO.js → chunk-F2DJL7P7.js} +1 -1
  228. package/dist/{chunk-AWT3P5ZN.js → chunk-FVDFPJHT.js} +1 -1
  229. package/dist/{chunk-EMGFZ3PR.js → chunk-FWSJLHSV.js} +5 -1
  230. package/dist/{chunk-TMIBBD5E.js → chunk-I5QWBM3M.js} +280 -113
  231. package/dist/{chunk-IBMJ33EL.js → chunk-I5RX2QZT.js} +1 -1
  232. package/dist/{chunk-4FOOBSEE.js → chunk-J3DIUG24.js} +1 -0
  233. package/dist/{chunk-AD5HWBCE.js → chunk-JX53CVJV.js} +14 -5
  234. package/dist/{chunk-LNBVTDFR.js → chunk-L2AHS3AW.js} +1 -1
  235. package/dist/{chunk-BDMTUEEZ.js → chunk-LT4PWSR2.js} +2 -2
  236. package/dist/chunk-MH3UPKWR.js +3415 -0
  237. package/dist/{chunk-RFXR7ATW.js → chunk-NUKDEOK6.js} +13 -1
  238. package/dist/{chunk-IJ7PVJTK.js → chunk-ODUWCQI3.js} +3 -2
  239. package/dist/chunk-QAGGJHAF.js +16 -0
  240. package/dist/chunk-QS36DMFG.js +332 -0
  241. package/dist/{chunk-G5BFI32U.js → chunk-RAXHCRVV.js} +1 -1
  242. package/dist/{chunk-BIBYZJL3.js → chunk-RL5SO653.js} +3 -3
  243. package/dist/{chunk-ZSZABOE5.js → chunk-S5H6GH6M.js} +1 -1
  244. package/dist/{chunk-EEXCDFY5.js → chunk-SD25VQDE.js} +1 -1
  245. package/dist/{chunk-7REW2MW3.js → chunk-SX523NDS.js} +10 -10
  246. package/dist/chunk-TARKDVP6.js +430 -0
  247. package/dist/{chunk-IHFREGFA.js → chunk-TCHPRGC5.js} +18 -2
  248. package/dist/{chunk-ZCAQHNPI.js → chunk-UKGNHZS4.js} +1 -1
  249. package/dist/{chunk-WQSGVRFU.js → chunk-UY77TMKD.js} +31 -44
  250. package/dist/chunk-VKATKWWR.js +1462 -0
  251. package/dist/{chunk-CX2IIQ4R.js → chunk-W2245F6G.js} +29 -29
  252. package/dist/{chunk-XHUYWVYK.js → chunk-WBNFSG6T.js} +1 -1
  253. package/dist/chunk-WIHXXF3X.js +221 -0
  254. package/dist/{chunk-XVBOSPZI.js → chunk-X74EEFXV.js} +6 -6
  255. package/dist/{chunk-7KEUL3FI.js → chunk-XF2QMKRG.js} +9 -1
  256. package/dist/{chunk-HFC3MKXA.js → chunk-Y4HPN4BC.js} +1 -0
  257. package/dist/{chunk-D43J23QX.js → chunk-YFSBFCXO.js} +1018 -42
  258. package/dist/{chunk-6ID2J64H.js → chunk-YHC3RXS7.js} +162 -25
  259. package/dist/{chunk-KKEY5MIW.js → chunk-ZS3A3QUM.js} +16 -16
  260. package/dist/{chunk-LQUWKBST.js → chunk-ZVG446DJ.js} +139 -10
  261. package/dist/component-runtime/browserOptions.js +14 -3
  262. package/dist/component-runtime/contracts.js +35 -3
  263. package/dist/component-runtime/identity/browser.js +1 -1
  264. package/dist/component-runtime/identity.js +2 -2
  265. package/dist/component-runtime/importPolicy.js +2 -2
  266. package/dist/component-runtime/mediaResolution.d.ts +1 -0
  267. package/dist/component-runtime/mediaResolution.js +11 -0
  268. package/dist/component-runtime/render.js +38 -5
  269. package/dist/component-runtime.js +118 -14
  270. package/dist/compose.js +26 -20
  271. package/dist/composition/fonts.js +64 -67
  272. package/dist/composition/graphics-plan.js +3 -2
  273. package/dist/composition/ops.js +4 -3
  274. package/dist/composition/primitive-catalog.js +1 -1
  275. package/dist/composition/projection.js +10 -3
  276. package/dist/composition/scene/budget-policy.d.ts +1 -0
  277. package/dist/composition/scene/budget-policy.js +17 -0
  278. package/dist/composition/scene/schema.json +2757 -0
  279. package/dist/composition/scene.d.ts +1 -0
  280. package/dist/composition/scene.js +275 -0
  281. package/dist/composition/validators.js +3 -2
  282. package/dist/composition-ops.js +103 -13
  283. package/dist/composition.js +12 -5
  284. package/dist/{context-4GSDBFT3.js → context-IUPQ54V4.js} +5 -4
  285. package/dist/core/render.js +54 -3
  286. package/dist/core/select.js +2 -2
  287. package/dist/core.js +6 -3
  288. package/dist/director/ai-sdk.js +3 -3
  289. package/dist/director/domain.js +2 -2
  290. package/dist/director.js +3 -3
  291. package/dist/errors.js +1 -1
  292. package/dist/mcp/adapter.js +4 -4
  293. package/dist/mcp/core.js +1 -1
  294. package/dist/mcp/curation.js +1 -1
  295. package/dist/mcp/server.js +4 -4
  296. package/dist/mcp.js +4 -4
  297. package/dist/media-model/media-kind.js +2 -0
  298. package/dist/media-model/testing.js +16 -11
  299. package/dist/media-model.js +1 -1
  300. package/dist/nle-export.js +26 -20
  301. package/dist/primitives/backgrounds.js +2 -2
  302. package/dist/primitives/captions.js +21 -11
  303. package/dist/primitives/effects.js +14 -4
  304. package/dist/primitives/graphics.json +3 -0
  305. package/dist/primitives/hero-text.js +4 -3
  306. package/dist/primitives/layouts.js +9 -2
  307. package/dist/primitives/lib/frameScale.d.ts +1 -0
  308. package/dist/primitives/lib/frameScale.js +11 -0
  309. package/dist/primitives/lib/index.js +18 -10
  310. package/dist/primitives/lib/palette.js +1 -1
  311. package/dist/primitives/lib/text/contrast.js +2 -1
  312. package/dist/primitives/lib/text/typeface.js +1 -1
  313. package/dist/primitives/lib.js +18 -10
  314. package/dist/primitives/params-required.json +3 -0
  315. package/dist/primitives/scenes.js +12 -3
  316. package/dist/primitives/text.js +5 -5
  317. package/dist/primitives/transitions.js +2 -2
  318. package/dist/primitives/ui-blocks.js +6 -5
  319. package/dist/primitives/version-map.json +5 -2
  320. package/dist/primitives.js +20 -13
  321. package/dist/render-harness/cardAssetAdmission.js +2 -2
  322. package/dist/render-harness/renderInputAssets.js +2 -2
  323. package/dist/render-harness.js +874 -124
  324. package/package.json +49 -15
  325. package/dist/_members/animate/three/drei.d.ts +0 -6
  326. package/dist/_members/component-runtime/fixtures/webgpuTiledRefraction.d.ts +0 -9
  327. package/dist/_members/component-runtime/fixtures/webgpuTiledRefraction.d.ts.map +0 -1
  328. package/dist/chunk-5OTQ7M43.js +0 -718
  329. package/dist/chunk-CGHTMZNC.js +0 -6
  330. package/dist/chunk-KVMVYRXX.js +0 -9527
  331. package/dist/chunk-WYQX4QIK.js +0 -544
  332. /package/dist/{chunk-H5LMJKZU.js → chunk-JVDUSOYG.js} +0 -0
@@ -4,9 +4,17 @@ import {
4
4
  } from "./chunk-QGAWDLYX.js";
5
5
  import {
6
6
  DashboardPopulate
7
- } from "./chunk-ZSZABOE5.js";
7
+ } from "./chunk-S5H6GH6M.js";
8
8
  import {
9
+ useFrameScale
10
+ } from "./chunk-QAGGJHAF.js";
11
+ import {
12
+ EASING_BY_INTENT
13
+ } from "./chunk-MFHXCHRI.js";
14
+ import {
15
+ ACCENT,
9
16
  ACCENT_SOFT,
17
+ ACCENT_STRONG,
10
18
  BG,
11
19
  BG_DEEP,
12
20
  BLUE,
@@ -27,7 +35,22 @@ import {
27
35
  TEXT_MUTED,
28
36
  VIOLET,
29
37
  WARNING
30
- } from "./chunk-CX2IIQ4R.js";
38
+ } from "./chunk-W2245F6G.js";
39
+ import {
40
+ CAMERA_PRESETS,
41
+ DEFAULT_CAMERA,
42
+ ThreeCanvas,
43
+ makeDefaultScreenTexture,
44
+ resolveCamera,
45
+ useImageTexture
46
+ } from "./chunk-5DJ3IEJR.js";
47
+ import {
48
+ DEVICE_GLASS_OPACITY_ENCODED,
49
+ DeviceMesh,
50
+ StudioRig,
51
+ deviceDimensions,
52
+ laptopLayout
53
+ } from "./chunk-VKATKWWR.js";
31
54
 
32
55
  // ../execution/primitives/src/scenes/changelog-bite/index.tsx
33
56
  import {
@@ -403,8 +426,9 @@ var EVENTS = [
403
426
  },
404
427
  { code: "\n style={{", ui: {} },
405
428
  {
406
- code: '\n background: "#7b93b0",',
407
- ui: { background: "#7b93b0" }
429
+ code: `
430
+ background: "${BLUE}",`,
431
+ ui: { background: BLUE }
408
432
  },
409
433
  {
410
434
  code: '\n color: "white",',
@@ -466,7 +490,7 @@ function highlightLine(line, accentColor) {
466
490
  return tokens;
467
491
  }
468
492
  function LiveCodeCompilation({
469
- accentColor = "#7b93b0",
493
+ accentColor = BLUE,
470
494
  speed = 1,
471
495
  className
472
496
  }) {
@@ -751,7 +775,7 @@ function ProductLaunchTrailer({
751
775
  logoLabel = "R",
752
776
  productName = "Remocn",
753
777
  versionLabel = "v1.0 is live",
754
- accentPeach = ACCENT_SOFT,
778
+ accentPeach = ACCENT_STRONG,
755
779
  accentLavender = VIOLET,
756
780
  accentMint = SUCCESS,
757
781
  background = BG,
@@ -1271,9 +1295,12 @@ function toHex(alpha) {
1271
1295
  }
1272
1296
 
1273
1297
  // ../execution/primitives/src/scenes/hero-device-assemble/index.tsx
1274
- import { interpolate as interpolate3, spring as spring3, useCurrentFrame as useCurrentFrame4, useVideoConfig as useVideoConfig3 } from "remotion";
1298
+ import { Img, interpolate as interpolate3, spring as spring3, useCurrentFrame as useCurrentFrame4, useVideoConfig as useVideoConfig3 } from "remotion";
1275
1299
  var FONT_FAMILY4 = "inherit";
1276
- function MockUI({ accentColor }) {
1300
+ function MockUI({
1301
+ accentColor,
1302
+ scale
1303
+ }) {
1277
1304
  return /* @__PURE__ */ React.createElement(
1278
1305
  "div",
1279
1306
  {
@@ -1297,16 +1324,16 @@ function MockUI({ accentColor }) {
1297
1324
  borderBottom: "1px solid rgba(255,255,255,0.06)",
1298
1325
  display: "flex",
1299
1326
  alignItems: "center",
1300
- padding: "0 16px",
1301
- gap: 8
1327
+ padding: `0 ${16 * scale}px`,
1328
+ gap: 8 * scale
1302
1329
  }
1303
1330
  },
1304
1331
  /* @__PURE__ */ React.createElement(
1305
1332
  "div",
1306
1333
  {
1307
1334
  style: {
1308
- width: 10,
1309
- height: 10,
1335
+ width: 10 * scale,
1336
+ height: 10 * scale,
1310
1337
  borderRadius: "50%",
1311
1338
  background: "rgba(255,255,255,0.18)"
1312
1339
  }
@@ -1316,8 +1343,8 @@ function MockUI({ accentColor }) {
1316
1343
  "div",
1317
1344
  {
1318
1345
  style: {
1319
- width: 10,
1320
- height: 10,
1346
+ width: 10 * scale,
1347
+ height: 10 * scale,
1321
1348
  borderRadius: "50%",
1322
1349
  background: "rgba(255,255,255,0.18)"
1323
1350
  }
@@ -1327,8 +1354,8 @@ function MockUI({ accentColor }) {
1327
1354
  "div",
1328
1355
  {
1329
1356
  style: {
1330
- width: 10,
1331
- height: 10,
1357
+ width: 10 * scale,
1358
+ height: 10 * scale,
1332
1359
  borderRadius: "50%",
1333
1360
  background: "rgba(255,255,255,0.18)"
1334
1361
  }
@@ -1342,18 +1369,18 @@ function MockUI({ accentColor }) {
1342
1369
  width: "22%",
1343
1370
  background: BG,
1344
1371
  borderRight: "1px solid rgba(255,255,255,0.05)",
1345
- padding: 16,
1372
+ padding: 16 * scale,
1346
1373
  display: "flex",
1347
1374
  flexDirection: "column",
1348
- gap: 10
1375
+ gap: 10 * scale
1349
1376
  }
1350
1377
  },
1351
1378
  /* @__PURE__ */ React.createElement(
1352
1379
  "div",
1353
1380
  {
1354
1381
  style: {
1355
- height: 12,
1356
- borderRadius: 4,
1382
+ height: 12 * scale,
1383
+ borderRadius: 4 * scale,
1357
1384
  background: accentColor,
1358
1385
  opacity: 0.85,
1359
1386
  width: "70%"
@@ -1364,8 +1391,8 @@ function MockUI({ accentColor }) {
1364
1391
  "div",
1365
1392
  {
1366
1393
  style: {
1367
- height: 10,
1368
- borderRadius: 4,
1394
+ height: 10 * scale,
1395
+ borderRadius: 4 * scale,
1369
1396
  background: "rgba(255,255,255,0.1)",
1370
1397
  width: "85%"
1371
1398
  }
@@ -1375,8 +1402,8 @@ function MockUI({ accentColor }) {
1375
1402
  "div",
1376
1403
  {
1377
1404
  style: {
1378
- height: 10,
1379
- borderRadius: 4,
1405
+ height: 10 * scale,
1406
+ borderRadius: 4 * scale,
1380
1407
  background: "rgba(255,255,255,0.08)",
1381
1408
  width: "60%"
1382
1409
  }
@@ -1386,8 +1413,8 @@ function MockUI({ accentColor }) {
1386
1413
  "div",
1387
1414
  {
1388
1415
  style: {
1389
- height: 10,
1390
- borderRadius: 4,
1416
+ height: 10 * scale,
1417
+ borderRadius: 4 * scale,
1391
1418
  background: "rgba(255,255,255,0.08)",
1392
1419
  width: "75%"
1393
1420
  }
@@ -1398,20 +1425,20 @@ function MockUI({ accentColor }) {
1398
1425
  {
1399
1426
  style: {
1400
1427
  flex: 1,
1401
- padding: 24,
1428
+ padding: 24 * scale,
1402
1429
  display: "flex",
1403
1430
  flexDirection: "column",
1404
- gap: 16
1431
+ gap: 16 * scale
1405
1432
  }
1406
1433
  },
1407
1434
  /* @__PURE__ */ React.createElement(
1408
1435
  "div",
1409
1436
  {
1410
1437
  style: {
1411
- height: 18,
1438
+ height: 18 * scale,
1412
1439
  width: "40%",
1413
1440
  background: "rgba(255,255,255,0.85)",
1414
- borderRadius: 4
1441
+ borderRadius: 4 * scale
1415
1442
  }
1416
1443
  }
1417
1444
  ),
@@ -1419,10 +1446,10 @@ function MockUI({ accentColor }) {
1419
1446
  "div",
1420
1447
  {
1421
1448
  style: {
1422
- height: 10,
1449
+ height: 10 * scale,
1423
1450
  width: "65%",
1424
1451
  background: "rgba(255,255,255,0.18)",
1425
- borderRadius: 4
1452
+ borderRadius: 4 * scale
1426
1453
  }
1427
1454
  }
1428
1455
  ),
@@ -1432,16 +1459,16 @@ function MockUI({ accentColor }) {
1432
1459
  style: {
1433
1460
  display: "grid",
1434
1461
  gridTemplateColumns: "1fr 1fr 1fr",
1435
- gap: 12,
1436
- marginTop: 12
1462
+ gap: 12 * scale,
1463
+ marginTop: 12 * scale
1437
1464
  }
1438
1465
  },
1439
1466
  /* @__PURE__ */ React.createElement(
1440
1467
  "div",
1441
1468
  {
1442
1469
  style: {
1443
- height: 90,
1444
- borderRadius: 8,
1470
+ height: 90 * scale,
1471
+ borderRadius: 8 * scale,
1445
1472
  background: "linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.02))",
1446
1473
  border: "1px solid rgba(255,255,255,0.06)"
1447
1474
  }
@@ -1451,8 +1478,8 @@ function MockUI({ accentColor }) {
1451
1478
  "div",
1452
1479
  {
1453
1480
  style: {
1454
- height: 90,
1455
- borderRadius: 8,
1481
+ height: 90 * scale,
1482
+ borderRadius: 8 * scale,
1456
1483
  background: `linear-gradient(180deg, ${accentColor}33, ${accentColor}11)`,
1457
1484
  border: `1px solid ${accentColor}55`
1458
1485
  }
@@ -1462,8 +1489,8 @@ function MockUI({ accentColor }) {
1462
1489
  "div",
1463
1490
  {
1464
1491
  style: {
1465
- height: 90,
1466
- borderRadius: 8,
1492
+ height: 90 * scale,
1493
+ borderRadius: 8 * scale,
1467
1494
  background: "linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.02))",
1468
1495
  border: "1px solid rgba(255,255,255,0.06)"
1469
1496
  }
@@ -1475,7 +1502,7 @@ function MockUI({ accentColor }) {
1475
1502
  {
1476
1503
  style: {
1477
1504
  flex: 1,
1478
- borderRadius: 8,
1505
+ borderRadius: 8 * scale,
1479
1506
  background: "linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.01))",
1480
1507
  border: "1px solid rgba(255,255,255,0.06)"
1481
1508
  }
@@ -1487,22 +1514,24 @@ function MockUI({ accentColor }) {
1487
1514
  function HeroDeviceAssemble({
1488
1515
  assembleStart = 0,
1489
1516
  device = "laptop",
1517
+ screenSrc,
1490
1518
  accentColor = SUCCESS,
1491
1519
  speed = 1,
1492
1520
  className
1493
1521
  }) {
1494
1522
  const frame = useCurrentFrame4() * speed;
1495
1523
  const { fps } = useVideoConfig3();
1524
+ const s = useFrameScale();
1496
1525
  const assemble = spring3({
1497
1526
  frame: frame - assembleStart,
1498
1527
  fps,
1499
1528
  config: { mass: 1.4, damping: 12, stiffness: 90 },
1500
1529
  durationInFrames: 60
1501
1530
  });
1502
- const lidZ = interpolate3(assemble, [0, 1], [1e3, 0]);
1503
- const baseZ = interpolate3(assemble, [0, 1], [-800, 0]);
1504
- const bezelZ = interpolate3(assemble, [0, 1], [600, 0]);
1505
- const screenZ = interpolate3(assemble, [0, 1], [300, 0]);
1531
+ const lidZ = interpolate3(assemble, [0, 1], [1e3 * s, 0]);
1532
+ const baseZ = interpolate3(assemble, [0, 1], [-800 * s, 0]);
1533
+ const bezelZ = interpolate3(assemble, [0, 1], [600 * s, 0]);
1534
+ const screenZ = interpolate3(assemble, [0, 1], [300 * s, 0]);
1506
1535
  const rotX = interpolate3(assemble, [0, 1], [-22, 0]);
1507
1536
  const rotY = interpolate3(assemble, [0, 1], [28, 0]);
1508
1537
  const layerOpacity = interpolate3(assemble, [0, 0.4], [0, 1], {
@@ -1523,10 +1552,10 @@ function HeroDeviceAssemble({
1523
1552
  { extrapolateLeft: "clamp", extrapolateRight: "clamp" }
1524
1553
  );
1525
1554
  const isPhone = device === "phone";
1526
- const deviceW = isPhone ? 320 : 760;
1527
- const deviceH = isPhone ? 640 : 470;
1528
- const screenInset = isPhone ? 12 : 18;
1529
- const bezelRadius = isPhone ? 36 : 14;
1555
+ const deviceW = (isPhone ? 320 : 760) * s;
1556
+ const deviceH = (isPhone ? 640 : 470) * s;
1557
+ const screenInset = (isPhone ? 12 : 18) * s;
1558
+ const bezelRadius = (isPhone ? 36 : 14) * s;
1530
1559
  return /* @__PURE__ */ React.createElement(
1531
1560
  "div",
1532
1561
  {
@@ -1539,7 +1568,7 @@ function HeroDeviceAssemble({
1539
1568
  display: "flex",
1540
1569
  alignItems: "center",
1541
1570
  justifyContent: "center",
1542
- perspective: 2e3,
1571
+ perspective: 2e3 * s,
1543
1572
  fontFamily: FONT_FAMILY4
1544
1573
  }
1545
1574
  },
@@ -1561,9 +1590,9 @@ function HeroDeviceAssemble({
1561
1590
  style: {
1562
1591
  position: "absolute",
1563
1592
  inset: 0,
1564
- transform: `translateZ(${lidZ - 8}px)`,
1593
+ transform: `translateZ(${lidZ - 8 * s}px)`,
1565
1594
  background: `linear-gradient(180deg, ${SURFACE_HI} 0%, ${BG} 100%)`,
1566
- borderRadius: bezelRadius + 4,
1595
+ borderRadius: bezelRadius + 4 * s,
1567
1596
  border: "1px solid rgba(255,255,255,0.08)",
1568
1597
  opacity: layerOpacity
1569
1598
  }
@@ -1574,14 +1603,14 @@ function HeroDeviceAssemble({
1574
1603
  {
1575
1604
  style: {
1576
1605
  position: "absolute",
1577
- left: -40,
1578
- right: -40,
1579
- bottom: -28,
1580
- height: 28,
1606
+ left: -40 * s,
1607
+ right: -40 * s,
1608
+ bottom: -28 * s,
1609
+ height: 28 * s,
1581
1610
  transform: `translateZ(${baseZ}px) rotateX(78deg)`,
1582
1611
  transformOrigin: "top center",
1583
1612
  background: `linear-gradient(180deg, ${SURFACE_HI} 0%, ${BG} 100%)`,
1584
- borderRadius: "0 0 12px 12px",
1613
+ borderRadius: `0 0 ${12 * s}px ${12 * s}px`,
1585
1614
  border: "1px solid rgba(255,255,255,0.06)",
1586
1615
  opacity: layerOpacity
1587
1616
  }
@@ -1608,7 +1637,7 @@ function HeroDeviceAssemble({
1608
1637
  position: "absolute",
1609
1638
  inset: screenInset,
1610
1639
  transform: `translateZ(${screenZ}px)`,
1611
- borderRadius: bezelRadius - 6,
1640
+ borderRadius: bezelRadius - 6 * s,
1612
1641
  overflow: "hidden",
1613
1642
  background: "black",
1614
1643
  opacity: layerOpacity
@@ -1625,7 +1654,19 @@ function HeroDeviceAssemble({
1625
1654
  }
1626
1655
  }
1627
1656
  ),
1628
- /* @__PURE__ */ React.createElement("div", { style: { position: "absolute", inset: 0, opacity: screenWake } }, /* @__PURE__ */ React.createElement(MockUI, { accentColor })),
1657
+ /* @__PURE__ */ React.createElement("div", { style: { position: "absolute", inset: 0, opacity: screenWake } }, screenSrc ? /* @__PURE__ */ React.createElement(
1658
+ Img,
1659
+ {
1660
+ src: screenSrc,
1661
+ style: {
1662
+ position: "absolute",
1663
+ inset: 0,
1664
+ width: "100%",
1665
+ height: "100%",
1666
+ objectFit: "cover"
1667
+ }
1668
+ }
1669
+ ) : /* @__PURE__ */ React.createElement(MockUI, { accentColor, scale: s })),
1629
1670
  /* @__PURE__ */ React.createElement(
1630
1671
  "div",
1631
1672
  {
@@ -1725,7 +1766,7 @@ function PricingTierFocus({
1725
1766
  const lift = isFocused ? focusLift : 0;
1726
1767
  const brightness = isFocused ? 1 : sideBrightness;
1727
1768
  const blurPx = isFocused ? 0 : sideBlur;
1728
- const z8 = isFocused ? 10 : 1;
1769
+ const z9 = isFocused ? 10 : 1;
1729
1770
  return /* @__PURE__ */ React.createElement(
1730
1771
  "div",
1731
1772
  {
@@ -1741,7 +1782,7 @@ function PricingTierFocus({
1741
1782
  border: isFocused ? `1px solid ${accentColor}88` : `1px solid ${BORDER}`,
1742
1783
  transform: `translateY(${lift}px) scale(${scale})`,
1743
1784
  filter: `brightness(${brightness}) blur(${blurPx}px)`,
1744
- zIndex: z8,
1785
+ zIndex: z9,
1745
1786
  display: "flex",
1746
1787
  flexDirection: "column",
1747
1788
  willChange: "transform, filter"
@@ -2907,6 +2948,72 @@ function LandingCodeShowcase({
2907
2948
  );
2908
2949
  }
2909
2950
 
2951
+ // ../execution/primitives/src/scenes/device-showcase/index.tsx
2952
+ import { useMemo } from "react";
2953
+ import { AbsoluteFill as AbsoluteFill4, interpolate as interpolate7, spring as spring7, useCurrentFrame as useCurrentFrame8, useVideoConfig as useVideoConfig7 } from "remotion";
2954
+ function deviceBodyWidth(kind, frameWidth) {
2955
+ return kind === "laptop" ? Math.round(frameWidth * 0.57) : Math.round(frameWidth * 0.2);
2956
+ }
2957
+ function deviceGroupY(kind, frameHeight) {
2958
+ return kind === "laptop" ? Math.round(frameHeight * 0.02) : 0;
2959
+ }
2960
+ var FLOOR_EPSILON = 0.5;
2961
+ function deviceFloorY(kind, frameWidth, frameHeight) {
2962
+ const dim = deviceDimensions(kind, deviceBodyWidth(kind, frameWidth));
2963
+ const groupY = deviceGroupY(kind, frameHeight);
2964
+ const bottom = kind === "laptop" ? groupY + laptopLayout(dim).bottomY : groupY - dim.h / 2;
2965
+ return bottom - FLOOR_EPSILON;
2966
+ }
2967
+ var PLACEHOLDER_LONG_EDGE = 1600;
2968
+ function useScreenTexture(src, accent, screenW, screenH) {
2969
+ const loaded = useImageTexture(src ?? null);
2970
+ const fallback = useMemo(() => {
2971
+ if (src) return null;
2972
+ const scale = PLACEHOLDER_LONG_EDGE / Math.max(screenW, screenH);
2973
+ return makeDefaultScreenTexture(accent, Math.round(screenW * scale), Math.round(screenH * scale));
2974
+ }, [src, accent, screenW, screenH]);
2975
+ return src ? loaded : fallback;
2976
+ }
2977
+ function DeviceShowcase({
2978
+ device = "laptop",
2979
+ screenSrc,
2980
+ move = "dolly-in",
2981
+ fov = 36,
2982
+ amount,
2983
+ easing = "entrance",
2984
+ finish = "#2a2a30",
2985
+ background = BG,
2986
+ accentColor = ACCENT,
2987
+ openAngle = 100,
2988
+ lighting = "soft",
2989
+ speed = 1
2990
+ }) {
2991
+ const frame = useCurrentFrame8() * speed;
2992
+ const { fps, width, height, durationInFrames } = useVideoConfig7();
2993
+ const keyframes = useMemo(
2994
+ () => CAMERA_PRESETS[move](durationInFrames, { fov, amount, easing: EASING_BY_INTENT[easing] }),
2995
+ [move, durationInFrames, fov, amount, easing]
2996
+ );
2997
+ const camera = resolveCamera(keyframes, frame, { ...DEFAULT_CAMERA, fov });
2998
+ const lid = spring7({ frame, fps, config: { mass: 1.2, damping: 16, stiffness: 70 }, durationInFrames: Math.round(fps * 1.4) });
2999
+ const angle = device === "laptop" ? interpolate7(lid, [0, 1], [30, openAngle]) : 0;
3000
+ const bodyWidth = deviceBodyWidth(device, width);
3001
+ const dim = deviceDimensions(device, bodyWidth);
3002
+ const screen = useScreenTexture(screenSrc, accentColor, dim.w - dim.screenInset * 2, dim.h - dim.screenInset * 2);
3003
+ return /* @__PURE__ */ React.createElement(AbsoluteFill4, { style: { background: `radial-gradient(ellipse at 50% 60%, ${SURFACE} 0%, ${background} 65%)` } }, /* @__PURE__ */ React.createElement(ThreeCanvas, { width, height, stageCamera: camera, shadows: true }, /* @__PURE__ */ React.createElement(StudioRig, { preset: lighting, floorY: deviceFloorY(device, width, height) }), /* @__PURE__ */ React.createElement(
3004
+ DeviceMesh,
3005
+ {
3006
+ kind: device,
3007
+ screen,
3008
+ finish,
3009
+ glassOpacity: DEVICE_GLASS_OPACITY_ENCODED,
3010
+ openAngle: angle,
3011
+ width: bodyWidth,
3012
+ position: [0, deviceGroupY(device, height), 0]
3013
+ }
3014
+ )));
3015
+ }
3016
+
2910
3017
  // ../execution/primitives/src/scenes/changelog-bite/config.ts
2911
3018
  import { z } from "zod";
2912
3019
  var paramsSchema = z.object({
@@ -2915,7 +3022,7 @@ var paramsSchema = z.object({
2915
3022
  format: z.enum(["square", "portrait"]).default("square").describe("Aspect ratio. square: 1080\xD71080. portrait: 1080\xD71920."),
2916
3023
  background: z.string().optional().describe("Frame background."),
2917
3024
  cardBackground: z.string().optional().describe("Card panel background."),
2918
- accent: z.string().default("#ffb38e").describe('Accent color for label/highlights. Brand-bindable: pass "$brand:colors.accent" to track the project brand kit.'),
3025
+ accent: z.string().default(ACCENT_SOFT).describe('Accent color for label/highlights. Brand-bindable: pass "$brand:colors.accent" to track the project brand kit.'),
2919
3026
  speed: z.number().min(0.25).max(4).default(1).describe("Playback speed multiplier."),
2920
3027
  oldLines: z.array(z.string()).optional().describe("BEFORE-panel content: one string per line (e.g. the old code). Rendered as monospace text. Omit to show the baked sample diff."),
2921
3028
  newLines: z.array(z.string()).optional().describe("AFTER-panel content: one string per line (e.g. the new code). Rendered as monospace text. Omit to show the baked sample diff.")
@@ -2937,11 +3044,11 @@ var config = {
2937
3044
  tags: ["scene", "changelog", "release", "social", "comparison"],
2938
3045
  mood: ["corporate", "tech-demo", "minimal"],
2939
3046
  paramsSchema,
2940
- propDefaults: { label: "Changelog", title: "Faster builds", format: "square", accent: "#ffb38e", speed: 1 },
3047
+ propDefaults: { label: "Changelog", title: "Faster builds", format: "square", accent: ACCENT_SOFT, speed: 1 },
2941
3048
  primitivesUsed: [],
2942
3049
  examples: [
2943
- { name: "square-feed", mood: ["corporate"], params: { label: "Changelog", title: "Faster builds", format: "square", accent: "#ffb38e", speed: 1 } },
2944
- { name: "portrait-story", mood: ["minimal"], params: { label: "v2.1", title: "New API surface", format: "portrait", accent: "#9b8bb0", speed: 1 } }
3050
+ { name: "square-feed", mood: ["corporate"], params: { label: "Changelog", title: "Faster builds", format: "square", accent: ACCENT_SOFT, speed: 1 } },
3051
+ { name: "portrait-story", mood: ["minimal"], params: { label: "v2.1", title: "New API surface", format: "portrait", accent: VIOLET, speed: 1 } }
2945
3052
  ],
2946
3053
  textParam: "title",
2947
3054
  subtextParam: "label",
@@ -2954,7 +3061,7 @@ var config = {
2954
3061
  // mid-wipe footer labels
2955
3062
  ],
2956
3063
  tokens: [
2957
- { propPath: "accent", cssVar: "--cf-accent", fallback: "#ffb38e", brandKitPath: "colors.accent" }
3064
+ { propPath: "accent", cssVar: "--cf-accent", fallback: ACCENT_SOFT, brandKitPath: "colors.accent" }
2958
3065
  ],
2959
3066
  durationInFrames: 180,
2960
3067
  fps: 30,
@@ -2966,7 +3073,7 @@ var config = {
2966
3073
  // ../execution/primitives/src/scenes/live-code-compilation/config.ts
2967
3074
  import { z as z2 } from "zod";
2968
3075
  var paramsSchema2 = z2.object({
2969
- accentColor: z2.string().default("#7fae7a").describe("Accent for build success indicators."),
3076
+ accentColor: z2.string().default(SUCCESS).describe("Accent for build success indicators."),
2970
3077
  speed: z2.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
2971
3078
  }).passthrough();
2972
3079
  var config2 = {
@@ -2986,11 +3093,11 @@ var config2 = {
2986
3093
  tags: ["scene", "code", "build", "compilation", "developer", "demo"],
2987
3094
  mood: ["tech-demo", "corporate"],
2988
3095
  paramsSchema: paramsSchema2,
2989
- propDefaults: { accentColor: "#7fae7a", speed: 1 },
3096
+ propDefaults: { accentColor: SUCCESS, speed: 1 },
2990
3097
  primitivesUsed: [],
2991
3098
  examples: [
2992
- { name: "green-build", mood: ["tech-demo"], params: { accentColor: "#7fae7a", speed: 1 } },
2993
- { name: "brand-blue", mood: ["corporate"], params: { accentColor: "#7b93b0", speed: 1 } }
3099
+ { name: "green-build", mood: ["tech-demo"], params: { accentColor: SUCCESS, speed: 1 } },
3100
+ { name: "brand-blue", mood: ["corporate"], params: { accentColor: BLUE, speed: 1 } }
2994
3101
  ],
2995
3102
  textParam: null,
2996
3103
  subtextParam: null,
@@ -3003,7 +3110,7 @@ var config2 = {
3003
3110
  // the rendered button label in the live output panel
3004
3111
  ],
3005
3112
  tokens: [
3006
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#7fae7a", brandKitPath: "colors.accent" }
3113
+ { propPath: "accentColor", cssVar: "--cf-accent", fallback: SUCCESS, brandKitPath: "colors.accent" }
3007
3114
  ],
3008
3115
  durationInFrames: 240,
3009
3116
  fps: 30,
@@ -3018,10 +3125,10 @@ var paramsSchema3 = z3.object({
3018
3125
  logoLabel: z3.string().default("cf").describe("Short logo glyph (1\u20133 characters)."),
3019
3126
  productName: z3.string().default("cueframe").describe("Product name (1\u20133 words)."),
3020
3127
  versionLabel: z3.string().default("v2.1").describe("Version or release tag."),
3021
- accentPeach: z3.string().default("#e8782b").describe("Primary accent color (peach in default)."),
3022
- accentLavender: z3.string().default("#9b8bb0").describe("Secondary accent color (lavender in default)."),
3023
- accentMint: z3.string().default("#7fae7a").describe("Tertiary accent color (mint in default)."),
3024
- background: z3.string().default("#14100c").describe("Frame background."),
3128
+ accentPeach: z3.string().default(ACCENT_STRONG).describe("Primary accent color (indigo by default)."),
3129
+ accentLavender: z3.string().default(VIOLET).describe("Secondary accent color (violet by default)."),
3130
+ accentMint: z3.string().default(SUCCESS).describe("Tertiary accent color (green by default)."),
3131
+ background: z3.string().default(BG).describe("Frame background."),
3025
3132
  speed: z3.number().min(0.25).max(4).default(1).describe("Playback speed multiplier.")
3026
3133
  }).passthrough();
3027
3134
  var config3 = {
@@ -3041,10 +3148,10 @@ var config3 = {
3041
3148
  tags: ["scene", "trailer", "product", "launch", "composition", "multi-phase"],
3042
3149
  mood: ["cinematic", "corporate", "aggressive"],
3043
3150
  paramsSchema: paramsSchema3,
3044
- propDefaults: { logoLabel: "cf", productName: "cueframe", versionLabel: "v2.1", accentPeach: "#e8782b", accentLavender: "#9b8bb0", accentMint: "#7fae7a", background: "#14100c", speed: 1 },
3151
+ propDefaults: { logoLabel: "cf", productName: "cueframe", versionLabel: "v2.1", accentPeach: ACCENT_STRONG, accentLavender: VIOLET, accentMint: SUCCESS, background: BG, speed: 1 },
3045
3152
  primitivesUsed: [],
3046
3153
  examples: [
3047
- { name: "cueframe-launch", mood: ["corporate"], params: { logoLabel: "cf", productName: "cueframe", versionLabel: "v2.1", accentPeach: "#e8782b", accentLavender: "#9b8bb0", accentMint: "#7fae7a", background: "#14100c", speed: 1 } }
3154
+ { name: "cueframe-launch", mood: ["corporate"], params: { logoLabel: "cf", productName: "cueframe", versionLabel: "v2.1", accentPeach: ACCENT_STRONG, accentLavender: VIOLET, accentMint: SUCCESS, background: BG, speed: 1 } }
3048
3155
  ],
3049
3156
  textParam: "productName",
3050
3157
  subtextParam: "versionLabel",
@@ -3067,10 +3174,10 @@ var config3 = {
3067
3174
  '<Trailer label="v1.0" accent="lavender" />'
3068
3175
  ],
3069
3176
  tokens: [
3070
- { propPath: "accentPeach", cssVar: "--cf-accent", fallback: "#e8782b", brandKitPath: "colors.accent" },
3071
- { propPath: "accentLavender", cssVar: "--cf-accent-2", fallback: "#9b8bb0", brandKitPath: "colors.accentMuted" },
3072
- { propPath: "accentMint", cssVar: "--cf-accent-3", fallback: "#7fae7a", brandKitPath: "colors.accentMuted" },
3073
- { propPath: "background", cssVar: "--cf-bg", fallback: "#14100c", brandKitPath: "colors.background" }
3177
+ { propPath: "accentPeach", cssVar: "--cf-accent", fallback: ACCENT_STRONG, brandKitPath: "colors.accent" },
3178
+ { propPath: "accentLavender", cssVar: "--cf-accent-2", fallback: VIOLET, brandKitPath: "colors.accentMuted" },
3179
+ { propPath: "accentMint", cssVar: "--cf-accent-3", fallback: SUCCESS, brandKitPath: "colors.accentMuted" },
3180
+ { propPath: "background", cssVar: "--cf-bg", fallback: BG, brandKitPath: "colors.background" }
3074
3181
  ],
3075
3182
  durationInFrames: 240,
3076
3183
  fps: 30,
@@ -3084,7 +3191,10 @@ import { z as z4 } from "zod";
3084
3191
  var paramsSchema4 = z4.object({
3085
3192
  assembleStart: z4.number().min(0).default(0).describe("Frame at which the 3D layer-stack assembly spring fires. Use to delay the assemble after a title beat."),
3086
3193
  device: z4.enum(["laptop", "phone"]).default("laptop").describe("Device silhouette. `laptop` adds a chassis base under the screen; `phone` uses a tall portrait bezel."),
3087
- accentColor: z4.string().default("#7fae7a").describe("Accent color for the mock-UI sidebar bar, the highlighted dashboard card, and brand surfaces inside the screen."),
3194
+ screenSrc: z4.string().url().meta({ cueframeAsset: true }).optional().describe(
3195
+ "Screenshot to show on the screen (object-fit cover). Omitted: the placeholder mock UI."
3196
+ ),
3197
+ accentColor: z4.string().default(SUCCESS).describe("Accent color for the mock-UI sidebar bar, the highlighted dashboard card, and brand surfaces inside the screen."),
3088
3198
  speed: z4.number().min(0.25).max(4).default(1).describe("Playback speed multiplier. >1 condenses the assemble + screen wake + shimmer."),
3089
3199
  className: z4.string().optional().describe("Optional className passthrough on the outer absolute frame.")
3090
3200
  }).passthrough();
@@ -3094,10 +3204,10 @@ var config4 = {
3094
3204
  name: "Hero Device Assemble",
3095
3205
  category: "scenes",
3096
3206
  kind: "scene",
3097
- version: "0.1.1",
3207
+ version: "0.1.2",
3098
3208
  intent: "assemble-hero-device",
3099
3209
  description: "Hero shot where a laptop or phone assembles in 3D from exploded layers (lid, base, bezel, screen) into a settled device, then the screen wakes from black to a mock UI and a shimmer sweeps across. Self-contained ~3-second product reveal beat.",
3100
- useWhen: 'App / SaaS hero loops, product-page intros, "see it on your device" moments, ad pre-rolls. Use `device="phone"` for mobile-first products. Pair with a title card before or a CTA after. Avoid for short clips <4s \u2014 the assemble spring + wake + shimmer needs ~80 frames to land. Avoid for vertical/9:16 with `device="laptop"` \u2014 the laptop aspect cuts off; switch to `device="phone"`.',
3210
+ useWhen: 'App / SaaS hero loops, product-page intros, "see it on your device" moments, ad pre-rolls. Use `device="phone"` for mobile-first products. Give it a real screenshot via `screenSrc` \u2014 without one the screen wakes to a placeholder mock dashboard. Pair with a title card before or a CTA after. Avoid for short clips <4s \u2014 the assemble spring + wake + shimmer needs ~80 frames to land. Avoid for vertical/9:16 with `device="laptop"` \u2014 the laptop aspect cuts off; switch to `device="phone"`.',
3101
3211
  pairsWith: ["kinetic-type-mask", "pulsing-indicator"],
3102
3212
  avoidWith: ["changelog-bite"],
3103
3213
  tier: "standard",
@@ -3105,32 +3215,32 @@ var config4 = {
3105
3215
  tags: ["scene", "hero", "device", "mockup", "laptop", "phone", "3d", "assemble", "product"],
3106
3216
  mood: ["cinematic", "tech-demo", "corporate"],
3107
3217
  paramsSchema: paramsSchema4,
3108
- propDefaults: { assembleStart: 0, device: "laptop", accentColor: "#7fae7a", speed: 1 },
3218
+ propDefaults: { assembleStart: 0, device: "laptop", accentColor: SUCCESS, speed: 1 },
3109
3219
  primitivesUsed: [],
3110
3220
  examples: [
3111
3221
  {
3112
3222
  name: "laptop-green",
3113
3223
  mood: ["tech-demo", "corporate"],
3114
- params: { assembleStart: 0, device: "laptop", accentColor: "#7fae7a", speed: 1 },
3224
+ params: { assembleStart: 0, device: "laptop", accentColor: SUCCESS, speed: 1 },
3115
3225
  description: "Default \u2014 laptop assemble with green accent on the mock dashboard. Use for SaaS hero loops."
3116
3226
  },
3117
3227
  {
3118
3228
  name: "phone-lavender",
3119
3229
  mood: ["cinematic"],
3120
- params: { assembleStart: 0, device: "phone", accentColor: "#9b8bb0", speed: 1 },
3121
- description: "Phone variant with lavender accent. Use for mobile-first product launches."
3230
+ params: { assembleStart: 0, device: "phone", accentColor: VIOLET, speed: 1 },
3231
+ description: "Phone variant with violet accent. Use for mobile-first product launches."
3122
3232
  },
3123
3233
  {
3124
3234
  name: "delayed-laptop",
3125
3235
  mood: ["cinematic"],
3126
- params: { assembleStart: 30, device: "laptop", accentColor: "#7b93b0", speed: 1 },
3236
+ params: { assembleStart: 30, device: "laptop", accentColor: BLUE, speed: 1 },
3127
3237
  description: "Hold black for 1s before assembling. Use when stacking after a title-card beat."
3128
3238
  }
3129
3239
  ],
3130
3240
  textParam: null,
3131
3241
  subtextParam: null,
3132
3242
  tokens: [
3133
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#7fae7a", brandKitPath: "colors.accent" }
3243
+ { propPath: "accentColor", cssVar: "--cf-accent", fallback: SUCCESS, brandKitPath: "colors.accent" }
3134
3244
  ],
3135
3245
  durationInFrames: 240,
3136
3246
  fps: 30,
@@ -3150,7 +3260,7 @@ var paramsSchema5 = z5.object({
3150
3260
  z5.literal("1"),
3151
3261
  z5.literal("2")
3152
3262
  ]).default(1).describe('Index of the tier to focus (0=Free, 1=Pro, 2=Enterprise). The focused tier scales up, lifts, and gets a "Popular" badge + shimmering CTA; siblings dim and blur.'),
3153
- accentColor: z5.string().default("#7fae7a").describe('Accent color for the focused-tier border glow, "Popular" badge, feature checks, and CTA fill.'),
3263
+ accentColor: z5.string().default(SUCCESS).describe('Accent color for the focused-tier border glow, "Popular" badge, feature checks, and CTA fill.'),
3154
3264
  speed: z5.number().min(0.25).max(4).default(1).describe("Playback speed multiplier."),
3155
3265
  className: z5.string().optional().describe("Optional className passthrough on the outer flex frame.")
3156
3266
  }).passthrough();
@@ -3171,25 +3281,25 @@ var config5 = {
3171
3281
  tags: ["scene", "pricing", "tiers", "saas", "upsell", "plans"],
3172
3282
  mood: ["corporate", "tech-demo", "minimal"],
3173
3283
  paramsSchema: paramsSchema5,
3174
- propDefaults: { focusedTier: 1, accentColor: "#7fae7a", speed: 1 },
3284
+ propDefaults: { focusedTier: 1, accentColor: SUCCESS, speed: 1 },
3175
3285
  primitivesUsed: [],
3176
3286
  examples: [
3177
3287
  {
3178
3288
  name: "pro-upsell",
3179
3289
  mood: ["corporate"],
3180
- params: { focusedTier: 1, accentColor: "#7fae7a", speed: 1 },
3290
+ params: { focusedTier: 1, accentColor: SUCCESS, speed: 1 },
3181
3291
  description: "Default \u2014 focus the middle Pro tier with green accent. Best for self-serve SaaS landing pages."
3182
3292
  },
3183
3293
  {
3184
3294
  name: "enterprise-sales",
3185
3295
  mood: ["corporate", "cinematic"],
3186
- params: { focusedTier: 2, accentColor: "#9b8bb0", speed: 1 },
3187
- description: "Spotlight Enterprise with lavender accent. Use in sales-deck loops or B2B trailers."
3296
+ params: { focusedTier: 2, accentColor: VIOLET, speed: 1 },
3297
+ description: "Spotlight Enterprise with violet accent. Use in sales-deck loops or B2B trailers."
3188
3298
  },
3189
3299
  {
3190
3300
  name: "free-onboarding",
3191
3301
  mood: ["playful", "minimal"],
3192
- params: { focusedTier: 0, accentColor: "#7b93b0", speed: 1 },
3302
+ params: { focusedTier: 0, accentColor: BLUE, speed: 1 },
3193
3303
  description: "Spotlight the Free tier with sky-blue accent. Use in product-led-growth onboarding videos."
3194
3304
  }
3195
3305
  ],
@@ -3219,7 +3329,7 @@ var config5 = {
3219
3329
  // badge on the focused tier
3220
3330
  ],
3221
3331
  tokens: [
3222
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#7fae7a", brandKitPath: "colors.accent" }
3332
+ { propPath: "accentColor", cssVar: "--cf-accent", fallback: SUCCESS, brandKitPath: "colors.accent" }
3223
3333
  ],
3224
3334
  durationInFrames: 240,
3225
3335
  fps: 30,
@@ -3231,7 +3341,7 @@ var config5 = {
3231
3341
  // ../execution/primitives/src/scenes/landing-code-showcase/config.ts
3232
3342
  import { z as z6 } from "zod";
3233
3343
  var paramsSchema6 = z6.object({
3234
- accentColor: z6.string().default("#FFB38E").describe("Accent color for the code editor caret, syntax highlight on local identifiers, and the success-glow halo on the right preview pane."),
3344
+ accentColor: z6.string().default(ACCENT_SOFT).describe("Accent color for the code editor caret, syntax highlight on local identifiers, and the success-glow halo on the right preview pane."),
3235
3345
  speed: z6.number().min(0.25).max(4).default(1).describe("Playback speed multiplier. The internal timeline assumes 30fps base; >1 condenses the whole 24s sequence.")
3236
3346
  }).passthrough();
3237
3347
  var config6 = {
@@ -3242,7 +3352,7 @@ var config6 = {
3242
3352
  kind: "scene",
3243
3353
  version: "0.1.1",
3244
3354
  intent: "showcase-landing-code",
3245
- description: 'Two-pane "code \u2192 live preview" hero loop. Left: a glassy editor types JSX one component at a time. Right: each typed component renders inside a warm pastel stage, with `spatial-push` and `frosted-glass-wipe` transitions between beats (BlurReveal \u2192 DashboardPopulate \u2192 MaskedSlideReveal \u2192 TerminalToBrowserDeploy). Self-contained 24-second showcase loop for component-library marketing.',
3355
+ description: 'Two-pane "code \u2192 live preview" hero loop. Left: a glassy editor types JSX one component at a time. Right: each typed component renders inside a dark stage, with `spatial-push` and `frosted-glass-wipe` transitions between beats (BlurReveal \u2192 DashboardPopulate \u2192 MaskedSlideReveal \u2192 TerminalToBrowserDeploy). Self-contained 24-second showcase loop for component-library marketing.',
3246
3356
  useWhen: 'Component library / framework / Remotion-style SDK landing pages, hero loops, "build with us" demos, conference talk title cards. Avoid for short clips <16s \u2014 the staged code-typing pace cannot be compressed without losing the reveal beats. Avoid for vertical/9:16 unless rebuilt \u2014 split-pane layout assumes 16:9.',
3247
3357
  pairsWith: [],
3248
3358
  avoidWith: ["changelog-bite", "product-launch-trailer"],
@@ -3251,7 +3361,7 @@ var config6 = {
3251
3361
  tags: ["scene", "landing", "code", "showcase", "hero", "split-pane", "components", "library"],
3252
3362
  mood: ["cinematic", "tech-demo", "editorial"],
3253
3363
  paramsSchema: paramsSchema6,
3254
- propDefaults: { accentColor: "#FFB38E", speed: 1 },
3364
+ propDefaults: { accentColor: ACCENT_SOFT, speed: 1 },
3255
3365
  primitivesUsed: [
3256
3366
  "dashboard-populate",
3257
3367
  "frosted-glass-wipe",
@@ -3262,14 +3372,14 @@ var config6 = {
3262
3372
  {
3263
3373
  name: "peach-default",
3264
3374
  mood: ["cinematic", "editorial"],
3265
- params: { accentColor: "#FFB38E", speed: 1 },
3266
- description: "Default warm peach accent. Use for premium dev-tool landing pages where the pastel stage matches the brand."
3375
+ params: { accentColor: ACCENT_SOFT, speed: 1 },
3376
+ description: "Default soft indigo accent. Use for premium dev-tool landing pages where the dark stage matches the brand."
3267
3377
  },
3268
3378
  {
3269
3379
  name: "mint-hero",
3270
3380
  mood: ["tech-demo"],
3271
- params: { accentColor: "#7fae7a", speed: 1 },
3272
- description: 'Mint accent \u2014 pairs well when the brand already uses green for "ship/deploy" semantics.'
3381
+ params: { accentColor: SUCCESS, speed: 1 },
3382
+ description: 'Green accent \u2014 pairs well when the brand already uses green for "ship/deploy" semantics.'
3273
3383
  }
3274
3384
  ],
3275
3385
  textParam: null,
@@ -3290,7 +3400,7 @@ var config6 = {
3290
3400
  '<MaskedSlideReveal text="Ship to production." />'
3291
3401
  ],
3292
3402
  tokens: [
3293
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#FFB38E", brandKitPath: "colors.accent" }
3403
+ { propPath: "accentColor", cssVar: "--cf-accent", fallback: ACCENT_SOFT, brandKitPath: "colors.accent" }
3294
3404
  ],
3295
3405
  durationInFrames: LANDING_CODE_SHOWCASE_DURATION,
3296
3406
  fps: 30,
@@ -3303,7 +3413,7 @@ var config6 = {
3303
3413
  import { z as z7 } from "zod";
3304
3414
  var paramsSchema7 = z7.object({
3305
3415
  siteUrl: z7.string().default("https://app.example.com").describe("Deploy target URL shown on the success line and inside the browser address bar."),
3306
- accentColor: z7.string().default("#7fae7a").describe("Accent color for the deploy success line, browser hero copy, and CTA button."),
3416
+ accentColor: z7.string().default(SUCCESS).describe("Accent color for the deploy success line, browser hero copy, and CTA button."),
3307
3417
  speed: z7.number().min(0.25).max(4).default(1).describe("Playback speed multiplier. >1 condenses the typewriter + collapse + browser reveal."),
3308
3418
  className: z7.string().optional().describe("Optional className passthrough on the outer absolute frame.")
3309
3419
  }).passthrough();
@@ -3324,26 +3434,26 @@ var config7 = {
3324
3434
  tags: ["scene", "terminal", "deploy", "browser", "cli", "developer", "shipping", "cicd"],
3325
3435
  mood: ["tech-demo", "cinematic", "corporate"],
3326
3436
  paramsSchema: paramsSchema7,
3327
- propDefaults: { siteUrl: "https://app.example.com", accentColor: "#7fae7a", speed: 1 },
3437
+ propDefaults: { siteUrl: "https://app.example.com", accentColor: SUCCESS, speed: 1 },
3328
3438
  primitivesUsed: [],
3329
3439
  examples: [
3330
3440
  {
3331
3441
  name: "green-ship",
3332
3442
  mood: ["tech-demo"],
3333
- params: { siteUrl: "https://app.example.com", accentColor: "#7fae7a", speed: 1 },
3443
+ params: { siteUrl: "https://app.example.com", accentColor: SUCCESS, speed: 1 },
3334
3444
  description: "Default green-build deploy. Use for generic developer-tool demos."
3335
3445
  },
3336
3446
  {
3337
3447
  name: "brand-blue",
3338
3448
  mood: ["corporate"],
3339
- params: { siteUrl: "https://acme.dev", accentColor: "#7b93b0", speed: 1 },
3449
+ params: { siteUrl: "https://acme.dev", accentColor: BLUE, speed: 1 },
3340
3450
  description: "Corporate blue accent on a real-looking domain. Use when the brand kit resolves the accent."
3341
3451
  },
3342
3452
  {
3343
3453
  name: "fast-edit",
3344
3454
  mood: ["tech-demo", "aggressive"],
3345
- params: { siteUrl: "https://remocn.dev", accentColor: "#9b8bb0", speed: 1.4 },
3346
- description: "1.4x speed cut, lavender accent. Use inside compilation montages where the deploy beat is one of several."
3455
+ params: { siteUrl: "https://remocn.dev", accentColor: VIOLET, speed: 1.4 },
3456
+ description: "1.4x speed cut, violet accent. Use inside compilation montages where the deploy beat is one of several."
3347
3457
  }
3348
3458
  ],
3349
3459
  textParam: "siteUrl",
@@ -3365,7 +3475,7 @@ var config7 = {
3365
3475
  // browser hero headline + CTA
3366
3476
  ],
3367
3477
  tokens: [
3368
- { propPath: "accentColor", cssVar: "--cf-accent", fallback: "#7fae7a", brandKitPath: "colors.accent" }
3478
+ { propPath: "accentColor", cssVar: "--cf-accent", fallback: SUCCESS, brandKitPath: "colors.accent" }
3369
3479
  ],
3370
3480
  durationInFrames: 240,
3371
3481
  fps: 30,
@@ -3374,6 +3484,61 @@ var config7 = {
3374
3484
  preview: { thumbnailFrame: 165, mode: "oneshot", defaultExample: "green-ship" }
3375
3485
  };
3376
3486
 
3487
+ // ../execution/primitives/src/scenes/device-showcase/config.ts
3488
+ import { z as z8 } from "zod";
3489
+ var paramsSchema8 = z8.object({
3490
+ device: z8.enum(["laptop", "phone"]).default("laptop").describe("Procedural device body. `phone` for mobile-first products."),
3491
+ screenSrc: z8.string().url().meta({ cueframeAsset: true }).optional().describe(
3492
+ "Screenshot shown on the screen. Use a 16:10 image for laptop, ~1:2 for phone. Omitted: a neutral placeholder dashboard."
3493
+ ),
3494
+ move: z8.enum(["static", "dolly-in", "dolly-out", "drift", "tilt-reveal", "orbit"]).default("dolly-in").describe("Camera move over the scene."),
3495
+ fov: z8.number().min(18).max(80).default(36).describe("Vertical field of view in degrees."),
3496
+ amount: z8.number().optional().describe("Move magnitude: px for dolly/drift, degrees for tilt/orbit."),
3497
+ easing: z8.enum(["entrance", "emphasis", "playful", "exit", "cross", "drama", "none"]).default("entrance"),
3498
+ finish: z8.string().default("#2a2a30").describe("Chassis finish color (metallic)."),
3499
+ background: z8.string().default(BG).describe("Backdrop color behind the vignette."),
3500
+ accentColor: z8.string().default(ACCENT).describe("Accent used by the placeholder screen when no screenshot is given."),
3501
+ openAngle: z8.number().min(60).max(130).default(100).describe("Laptop lid angle at rest (deg). Ignored for phone."),
3502
+ lighting: z8.enum(["soft", "key", "rim"]).default("soft").describe("Studio lighting preset."),
3503
+ speed: z8.number().min(0.25).max(4).default(1)
3504
+ }).passthrough();
3505
+ var config8 = {
3506
+ id: "device-showcase",
3507
+ component: DeviceShowcase,
3508
+ name: "Device Showcase",
3509
+ category: "scenes",
3510
+ kind: "scene",
3511
+ version: "0.1.0",
3512
+ graphics: "webgl",
3513
+ intent: "device-hero",
3514
+ description: "A lit, procedurally modelled laptop or phone in 3D showing your screenshot, with studio lighting, reflections, a contact shadow, and a camera move. The laptop lid opens on the first beat.",
3515
+ useWhen: 'Hero shots for app and SaaS launches, "see it on your device" beats, ad pre-rolls. Give it a real screenshot via screenSrc \u2014 the placeholder is only for previews. Pair with a title before and a CTA after. Needs ~3 s for the lid and dolly to land. It is an overlay, so wrap effects (stage-camera, color-grade, blur) never reach it: use its own `move`, `fov` and `lighting` for camera and look.',
3516
+ pairsWith: ["cinematic-title", "vignette", "grain"],
3517
+ avoidWith: ["hero-device-assemble", "device-mockup-zoom"],
3518
+ tier: "recommended",
3519
+ useCase: ["intro", "full-scene"],
3520
+ tags: ["device", "laptop", "phone", "mockup", "3d", "lit", "screenshot", "hero", "product"],
3521
+ mood: ["cinematic", "tech-demo", "minimal", "corporate"],
3522
+ paramsSchema: paramsSchema8,
3523
+ propDefaults: { device: "laptop", move: "dolly-in", fov: 36, easing: "entrance", finish: "#2a2a30", background: BG, accentColor: ACCENT, openAngle: 100, lighting: "soft", speed: 1 },
3524
+ examples: [
3525
+ { name: "laptop-dolly", mood: ["cinematic"], params: { device: "laptop", move: "dolly-in" }, description: "Default: laptop settles in from far while the lid opens." },
3526
+ { name: "phone-orbit", mood: ["tech-demo"], params: { device: "phone", move: "orbit", amount: 18, lighting: "rim" }, description: "Phone with a slow orbit and rim light." },
3527
+ { name: "laptop-tilt", mood: ["minimal"], params: { device: "laptop", move: "tilt-reveal", openAngle: 95 } }
3528
+ ],
3529
+ textParam: null,
3530
+ subtextParam: null,
3531
+ tokens: [
3532
+ { propPath: "accentColor", cssVar: "--cf-accent", fallback: ACCENT, brandKitPath: "colors.accent" },
3533
+ { propPath: "background", cssVar: "--cf-bg", fallback: BG, brandKitPath: "colors.background" }
3534
+ ],
3535
+ durationInFrames: 150,
3536
+ fps: 30,
3537
+ width: 1920,
3538
+ height: 1080,
3539
+ preview: { thumbnailFrame: 100, mode: "oneshot", defaultExample: "laptop-dolly" }
3540
+ };
3541
+
3377
3542
  // ../execution/primitives/src/scenes/index.ts
3378
3543
  var catalog = [
3379
3544
  config,
@@ -3382,7 +3547,8 @@ var catalog = [
3382
3547
  config4,
3383
3548
  config5,
3384
3549
  config6,
3385
- config7
3550
+ config7,
3551
+ config8
3386
3552
  ];
3387
3553
 
3388
3554
  export {
@@ -3393,5 +3559,6 @@ export {
3393
3559
  PricingTierFocus,
3394
3560
  TerminalToBrowserDeploy,
3395
3561
  LandingCodeShowcase,
3562
+ DeviceShowcase,
3396
3563
  catalog
3397
3564
  };