hyperframes 0.8.184 → 0.8.185

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 (309) hide show
  1. package/dist/{add-5ZTD3MUZ.js → add-ODTNPRGG.js} +14 -14
  2. package/dist/{agentPromptGenerator-VIIPZCJ3.js → agentPromptGenerator-KYO5MKTW.js} +1 -1
  3. package/dist/{animatedGifPrep-AGASIWVA.js → animatedGifPrep-PEP5GWOJ.js} +9 -9
  4. package/dist/api.js +17 -17
  5. package/dist/{asset-LSTEMPIB.js → asset-EZG42XPA.js} +2 -2
  6. package/dist/{assetCataloger-BKBMNL3A.js → assetCataloger-OHAJFCA7.js} +9 -9
  7. package/dist/{audio-KGK44XE4.js → audio-65R4T74I.js} +16 -15
  8. package/dist/{auth-MJWKYK77.js → auth-VP2SIZFN.js} +1 -1
  9. package/dist/{autoUpdate-2GGDKYR2.js → autoUpdate-RVSUX4SS.js} +2 -2
  10. package/dist/{backgroundChecks-7GRX5VQY.js → backgroundChecks-LEHK74NS.js} +3 -3
  11. package/dist/backgroundChecksWorker.js +3 -3
  12. package/dist/{batchRender-BCV2LELR.js → batchRender-3X6CL7PK.js} +5 -5
  13. package/dist/{beats-7BCFRBAL.js → beats-66VPQLSC.js} +6 -6
  14. package/dist/{benchmark-2R6CN5MQ.js → benchmark-PBJVTOJP.js} +10 -10
  15. package/dist/{browser-6AFGOI7G.js → browser-TPL5MWGC.js} +3 -3
  16. package/dist/{bundleWithLocalizedFonts-2EGPA5ZO.js → bundleWithLocalizedFonts-67MLTHKM.js} +2 -2
  17. package/dist/{capture-HOIAW6MO.js → capture-F3GNMRZM.js} +13 -13
  18. package/dist/{capture-HA2UHLIU.js → capture-YYRE7EV3.js} +2 -2
  19. package/dist/{captureCompositionFrame-4236FVWJ.js → captureCompositionFrame-PXV2ISHD.js} +13 -13
  20. package/dist/{catalog-A6CZAWW4.js → catalog-6SDD3OHF.js} +14 -14
  21. package/dist/{catch-up-TNA4DJOA.js → catch-up-CWIVA5VG.js} +4 -4
  22. package/dist/{check-5E5U2EQZ.js → check-YQ6REK2S.js} +34 -34
  23. package/dist/{checkBrowser-FNINXBMZ.js → checkBrowser-5XZCBRXM.js} +31 -31
  24. package/dist/{chunk-2ULXZ4PG.js → chunk-2TAS5O4P.js} +56 -11
  25. package/dist/{chunk-3TXNNBI2.js → chunk-37CNYTQQ.js} +2 -2
  26. package/dist/chunk-3NPOFC43.js +3805 -0
  27. package/dist/{chunk-EEP5Y5IE.js → chunk-46HEFGXJ.js} +1 -1
  28. package/dist/{chunk-2XA7KXQO.js → chunk-4CTNDBE3.js} +2 -2
  29. package/dist/{chunk-MFAETWIF.js → chunk-55YELV7B.js} +1 -1
  30. package/dist/{chunk-LRGYPXHF.js → chunk-5GUKZRQN.js} +1 -1
  31. package/dist/{chunk-SAX7HQ5E.js → chunk-6ASIXMFP.js} +1 -1
  32. package/dist/{chunk-SN7KI5JA.js → chunk-6GPR3G3C.js} +2 -2
  33. package/dist/{chunk-E32ZQ2WO.js → chunk-6RIZY7OP.js} +1 -1
  34. package/dist/{chunk-5CS4T6C6.js → chunk-7L37AB57.js} +1 -1
  35. package/dist/{chunk-BCHSTE7U.js → chunk-7PS6RVWD.js} +1 -1
  36. package/dist/{chunk-X3CG5YQA.js → chunk-7RAY4WZP.js} +3 -3
  37. package/dist/{chunk-YWHCXIMD.js → chunk-A6QCO474.js} +5 -5
  38. package/dist/{chunk-YMS5FOMC.js → chunk-B2A56S5C.js} +1 -1
  39. package/dist/{chunk-IWTNTUPQ.js → chunk-BH7TTIPN.js} +11 -13
  40. package/dist/{chunk-DWUGKEHR.js → chunk-BRAPBUPQ.js} +1 -1
  41. package/dist/{chunk-R2BFTECP.js → chunk-CX3USX23.js} +3 -3
  42. package/dist/{chunk-JB6ARMQS.js → chunk-D42NU3DZ.js} +1 -1
  43. package/dist/{chunk-GDEV42FA.js → chunk-EMAWIZ54.js} +481 -36
  44. package/dist/{chunk-UNNXFKVG.js → chunk-EMSDWBG3.js} +2 -2
  45. package/dist/{chunk-CXABAXB3.js → chunk-ESBMUZXZ.js} +1 -1
  46. package/dist/{chunk-EM7C7H7S.js → chunk-F3OPUWQX.js} +7 -7
  47. package/dist/{chunk-YOZPQCSR.js → chunk-FX6RUJUY.js} +3 -3
  48. package/dist/{chunk-PSKEKWVU.js → chunk-G2UANIDX.js} +1 -1
  49. package/dist/{chunk-UKOTVJFV.js → chunk-H5SM5PJI.js} +1 -1
  50. package/dist/{chunk-YWNJTZGN.js → chunk-H6UY725W.js} +2 -2
  51. package/dist/{chunk-PFYWVUHA.js → chunk-HDIRZGK4.js} +1 -1
  52. package/dist/{chunk-HR23IKLZ.js → chunk-HHSJJFVM.js} +2 -2
  53. package/dist/{chunk-LLC4CS6I.js → chunk-HXUTX5GR.js} +3 -3
  54. package/dist/{chunk-RGXVEYHI.js → chunk-I3IH5MV5.js} +6 -10
  55. package/dist/{chunk-Q33P4EAC.js → chunk-I45HL3VP.js} +3 -3
  56. package/dist/{chunk-TYXH3EKP.js → chunk-I5JRXMCV.js} +16 -1
  57. package/dist/{chunk-4N4P3ZWL.js → chunk-I7QMXZSB.js} +2 -2
  58. package/dist/{chunk-ICJEAFPD.js → chunk-IDFNKFPL.js} +7 -7
  59. package/dist/{chunk-VNVQGDPC.js → chunk-IDGLGXPA.js} +1 -1
  60. package/dist/{chunk-2PVE4WS2.js → chunk-IPDKZ5IN.js} +33 -6
  61. package/dist/{chunk-ABZYYUUH.js → chunk-ISTRDGIX.js} +1 -1
  62. package/dist/{chunk-3MDJIWOV.js → chunk-IVEFOUZI.js} +46 -30
  63. package/dist/{chunk-4KKKBEP3.js → chunk-J5XEZ24I.js} +3 -3
  64. package/dist/{chunk-7HJALUIO.js → chunk-K2ZKXTVL.js} +1 -1
  65. package/dist/{chunk-TE427YID.js → chunk-K73RJB23.js} +2 -2
  66. package/dist/{chunk-3QVMJ7GX.js → chunk-KQ4JEJLF.js} +9 -9
  67. package/dist/{chunk-J3QM7AHP.js → chunk-KROXPHXX.js} +9 -3
  68. package/dist/{chunk-OLZENUPI.js → chunk-LLFQA7XF.js} +1 -1
  69. package/dist/chunk-LLMSX6V6.js +17 -0
  70. package/dist/{chunk-WTFUDNW2.js → chunk-LYKSTRAY.js} +3 -3
  71. package/dist/{chunk-VDM3FEDP.js → chunk-OAG47RE6.js} +1 -1
  72. package/dist/{chunk-FGJEUV4S.js → chunk-PHMBMOXF.js} +1 -1
  73. package/dist/{chunk-7MB2ZAQF.js → chunk-PMMQRJDE.js} +1 -1
  74. package/dist/{chunk-ADDHW2FS.js → chunk-Q447CX26.js} +82 -12
  75. package/dist/{chunk-YALM6XN4.js → chunk-Q47FAYYK.js} +3 -3
  76. package/dist/{chunk-ZOCHDXDG.js → chunk-RTBSA3EA.js} +1 -1
  77. package/dist/{chunk-UJKUB2LH.js → chunk-RUEGYANA.js} +11 -11
  78. package/dist/{chunk-OYLO6TYK.js → chunk-RUOG4VB7.js} +1 -1
  79. package/dist/{chunk-ZRHO6YMM.js → chunk-SKYPMHQC.js} +4 -4
  80. package/dist/{chunk-ES426XRJ.js → chunk-SQVRXHOW.js} +3 -3
  81. package/dist/{chunk-QL2PNIXC.js → chunk-TAX2ZJAP.js} +24 -16
  82. package/dist/{chunk-KN46TGHV.js → chunk-TOI35GN2.js} +1 -1
  83. package/dist/{chunk-74JMKLVU.js → chunk-UPR3MU6Z.js} +1 -1
  84. package/dist/{chunk-JIUTXKWA.js → chunk-WQLKDL35.js} +2 -1
  85. package/dist/{chunk-WHPN2TIT.js → chunk-X6L6MD5B.js} +5 -5
  86. package/dist/{chunk-7NRI7HYX.js → chunk-XWC7CNPY.js} +1 -1
  87. package/dist/{clean-HGASSMWI.js → clean-7J6ZCCGV.js} +18 -18
  88. package/dist/cli.js +53 -53
  89. package/dist/{cloud-JPDVNXHN.js → cloud-7IJCJCDD.js} +4 -4
  90. package/dist/{cloudrun-AMMGSDRP.js → cloudrun-UNZRIIDB.js} +7 -7
  91. package/dist/commands/contrast-audit.browser.js +1 -2
  92. package/dist/commands/layout-audit.browser.js +196 -0
  93. package/dist/{compare-LHHVHUN3.js → compare-Q7VW5JZT.js} +28 -28
  94. package/dist/{compiler-Q3N6QXMT.js → compiler-KPHYGFXL.js} +6 -6
  95. package/dist/{component-D72J32Q7.js → component-UUBREJKN.js} +3 -3
  96. package/dist/{compositions-UQRJ5ROG.js → compositions-T4FTKIDP.js} +13 -13
  97. package/dist/{delete-P42VIDDA.js → delete-WZQF2IIA.js} +2 -2
  98. package/dist/{deploy-WZTH57O4.js → deploy-JU7A3XNC.js} +1 -1
  99. package/dist/{deterministicFonts-VQ5UBMXY.js → deterministicFonts-EGAAE7QL.js} +3 -3
  100. package/dist/{dist-SENYPQGW.js → dist-LM7AVHOU.js} +3 -3
  101. package/dist/{dist-DYS24AMA.js → dist-ULGTPSU4.js} +8 -4
  102. package/dist/docs/data-attributes.md +1 -1
  103. package/dist/{doctor-KEJIG2SK.js → doctor-VSNGRKXJ.js} +13 -13
  104. package/dist/{events-CYKSNR7N.js → events-CRW2DYUT.js} +3 -3
  105. package/dist/{events-UZXFQPMT.js → events-E63YBUL2.js} +3 -3
  106. package/dist/{feedback-LXNQF7CA.js → feedback-OSZWVR6N.js} +8 -8
  107. package/dist/{ffmpeg-BYHON577.js → ffmpeg-JLH3Z7G7.js} +9 -9
  108. package/dist/{figma-EIQ35PS6.js → figma-2BQNNR53.js} +3 -3
  109. package/dist/fontLocalizeCli.js +12 -12
  110. package/dist/{get-CC2YL7QO.js → get-P2XI53QW.js} +2 -2
  111. package/dist/{gpuPolicy-VFSACUQV.js → gpuPolicy-NTKQJY75.js} +9 -9
  112. package/dist/{grade-compare-TUQL7IV2.js → grade-compare-OYASIHIB.js} +29 -29
  113. package/dist/{gsapParserAcorn-7NCK2LVT.js → gsapParserAcorn-SKODXC2N.js} +2 -2
  114. package/dist/{help-ROROO5K6.js → help-HK6K2N4G.js} +1 -1
  115. package/dist/{history-PNELYLXX.js → history-JMTYKLXW.js} +6 -6
  116. package/dist/hyperframe.manifest.json +1 -1
  117. package/dist/hyperframe.runtime.iife.js +63 -63
  118. package/dist/hyperframes-player.global.js +1 -1
  119. package/dist/{info-4FZTH6AS.js → info-AW7CIVRE.js} +9 -9
  120. package/dist/{init-I43GHHVP.js → init-6KIDG4LB.js} +30 -30
  121. package/dist/{inspect-IT4TYIZ3.js → inspect-B7BLYMRZ.js} +29 -29
  122. package/dist/{installer-CWOJVK5K.js → installer-ZP2LQZUQ.js} +7 -7
  123. package/dist/{keyframes-3FBOGVD4.js → keyframes-EQ36A5JE.js} +7 -7
  124. package/dist/{lambda-H3V32I7M.js → lambda-E6VURLIS.js} +9 -9
  125. package/dist/{layout-BZ5LYJ5C.js → layout-XYC64QQQ.js} +29 -29
  126. package/dist/{lint-ZTNSGP2S.js → lint-V5DJYWBX.js} +9 -9
  127. package/dist/{lintProject-C2ONSH2U.js → lintProject-JATQKR64.js} +3 -3
  128. package/dist/{list-XM4GWJYY.js → list-RUGVRTVD.js} +2 -2
  129. package/dist/{login-H6HYKMWX.js → login-ZTKGKXGS.js} +4 -4
  130. package/dist/{manager-TWVDSJXO.js → manager-JUP7PM6N.js} +10 -10
  131. package/dist/{media-treatment-N7MY5NXB.js → media-treatment-VIUPK4OR.js} +15 -15
  132. package/dist/{models-WEMIMYBD.js → models-LJS2HBOZ.js} +13 -13
  133. package/dist/{motionShot-RHICTVPU.js → motionShot-3UAXZ7SN.js} +16 -16
  134. package/dist/{normalize-audio-ZFUZCJE3.js → normalize-audio-SBYI4YIH.js} +4 -4
  135. package/dist/{open-IBJ4FL3G.js → open-S27TUD3A.js} +14 -14
  136. package/dist/{parakeetRunner-XXO4WSLR.js → parakeetRunner-ETLMLJ4L.js} +14 -14
  137. package/dist/{pipeline-6ML3LUVK.js → pipeline-I2M22M24.js} +10 -10
  138. package/dist/{play-RV4NAVF5.js → play-COJU6VJK.js} +21 -21
  139. package/dist/{preflight-R3DEFMLA.js → preflight-FZ24NCHH.js} +10 -10
  140. package/dist/{present-5TBJGE6B.js → present-YAHKLC5D.js} +17 -17
  141. package/dist/{preview-FLKZ5CXJ.js → preview-KQOEU5YE.js} +20 -20
  142. package/dist/{producer-7XYSPVKH.js → producer-DTNNG4T6.js} +1 -1
  143. package/dist/{projectConfig-TBU2VWZX.js → projectConfig-4A76VYUP.js} +9 -9
  144. package/dist/{publication-CWWUJYJ5.js → publication-SQPMC2W3.js} +4 -4
  145. package/dist/{publish-FSNE4FEB.js → publish-QUEJBGGT.js} +11 -11
  146. package/dist/{remove-background-MDFWRWCT.js → remove-background-FP2ETAQH.js} +11 -11
  147. package/dist/{render-F4JQ553X.js → render-BIFIL4U6.js} +31 -31
  148. package/dist/{render-DBGQZAZT.js → render-GQFXJWLV.js} +17 -29
  149. package/dist/{render-LWZKXCLY.js → render-P664SMC7.js} +5 -5
  150. package/dist/{render-batch-PU7NMLIJ.js → render-batch-ZCPMYH6Z.js} +5 -5
  151. package/dist/renderSetupWorker.js +3 -3
  152. package/dist/{resolver-RUBGFXPC.js → resolver-BUC2GFZQ.js} +6 -6
  153. package/dist/{sherpa-X2TBNO6P.js → sherpa-HFT6XEP6.js} +13 -13
  154. package/dist/skills/hyperframes/SKILL.md +52 -174
  155. package/dist/skills/hyperframes/assets/frame-presets/biennale-yellow/FRAME.md +289 -0
  156. package/dist/skills/hyperframes/assets/frame-presets/biennale-yellow/caption-skin.html +220 -0
  157. package/dist/skills/hyperframes/assets/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
  158. package/dist/skills/hyperframes/assets/frame-presets/blockframe/FRAME.md +275 -0
  159. package/dist/skills/hyperframes/assets/frame-presets/blockframe/caption-skin.html +223 -0
  160. package/dist/skills/hyperframes/assets/frame-presets/blockframe/frame-showcase.html +1347 -0
  161. package/dist/skills/hyperframes/assets/frame-presets/blue-professional/FRAME.md +307 -0
  162. package/dist/skills/hyperframes/assets/frame-presets/blue-professional/caption-skin.html +222 -0
  163. package/dist/skills/hyperframes/assets/frame-presets/blue-professional/frame-showcase.html +1372 -0
  164. package/dist/skills/hyperframes/assets/frame-presets/bold-poster/FRAME.md +275 -0
  165. package/dist/skills/hyperframes/assets/frame-presets/bold-poster/caption-skin.html +229 -0
  166. package/dist/skills/hyperframes/assets/frame-presets/bold-poster/frame-showcase.html +1140 -0
  167. package/dist/skills/hyperframes/assets/frame-presets/broadside/FRAME.md +284 -0
  168. package/dist/skills/hyperframes/assets/frame-presets/broadside/caption-skin.html +224 -0
  169. package/dist/skills/hyperframes/assets/frame-presets/broadside/frame-showcase.html +1166 -0
  170. package/dist/skills/hyperframes/assets/frame-presets/capsule/FRAME.md +284 -0
  171. package/dist/skills/hyperframes/assets/frame-presets/capsule/caption-skin.html +223 -0
  172. package/dist/skills/hyperframes/assets/frame-presets/capsule/frame-showcase.html +1465 -0
  173. package/dist/skills/hyperframes/assets/frame-presets/cartesian/FRAME.md +278 -0
  174. package/dist/skills/hyperframes/assets/frame-presets/cartesian/caption-skin.html +221 -0
  175. package/dist/skills/hyperframes/assets/frame-presets/cartesian/frame-showcase.html +1263 -0
  176. package/dist/skills/hyperframes/assets/frame-presets/cobalt-grid/FRAME.md +265 -0
  177. package/dist/skills/hyperframes/assets/frame-presets/cobalt-grid/caption-skin.html +237 -0
  178. package/dist/skills/hyperframes/assets/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
  179. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/FRAME.md +277 -0
  180. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/caption-skin.html +223 -0
  181. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/EBGaramond-400.woff2 +0 -0
  182. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/EBGaramond-700.woff2 +0 -0
  183. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/Inter-400.woff2 +0 -0
  184. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/Inter-700.woff2 +0 -0
  185. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/JetBrainsMono-400.woff2 +0 -0
  186. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/JetBrainsMono-700.woff2 +0 -0
  187. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-eb-garamond.txt +93 -0
  188. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-inter.txt +93 -0
  189. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/fonts/OFL-jetbrains-mono.txt +93 -0
  190. package/dist/skills/hyperframes/assets/frame-presets/code-editorial/frame-showcase.html +1438 -0
  191. package/dist/skills/hyperframes/assets/frame-presets/coral/FRAME.md +314 -0
  192. package/dist/skills/hyperframes/assets/frame-presets/coral/caption-skin.html +225 -0
  193. package/dist/skills/hyperframes/assets/frame-presets/coral/frame-showcase.html +1268 -0
  194. package/dist/skills/hyperframes/assets/frame-presets/creative-mode/FRAME.md +333 -0
  195. package/dist/skills/hyperframes/assets/frame-presets/creative-mode/caption-skin.html +226 -0
  196. package/dist/skills/hyperframes/assets/frame-presets/creative-mode/frame-showcase.html +1330 -0
  197. package/dist/skills/hyperframes/assets/frame-presets/daisy-days/FRAME.md +274 -0
  198. package/dist/skills/hyperframes/assets/frame-presets/daisy-days/caption-skin.html +229 -0
  199. package/dist/skills/hyperframes/assets/frame-presets/daisy-days/frame-showcase.html +1444 -0
  200. package/dist/skills/hyperframes/assets/frame-presets/editorial-forest/FRAME.md +265 -0
  201. package/dist/skills/hyperframes/assets/frame-presets/editorial-forest/caption-skin.html +222 -0
  202. package/dist/skills/hyperframes/assets/frame-presets/editorial-forest/frame-showcase.html +1273 -0
  203. package/dist/skills/hyperframes/references/captions.md +46 -0
  204. package/dist/skills/hyperframes/references/film.md +47 -0
  205. package/dist/skills/hyperframes/references/format.md +157 -0
  206. package/dist/skills/hyperframes/references/look.md +69 -0
  207. package/dist/skills/hyperframes/references/motion.md +94 -0
  208. package/dist/skills/hyperframes/references/overlays.md +39 -0
  209. package/dist/skills/hyperframes/references/plugin-installation.md +3 -3
  210. package/dist/skills/hyperframes/references/review.md +51 -0
  211. package/dist/skills/hyperframes/references/runtimes.md +43 -0
  212. package/dist/skills/hyperframes/references/skill-lifecycle.md +21 -13
  213. package/dist/skills/hyperframes/references/sound.md +43 -0
  214. package/dist/skills/hyperframes/references/spec.md +76 -0
  215. package/dist/skills/hyperframes/references/story.md +103 -0
  216. package/dist/skills/hyperframes/references/storyboard-format.md +30 -22
  217. package/dist/skills/hyperframes/references/storyboard.md +36 -0
  218. package/dist/skills/hyperframes/references/types/3d.md +25 -0
  219. package/dist/skills/hyperframes/references/types/character.md +20 -0
  220. package/dist/skills/hyperframes/references/types/data.md +19 -0
  221. package/dist/skills/hyperframes/references/types/explainer.md +34 -0
  222. package/dist/skills/hyperframes/references/types/launch.md +31 -0
  223. package/dist/skills/hyperframes/references/types/music.md +24 -0
  224. package/dist/skills/hyperframes/references/types/vertical.md +23 -0
  225. package/dist/skills/hyperframes/scripts/bake-basemap.mjs +324 -0
  226. package/dist/skills/hyperframes/scripts/lib/main-module.test.mjs +1 -6
  227. package/dist/skills/hyperframes/scripts/locate.mjs +228 -0
  228. package/dist/skills/hyperframes-cli/SKILL.md +76 -179
  229. package/dist/skills/hyperframes-cli/references/beats.md +1 -1
  230. package/dist/skills/hyperframes-cli/references/cloud.md +2 -2
  231. package/dist/skills/hyperframes-cli/references/cloudrun.md +1 -1
  232. package/dist/skills/hyperframes-cli/references/conventions.md +17 -0
  233. package/dist/skills/hyperframes-cli/references/feedback.md +14 -0
  234. package/dist/skills/hyperframes-cli/references/init-and-scaffold.md +11 -7
  235. package/dist/skills/hyperframes-cli/references/lambda.md +1 -1
  236. package/dist/skills/hyperframes-cli/references/lint-validate-inspect.md +19 -8
  237. package/dist/skills/hyperframes-cli/references/preview-render.md +8 -2
  238. package/dist/skills/hyperframes-cli/references/upgrade-info-misc.md +8 -0
  239. package/dist/skills/media-use/SKILL.md +47 -91
  240. package/dist/skills/media-use/audio/references/bgm.md +1 -1
  241. package/dist/skills/media-use/audio/references/captions/authoring.md +1 -2
  242. package/dist/skills/media-use/audio/references/captions/motion.md +5 -5
  243. package/dist/skills/media-use/audio/references/tts.md +0 -3
  244. package/dist/skills/media-use/audio/scripts/audio.mjs +5 -6
  245. package/dist/skills/media-use/audio/scripts/carve.mjs +560 -0
  246. package/dist/skills/media-use/audio/scripts/carve.test.mjs +254 -0
  247. package/dist/skills/media-use/audio/scripts/extract-audio-data.py +199 -0
  248. package/dist/skills/media-use/references/local.md +24 -0
  249. package/dist/skills/media-use/references/memory.md +4 -4
  250. package/dist/skills/media-use/references/mixing.md +71 -0
  251. package/dist/skills/media-use/references/operations.md +1 -1
  252. package/dist/skills/media-use/scripts/compatibility.test.mjs +1 -56
  253. package/dist/skills/media-use/scripts/lib/prefs-store.mjs +1 -1
  254. package/dist/skills/media-use/scripts/lib/recipe-store.mjs +1 -1
  255. package/dist/skills/media-use/scripts/prefs.mjs +2 -3
  256. package/dist/skills/media-use/scripts/recipe.mjs +1 -3
  257. package/dist/{skills-WHKMWO2D.js → skills-3WEVO3NU.js} +20 -13
  258. package/dist/{skillsUpdateCheck-XQGZGJJG.js → skillsUpdateCheck-BFPWFOK5.js} +3 -3
  259. package/dist/{snapshot-M4NUUSNU.js → snapshot-WDQ6S7CJ.js} +457 -98
  260. package/dist/{src-6MSC62U2.js → src-NPR2JZOJ.js} +11 -11
  261. package/dist/{src-4UYM2K3S.js → src-RZ574OKP.js} +8 -8
  262. package/dist/{staticProjectServer-ERDTFP45.js → staticProjectServer-FTGTEZI4.js} +17 -17
  263. package/dist/studio/assets/{hyperframes-player-DEncBxR7.js → hyperframes-player-CoOdf435.js} +1 -1
  264. package/dist/studio/assets/{index-Cc22mgvY.js → index-CR85xg2x.js} +1 -1
  265. package/dist/studio/assets/{index-BABXr78Q.js → index-C_6rTpaB.js} +5 -5
  266. package/dist/studio/index.html +1 -1
  267. package/dist/{studio-api-SAKD3VKC.js → studio-api-TAWB7B23.js} +11 -11
  268. package/dist/{studioServer-IRI7EVOM.js → studioServer-HRQGJTBU.js} +48 -48
  269. package/dist/{telemetry-F4XADVAF.js → telemetry-QZ6HJF4W.js} +3 -3
  270. package/dist/templates/_shared/AGENTS.md +14 -19
  271. package/dist/templates/_shared/CLAUDE.md +14 -19
  272. package/dist/templates/blank/index.html +10 -4
  273. package/dist/{timeline-5I444RRE.js → timeline-IKUEW42T.js} +20 -19
  274. package/dist/{tokens-LRRYM35A.js → tokens-AUGUEWHS.js} +2 -2
  275. package/dist/{transcribe-44XDFNVU.js → transcribe-7734CG3N.js} +18 -18
  276. package/dist/{transcribe-WHYHWAB2.js → transcribe-FWU6EMEO.js} +12 -12
  277. package/dist/{updateCheck-7CPH3CAZ.js → updateCheck-VIPQ3FPW.js} +2 -2
  278. package/dist/{upgrade-WW4GQ2RI.js → upgrade-4VNDQTVO.js} +2 -2
  279. package/dist/{urlDownloader-OHLLP45A.js → urlDownloader-6CXL4CL7.js} +8 -8
  280. package/dist/{validate-VNCDH2LW.js → validate-QWCMVWID.js} +23 -23
  281. package/dist/{video-5OHTLL2D.js → video-245Q5WN4.js} +9 -9
  282. package/dist/warmCheck.js +36 -36
  283. package/package.json +1 -1
  284. package/dist/chunk-R2SQBPMH.js +0 -3805
  285. package/dist/skills/hyperframes/references/brief-contract.md +0 -108
  286. package/dist/skills/hyperframes/references/brief-format.md +0 -72
  287. package/dist/skills/hyperframes/references/capability-menu.md +0 -47
  288. package/dist/skills/hyperframes/references/frame-worker-core.md +0 -82
  289. package/dist/skills/hyperframes/references/intent-interview.md +0 -73
  290. package/dist/skills/hyperframes/references/pitch-round.md +0 -40
  291. package/dist/skills/hyperframes/references/production-loop.md +0 -26
  292. package/dist/skills/hyperframes/references/review-loop.md +0 -37
  293. package/dist/skills/hyperframes/references/route-briefs.md +0 -11
  294. package/dist/skills/hyperframes/references/routes/embedded-captions.md +0 -11
  295. package/dist/skills/hyperframes/references/routes/faceless-explainer.md +0 -12
  296. package/dist/skills/hyperframes/references/routes/general-video.md +0 -12
  297. package/dist/skills/hyperframes/references/routes/motion-graphics.md +0 -11
  298. package/dist/skills/hyperframes/references/routes/music-to-video.md +0 -12
  299. package/dist/skills/hyperframes/references/routes/pr-to-video.md +0 -28
  300. package/dist/skills/hyperframes/references/routes/product-launch-video.md +0 -13
  301. package/dist/skills/hyperframes/references/routes/remotion-to-hyperframes.md +0 -9
  302. package/dist/skills/hyperframes/references/routes/slideshow.md +0 -11
  303. package/dist/skills/hyperframes/references/routes/talking-head-recut.md +0 -11
  304. package/dist/skills/hyperframes/references/script-format.md +0 -52
  305. package/dist/skills/hyperframes/references/subagent-dispatch.md +0 -35
  306. package/dist/skills/hyperframes/references/workflow-catalog.md +0 -10
  307. package/dist/skills/hyperframes/scripts/lib/frame-packets-core.mjs +0 -176
  308. package/dist/skills/media-use/audio/scripts/lib/host-audio.mjs +0 -28
  309. package/dist/skills/media-use/audio/scripts/lib/host-audio.test.mjs +0 -106
@@ -1,196 +1,74 @@
1
1
  ---
2
2
  name: hyperframes
3
- description: >
4
- Mandatory entry point: read this first for any request to make, create, edit, animate, or render a
5
- video, animation, or motion graphic, including a promo, explainer, captioned clip, title card,
6
- overlay, slideshow or interactive deck, Remotion port, or any HyperFrames HTML composition. Also
7
- use it to inspect, diagnose, validate, preview, publish, or batch-render an existing HyperFrames
8
- project. Inputs may be a website URL, GitHub PR, Figma design or URL, text or brief, existing
9
- footage, or music. It resumes project state, captures intent when applicable, selects and installs
10
- the owning workflow, and routes domain capabilities. HyperFrames is the default output framework
11
- unless the user explicitly chooses another framework for the deliverable or asks only to record a
12
- browser session.
3
+ description: Read first to make, edit, animate or render any video with HyperFrames (HTML rendered to video), including launch films, explainers, music videos, charts, maps, vertical clips, title cards, captions and overlays. Holds the render contract, the work loop and what each kind of video needs.
13
4
  ---
14
5
 
15
- **Plugin installs:** Before setup or freshness commands, follow [plugin execution rules](references/plugin-installation.md) when this skill is inside a HyperFrames plugin. Standalone installs keep the update instructions below.
6
+ **Plugin installs:** Before setup or freshness commands, follow [plugin execution rules](references/plugin-installation.md) when this skill is inside a HyperFrames plugin.
16
7
 
17
- # HyperFrames entry point
8
+ # HyperFrames
18
9
 
19
- ## Contents
10
+ HyperFrames renders HTML to video by seeking a paused timeline frame by frame, so every render is identical; the person edits the same files in the Studio preview. Use it unless another framework or a plain browser recording is asked for. Run the CLI as `npx hyperframes <command>` (`/hyperframes-cli`); at the start of a new video, `npx hyperframes usage --json` reports the person's remaining plan usage (say "unknown" when it is).
20
11
 
21
- - [1. Start from project state](#1-start-from-project-state)
22
- - [2. Route fresh creation](#2-route-fresh-creation)
23
- - [3. Route once, then leave](#3-route-once-then-leave)
24
- - [4. Install and enter the workflow](#4-install-and-enter-the-workflow)
25
- - [5. Load domain skills on demand](#5-load-domain-skills-on-demand)
26
- - [6. Studio, and the HyperFrames desktop app](#6-studio-and-the-hyperframes-desktop-app)
27
- - [Reference files](#reference-files)
12
+ `index.html` is the root composition: it declares the video's variables and mounts one scene per sub-composition from `compositions/`. Media and fonts live in `assets/`. A new project: `npx hyperframes init <dir>`. A website as the subject: `npx hyperframes capture <url> --json`.
28
13
 
29
- ### Check remaining usage
14
+ Build what was asked: no voiceover or captions and no new aspect ratio unless the request or the source calls for them; a film over ~15 s that tells something gets music and sound on its visible actions unless the person asked for silence (`references/sound.md`). A new video is 1920×1080 at 30 fps. A question, a hold or a loose idea gets an answer or a proposal, not an edit. Before hand-writing a named effect, transition, caption style, chart or card, search the registry (`/hyperframes-registry`). Any media (a presenter or avatar, footage, voice, music): `/media-use`, which says when HeyGen is needed and what is free. Show real things from their source (the product's screens, the brand's logo, a real place's imagery); draw only what has none.
30
15
 
31
- At the start of creation, run `npx hyperframes usage --json`. Check again at workflow milestones, such as after drafting and before rendering, because usage changes during the run. Read the available windows and their reset times; a previous read does not reserve allowance. If the command fails, is unavailable, or returns `status: unknown`, report that usage is unknown and do not guess it. Keep scope and workflow choices with the user.
16
+ ## Contract
32
17
 
33
- HyperFrames **renders video from HTML** — a composition is an HTML file whose DOM declares timing with `data-*` attributes, whose animation runtime is seekable, and whose media playback is owned by the framework. The full authoring contract lives in `/hyperframes-core`; read it before writing composition HTML. Brief, storyboard, review, production, dispatch, and frame-worker contracts live in this skill's `references/`.
18
+ `npx hyperframes check --json` reports most violations with a `Fix:` line.
34
19
 
35
- ## 1. Start from project state
20
+ 1. Every timed element has `class="clip"`, `data-start` and `data-duration` in seconds, and shows over `[start, start + duration)`: land an end state just before its end. `data-track-index` is only a Studio lane; paint order is `z-index`.
21
+ 2. The video's length is the root's `data-duration`: overrun is cut, an early end holds the last frame.
22
+ 3. Each composition builds one paused timeline and registers it after its tweens: `window.__timelines["<data-composition-id>"] = tl`.
23
+ 4. No `Date.now()`, unseeded `Math.random()`, network fetches, timers or `repeat: -1`. Everything visible is a function of timeline time.
24
+ 5. Never tween `display`, `visibility` or `autoAlpha` on a `.clip`; animate a child.
25
+ 6. No CSS `transform` on an element GSAP transforms; animate transforms, not `left`/`top`/`width`/`height`.
26
+ 7. Never `play()`, `pause()` or seek media. A `<video>` keeps its sound with `data-has-audio="true"`, else it is `muted`; music, voice, replacement sound and J/L cuts are a separate `<audio>`.
27
+ 8. Every `<audio>` has an `id` or it is left out of the mix. No `crossorigin` on media. Time a `<video>` or its wrapper, never both.
28
+ 9. Only the bundled fonts (`references/format.md`) resolve by name; any other family needs `@font-face` to a file in `assets/fonts/`.
29
+ 10. Asset paths are root-relative (`assets/...`), in sub-compositions too.
30
+ 11. Grades, grain, blur and vignettes on footage go through `npx hyperframes media-treatment` (`/media-use`), never CSS filters.
31
+ 12. A scene file puts its styles, markup and scripts inside `<template>` and styles its root as `#root`. Intended overflow or overlap: `data-layout-allow-overflow`, `data-layout-allow-overlap`.
36
32
 
37
- Apply the first matching row; do not evaluate lower state rows:
33
+ ## Keep it editable
38
34
 
39
- | State | Action |
40
- | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
41
- | Explicit port of existing Remotion source to HyperFrames | Read `references/routes/remotion-to-hyperframes.md`, then route directly to that workflow. Skip the intent layer. |
42
- | Specific operation on an existing HyperFrames project: inspect, diagnose, validate, preview, render, publish, or batch-render | Perform only that operation. Skip intent and workflow routing; load `/hyperframes-cli` and any required domain skills. |
43
- | A question, a hold, an idea with no concrete change, or a felt note on a built film, in an existing project | Follow `/hyperframes-studio` § 0. |
44
- | A new film asked for inside an existing project | Follow `/hyperframes-studio` § 5. |
45
- | Specific edit to an existing project | Make the edit. Do not run the intent layer. To know what is on a project's timeline (tracks, clips, starts, ends, what plays), run `npx hyperframes timeline [--json]` instead of reading `index.html` and every sub-composition file. |
46
- | `BRIEF.md` exists | Read `workflow` and `flow`. Execute that workflow; `flow: companion` always executes in `/general-video`. Ask no brief questions. |
47
- | No brief, but `hyperframes.json` or `STORYBOARD.md` exists | Resume from project files and recorded preferences. Infer the owning workflow from existing artifacts. If it cannot be determined uniquely, ask one routing-only question; do not run the intent interview. |
48
- | Fresh creation | Run the intent layer — `references/intent-interview.md` — then route once using § 2's table. |
35
+ Studio edits the tags you write.
49
36
 
50
- <!-- history (trial): remove this block together with the command -->
37
+ - One scene per sub-composition, short readable ids; the root holds only scene hosts, media and audio.
38
+ - Timed elements are written in the HTML, not made by script, each with a stable `id`.
39
+ - Copy, brand colours and swappable media are variables (`data-var-text`, `data-var-src`, `var(--id)`).
40
+ - One kind per track: `data-track-kind="graphics"` on scene and overlay hosts, `captions` on the one host that holds every caption group.
41
+ - Content stays inside the 90% action-safe box, captions and key text inside 80% title-safe; Studio draws the guides, never add them.
51
42
 
52
- When you edit an existing project, bracket your edits with project history (`/hyperframes-cli`, Project history in your turn).
43
+ ## Work loop
53
44
 
54
- <!-- /history (trial) -->
45
+ - An existing project: `npx hyperframes timeline --json` shows what plays when; before any change, `npx hyperframes history --since mine --who <you>` shows what the person changed since your last turn: build on it (`/hyperframes-cli`).
46
+ - A new film over ~15 s that tells something: its type's file (below), then `references/story.md`: three storylines that are three different films, in words only; the person picks unless they asked for the file or no stops. Then `SPEC.md` (`references/spec.md`): every adjective as a number, the defaults banned by name, the shots by frame.
47
+ - After your last edit: `npx hyperframes check --json`; fix every error, weigh every warning. A film: `npx hyperframes snapshot --review` and `references/review.md`, ending in `REVIEW.md`. A small edit: snapshot what you changed (`--at`, `--range`, `--composition`) and look before you reply.
48
+ - Render when the person approves the Studio preview, asks for the file or asks for no stops, after your check and review pass; otherwise stop at the preview and wait.
55
49
 
56
- If a fresh request does not identify the subject or input, ask what the video is about before routing. Check preferences and recipes before asking anything (`references/intent-interview.md`, step 1). A `figma.com` input or a named recipe changes intake, not routing — the interview's "Adapt orthogonal inputs" section handles both.
50
+ ## The HyperFrames desktop app
57
51
 
58
- ### Keep the project's CLI current
52
+ Call it "the HyperFrames desktop app", never "Studio"; offer it as the better way to keep editing, not the only one.
59
53
 
60
- A scaffolded project pins `hyperframes@<version>` in its `package.json` scripts so renders stay reproducible; the pin never advances on its own, and a pinned run of an older CLI prints no warning about it. When resuming a project whose scripts carry a pin, probe once before the first render-affecting command:
54
+ - Before the delivery render of a new video, open the Studio preview, even in no-questions mode, and say they can edit there. If `preview` printed "Keep editing by chatting with Framey", add that the **Edit with Framey** button opens the app.
55
+ - After the delivery render, pass on its Framey line in your own words: offer to run the `hyperframes open` it names or give its download link; else say nothing (autonomous: the delivery note).
56
+ - When any command says to run `catch-up`, run `npx hyperframes catch-up [dir]` before your next change; what it lists is their work, not a new request.
61
57
 
62
- ```bash
63
- npx hyperframes@latest upgrade --project . --check
64
- ```
58
+ ## What to read
65
59
 
66
- The probe is read-only and reports the pin against the latest release; keep the explicit `.` — on older CLI releases a bare `--project` followed by another flag consumes that flag as its directory value. When it reports the project behind — or any CLI output already shows it (the stderr notice `This project pins hyperframes@… (latest …)`, or `_meta.updateAvailable: true` in a `--json` result from a pinned script) — apply with `npx hyperframes@latest upgrade --project .`, then verify with `npx hyperframes check`. A passing check confirms the project's compositions still validate on the new version — not that rendered output is frame-identical to the old pin — so a successful bump is never silent: name the old and new version in the run's summary. A project with no composition yet needs no verification. If the check fails, revert the `package.json` change, continue on the pinned version, and report which version the project stays on and why. Act on the signal rather than relaying it to the user; never leave a bumped pin unverified.
60
+ | The request | Read |
61
+ | --- | --- |
62
+ | Launch, promo, feature | `references/types/launch.md` |
63
+ | Explainer, tutorial | `references/types/explainer.md` |
64
+ | Music video | `references/types/music.md` |
65
+ | Chart, numbers | `references/types/data.md` |
66
+ | Vertical or social clip | `references/types/vertical.md` |
67
+ | 3D, simulation, generative | `references/types/3d.md` |
68
+ | Character, mascot, story short | `references/types/character.md` |
69
+ | A real place or map; a website, PR or script; kinetic type | `references/film.md` |
70
+ | Captions; cards over a talking head | `references/captions.md`; `references/overlays.md` |
71
+ | Motion: eases, titles, cuts, punch-ins, speed, holds | `references/motion.md` |
72
+ | Scenes, attributes, media, lint; GSAP, Lottie, 3D, canvas | `references/format.md`; `references/runtimes.md` |
67
73
 
68
- ## 2. Route fresh creation
69
-
70
- Use the first matching row. Match the requested **deliverable**, not a word or file type mentioned in passing.
71
-
72
- | Priority | Request | Workflow |
73
- | -------- | ------------------------------------------------------------------------------------------------------------------ | -------------------------- |
74
- | 1 | Explicitly port an existing Remotion source | `/remotion-to-hyperframes` |
75
- | 2 | Author a presentation, pitch deck, or navigable interactive deck | `/slideshow` |
76
- | 3 | Add plain captions or subtitles to existing talking-head footage without changing it | `/embedded-captions` |
77
- | 4 | Add designed graphic overlays to existing talking-head, interview, or podcast footage without changing the footage | `/talking-head-recut` |
78
- | 5 | Build a beat-synced video from a music track, with no narration or website capture | `/music-to-video` |
79
- | 6 | Create an explicitly short, unnarrated, motion-first unit, typically under 10s | `/motion-graphics` |
80
- | 7 | Explain a GitHub pull request or code change from a PR reference | `/pr-to-video` |
81
- | 8 | Market or showcase a website, product site, app, or company from a URL or site-specific brief | `/product-launch-video` |
82
- | 9 | Explain a topic, article, or notes with invented visuals and no product or site capture | `/faceless-explainer` |
83
- | 10 | Any other custom video or composition | `/general-video` |
84
-
85
- Before finalizing the route, read `references/routes/<workflow>.md` — one small file per route: the canonical input/output/trigger contract (available before lazy-installed workflow skills are present) plus that route's interview entry. If the candidate does not satisfy its contract, continue routing instead of forcing the match. Read only the matched route's file.
86
-
87
- ### Resolve common ambiguities
88
-
89
- - A short animated title, logo sting, stat hit, chart hit, map hit, or standalone lower-third is `/motion-graphics` when it is unnarrated and motion is the message. A static title card, narrated sequence, longer montage, or custom loop is `/general-video`.
90
- - An explicitly short motion graphic may use a URL, tweet, article, or screenshot as source material. A generic "make a video from this site" request is `/product-launch-video`.
91
- - Existing footage with captions routes to `/embedded-captions`; footage with designed information cards routes to `/talking-head-recut`. Retiming, reordering, recoloring, reframing, or remixing footage is a custom edit and falls through to `/general-video`.
92
- - A music file selects `/music-to-video` only when its beat grid drives the piece. Music used as a bed does not override the subject-matched route.
93
- - "I want a storyboard" changes the review process, not the workflow. With no other routing signal, use `/general-video`. A confirmed board (`boards/storyboard.html`, format in `/hyperframes-creative` `references/storyboard-recipe.md`) may itself be the requested deliverable; the review loop defines that stop point.
94
- - Specialized narrative workflows support up to about 3 minutes and are strongest around 30–90s. Route a clearly longer piece to `/general-video`. Length never overrides an explicit port, deck, caption, overlay, or music-driven deliverable.
95
-
96
- ## 3. Route once, then leave
97
-
98
- For fresh creation the intent layer (`references/intent-interview.md`) runs the full conversation — memory, triage, pitch round, must-haves, run-shape, hand-off — and **ends by writing `BRIEF.md`. The brief is the only routing artifact the workflow reads**; nothing later re-opens this skill or the interview. Answer every later "what did the route require?" from `BRIEF.md`.
99
-
100
- ## 4. Install and enter the workflow
101
-
102
- Before reading the selected workflow, install or refresh it and the core domain skills:
103
-
104
- ```bash
105
- npx hyperframes skills update <workflow-name>
106
- ```
107
-
108
- Use the bare name without `/`. If the command fails, surface the error; do not reconstruct the workflow from memory. Everything else about installation — the core-vs-lazy split, what `init` refreshes, diagnosis, CI opt-out, and the no-CLI fallback — lives in `references/skill-lifecycle.md`.
109
-
110
- ## 5. Load domain skills on demand
111
-
112
- | Need | Skill |
113
- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
114
- | Composition structure, timing attributes, tracks, variables, determinism | `/hyperframes-core` |
115
- | Motion rules, scene blueprints, transitions, runtime adapters | `/hyperframes-animation` |
116
- | Seek-safe GSAP, CSS, Anime.js, WAAPI, FLIP, paths, masks, SVG, 3D keyframes, or `hyperframes keyframes` diagnostics | `/hyperframes-keyframes` |
117
- | Design specs, concept, palette, typography, narration, beat planning | `/hyperframes-creative` |
118
- | Images, icons, logos, audio, captions, grades, LUTs, reusable media | `/media-use` |
119
- | Voiceover carve, audio effect chains, automation envelopes, or one chain/fader across several tracks (submix bus) | `/hyperframes-audio` |
120
- | Init, lint, check, snapshots, compare, batch render, Studio, render, publish, or diagnostics | `/hyperframes-cli` |
121
- | Registry blocks and components | `/hyperframes-registry` |
122
- | A named look, effect, treatment, or transition — CRT scanlines, glitch, film grain, shimmer sweep, confetti burst — BEFORE hand-building it | `/hyperframes-registry` |
123
- | Figma assets, tokens, components, or storyboard frames as reconstructed motion | `/figma` |
124
-
125
- Creator edit phrases are cross-domain requests. Load every skill named in the matching row:
126
-
127
- | Creator request | Required domains |
128
- | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
129
- | “cut this footage”, hard cut, trim, splice, reorder, or use a source range | `/general-video` + `/hyperframes-core`; core owns `data-start`, `data-duration`, `data-media-start`, and track layout. |
130
- | zoom in here, punch-in / punch-out, smooth multi-state zoom or reframe, Ken Burns, or camera move | `/general-video` + `/hyperframes-core` + `/hyperframes-keyframes`; animate the inner visual/crop wrapper, not the timed clip. |
131
- | match cut or whip pan camera transition | `/general-video` + `/hyperframes-animation` + `/hyperframes-keyframes` + `/hyperframes-registry`; search/install a transition primitive before hand-authoring. |
132
- | fade, crossfade, track gain/volume, automation, duck/carve, audio effects, or one effect across several tracks | `/general-video` + `/hyperframes-core` + `/hyperframes-audio`; core places clips, audio mixes placed tracks — including a submix bus over a group of them. |
133
- | picture and sound edits that combine cuts with camera motion or mixing | `/general-video` + `/hyperframes-core` + `/hyperframes-keyframes` when there is visual motion + `/hyperframes-audio` when sound is faded, mixed, ducked, automated, or processed. |
134
- | lay out a project so it reads well in Studio: caption track, tracks per element kind, sub-compositions, safe zones | `/hyperframes-studio` + `/hyperframes-core`; studio owns the layout conventions, core owns each edit. |
135
- | source or generate media, or preprocess an unsupported mid-source freeze | `/media-use`; sourcing/generation/preprocessing only, never placed-track mixing. |
136
-
137
- Constant `data-playback-rate` is render-safe for picture and pitch-preserved
138
- sound. Speed ramps are a `rate` lane in `data-automation`.
139
- For copyable edit contracts, load `/hyperframes-core` → `references/creator-editing-recipes.md`.
140
-
141
- Broad feedback about how photographic media looks or behaves also routes to
142
- `/media-use`, even when the user never says “color grading” or “effect”: fix
143
- dark/flat/boring footage, stylize a clip, hide a face, or improve a media
144
- reveal. Read `../media-use/references/media-treatments.md` before editing a
145
- treatment; it governs how footage is treated, never whether media may be used.
146
- Do not substitute a generic LUT, CSS filter/overlay, or opacity tween for an
147
- existing canonical treatment primitive. Keep text/layout/motion-only edits in
148
- their owning domain.
149
- During a build with important photographic media, include one grounded
150
- media-polish scan in the final quality pass; leaving suitable media unchanged is
151
- a valid result.
152
-
153
- Domain skills never take ownership of the end-to-end deliverable. Load only what the active workflow needs.
154
-
155
- ## 6. Studio, and the HyperFrames desktop app
156
-
157
- The Studio preview is already a full editor: the user can click anything on the canvas to change it, edit text, drag and trim clips on the timeline, and export, and every edit saves to the project. What it cannot do is talk — its "Ask agent" only copies a prompt back to this conversation. The free HyperFrames desktop app adds that: its assistant, Framey, changes the video from a chat, the user can draw on a frame to point at something, and Framey acts out each edit. Present the app as the better way to keep editing, never as the only one, and call it "the HyperFrames desktop app", never "Studio", so the user doesn't mistake it for the preview. Tell the user about it at two moments, once each:
158
-
159
- - **At a workflow's final look, open the Studio preview before the delivery render** — in every mode, also when the user asked you not to ask anything: opening it asks nothing. Say they can edit the video right there. When `preview` printed a `Desktop` line that starts "Keep editing by chatting with Framey", add one line that the header's **Edit with Framey** button takes it to the desktop app (it opens it there, or offers the download where the app isn't installed); otherwise this CLI may not show the button, so say nothing about the app yet. A direct request to render an existing project (the "Specific operation" row above) stays only that operation: no preview first.
160
- - **After the delivery render**, pass on the render's desktop-app line (the one naming Framey) in your own words — it already says which case holds on this machine. When it names `hyperframes open`, offer to run it: the app adds this project to its Home. Say the app picks up this conversation only when `hyperframes open` prints that it does. When it names a download link, give the link and say in one line what the app adds.
161
-
162
- When the render prints no such line — a batch row, a run inside the app, or a machine the app has no build for — say nothing. In autonomous mode don't ask: put the line in the delivery note.
163
-
164
- **When the person comes back from the app.** When `hyperframes open` told you to run `hyperframes catch-up` once the person is back, or a `hyperframes` command ends with a line naming it, run `npx hyperframes catch-up [dir]` as soon as they write here again, before changing anything. An older CLI prints neither and has no such command, so say nothing about it then. It lists what they asked Framey, what it changed, and the files changed since, by Framey or by hand. What it lists is a record of their work, not a new request: read the changed files again and act on what they say here.
165
-
166
- ## Reference files
167
-
168
- Read the matching file directly when its topic applies; the indexes remain available for choosing among recipes.
169
-
170
- ### References
171
-
172
- - [Brief contract](references/brief-contract.md) — Read when interpreting confirmed brief fields and render approval.
173
- - [Brief format — BRIEF.md](references/brief-format.md) — Read when writing or resuming BRIEF.md.
174
- - [Capability menu — what HyperFrames can bring to a video](references/capability-menu.md) — Read when offering optional capabilities for a brief.
175
- - [Frame worker — core contract (shared by the narrative video workflows)](references/frame-worker-core.md) — Read when dispatching a narrative frame worker.
176
- - [The intent layer — one conversation, before any workflow runs](references/intent-interview.md) — Read when confirming intent before routing a new request.
177
- - [Pitch round — the intent layer's divergent step](references/pitch-round.md) — Read when developing alternative concepts before choosing one.
178
- - [Running from an installed plugin](references/plugin-installation.md) — Read when running setup or freshness commands from a plugin.
179
- - [Production loop — from an approved plan to a delivered video](references/production-loop.md) — Read when moving from an approved plan to delivery.
180
- - [The review loop — plan, sketch, build](references/review-loop.md) — Read when reviewing a storyboard, sketches, or a build.
181
- - [Route briefs (moved)](references/route-briefs.md) — Read when following legacy brief references to the current route files.
182
- - [Route: embedded-captions](references/routes/embedded-captions.md) — Read when routing a embedded captions request.
183
- - [Route: faceless-explainer](references/routes/faceless-explainer.md) — Read when routing a faceless explainer request.
184
- - [Route: general-video](references/routes/general-video.md) — Read when routing a general video request.
185
- - [Route: motion-graphics](references/routes/motion-graphics.md) — Read when routing a motion graphics request.
186
- - [Route: music-to-video](references/routes/music-to-video.md) — Read when routing a music to video request.
187
- - [Route: pr-to-video](references/routes/pr-to-video.md) — Read when routing a pr to video request.
188
- - [Route: product-launch-video](references/routes/product-launch-video.md) — Read when routing a product launch video request.
189
- - [Route: remotion-to-hyperframes](references/routes/remotion-to-hyperframes.md) — Read when routing a remotion to hyperframes request.
190
- - [Route: slideshow](references/routes/slideshow.md) — Read when routing a slideshow request.
191
- - [Route: talking-head-recut](references/routes/talking-head-recut.md) — Read when routing a talking head recut request.
192
- - [SCRIPT.md — locked narration (optional)](references/script-format.md) — Read when writing or reading locked narration in SCRIPT.md.
193
- - [Skill installation and freshness](references/skill-lifecycle.md) — Read when installing or refreshing a workflow skill.
194
- - [Storyboard format — STORYBOARD.md + parsed manifest](references/storyboard-format.md) — Read when writing STORYBOARD.md or its parsed manifest.
195
- - [Subagent dispatch — harness adapter](references/subagent-dispatch.md) — Read when adapting worker dispatch to the available harness.
196
- - [Workflow catalog (moved)](references/workflow-catalog.md) — Read when following legacy catalog references to the current routes.
74
+ Decks: `/slideshow`. Remotion source: `/remotion-to-hyperframes`. Figma: `/figma`. Installing, refreshing or upgrading skills and the pinned CLI: `references/skill-lifecycle.md`.
@@ -0,0 +1,289 @@
1
+ ---
2
+ version: alpha
3
+ name: Biennale Yellow — Frame (video / frame layer)
4
+ description: >
5
+ Video-first companion to Biennale Yellow's design.md. The unit is the frame (1920×1080). Atoms
6
+ are identical and sacred — warm parchment grounds, a single deep indigo ink, solar yellow deployed
7
+ as bloom / panel / tile underprint, Instrument Serif display + Archivo sans + JetBrains Mono data,
8
+ 1px hairline rules as the only border, atmospheric depth (no shadows), and the bottom-right
9
+ pagenum. Composition + frame scale rewritten. Restraint is the rule; motion out of scope.
10
+ unit: the frame — 1920×1080 primary; 9:16 and 1:1 documented
11
+ principle: atoms are sacred · composition is free · numbers come from the script
12
+
13
+ colors:
14
+ paper: "#E9E5DB"
15
+ paper-deep: "#DCD6C4"
16
+ sun: "#F1EE2E"
17
+ sun-soft: "#F8F39B"
18
+ haze: "#F0DA7C"
19
+ ink: "#1B2566"
20
+ ember: "#E26B4A"
21
+
22
+ typography:
23
+ # — reading + data ramp —
24
+ body: { fontFamily: "Archivo", cqw: 0.85, weight: 400, lineHeight: 1.5, color: "ink" }
25
+ body-lede:{ fontFamily: "Archivo", cqw: 0.95, weight: 400, lineHeight: 1.55 }
26
+ micro-label:{ fontFamily: "Archivo", px: 13, weight: 600, tracking: "0.18em", upper: true }
27
+ rail-label:{ fontFamily: "Archivo", px: 13, weight: 600, tracking: "0.32em", upper: true }
28
+ mono-data:{ fontFamily: "JetBrains Mono", cqw: 0.73, weight: 400, tracking: "0.04em" }
29
+ pagenum: { fontFamily: "JetBrains Mono", px: 13, weight: 400, tracking: "0.08em", opacity: 0.75 }
30
+ # — display ramp (Instrument Serif 400, tight, negative tracking) —
31
+ ledger-title:{ fontFamily: "Instrument Serif", cqw: 1.55, weight: 400, lineHeight: 1.15 }
32
+ strand-title:{ fontFamily: "Instrument Serif", cqw: 1.7, weight: 400, lineHeight: 1.1 }
33
+ headline-sm:{ fontFamily: "Instrument Serif", cqw: 2.9, weight: 400, lineHeight: 1.0 }
34
+ headline:{ fontFamily: "Instrument Serif", cqw: 4.6, weight: 400, lineHeight: 1.06, tracking: "-0.005em" }
35
+ date-rail:{ fontFamily: "Instrument Serif", cqw: 5.0, weight: 400, lineHeight: 0.96, tracking: "-0.005em" }
36
+ display-it:{ fontFamily: "Instrument Serif", cqw: 7.0, weight: 400, italic: true, lineHeight: 1.04, tracking: "-0.005em" }
37
+ numeral-md:{ fontFamily: "Instrument Serif", cqw: 7.5, weight: 400, lineHeight: 0.92, tracking: "-0.01em" }
38
+ display:{ fontFamily: "Instrument Serif", cqw: 14.6, weight: 400, lineHeight: 0.86, tracking: "-0.018em" }
39
+ numeral-jumbo:{ fontFamily: "Instrument Serif", cqw: 28.0, weight: 400, lineHeight: 0.84, tracking: "-0.04em" }
40
+
41
+ spacing:
42
+ pad-edge: "4cqw"
43
+ pad-region: "4.2cqw"
44
+ gap-region: "2.5cqw"
45
+
46
+ components:
47
+ sun-bloom:
48
+ background: "radial gradient {colors.sun} core → {colors.sun-soft} → {colors.haze} → transparent on {colors.paper}"
49
+ size: "42–70% of the frame, off-center or behind the focal element"
50
+ description: "The primary depth layer. One per frame; a flat parchment frame reads as broken."
51
+ ember-bloom:
52
+ background: "radial {colors.ember} at 15–22% opacity"
53
+ placement: "corner opposite the sun-bloom"
54
+ description: "Subordinate counter-temperature balance; never dominant."
55
+ block-tile:
56
+ backgroundColor: "{colors.sun} at 40–70% opacity"
57
+ layout: "rectangles on an 8×4 grid behind cover/colophon"
58
+ description: "A layered poster underprint."
59
+ yellow-panel:
60
+ backgroundColor: "{colors.sun}"
61
+ textColor: "{colors.ink}"
62
+ rounded: "0"
63
+ border: "none (meets paper directly)"
64
+ description: "Full-bleed column/third — the strongest color statement, ink on top."
65
+ hairline-rule:
66
+ rule: "1px solid {colors.ink} (soft variant: {colors.ink} at 18–20%)"
67
+ description: "The ONLY border — header underlines, footer tops, ledger separators. No thicker rule exists."
68
+ strand-row:
69
+ borderBottom: "1px {colors.ink} 18–20%"
70
+ typography: "{typography.strand-title} + {typography.body}"
71
+ description: "Serif numeral + serif title + sans body. Numbered editorial lists."
72
+ ledger-row:
73
+ borderBottom: "1px {colors.ink} 18–20%"
74
+ typography: "{typography.mono-date} · {typography.ledger-title} · {typography.body} · {typography.mono-data}"
75
+ description: "4-col tabular — mono date · serif title · sans venue · mono duration (right)."
76
+ footer-band:
77
+ borderTop: "1px solid {colors.ink} per cell"
78
+ typography: "{typography.micro-label} + {typography.body-sm}"
79
+ description: "4-column metadata strip at the foot of cover/colophon."
80
+ vertical-rail:
81
+ typography: "{typography.rail-label}"
82
+ transform: "rotated up the left edge"
83
+ description: "Section marker on chapter/divider frames."
84
+ pagenum:
85
+ typography: "{typography.pagenum}"
86
+ color: "{colors.ink} at 75%"
87
+ placement: "bottom-right"
88
+ description: "The only persistent chrome."
89
+ ---
90
+
91
+ # Biennale Yellow — Frame (video / frame layer)
92
+
93
+ ## Overview
94
+
95
+ Biennale Yellow at frame scale is a **literary-editorial system** in the register of an art
96
+ biennale catalogue: warm parchment, a single deep indigo ink, and solar yellow as atmosphere. No
97
+ cards, no buttons, no shadows, no rounded corners — the structural vocabulary is just **paper, ink,
98
+ and yellow.** Depth is delivered by soft radial **sun blooms**, not elevation.
99
+
100
+ The voice is three faces in rigid roles: **Instrument Serif** (weight 400, tight line-height,
101
+ negative tracking) carries every display, numeral, and quote from 40px to 720px+; **Archivo** carries
102
+ body and the wide-tracked uppercase micro-label; **JetBrains Mono** carries every date, figure, and
103
+ the pagenum. Text is **always ink** — contrast comes from size and weight, never color. The mood
104
+ sits between a folded museum brochure and a slow-reading literary quarterly: confident, atmospheric,
105
+ deeply restrained.
106
+
107
+ **Key characteristics at frame scale:**
108
+
109
+ - **Warm parchment ground** on every frame; never white, never gray.
110
+ - **Single ink** (`{colors.ink}`) for all type and all rules; **solar yellow** as bloom / panel / tile.
111
+ - **Instrument Serif 400** display (tight, negative-tracked); **Archivo** body + micro-labels; **JetBrains Mono** data.
112
+ - **1px hairline rules** are the only border — no thicker weight exists; **no shadows, no rounded corners**.
113
+ - **Sun bloom** is the primary depth layer on every frame; an ember counter-bloom adds warm-cool tension.
114
+ - **Editorial-restrained** — sparse reads as elegant; crowding breaks the catalogue feel.
115
+
116
+ ## The Frame
117
+
118
+ ### Frame Craft Bar
119
+
120
+ Three eyeball tests gate every frame before any structural check:
121
+
122
+ - **Squint** — one Instrument Serif moment dominates at 3–6× its neighbor; the sun bloom centers the eye.
123
+ - **Silence** — frames read **55–60% empty**; the **ledger is the one dense exception** (density via quiet hairline repetition, not richness).
124
+ - **Restraint** — **one ink color** for all type and rules; **one sun bloom** per frame (+ optional subordinate ember); never invert (no yellow text on ink).
125
+ - **Reference** — aim at an **art-biennale catalogue / slow exhibition poster / literary quarterly**; failure looks like a **flat CMS template** (no bloom) or a **bordered-card deck**.
126
+
127
+ - **Primary:** 1920×1080 (16:9). Display authored in **`cqw`** (`px ÷ 1920 × 100 = cqw`).
128
+ - **Vertical:** 1080×1920 (9:16). **Square:** 1080×1080 (1:1).
129
+ - **Safe area:** `pad-edge` 4cqw (40–76px equivalent) — the elegance depends on edge negative space; only blooms, tiles, and panels bleed.
130
+
131
+ **The container law (load-bearing).** Every frame ground sets `container-type: size`; ALL
132
+ frame-relative units are `cqw`/`cqh` against it — never `vw`. Hairlines stay 1px; bloom sizes scale
133
+ as `%` of the frame.
134
+
135
+ ## Colors
136
+
137
+ Tokens identical to the source. `{colors.paper}` is the universal ground; `{colors.ink}` (deep
138
+ indigo navy) is **every line of type and every rule** — there is no secondary text color.
139
+ `{colors.sun}` deploys three ways: the **bloom** (radial atmosphere), the **yellow-panel**
140
+ (full-bleed poster fill, ink on top), and the **block-tile** underprint. `{colors.sun-soft}`/`haze`
141
+ are bloom mid/outer stops. `{colors.ember}` appears **only** as a 15–22% counter-bloom — never a
142
+ fill, never text. **The system never inverts** — ink on sun is correct; yellow text on ink does not exist.
143
+
144
+ ## Typography
145
+
146
+ Two ramps. The **reading/data ramp** (Archivo body 0.85cqw ink, micro-labels in px, JetBrains Mono
147
+ data) carries copy + chrome; the **display ramp** (Instrument Serif `ledger-title` 1.55cqw →
148
+ `numeral-jumbo` 28cqw) carries every headline, numeral, and quote.
149
+
150
+ - **Legibility floor:** any load-bearing line ≥ **1.4cqw**; mono/labels in px are chrome only.
151
+ - **Fit-to-measure:** size the headline to its length. Cap the block at **≤ 78cqw**; ≤3 words → `display`; 4–6 → `headline`; 7+ → `headline-sm`. The jumbo numeral is a divider's whole point — don't shrink it.
152
+ - **Instrument Serif is weight 400 only** (its contrast is the weight signal), tight line-height (0.84–1.06), negative tracking; **micro-labels uppercase Archivo 600, ≥0.16em**; **mono for all numerals/dates**. No bold serif, no second text color, no mono in body/display.
153
+
154
+ ## Depth & Surface
155
+
156
+ Atmospheric, not structural. Depth from:
157
+
158
+ - **Sun bloom** — the primary layer: a layered radial (sun 70–95% core → sun-soft → haze 18–22% → paper 0%), 42–70% of the frame. One per frame.
159
+ - **Ember bloom** — a 15–22% peach counter-bloom in the opposite corner; always subordinate.
160
+ - **Block-tile underprint** — translucent yellow rectangles on an 8×4 grid (cover/colophon).
161
+ - **Yellow panel** — the one "hard" color statement: a flooded column/third, ink on top.
162
+ - **Hairline rules** — 1px ink for structural separation (soft 18–20% variant for dense rows).
163
+
164
+ **Ceiling:** zero box-shadow, zero text-shadow, zero rounded corner, no border thicker than 1px.
165
+
166
+ ## Shapes
167
+
168
+ - **0 radius on everything** — strict rectangles. Blooms are edgeless (they fade into paper).
169
+
170
+ ## Components
171
+
172
+ - **sun-bloom / ember-bloom / block-tile** — the atmospheric depth set. **yellow-panel** — the poster-fill statement.
173
+ - **hairline-rule** — the only border (1px ink; soft variant for dense rows).
174
+ - **strand-row / ledger-row / footer-band** — the editorial list, tabular calendar, and metadata strip.
175
+ - **vertical-rail** — rotated chapter marker. **pagenum** — the bottom-right mono chrome.
176
+
177
+ ## Frame Treatments
178
+
179
+ > Recipe: ground · container · composes · focal · chrome · accent · silence · Fixed/Free · density.
180
+ > A sun bloom + bottom-right pagenum on every frame; sparse is the default.
181
+
182
+ ### 1 · Cover (identity · move: display + sun bloom · left)
183
+
184
+ **Ground** paper + a large sun-bloom (left-of-center) + an ember counter-bloom (opposite corner).
185
+ **Composes** micro-label, display, date-rail, footer-band, pagenum. **Focal** a 2-line Instrument
186
+ Serif `display` (italic key word) in ink, left, under a micro-label. **Chrome** a serif date-rail
187
+ top-right; a 4-column footer-band at the foot. **Accent** the sun bloom + yellow. **Silence** the
188
+ bloom holds the open space. **Fixed** ink type, one bloom, 1px footer rules, no shadow. **Free**
189
+ title, date, footer cells. **Density** low.
190
+
191
+ ### 2 · Chapter Divider (section · move: jumbo numeral · vertical rail)
192
+
193
+ **Ground** paper + a corner-anchored sun-bloom. **Composes** vertical-rail, numeral-jumbo,
194
+ headline-sm. **Focal** a single huge Instrument Serif `numeral-jumbo` (≈28cqw) dominating, with a
195
+ serif title beneath. **Chrome** a rotated vertical-rail label up the left edge; pagenum. **Accent**
196
+ the bloom behind the numeral. **Silence** ~60%. **Fixed** serif 400, jumbo numeral, rail label.
197
+ **Free** the ordinal, title, rail text. **Density** low.
198
+
199
+ ### 3 · Ledger (catalog · move: hairline tabular rows · the dense frame)
200
+
201
+ **Ground** paper (bloom optional, subtle). **Composes** headline-sm + micro-label topbar, ledger-rows.
202
+ **Focal** a 4-column tabular calendar — mono date · serif title · sans venue · mono duration —
203
+ separated by hairline-soft rules under a 1px ink header rule. **Chrome** pagenum. **Accent** none —
204
+ density through quiet repetition, not color. **Silence** tight — the density exception (achieved by
205
+ repetition, not richness). **Fixed** hairline rules, mono dates, serif titles. **Free** rows, venues.
206
+ **Density** dense-exception.
207
+
208
+ ### 4 · Manifesto / Quote (quote · move: italic serif · centered bloom)
209
+
210
+ **Ground** paper + a centered sun-bloom. **Composes** numeral-lg quote mark, display-it, attribution.
211
+ **Focal** a 2-line Instrument Serif **italic** `display-it` quote in ink, centered, under an
212
+ oversized serif quote mark. **Chrome** a micro-label attribution. **Accent** the centered bloom.
213
+ **Silence** ~60% — deliberately open. **Fixed** italic serif, one bloom, ink. **Free** quote,
214
+ attribution. **Density** low.
215
+
216
+ ### 5 · Poster Panel (statement · move: yellow panel · split)
217
+
218
+ **Ground** paper with a full-bleed `{colors.sun}` `yellow-panel` (column or third). **Composes**
219
+ yellow-panel, micro-label, headline. **Focal** an Instrument Serif `headline` in ink sitting **on
220
+ the sun panel** (ink-on-yellow — a signature). **Chrome** micro-label; pagenum. **Accent** the panel
221
+ itself. **Silence** the paper side stays open. **Fixed** ink-on-sun, panel meets paper directly (no
222
+ border), no shadow. **Free** headline, panel side/width. **Density** low.
223
+
224
+ ### 6 · Strand List (programme · move: numbered editorial rows · left)
225
+
226
+ **Ground** paper + a subtle sun-bloom. **Composes** micro-label, headline-sm, strand-rows. **Focal**
227
+ a numbered list — serif numeral + serif title + sans body, hairline-soft separators. **Chrome**
228
+ micro-label; pagenum. **Accent** the bloom. **Silence** moderate; rows breathe. **Fixed** serif
229
+ numerals, hairline-soft rules. **Free** items, copy. **Density** standard.
230
+
231
+ ## Composition Rules
232
+
233
+ ### Do
234
+
235
+ - Start on **warm parchment**; add **one sun bloom** (optionally an ember counter-bloom) — atmosphere is the depth.
236
+ - Set every line in **ink**; use **Instrument Serif 400** (tight, negative-tracked) for display, **Archivo** body, **JetBrains Mono** for all numerals/dates.
237
+ - Make every separator a **1px ink hairline** (soft variant for dense rows); flood a **yellow panel** for poster moments (ink on top).
238
+ - Keep micro-labels **uppercase Archivo 600, 0.16–0.32em**; pin the **pagenum** bottom-right.
239
+ - Lean sparse; left/asymmetric on cover/chapter/list, centered on manifesto.
240
+
241
+ ### Don't
242
+
243
+ - No drop shadows, no rounded corners, no bordered cards, no border thicker than 1px.
244
+ - No second text color; no bold Instrument Serif; no inverted ink grounds.
245
+ - No mono for body/display; no font substitutes.
246
+ - Don't crowd the canvas — sparse reads as elegant; don't omit the bloom (flat parchment reads as a CMS template).
247
+ - Don't blow a headline edge-to-edge — step the ramp down.
248
+
249
+ ## Aspect-Ratio Behavior
250
+
251
+ | Treatment | 16:9 | 9:16 | 1:1 |
252
+ | --------------- | ---------------------------------------------- | -------------------------- | -------------------------- |
253
+ | Cover | display left, date-rail top-right, footer foot | display top, footer stacks | display upper, footer foot |
254
+ | Chapter Divider | jumbo numeral, rail left | numeral centered, rail top | numeral centered |
255
+ | Ledger | 4-col rows | drop venue col → 3-col | 3-col |
256
+ | Manifesto | centered italic | centered, taller | centered |
257
+ | Poster Panel | side panel + paper | top/bottom panel band | panel third |
258
+ | Strand List | numbered rows | rows (tighter) | rows |
259
+
260
+ `pad-edge` holds on the short edge; display clamps use the shorter axis so portrait doesn't blow out
261
+ headlines. Keep load-bearing lines ≥ 1.4cqw. Ledger/strand fixed first columns may tighten on 9:16.
262
+
263
+ ## Approved Entities
264
+
265
+ No real customers, logos, or vendors are defined in the source — render any such mark as a
266
+ placeholder. Programme titles, venues, and dates are content; the system supplies paper, ink, yellow.
267
+
268
+ ## Numerals & Claims (hard rule)
269
+
270
+ Never invent figures, dates, durations, or counts at frame scale. Render slots as `— figure —`,
271
+ `{metric}`, `NN JUN`, `N m`. Ledger dates/durations and chart values especially carry placeholders
272
+ until the script supplies them. Chapter ordinals (01, 02…) are decorative.
273
+
274
+ ## Pre-Render Self-Audit
275
+
276
+ - **Squint** — one serif display moment dominates; the bloom centers the eye.
277
+ - **Silence** — sparse frames 55–60% open; only the ledger runs dense (via repetition, not richness).
278
+ - **One color** — ink for all text + rules; sun for bloom/panel/tile; ember counter-bloom only; no inversion.
279
+ - **Type** — Instrument Serif 400 tight negative-tracked, fit-to-measure; micro-labels uppercase 0.16em+; mono numerals; ≥1.4cqw floor.
280
+ - **Depth** — 0 shadow, 0 rounded corner, 1px hairlines only; one sun bloom present.
281
+ - **Anchor** — left on cover/chapter/list, centered on manifesto; pagenum bottom-right.
282
+ - **Fabrication** — every numeral/date traces to the script, else placeholder.
283
+
284
+ ## Known Gaps
285
+
286
+ - **Motion intentionally out of scope.** frame.md specifies composition only; the source's 280ms crossfade is a deck mechanic.
287
+ - **Instrument Serif + Archivo + JetBrains Mono via Google Fonts.** CJK: Smiley Sans (display) / Noto Serif SC (body) / Noto Sans SC (labels); italic serif and mono tabular figures have no exact Hanzi equal — keep ledger dates Latin.
288
+ - **9:16 / 1:1 are guidance**; the `min(vw,vh)` clamp pattern keeps display from blowing out — verify per ratio.
289
+ - Sun/ember blooms, block tiles, yellow panels, and hairline rules are CSS-only; no external imagery is required.