@hypit/hypit 0.1.3 → 0.1.5

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 (486) hide show
  1. package/README.md +5 -3
  2. package/dist/public/caption.d.ts +206 -183
  3. package/dist/public/composition.d.ts +25 -3
  4. package/dist/public/endpoint-kit.d.ts +24 -2
  5. package/dist/public/generation.d.ts +5 -1
  6. package/dist/public/hyperframes.d.ts +19 -1
  7. package/dist/public/narrative.d.ts +17 -3
  8. package/dist/public/performance.d.ts +1590 -0
  9. package/dist/public/program-space.d.ts +179 -32
  10. package/dist/public/runtime-kit.d.ts +21 -8
  11. package/dist/public/sound.d.ts +822 -0
  12. package/dist/public/speech.d.ts +41 -0
  13. package/dist/public/studio-adapter.d.ts +107 -16
  14. package/dist/public/temporal-markup.d.ts +9 -44
  15. package/dist/public/temporal.d.ts +37 -28
  16. package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
  17. package/examples/README.md +18 -10
  18. package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
  19. package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
  20. package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
  21. package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
  22. package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
  23. package/examples/provider-package/README.md +78 -0
  24. package/examples/provider-package/hypit.runtime.json +12 -0
  25. package/examples/provider-package/packages/provider-images/package.json +11 -0
  26. package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
  27. package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
  28. package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
  29. package/examples/semantic-composition/README.md +6 -0
  30. package/examples/semantic-composition/chat.svml +6 -5
  31. package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
  32. package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
  33. package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
  34. package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
  35. package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
  36. package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
  37. package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
  38. package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
  39. package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
  40. package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
  41. package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
  42. package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
  43. package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
  44. package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
  45. package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
  46. package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
  47. package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
  48. package/package.json +35 -15
  49. package/packages/audio-track/README.md +20 -13
  50. package/packages/audio-track/package.json +1 -1
  51. package/packages/audio-track/src/component.ts +4 -4
  52. package/packages/audio-track/src/fragment.ts +6 -5
  53. package/packages/audio-track/src/index.ts +1 -1
  54. package/packages/audio-track/src/manifest.ts +17 -16
  55. package/packages/audio-track/src/program.ts +21 -25
  56. package/packages/audio-track/src/surface.ts +19 -18
  57. package/packages/audio-track-studio/README.md +23 -0
  58. package/packages/audio-track-studio/src/index.ts +33 -19
  59. package/packages/author-kit/README.md +1 -1
  60. package/packages/background-removal/README.md +4 -7
  61. package/packages/browser-capture/package.json +1 -1
  62. package/packages/build-result/README.md +69 -0
  63. package/packages/build-result/package.json +2 -1
  64. package/packages/build-result/src/decode.ts +12 -8
  65. package/packages/build-result/src/execution-log.ts +17 -0
  66. package/packages/build-result/src/file-reference.ts +42 -0
  67. package/packages/build-result/src/index.ts +4 -0
  68. package/packages/build-result/src/replace-file-windows.ts +58 -0
  69. package/packages/build-result/src/replace-file.ts +11 -0
  70. package/packages/build-result/src/store.ts +58 -14
  71. package/packages/build-result/src/types.ts +41 -8
  72. package/packages/build-result/src/writer.ts +12 -1
  73. package/packages/build-result-fs/README.md +23 -1
  74. package/packages/build-result-s3/README.md +5 -0
  75. package/packages/build-result-s3/src/repository.ts +23 -5
  76. package/packages/caption/README.md +61 -73
  77. package/packages/caption/package.json +3 -2
  78. package/packages/caption/src/activation.ts +2 -2
  79. package/packages/caption/src/component.ts +20 -5
  80. package/packages/caption/src/display.ts +3 -18
  81. package/packages/caption/src/fragment.ts +3 -7
  82. package/packages/caption/src/index.ts +6 -5
  83. package/packages/caption/src/manifest.ts +29 -46
  84. package/packages/caption/src/style.ts +24 -135
  85. package/packages/caption/src/surface.ts +12 -92
  86. package/packages/caption/src/temporalize.ts +18 -53
  87. package/packages/caption/src/types.ts +8 -35
  88. package/packages/caption/src/visibility.ts +23 -0
  89. package/packages/caption-fine/README.md +31 -11
  90. package/packages/caption-fine/package.json +4 -2
  91. package/packages/caption-fine/src/component.ts +3 -3
  92. package/packages/caption-fine/src/fragment.ts +7 -19
  93. package/packages/caption-fine/src/index.ts +2 -0
  94. package/packages/caption-fine/src/manifest.ts +27 -18
  95. package/packages/caption-fine/src/recipe.ts +7 -0
  96. package/packages/caption-fine/src/render.ts +62 -49
  97. package/packages/caption-fine/src/schedule.ts +39 -35
  98. package/packages/caption-fine/src/style.ts +10 -9
  99. package/packages/caption-fine/src/surface.ts +62 -35
  100. package/packages/caption-fine/src/types.ts +2 -0
  101. package/packages/caption-fine-studio/README.md +24 -2
  102. package/packages/caption-fine-studio/package.json +10 -3
  103. package/packages/caption-fine-studio/src/activation.ts +3 -3
  104. package/packages/caption-fine-studio/src/index.ts +61 -40
  105. package/packages/cli/README.md +81 -3
  106. package/packages/cli/package.json +1 -0
  107. package/packages/cli/src/arguments.ts +39 -15
  108. package/packages/cli/src/build-planning.ts +9 -3
  109. package/packages/cli/src/command.ts +7 -1
  110. package/packages/cli/src/commands/environment.ts +66 -27
  111. package/packages/cli/src/commands/execution.ts +81 -26
  112. package/packages/cli/src/commands/results.ts +7 -11
  113. package/packages/cli/src/index.ts +2 -2
  114. package/packages/cli/src/machine-view.ts +15 -5
  115. package/packages/cli/src/main.ts +38 -42
  116. package/packages/cli/src/observation.ts +7 -1
  117. package/packages/cli/src/output.ts +92 -34
  118. package/packages/cli/src/result-export.ts +22 -13
  119. package/packages/cli/src/run-file.ts +19 -8
  120. package/packages/cli/src/view.ts +64 -18
  121. package/packages/comment-sticker/README.md +3 -3
  122. package/packages/comment-sticker/package.json +1 -1
  123. package/packages/comment-sticker/src/component.ts +4 -4
  124. package/packages/comment-sticker/src/fragment.ts +5 -4
  125. package/packages/comment-sticker/src/manifest.ts +7 -6
  126. package/packages/comment-sticker/src/program.ts +9 -9
  127. package/packages/comment-sticker/src/surface.ts +6 -7
  128. package/packages/comment-sticker-studio/src/index.ts +2 -1
  129. package/packages/compiler-node/src/compiler.ts +1 -0
  130. package/packages/composition/README.md +21 -0
  131. package/packages/composition/src/audio-presentation.ts +44 -0
  132. package/packages/composition/src/index.ts +3 -0
  133. package/packages/composition/src/schema.ts +8 -3
  134. package/packages/composition/src/track.ts +15 -1
  135. package/packages/credential-store-env/README.md +1 -1
  136. package/packages/deck-track/README.md +3 -3
  137. package/packages/deck-track/package.json +1 -1
  138. package/packages/deck-track/src/component.ts +5 -5
  139. package/packages/deck-track/src/fragment.ts +6 -5
  140. package/packages/deck-track/src/lower.ts +12 -12
  141. package/packages/deck-track/src/manifest.ts +8 -7
  142. package/packages/deck-track/src/program.ts +13 -16
  143. package/packages/deck-track/src/surface.ts +9 -10
  144. package/packages/driver-node/src/driver.ts +41 -3
  145. package/packages/elevenlabs-speech/README.md +27 -0
  146. package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
  147. package/packages/elevenlabs-speech/src/activation.ts +26 -0
  148. package/packages/elevenlabs-speech/src/fragment.ts +11 -0
  149. package/packages/elevenlabs-speech/src/index.ts +111 -0
  150. package/packages/elevenlabs-speech/src/surface.ts +167 -0
  151. package/packages/endpoint-kit/README.md +24 -0
  152. package/packages/endpoint-kit/src/index.ts +7 -1
  153. package/packages/estimate/README.md +56 -3
  154. package/packages/estimate/src/program.ts +7 -8
  155. package/packages/film/README.md +12 -7
  156. package/packages/film/package.json +1 -1
  157. package/packages/film/src/component.ts +4 -4
  158. package/packages/film/src/fragment.ts +6 -5
  159. package/packages/film/src/manifest.ts +11 -10
  160. package/packages/film/src/program.ts +5 -5
  161. package/packages/film/src/recipe.ts +2 -1
  162. package/packages/film/src/surface.ts +6 -6
  163. package/packages/film-studio/package.json +1 -1
  164. package/packages/film-studio/src/index.ts +2 -2
  165. package/packages/fishaudio-speech/README.md +33 -0
  166. package/packages/fishaudio-speech/package.json +21 -0
  167. package/packages/fishaudio-speech/src/activation.ts +32 -0
  168. package/packages/fishaudio-speech/src/fragment.ts +11 -0
  169. package/packages/fishaudio-speech/src/index.ts +156 -0
  170. package/packages/fishaudio-speech/src/surface.ts +192 -0
  171. package/packages/fonts-open/README.md +5 -0
  172. package/packages/fonts-open/package.json +5 -1
  173. package/packages/fonts-open/src/studio.ts +21 -0
  174. package/packages/generation/README.md +11 -1
  175. package/packages/generation/src/mapping.ts +28 -30
  176. package/packages/gpt-image/README.md +1 -2
  177. package/packages/grok-imagine/README.md +1 -2
  178. package/packages/hyperframes/README.md +7 -3
  179. package/packages/hyperframes/src/browser-program.ts +11 -2
  180. package/packages/hyperframes/src/document.ts +15 -2
  181. package/packages/interview-emoji-reveal/README.md +4 -4
  182. package/packages/interview-emoji-reveal/package.json +1 -1
  183. package/packages/interview-emoji-reveal/src/component.ts +4 -4
  184. package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
  185. package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
  186. package/packages/interview-emoji-reveal/src/program.ts +14 -14
  187. package/packages/interview-emoji-reveal/src/surface.ts +8 -9
  188. package/packages/media-execution/README.md +7 -3
  189. package/packages/media-execution/src/audio-presentation.ts +23 -0
  190. package/packages/media-execution/src/execute.ts +2 -0
  191. package/packages/media-pipeline/README.md +7 -3
  192. package/packages/media-pipeline/src/audio-plan.ts +4 -1
  193. package/packages/media-pipeline/src/component.ts +16 -2
  194. package/packages/media-pipeline/src/manifest.ts +3 -1
  195. package/packages/media-pipeline/src/types.ts +2 -1
  196. package/packages/media-track/README.md +14 -47
  197. package/packages/media-track/package.json +1 -1
  198. package/packages/media-track/preview/preview.svml +5 -5
  199. package/packages/media-track/src/author.ts +12 -6
  200. package/packages/media-track/src/component.ts +10 -16
  201. package/packages/media-track/src/fragment.ts +8 -7
  202. package/packages/media-track/src/index.ts +3 -1
  203. package/packages/media-track/src/lower.ts +7 -7
  204. package/packages/media-track/src/manifest.ts +16 -38
  205. package/packages/media-track/src/program.ts +62 -67
  206. package/packages/media-track/src/sampling.ts +6 -6
  207. package/packages/media-track/src/sequence.ts +8 -8
  208. package/packages/media-track/src/surface.ts +25 -43
  209. package/packages/media-track-studio/README.md +9 -0
  210. package/packages/media-track-studio/src/index.ts +23 -13
  211. package/packages/mimo-speech/README.md +1 -1
  212. package/packages/minimax-h3/README.md +1 -1
  213. package/packages/nano-banana/README.md +1 -1
  214. package/packages/narrative/README.md +23 -1
  215. package/packages/narrative/src/identity.ts +11 -0
  216. package/packages/narrative/src/index.ts +3 -0
  217. package/packages/narrative/src/schema.ts +28 -27
  218. package/packages/narrative/src/selection.ts +52 -0
  219. package/packages/narrative/src/types.ts +2 -0
  220. package/packages/package-loader-node/README.md +30 -0
  221. package/packages/package-loader-node/package.json +5 -2
  222. package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
  223. package/packages/package-loader-node/src/index.ts +1 -0
  224. package/packages/package-loader-node/src/loader.ts +12 -15
  225. package/packages/package-loader-node/src/location.ts +27 -1
  226. package/packages/package-loader-node/src/module-scope.ts +183 -0
  227. package/packages/package-loader-node/src/types.ts +4 -0
  228. package/packages/performance/README.md +83 -0
  229. package/packages/performance/package.json +30 -0
  230. package/packages/performance/src/activation.ts +11 -0
  231. package/packages/performance/src/component.ts +46 -0
  232. package/packages/performance/src/index.ts +6 -0
  233. package/packages/performance/src/manifest.ts +53 -0
  234. package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
  235. package/packages/performance/src/program.ts +51 -0
  236. package/packages/performance/src/style.ts +35 -0
  237. package/packages/performance/src/surface.ts +99 -0
  238. package/packages/performance-studio/README.md +25 -0
  239. package/packages/performance-studio/package.json +21 -0
  240. package/packages/performance-studio/src/activation.ts +6 -0
  241. package/packages/performance-studio/src/index.ts +84 -0
  242. package/packages/program-space/README.md +9 -18
  243. package/packages/program-space/src/activation.ts +1 -5
  244. package/packages/program-space/src/index.ts +2 -11
  245. package/packages/program-space/src/surface.ts +1 -20
  246. package/packages/project-context-node/README.md +20 -0
  247. package/packages/project-context-node/package.json +10 -0
  248. package/packages/project-context-node/src/index.ts +3 -0
  249. package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
  250. package/packages/provider-hyperframes-local/README.md +43 -15
  251. package/packages/provider-hyperframes-local/src/activation.ts +4 -3
  252. package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
  253. package/packages/provider-hyperframes-local/src/capture.ts +96 -26
  254. package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
  255. package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
  256. package/packages/provider-hyperframes-local/src/options.ts +2 -0
  257. package/packages/provider-hyperframes-local/src/program.ts +6 -3
  258. package/packages/provider-hyperframes-local/src/progress.ts +53 -0
  259. package/packages/provider-hyperframes-local/src/provider.ts +18 -5
  260. package/packages/provider-hyperframes-local/src/render.ts +48 -7
  261. package/packages/provider-hypihub/README.md +48 -17
  262. package/packages/provider-hypihub/package.json +2 -0
  263. package/packages/provider-hypihub/src/mapping.ts +31 -7
  264. package/packages/provider-hypihub/src/oauth.ts +6 -0
  265. package/packages/provider-hypihub/src/provider.ts +25 -13
  266. package/packages/provider-hypihub/src/routes.ts +1 -2
  267. package/packages/provider-hypihub/src/upload.ts +2 -0
  268. package/packages/provider-media-local/README.md +3 -4
  269. package/packages/provider-whisperx-local/README.md +57 -0
  270. package/packages/provider-whisperx-local/src/program.ts +1 -0
  271. package/packages/provider-whisperx-local/src/provider.ts +3 -0
  272. package/packages/ranking/README.md +8 -6
  273. package/packages/ranking/package.json +1 -1
  274. package/packages/ranking/src/component.ts +6 -6
  275. package/packages/ranking/src/fragment.ts +11 -7
  276. package/packages/ranking/src/manifest.ts +21 -14
  277. package/packages/ranking/src/render.ts +33 -35
  278. package/packages/ranking/src/schedule.ts +16 -19
  279. package/packages/ranking/src/surface.ts +12 -13
  280. package/packages/ranking-studio/README.md +29 -0
  281. package/packages/ranking-studio/package.json +8 -3
  282. package/packages/ranking-studio/src/index.ts +71 -12
  283. package/packages/render-hyperframes/README.md +7 -7
  284. package/packages/render-hyperframes/package.json +1 -1
  285. package/packages/render-hyperframes/src/component.ts +11 -1
  286. package/packages/render-hyperframes/src/fragment.ts +7 -4
  287. package/packages/render-hyperframes/src/manifest.ts +4 -4
  288. package/packages/render-hyperframes/src/surface.ts +6 -6
  289. package/packages/runtime/README.md +8 -1
  290. package/packages/runtime/src/catalog.ts +2 -0
  291. package/packages/runtime/src/execution.ts +15 -4
  292. package/packages/runtime/src/index.ts +2 -1
  293. package/packages/runtime/src/log.ts +51 -0
  294. package/packages/runtime/src/types.ts +5 -8
  295. package/packages/runtime-host-node/README.md +30 -0
  296. package/packages/runtime-host-node/package.json +1 -0
  297. package/packages/runtime-host-node/src/index.ts +25 -9
  298. package/packages/runtime-host-node/src/packages.ts +47 -50
  299. package/packages/runtime-kit/README.md +5 -0
  300. package/packages/runtime-kit/src/index.ts +3 -1
  301. package/packages/runtime-local/README.md +111 -4
  302. package/packages/runtime-local/src/config.ts +202 -56
  303. package/packages/runtime-local/src/control.ts +9 -1
  304. package/packages/runtime-local/src/executor.ts +66 -0
  305. package/packages/runtime-local/src/host.ts +37 -17
  306. package/packages/runtime-local/src/log.ts +48 -0
  307. package/packages/runtime-local/src/programs.ts +41 -25
  308. package/packages/runtime-local/src/result-writer.ts +2 -0
  309. package/packages/runtime-local/src/runtime.ts +10 -6
  310. package/packages/runtime-local/src/supervisor.ts +142 -0
  311. package/packages/runtime-local/src/types.ts +9 -2
  312. package/packages/runtime-local/src/worker-process.ts +7 -24
  313. package/packages/runtime-local/src/worker.ts +55 -83
  314. package/packages/screen-overlay/README.md +3 -3
  315. package/packages/screen-overlay/package.json +1 -1
  316. package/packages/screen-overlay/src/component.ts +3 -3
  317. package/packages/screen-overlay/src/fragment.ts +5 -4
  318. package/packages/screen-overlay/src/manifest.ts +7 -6
  319. package/packages/screen-overlay/src/program.ts +9 -9
  320. package/packages/screen-overlay/src/surface.ts +6 -7
  321. package/packages/script/README.md +37 -2
  322. package/packages/script/src/edit.ts +123 -73
  323. package/packages/script/src/lexical.ts +40 -6
  324. package/packages/script/src/manifest.ts +2 -2
  325. package/packages/script/src/narrative.ts +1 -0
  326. package/packages/script/src/parser.ts +36 -8
  327. package/packages/script/src/surface.ts +4 -3
  328. package/packages/script/src/types.ts +5 -1
  329. package/packages/script-studio/package.json +9 -3
  330. package/packages/script-studio/src/index.ts +2 -0
  331. package/packages/script-studio/src/projection.ts +105 -0
  332. package/packages/seedance/README.md +30 -1
  333. package/packages/seedance/src/index.ts +18 -7
  334. package/packages/seedance/src/surface.ts +17 -4
  335. package/packages/seedance-kits/README.md +10 -2
  336. package/packages/seedance-kits/kits/speaker-v1.svs +5 -5
  337. package/packages/seedream/README.md +1 -1
  338. package/packages/sound/README.md +81 -0
  339. package/packages/sound/package.json +25 -0
  340. package/packages/sound/src/activation.ts +11 -0
  341. package/packages/sound/src/component.ts +28 -0
  342. package/packages/sound/src/index.ts +5 -0
  343. package/packages/sound/src/manifest.ts +47 -0
  344. package/packages/sound/src/program.ts +84 -0
  345. package/packages/sound/src/style.ts +34 -0
  346. package/packages/sound/src/surface.ts +90 -0
  347. package/packages/sound-studio/README.md +22 -0
  348. package/packages/sound-studio/package.json +20 -0
  349. package/packages/sound-studio/src/activation.ts +6 -0
  350. package/packages/sound-studio/src/index.ts +74 -0
  351. package/packages/speech/README.md +2 -2
  352. package/packages/speech-alignment/src/align.ts +45 -21
  353. package/packages/speech-alignment/src/local.ts +8 -0
  354. package/packages/speech-alignment/src/locate.ts +1 -1
  355. package/packages/store-sqlite/README.md +7 -0
  356. package/packages/store-sqlite/src/store.ts +84 -83
  357. package/packages/studio/INSPECTOR.md +117 -0
  358. package/packages/studio/README.md +149 -14
  359. package/packages/studio/package.json +8 -7
  360. package/packages/studio/src/build-library.ts +99 -84
  361. package/packages/studio/src/companion-assembly.ts +1 -0
  362. package/packages/studio/src/domain.ts +1 -1
  363. package/packages/studio/src/fallback-companions.ts +3 -3
  364. package/packages/studio/src/feedback-server.ts +51 -0
  365. package/packages/studio/src/feedback-store.ts +66 -0
  366. package/packages/studio/src/feedback.ts +60 -0
  367. package/packages/studio/src/library-media.ts +19 -0
  368. package/packages/studio/src/parameter-values.ts +83 -1
  369. package/packages/studio/src/parameters.ts +132 -43
  370. package/packages/studio/src/preview/render.ts +5 -1
  371. package/packages/studio/src/preview/runtime-shim.ts +49 -3
  372. package/packages/studio/src/programme.ts +14 -30
  373. package/packages/studio/src/server.ts +66 -34
  374. package/packages/studio/src/shared.ts +24 -8
  375. package/packages/studio/src/snapshot.ts +21 -132
  376. package/packages/studio/src/studio-preflight.ts +3 -3
  377. package/packages/studio/src/studio-registry.ts +72 -6
  378. package/packages/studio/src/style.css +342 -190
  379. package/packages/studio/src/temporal-edit.ts +131 -0
  380. package/packages/studio/src/ui/artifact-name.ts +80 -0
  381. package/packages/studio/src/ui/artifact-preview.ts +99 -0
  382. package/packages/studio/src/ui/comments.ts +233 -0
  383. package/packages/studio/src/ui/icons.ts +10 -1
  384. package/packages/studio/src/ui/library.ts +373 -192
  385. package/packages/studio/src/ui/main.ts +291 -110
  386. package/packages/studio/src/ui/material-preview.ts +1 -1
  387. package/packages/studio/src/ui/overlay.ts +31 -26
  388. package/packages/studio/src/ui/scrub-preview.ts +108 -0
  389. package/packages/studio/src/ui/sidebar-panel.ts +31 -0
  390. package/packages/studio/src/ui/stage.ts +188 -9
  391. package/packages/studio/src/ui/timeline.ts +187 -281
  392. package/packages/studio/start.ts +19 -5
  393. package/packages/studio-adapter/README.md +151 -11
  394. package/packages/studio-adapter/src/index.ts +126 -14
  395. package/packages/temporal/README.md +6 -6
  396. package/packages/temporal/package.json +1 -1
  397. package/packages/temporal/src/component.ts +5 -6
  398. package/packages/temporal/src/index.ts +8 -6
  399. package/packages/temporal/src/location.ts +11 -11
  400. package/packages/temporal/src/projection.ts +19 -19
  401. package/packages/temporal/src/rational.ts +4 -4
  402. package/packages/temporal-markup/EDITING.md +183 -0
  403. package/packages/temporal-markup/README.md +31 -11
  404. package/packages/temporal-markup/package.json +1 -1
  405. package/packages/temporal-markup/src/index.ts +20 -25
  406. package/packages/temporal-markup/src/space.ts +10 -41
  407. package/packages/timeline/README.md +31 -0
  408. package/packages/{semantic-track → timeline}/package.json +1 -1
  409. package/packages/timeline/src/activation.ts +8 -0
  410. package/packages/timeline/src/component.ts +24 -0
  411. package/packages/timeline/src/identity.ts +60 -0
  412. package/packages/timeline/src/index.ts +6 -0
  413. package/packages/{semantic-track → timeline}/src/location.ts +20 -20
  414. package/packages/timeline/src/manifest.ts +39 -0
  415. package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
  416. package/packages/timeline/src/types.ts +24 -0
  417. package/packages/timeline-author/README.md +68 -0
  418. package/packages/{speech-track → timeline-author}/package.json +6 -4
  419. package/packages/timeline-author/src/activation.ts +22 -0
  420. package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
  421. package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
  422. package/packages/timeline-author/src/index.ts +7 -0
  423. package/packages/timeline-author/src/manifest.ts +78 -0
  424. package/packages/timeline-author/src/program.ts +107 -0
  425. package/packages/timeline-author/src/surface.ts +46 -0
  426. package/packages/timeline-author/src/types.ts +6 -0
  427. package/packages/typography-track/README.md +4 -4
  428. package/packages/typography-track/package.json +1 -1
  429. package/packages/typography-track/src/component.ts +4 -4
  430. package/packages/typography-track/src/fragment.ts +4 -3
  431. package/packages/typography-track/src/manifest.ts +11 -9
  432. package/packages/typography-track/src/program.ts +15 -15
  433. package/packages/typography-track/src/surface.ts +17 -18
  434. package/packages/typography-track-studio/package.json +8 -3
  435. package/packages/typography-track-studio/src/index.ts +5 -1
  436. package/packages/video-cli/README.md +16 -4
  437. package/packages/video-cli/package.json +2 -1
  438. package/packages/video-cli/src/creation.ts +25 -9
  439. package/packages/video-cli/src/index.ts +1 -1
  440. package/packages/video-cli/src/studio-distribution.ts +2 -1
  441. package/packages/volcengine-matting/README.md +3 -3
  442. package/packages/whisperx/README.md +8 -1
  443. package/packages/workspace/src/index.ts +2 -0
  444. package/packages/workspace-fs-node/README.md +4 -1
  445. package/packages/workspace-fs-node/src/workspace.ts +3 -1
  446. package/services/whisperx/README.md +14 -0
  447. package/services/whisperx/pyproject.toml +2 -0
  448. package/services/whisperx/uv.lock +20 -20
  449. package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
  450. package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
  451. package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
  452. package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
  453. package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
  454. package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
  455. package/packages/provider-kie/README.md +0 -134
  456. package/packages/provider-kie/package.json +0 -43
  457. package/packages/provider-kie/src/activation.ts +0 -71
  458. package/packages/provider-kie/src/index.ts +0 -10
  459. package/packages/provider-kie/src/mapping.ts +0 -182
  460. package/packages/provider-kie/src/provider.ts +0 -657
  461. package/packages/provider-kie/src/routes.ts +0 -150
  462. package/packages/provider-xiaomi-mimo/README.md +0 -32
  463. package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
  464. package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
  465. package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
  466. package/packages/runtime/src/environment.ts +0 -6
  467. package/packages/semantic-track/README.md +0 -21
  468. package/packages/semantic-track/src/activation.ts +0 -8
  469. package/packages/semantic-track/src/component.ts +0 -24
  470. package/packages/semantic-track/src/identity.ts +0 -58
  471. package/packages/semantic-track/src/index.ts +0 -6
  472. package/packages/semantic-track/src/manifest.ts +0 -38
  473. package/packages/semantic-track/src/types.ts +0 -26
  474. package/packages/speech-track/README.md +0 -51
  475. package/packages/speech-track/src/activation.ts +0 -19
  476. package/packages/speech-track/src/index.ts +0 -7
  477. package/packages/speech-track/src/manifest.ts +0 -73
  478. package/packages/speech-track/src/program.ts +0 -64
  479. package/packages/speech-track/src/surface.ts +0 -35
  480. package/packages/speech-track/src/types.ts +0 -6
  481. package/packages/speech-track-studio/README.md +0 -3
  482. package/packages/speech-track-studio/package.json +0 -14
  483. package/packages/speech-track-studio/src/activation.ts +0 -7
  484. package/packages/speech-track-studio/src/index.ts +0 -40
  485. /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
  486. /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
@@ -10,6 +10,9 @@
10
10
  --text: #e7e8eb;
11
11
  --text-2: #a4a7ae;
12
12
  --text-3: #6f737c;
13
+ --subtab-surface: #101114;
14
+ --subtab-active-surface: #24262a;
15
+ --subtab-active-text: #c9cbd0;
13
16
  /* Replace this ramp as one unit when Hypit's interaction identity changes. */
14
17
  --brand-200: #f8c1ce;
15
18
  --brand-400: #ed7898;
@@ -28,6 +31,8 @@
28
31
  --tone-orange-muted-rail: #e7834c;
29
32
  --tone-green: #38853e;
30
33
  --tone-green-rail: #75d079;
34
+ --tone-green-muted: #285c30;
35
+ --tone-green-muted-rail: #73a478;
31
36
  --tone-teal: #008889;
32
37
  --tone-teal-rail: #00d4d5;
33
38
  /* Semantic ruler: brightness separates content from its own band; hue marks state. */
@@ -35,6 +40,7 @@
35
40
  --semantic-word: #005551;
36
41
  /* Author intent uses a gold annotation hue; brand pink stays in the chrome. */
37
42
  --semantic-intent: #a28b2b;
43
+ --semantic-moment: var(--brand-500);
38
44
  /* Same perceived active level as a selected/covered semantic cell. */
39
45
  --semantic-current: #009f98;
40
46
  /* Ordered marker depth: one hue, decreasing lightness. */
@@ -44,15 +50,19 @@
44
50
  --intent-depth-3: #846d00;
45
51
  --tone-blue: #1777b8;
46
52
  --tone-blue-rail: #58c0ff;
53
+ --tone-blue-muted: #175079;
54
+ --tone-blue-muted-rail: #5795bf;
47
55
  --tone-violet: #6f63b8;
48
56
  --tone-violet-rail: #b3a6ff;
49
57
  --tone-magenta: #995398;
50
58
  --tone-magenta-rail: #ea93e8;
59
+ --tone-magenta-muted: #683b68;
60
+ --tone-magenta-muted-rail: #b57ab4;
51
61
  --tone-neutral: #6a737c;
52
62
  --tone-neutral-rail: #aeb9c4;
53
63
  --timeline-label-width: 188px;
54
- --source-width: 350px;
55
- --workspace-width: 300px;
64
+ --source-width: 416px;
65
+ --workspace-width: 320px;
56
66
  --timeline-height: 390px;
57
67
  --timeline-item-radius: 2px;
58
68
  --timeline-selection-stroke: 1px;
@@ -132,6 +142,14 @@ button:focus-visible, textarea:focus-visible {
132
142
  white-space: nowrap;
133
143
  }
134
144
  .topbar-right { justify-self: end; display: flex; align-items: center; min-width: 0; }
145
+ .view-tabs { display: flex; align-items: center; gap: 2px; margin-left: 16px; padding: 2px; border-radius: 5px; background: var(--subtab-surface); }
146
+ .view-tabs button {
147
+ display: flex; align-items: center; gap: 7px; height: 24px; padding: 0 10px;
148
+ border: 0; border-radius: 4px; color: var(--text-3); background: transparent;
149
+ }
150
+ .view-tabs button[aria-selected="true"] { color: var(--subtab-active-text); background: var(--subtab-active-surface); }
151
+ .view-tabs button:focus-visible { outline: 1px solid #8a8f99; outline-offset: -1px; }
152
+ .view-tabs .icon { width: 14px; height: 14px; }
135
153
  .meta {
136
154
  color: var(--text-3);
137
155
  font: 500 11px/1 var(--font-ui);
@@ -159,6 +177,67 @@ button:focus-visible, textarea:focus-visible {
159
177
  grid-template-columns: var(--source-width) 8px minmax(320px, 1fr) 8px var(--workspace-width);
160
178
  overflow: hidden;
161
179
  }
180
+ .comments-panel, .comments-handle { display: none; }
181
+ .studio-shell[data-view="comments"] { grid-template-rows: minmax(0, 1fr); padding-bottom: 6px; }
182
+ .studio-shell[data-view="comments"] > .handle,
183
+ .studio-shell[data-view="comments"] > .timeline-panel { display: none; }
184
+ .studio-shell[data-view="comments"] .upper-shell { grid-template-columns: minmax(240px, 1fr) 8px var(--comments-width, 360px); }
185
+ .studio-shell[data-view="comments"] .source-panel,
186
+ .studio-shell[data-view="comments"] .source-handle,
187
+ .studio-shell[data-view="comments"] .workspace-panel,
188
+ .studio-shell[data-view="comments"] .workspace-handle { display: none; }
189
+ .studio-shell[data-view="comments"] .comments-handle { display: block; }
190
+ .studio-shell[data-view="comments"] .comments-panel { display: flex; }
191
+ .comments-panel { flex-direction: column; min-width: 0; min-height: 0; background: var(--panel); border: 1px solid #08090a; }
192
+ .comments-heading { justify-content: space-between; flex: none; }
193
+ .comments-heading [data-count] { color: var(--text-3); font-size: 11px; margin-left: 2px; }
194
+ .comments-icon { display: inline-flex; align-items: center; justify-content: center; flex: none; width: 26px; height: 26px; padding: 5px; border: 0; border-radius: 3px; background: transparent; color: var(--text-3); }
195
+ .comments-icon:hover { background: var(--field); color: var(--text); }
196
+ .comments-icon .icon { width: 15px; height: 15px; }
197
+ .comments-icon.is-done { color: var(--ok); }
198
+ .comments-panel button:disabled { opacity: .4; }
199
+ .comments-filters { display: flex; gap: 4px; padding: 10px 12px; border-bottom: 1px solid var(--line); flex: none; }
200
+ .comments-filters button { border: 0; background: transparent; padding: 4px 11px; border-radius: 3px; color: var(--text-3); }
201
+ .comments-filters button[aria-pressed="true"] { color: var(--text); background: #282a30; }
202
+ .comments-list { flex: 1; min-height: 0; overflow: auto; padding: 4px 12px 12px; user-select: text; }
203
+ .comments-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 220px; height: 100%; padding: 24px; text-align: center; color: var(--text-3); }
204
+ .comments-empty > .icon { width: 28px; height: 28px; margin-bottom: 18px; opacity: .7; }
205
+ .comments-empty strong { font-size: 13px; font-weight: 500; color: var(--text-2); }
206
+ .comments-empty p { line-height: 1.7; max-width: 230px; margin: 8px 0; }
207
+ .comment-card { padding: 12px 10px 14px; border-bottom: 1px solid var(--line); border-radius: 2px; }
208
+ .comment-card.selected { background: #1e2025; }
209
+ .comment-card-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
210
+ .comment-location { display: inline-flex; align-items: center; gap: 9px; padding: 0; border: 0; background: transparent; cursor: pointer; }
211
+ .comment-number { margin-right: 5px; color: var(--text-3); font: 500 11px var(--font-mono); }
212
+ .comment-actions { display: flex; align-items: center; gap: 1px; }
213
+ .comment-time { display: inline-flex; align-items: center; gap: 6px; min-height: 23px; padding: 2px 6px; background: var(--brand-soft); border: 0; border-radius: 3px; color: var(--brand-400); font: 500 11px/1.5 var(--font-mono); white-space: nowrap; }
214
+ .comment-time .icon { width: 13px; height: 13px; }
215
+ .comment-text { font-size: 13px; line-height: 1.7; color: var(--text); white-space: pre-wrap; overflow-wrap: anywhere; margin: 10px 0 0; }
216
+ .comment-card.resolved .comment-text { color: var(--text-3); }
217
+ .comment-composer { flex: none; border-top: 1px solid var(--line); padding: 14px 14px 12px; background: #18191d; }
218
+ .comment-anchor { display: flex; align-items: center; flex-wrap: wrap; gap: 7px; margin-bottom: 10px; min-height: 24px; }
219
+ .comment-composer textarea, .comment-edit textarea { width: 100%; resize: none; background: #202227; color: var(--text); border: 1px solid #33363c; border-radius: 3px; padding: 10px 11px; font: 400 13px/1.7 var(--font-ui); display: block; min-height: 82px; user-select: text; }
220
+ .comment-composer textarea::placeholder { color: var(--text-3); }
221
+ .comments-panel textarea:focus { outline: none; box-shadow: none; }
222
+ .comment-edit textarea:focus { background: #292c32; }
223
+ .comments-panel textarea::selection { background: #dce1eb33; color: var(--text); }
224
+ .comment-input { border: 1px solid #33363c; border-radius: 4px; background: #202227; transition: background 120ms ease; }
225
+ .comment-input:focus-within { background: #292c32; }
226
+ .comment-input textarea { border: 0; background: transparent; }
227
+ .comment-input-actions { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 2px 9px 9px; }
228
+ .comment-tools { display: flex; align-items: center; gap: 4px; }
229
+ .comment-tools .comments-icon { width: 28px; height: 28px; padding: 5px; }
230
+ .comment-tools .icon { width: 18px; height: 18px; }
231
+ .comment-submit { display: grid; place-items: center; flex: none; width: 30px; height: 30px; padding: 0; border: 0; border-radius: 50%; background: #e4e6eb; color: #202227; }
232
+ .comment-submit .icon { display: block; width: 18px; height: 18px; }
233
+ .comment-submit:hover:not(:disabled) { background: #fff; }
234
+ .comment-submit:disabled { opacity: 1; background: #35383f; color: #858b95; }
235
+ .comment-submit:focus-visible { outline: 1px solid #aeb3bc; outline-offset: 3px; }
236
+ .comments-error { color: var(--brand-200); font-size: 12px; line-height: 1.6; padding: 10px 14px; border-bottom: 1px solid var(--line); }
237
+ .comment-edit { margin-top: 10px; }
238
+ .comment-edit-actions { display: flex; justify-content: end; gap: 6px; margin-top: 8px; }
239
+ .comment-edit-actions button { padding: 4px 11px; border: 1px solid var(--line-strong); border-radius: 3px; background: var(--field); color: var(--text-2); }
240
+ .comment-edit-actions button[type="submit"] { color: var(--text); }
162
241
  .source-panel, .preview-panel, .workspace-panel, .timeline-panel {
163
242
  min-width: 0;
164
243
  min-height: 0;
@@ -261,33 +340,10 @@ button:focus-visible, textarea:focus-visible {
261
340
  box-shadow: 0 -3px 12px color-mix(in srgb, var(--interaction-accent) 28%, transparent);
262
341
  }
263
342
  .library-tab > span { position: relative; display: grid; place-items: center; width: 16px; height: 16px; flex: none; }
343
+ .library .icon { width: 14px; height: 14px; }
264
344
  .library-tab > strong { overflow: hidden; font-size: 12px; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }
265
345
  .library-view { flex: 1; min-width: 0; min-height: 0; display: none; flex-direction: column; }
266
346
  .library-view.active { display: flex; }
267
- .library-toolbar {
268
- min-height: 46px;
269
- flex: none;
270
- display: flex;
271
- align-items: center;
272
- justify-content: space-between;
273
- gap: 12px;
274
- padding: 0 12px;
275
- border-bottom: 1px solid rgba(255, 255, 255, .045);
276
- background: #16171a;
277
- }
278
- .library-toolbar > div { min-width: 0; }
279
- .library-toolbar strong, .library-toolbar small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
280
- .library-toolbar strong { color: #d9dbe0; font-size: 11px; font-weight: 600; }
281
- .library-toolbar small { margin-top: 1px; color: var(--text-3); font-size: 9px; font-weight: 500; }
282
- .library-context {
283
- flex: none;
284
- padding: 3px 6px;
285
- border: 1px solid #303238;
286
- border-radius: 4px;
287
- background: #1d1f23;
288
- color: #858a93;
289
- font: 500 9px/1.2 var(--font-mono);
290
- }
291
347
  .library-refresh {
292
348
  width: 27px;
293
349
  height: 27px;
@@ -306,7 +362,7 @@ button:focus-visible, textarea:focus-visible {
306
362
  .library.is-refreshing .library-refresh .icon { animation: library-spin 700ms linear infinite; }
307
363
  @keyframes library-spin { to { transform: rotate(360deg); } }
308
364
 
309
- .source-workspace {
365
+ .sidebar-panel {
310
366
  flex: 1;
311
367
  min-width: 0;
312
368
  min-height: 0;
@@ -314,20 +370,20 @@ button:focus-visible, textarea:focus-visible {
314
370
  grid-template-columns: 44px minmax(0, 1fr);
315
371
  grid-template-rows: 36px minmax(0, 1fr);
316
372
  }
317
- .source-sidebar-heading,
318
- .source-code-heading {
373
+ .sidebar-panel-heading,
374
+ .sidebar-panel-toolbar {
319
375
  min-width: 0;
320
376
  display: flex;
321
377
  align-items: center;
322
378
  border-bottom: 1px solid var(--line);
323
379
  background: #151619;
324
380
  }
325
- .source-sidebar-heading { justify-content: center; border-right: 1px solid var(--line); }
326
- .source-sidebar-mark { width: 28px; height: 28px; display: grid; place-items: center; color: var(--text-3); }
327
- .source-sidebar-mark .icon { width: 14px; height: 14px; }
328
- .source-code-heading { padding: 0 7px 0 10px; }
329
- .source-code-heading .code-toolbar { width: 100%; }
330
- .source-files {
381
+ .sidebar-panel-heading { justify-content: center; border-right: 1px solid var(--line); }
382
+ .sidebar-panel-mark { width: 28px; height: 28px; display: grid; place-items: center; color: var(--text-3); }
383
+ .sidebar-panel-mark .icon { width: 14px; height: 14px; }
384
+ .sidebar-panel-toolbar { padding: 0 7px 0 10px; }
385
+ .sidebar-panel-toolbar .code-toolbar { width: 100%; }
386
+ .sidebar-panel-nav {
331
387
  min-width: 0;
332
388
  min-height: 0;
333
389
  overflow-y: auto;
@@ -337,14 +393,12 @@ button:focus-visible, textarea:focus-visible {
337
393
  background: #121316;
338
394
  scrollbar-width: none;
339
395
  }
340
- .source-files::-webkit-scrollbar { width: 0; }
341
- .source-file {
396
+ .sidebar-panel-nav::-webkit-scrollbar { width: 0; }
397
+ .sidebar-panel-item {
342
398
  width: 32px;
343
399
  height: 32px;
344
400
  display: grid;
345
- grid-template-columns: 16px;
346
- justify-content: center;
347
- align-items: center;
401
+ place-items: center;
348
402
  margin: 0 auto 2px;
349
403
  padding: 0;
350
404
  border: 0;
@@ -354,105 +408,89 @@ button:focus-visible, textarea:focus-visible {
354
408
  text-align: left;
355
409
  transition: color 100ms ease;
356
410
  }
357
- .source-file:hover { color: #bfc2c9; }
358
- .source-file.active {
411
+ .sidebar-panel-item:hover { color: #bfc2c9; }
412
+ .sidebar-panel-item.active {
359
413
  background: #181a1f;
360
414
  color: #cfd2d8;
361
415
  }
362
- .source-file-icon { width: 16px; height: 16px; display: grid; place-items: center; color: #858a93; }
363
- .source-file.active .source-file-icon { color: #858a93; }
364
- .source-file-icon .icon { width: 14px; height: 14px; }
416
+ .sidebar-panel-item .icon { width: 14px; height: 14px; }
417
+ .sidebar-panel-content { min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
418
+ .sidebar-panel-toolbar { justify-content: space-between; gap: 8px; }
419
+ .media-status { padding: 8px 10px; color: #e58b92; font-size: 10px; }
365
420
  .source-code { min-width: 0; min-height: 0; overflow: hidden; }
366
421
  .source-code > .code { height: 100%; }
367
422
  .source-code .code-scroll { background: #141518; }
368
423
 
369
- .library-context-row { flex: none; min-height: 36px; padding: 7px 10px; border-bottom: 1px solid rgba(255, 255, 255, .04); background: #141518; }
370
- .runtime-chip {
371
- min-width: 0;
372
- display: flex;
373
- align-items: center;
374
- gap: 7px;
375
- padding: 4px 7px;
376
- border: 1px solid #292c31;
377
- border-radius: 5px;
378
- background: #191a1e;
379
- }
380
- .runtime-chip::before { content: ""; width: 6px; height: 6px; flex: none; border-radius: 50%; background: var(--interaction-accent); box-shadow: 0 0 8px var(--brand-soft); }
381
- .runtime-chip > span { min-width: 0; overflow: hidden; color: #a9adb5; font: 9px/1.2 var(--font-mono); text-overflow: ellipsis; white-space: nowrap; }
382
- .runtime-chip > strong { margin-left: auto; color: #666b74; font-size: 9px; font-weight: 500; }
383
- .task-list { flex: 1; min-height: 0; overflow: auto; padding: 8px 9px 28px; background: #121316; }
384
- .task-card {
385
- min-width: 0;
386
- display: grid;
387
- grid-template-columns: 18px minmax(0, 1fr);
388
- gap: 8px;
389
- margin-bottom: 6px;
390
- padding: 10px 10px 9px 8px;
391
- border: 1px solid #292b31;
392
- border-radius: 7px;
393
- background: linear-gradient(135deg, #1c1e22, #191a1e);
394
- box-shadow: 0 1px 0 rgba(255, 255, 255, .018), 0 6px 18px rgba(0, 0, 0, .08);
395
- transition: border-color 120ms ease, transform 120ms ease, background 120ms ease;
396
- }
397
- .task-card:hover { border-color: #3a3d44; background: linear-gradient(135deg, #202227, #1b1d21); transform: translateY(-1px); }
398
- .task-state { display: grid; place-items: start center; padding-top: 4px; }
399
- .task-state span { width: 8px; height: 8px; border-radius: 50%; background: #686d76; box-shadow: 0 0 0 3px rgba(104, 109, 118, .1); }
400
- .task-running .task-state span, .task-queued .task-state span, .task-waiting .task-state span, .task-active .task-state span { background: #49b9d0; box-shadow: 0 0 0 3px rgba(73, 185, 208, .11), 0 0 10px rgba(73, 185, 208, .18); }
401
- .task-complete .task-state span { background: var(--ok); box-shadow: 0 0 0 3px rgba(100, 201, 154, .1); }
402
- .task-failed .task-state span, .task-cancelled .task-state span, .task-blocked .task-state span { background: #d8646d; box-shadow: 0 0 0 3px rgba(216, 100, 109, .1); }
424
+ .task-list { flex: 1; min-height: 0; overflow: auto; padding: 12px 10px 28px; background: #121316; }
425
+ .task-card { min-width: 0; display: grid; grid-template-columns: 24px minmax(0, 1fr) 20px; align-items: start; gap: 9px; margin-bottom: 8px; padding: 11px 9px; border: 1px solid #25272c; border-radius: 4px; background: #191b20; }
426
+ .task-state { display: grid; place-items: center; width: 24px; height: 24px; color: #858c98; }
427
+ .task-state .icon { width: 17px; height: 17px; }
403
428
  .task-copy { min-width: 0; }
404
- .task-title { min-width: 0; display: flex; align-items: center; gap: 7px; }
405
- .task-title strong { min-width: 0; flex: 1; overflow: hidden; color: #dfe1e5; font-size: 11px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
406
- .task-status { flex: none; padding: 2px 5px; border-radius: 8px; background: #292c31; color: #9297a1; font: 600 8px/1.2 var(--font-ui); text-transform: uppercase; }
407
- .task-running .task-status, .task-queued .task-status, .task-waiting .task-status, .task-active .task-status { background: rgba(73, 185, 208, .12); color: #79d1e2; }
408
- .task-complete .task-status { background: rgba(100, 201, 154, .11); color: #86d7b1; }
409
- .task-failed .task-status, .task-cancelled .task-status, .task-blocked .task-status { background: rgba(216, 100, 109, .1); color: #e58b92; }
410
- .task-source { margin: 3px 0 6px; overflow: hidden; color: #6f747d; font: 9px/1.25 var(--font-mono); text-overflow: ellipsis; white-space: nowrap; }
411
- .task-facts { min-width: 0; display: flex; align-items: center; gap: 5px; overflow: hidden; }
412
- .task-facts span { min-width: 0; overflow: hidden; color: #686d76; font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
413
- .task-facts span + span::before { content: "·"; margin-right: 5px; color: #3e4148; }
414
- .task-progress { margin-top: 7px; padding-top: 6px; border-top: 1px solid rgba(255, 255, 255, .045); color: #8d929b; font-size: 9px; }
429
+ .task-title { min-width: 0; }
430
+ .task-name { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; max-width: 100%; overflow: hidden; padding: 0; border: 0; background: none; color: #dfe1e5; font: 500 11px/17px var(--font-ui); text-align: left; overflow-wrap: anywhere; cursor: pointer; }
431
+ .task-name:hover { color: #fff; }
432
+ .task-name:focus-visible { outline: 1px solid #626875; outline-offset: 2px; border-radius: 2px; }
433
+ .task-facts { min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 3px 10px; margin-top: 5px; line-height: 14px; }
434
+ .task-status { color: #949aa5; font-size: 10px; }
435
+ .task-facts time { color: #727985; font-size: 9px; }
436
+ .task-running .task-state, .task-running .task-status, .task-queued .task-state, .task-queued .task-status, .task-waiting .task-state, .task-waiting .task-status, .task-saving-result .task-state, .task-saving-result .task-status { color: #8daabb; }
437
+ .task-complete .task-state, .task-complete .task-status { color: #87a896; }
438
+ .task-failed .task-state, .task-failed .task-status, .task-attention .task-state, .task-attention .task-status { color: #c99490; }
439
+ .task-progress { margin-top: 7px; overflow: hidden; color: #9ba1ac; font-size: 10px; line-height: 15px; white-space: nowrap; text-overflow: ellipsis; }
440
+ .task-detail { margin-top: 7px; color: #bc9693; font-size: 10px; line-height: 15px; }
441
+ .task-error-message { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; overflow-wrap: anywhere; white-space: pre-wrap; user-select: text; }
442
+ .task-card.selected { background: #24272d; }
443
+ .task-card.selected .task-error-message { display: block; }
444
+ .task-copy-error { display: none; margin-top: 6px; padding: 0; border: 0; background: transparent; color: #aeb4bf; font: inherit; cursor: pointer; }
445
+ .task-card.selected .task-copy-error { display: inline-block; }
446
+ .task-card:focus-visible { outline: 1px solid #626875; outline-offset: -1px; }
447
+ .task-context { flex: 1; min-width: 0; display: flex; align-items: center; gap: 3px; color: #b9bfca; }
448
+ .task-context::before { content: "/"; flex: none; color: #5d6572; margin-right: 3px; }
449
+ .sidebar-panel-toolbar > .library-refresh { margin-left: auto; }
450
+ .sidebar-panel-toolbar:has(.task-context:not([hidden])) > .code-location { flex: none; max-width: 90px; }
451
+ .task-context[hidden] { display: none; }
452
+ .task-context-name { flex: 1; min-width: 0; display: flex; align-items: center; gap: 6px; padding: 3px 0; border: 0; background: transparent; color: inherit; font: 500 10px/16px var(--font-ui); text-align: left; }
453
+ .task-context-name .icon { flex: none; }
454
+ .task-context-name span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
455
+ .task-context-clear { flex: none; display: grid; place-items: center; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 3px; background: transparent; color: #929aa7; }
456
+ .task-context-clear:hover, .task-context-name:hover { color: #f1f2f5; }
457
+ .task-context-clear:hover { background: #30343c; }
458
+ .task-context button:focus-visible { outline: 1px solid #626875; }
459
+ .task-open { display: grid; place-items: center; width: 20px; height: 24px; padding: 0; border: 0; border-radius: 3px; background: transparent; color: #707885; }
460
+ .task-open .icon { width: 14px; height: 14px; }
461
+ .task-open:hover { color: #dfe1e5; background: #25282f; }
462
+ .task-open:focus-visible { outline: 1px solid #626875; }
415
463
 
416
- .artifact-filters { min-height: 34px; flex: none; display: flex; align-items: center; gap: 4px; padding: 6px 10px; border-bottom: 1px solid rgba(255, 255, 255, .04); background: #141518; }
417
- .artifact-filters button { height: 22px; padding: 0 9px; border: 0; border-radius: 4px; background: transparent; color: #777c85; font-size: 9px; }
418
- .artifact-filters button:hover { background: #202227; color: #b9bdc5; }
419
- .artifact-filters button.active { background: #2a2c31; color: #eef0f3; }
420
- .artifact-grid { flex: 1; min-height: 0; overflow: auto; display: grid; grid-template-columns: repeat(auto-fill, minmax(142px, 1fr)); align-content: start; gap: 9px; padding: 10px 10px 30px; background: #121316; }
421
- .artifact-card { height: 190px; min-width: 0; overflow: hidden; display: flex; flex-direction: column; border: 1px solid #292b31; border-radius: 7px; background: #1a1c20; color: inherit; text-decoration: none; box-shadow: 0 7px 18px rgba(0, 0, 0, .09); transition: border-color 120ms ease, transform 120ms ease, box-shadow 120ms ease; }
422
- .artifact-card.artifact-highlighted { border-color: rgba(237, 152, 185, .55); box-shadow: 0 0 0 1px rgba(237, 152, 185, .08), 0 9px 22px rgba(0, 0, 0, .14); }
423
- .artifact-card:hover { border-color: #454952; transform: translateY(-2px); box-shadow: 0 10px 22px rgba(0, 0, 0, .17); }
424
- .artifact-preview { position: relative; flex: 1 1 auto; min-height: 0; overflow: hidden; display: grid; place-items: center; border-bottom: 1px solid rgba(255, 255, 255, .055); background: radial-gradient(circle at 35% 24%, #30343c, #202228 58%, #1a1b1f); }
425
- .artifact-preview::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, transparent 54%, rgba(8, 9, 11, .32)); pointer-events: none; }
426
- .artifact-image .artifact-preview { background: #202228; }
427
- .artifact-image .artifact-preview img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
428
- .artifact-glyph { position: relative; z-index: 1; width: 36px; height: 36px; display: grid; place-items: center; border: 1px solid rgba(255, 255, 255, .075); border-radius: 9px; background: rgba(12, 13, 16, .28); color: #aab0ba; backdrop-filter: blur(7px); }
429
- .artifact-image .artifact-glyph { display: none; }
430
- .artifact-glyph .icon { width: 20px; height: 20px; }
431
- .artifact-video .artifact-glyph { color: #75badf; }
432
- .artifact-audio .artifact-glyph { color: #83cf9d; }
433
- .artifact-type { position: absolute; z-index: 2; right: 6px; bottom: 5px; padding: 2px 5px; border-radius: 4px; background: rgba(10, 11, 13, .62); color: #d2d5da; font: 600 8px/1.2 var(--font-ui); backdrop-filter: blur(6px); }
434
- .artifact-highlight { position: absolute; z-index: 2; left: 6px; top: 6px; padding: 3px 6px; border-radius: 4px; background: rgba(77, 38, 55, .82); color: #f1abc5; font: 600 8px/1 var(--font-ui); letter-spacing: .02em; }
435
- .artifact-copy { min-width: 0; flex: none; min-height: 45px; padding: 8px 9px 9px; }
436
- .artifact-copy strong, .artifact-copy span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
437
- .artifact-copy strong { color: #d8dae0; font-size: 10px; font-weight: 600; }
438
- .artifact-meta { margin-top: 3px; color: #666b74; font-size: 8px; }
464
+ .artifact-grid { flex: 1; min-height: 0; overflow: auto; display: grid; grid-template-columns: repeat(auto-fill, 104px); align-content: start; justify-content: space-between; gap: 12px; padding: 14px 12px 30px; background: #121316; }
465
+ .artifact-card { --artifact-selection: #24272d; min-width: 0; padding: 0; border: 0; border-radius: 3px; display: flex; flex-direction: column; color: inherit; text-decoration: none; }
466
+ .artifact-card:focus-visible { outline: none; }
467
+ .artifact-card:focus-visible .artifact-preview { outline: 1px solid #656b79; outline-offset: 2px; border-radius: 3px; }
468
+ .artifact-preview { position: relative; flex: none; min-height: 0; width: 100%; aspect-ratio: 1; display: flex; align-items: center; justify-content: center; }
469
+ .artifact-preview img, .artifact-preview video { position: absolute; display: block; max-width: 100%; max-height: 100%; width: auto; height: auto; border-radius: 2px; object-fit: contain; }
470
+ .artifact-video .artifact-preview video { opacity: 0; pointer-events: none; }
471
+ .artifact-video .artifact-preview video.is-ready { opacity: 1; }
472
+ .artifact-glyph { display: none; }
473
+ .artifact-audio .artifact-glyph { display: grid; position: absolute; place-items: center; width: 100%; height: 42px; color: #87a896; background: #202824; border-radius: 2px; }
474
+ .artifact-audio .artifact-waveform { display: block; visibility: hidden; width: 100%; height: 42px; padding: 8px 4px; background: #202824; }
475
+ .artifact-audio .artifact-waveform.is-ready { visibility: visible; }
476
+ .artifact-waveform.is-ready ~ .artifact-glyph { display: none; }
477
+ .artifact-type { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
478
+ .artifact-copy { min-width: 0; height: 44px; padding-top: 6px; text-align: center; }
479
+ .artifact-name, .artifact-name-editor { box-sizing: border-box; width: 100%; margin: 0; padding: 0 4px; border: 1px solid transparent; border-radius: 3px; color: #d8dae0; background: transparent; font: 500 11px/18px var(--font-ui); text-align: center; word-break: break-all; overflow-wrap: anywhere; }
480
+ .artifact-name { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; max-height: 38px; overflow: hidden; white-space: normal; cursor: text; }
481
+ .artifact-name-text { padding: 1px 2px; border-radius: 3px; -webkit-box-decoration-break: clone; box-decoration-break: clone; }
482
+ .artifact-name:focus-visible { outline: none; box-shadow: inset 0 0 0 1px #626875; }
483
+ .artifact-name[hidden] { display: none; }
484
+ .artifact-copy.editing { height: auto; min-height: 44px; }
485
+ .artifact-name-editor { display: block; min-height: 20px; resize: none; overflow: hidden; outline: none; color: #f1f2f5; box-shadow: inset 0 0 0 1px #626875; }
486
+ .artifact-name-editor:focus-visible { outline: none; box-shadow: inset 0 0 0 1px #626875; }
487
+ .artifact-name-editor::selection { color: #fff; background: #4b5263; }
488
+ .artifact-name-error { display: block; color: #bd9c92; font-size: 9px; line-height: 13px; overflow-wrap: anywhere; }
439
489
  .library-empty { grid-column: 1 / -1; min-height: 210px; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 28px; text-align: center; }
440
490
  .library-empty-icon { width: 44px; height: 44px; display: grid; place-items: center; margin-bottom: 12px; border: 1px solid #292c31; border-radius: 12px; background: linear-gradient(145deg, #202227, #18191d); color: #666b74; box-shadow: 0 9px 24px rgba(0, 0, 0, .12); }
441
491
  .library-empty-icon .icon { width: 21px; height: 21px; }
442
492
  .library-empty strong { color: #aeb2ba; font-size: 11px; font-weight: 600; }
443
493
  .library-empty p { max-width: 260px; margin: 6px 0 0; color: #666b74; font-size: 9px; line-height: 1.55; }
444
- .library-older {
445
- grid-column: 1 / -1;
446
- width: 100%;
447
- min-height: 32px;
448
- margin-top: 3px;
449
- border: 1px solid #292c31;
450
- border-radius: 6px;
451
- background: #191a1e;
452
- color: #858a93;
453
- font-size: 9px;
454
- }
455
- .library-older:hover { border-color: #3a3d44; background: #202227; color: #d1d4da; }
456
494
 
457
495
  .code { --code-inline-end: 12px; flex: 1; min-width: 0; min-height: 0; display: flex; flex-direction: column; }
458
496
  .code-toolbar { min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: 8px; }
@@ -643,7 +681,7 @@ button:focus-visible, textarea:focus-visible {
643
681
  margin: 10px 12px 4px;
644
682
  padding: 2px;
645
683
  border-radius: 5px;
646
- background: #101114;
684
+ background: var(--subtab-surface);
647
685
  overflow: hidden;
648
686
  }
649
687
  .inspector-subtab {
@@ -667,7 +705,7 @@ button:focus-visible, textarea:focus-visible {
667
705
  line-height: 1;
668
706
  white-space: nowrap;
669
707
  }
670
- .inspector-subtab.active { background: #24262a; color: #c9cbd0; }
708
+ .inspector-subtab.active { background: var(--subtab-active-surface); color: var(--subtab-active-text); }
671
709
  .inspector-empty { padding: 28px 14px; color: var(--text-3); font-size: 11px; text-align: center; }
672
710
  .property-group { min-width: 0; padding: 14px 14px 16px; border-bottom: 1px solid var(--line); }
673
711
  .property-group h3 { margin: 0 0 10px; color: #c4c6cc; font-size: 11px; font-weight: 500; }
@@ -730,6 +768,7 @@ button:focus-visible, textarea:focus-visible {
730
768
  caret-color: var(--interaction-accent);
731
769
  cursor: text !important;
732
770
  }
771
+ .parameter-display { width: 100%; padding: 5px 7px; color: var(--text-2); font-size: 11px; line-height: 1.2; text-align: right; overflow-wrap: anywhere; user-select: text; font-variant-numeric: tabular-nums; }
733
772
  .parameter-value:focus { border-color: #6a6e77; outline: 0; background: #131417; }
734
773
  .control-boolean .parameter-right { justify-content: flex-end; }
735
774
  .control-boolean .parameter-value {
@@ -786,8 +825,8 @@ button:focus-visible, textarea:focus-visible {
786
825
  .parameter-color-value { width: min(100%, 102px); }
787
826
  .control-list,
788
827
  .control-record { grid-template-columns: minmax(0, 1fr); align-items: stretch; gap: 6px; }
789
- .control-list .parameter-right,
790
- .control-record .parameter-right { grid-column: 1 / -1; width: 100%; }
828
+ .control-list > .parameter-right,
829
+ .control-record > .parameter-right { grid-column: 1 / -1; width: 100%; }
791
830
  .parameter-structured { min-width: 0; width: 100%; }
792
831
  .parameter-structured-summary {
793
832
  min-height: 20px;
@@ -827,20 +866,6 @@ button:focus-visible, textarea:focus-visible {
827
866
  .parameter-list-actions button:not(:disabled):focus-visible { outline: 1px solid #62666f; }
828
867
  .parameter-list-actions .icon { width: 11px; height: 11px; }
829
868
  .parameter-record-fields { min-width: 0; display: flex; flex-direction: column; gap: 5px; }
830
- .parameter-record-field {
831
- min-width: 0;
832
- display: grid;
833
- grid-template-columns: 58px minmax(0, 1fr);
834
- align-items: center;
835
- gap: 7px;
836
- }
837
- .parameter-record-field > span:first-child {
838
- overflow: hidden;
839
- color: #6f737c;
840
- font-size: 10px;
841
- text-overflow: ellipsis;
842
- white-space: nowrap;
843
- }
844
869
  .parameter-structured-footer {
845
870
  min-height: 30px;
846
871
  display: flex;
@@ -859,10 +884,10 @@ button:focus-visible, textarea:focus-visible {
859
884
  font: 10px/1 var(--font-ui);
860
885
  }
861
886
  .parameter-structured-footer button:disabled { color: #454850; background: #16171a; }
862
- .parameter-structured-footer button.primary:not(:disabled) { border-color: #555962; background: #292b30; color: #e0e2e6; }
863
887
  .parameter-structured-add { display: inline-flex; align-items: center; gap: 4px; }
864
888
  .parameter-structured-add .icon { width: 11px; height: 11px; }
865
- .parameter-structured-decisions { display: flex; align-items: center; gap: 4px; margin-left: auto; }
889
+ .parameter-structured-notice { margin-top: 6px; color: var(--text-3); font: 10px/1.4 var(--font-ui); }
890
+ .parameter-structured-notice[hidden] { display: none; }
866
891
  .parameter-select { position: relative; width: 100%; min-width: 0; }
867
892
  .parameter-select-trigger {
868
893
  width: 100%;
@@ -904,6 +929,7 @@ button:focus-visible, textarea:focus-visible {
904
929
  box-shadow: 0 10px 26px rgba(0, 0, 0, .42);
905
930
  }
906
931
  .parameter-select.open-up .parameter-select-menu { top: auto; bottom: calc(100% + 4px); }
932
+ .parameter-select.rich-options .parameter-select-menu { width: 240px; max-height: 240px; }
907
933
  .parameter-select-menu[hidden] { display: none; }
908
934
  .parameter-select-option {
909
935
  width: 100%;
@@ -921,6 +947,19 @@ button:focus-visible, textarea:focus-visible {
921
947
  .parameter-select-option.active { background: #202226; color: #d5d7dc; }
922
948
  .parameter-select-option:focus-visible { outline: 0; background: #292b30; color: var(--text); }
923
949
  .parameter-right > small { flex: none; color: var(--text-3); font-size: 10px; }
950
+ .parameter-value[type="number"] { appearance: textfield; }
951
+ .parameter-value[type="number"]::-webkit-inner-spin-button { opacity: .55; }
952
+ .parameter-value:invalid { border-color: #a45c60; }
953
+ .parameter-value[readonly] { color: var(--text-3); }
954
+ .parameter-multiline { min-height: 64px; resize: vertical; text-align: left; line-height: 1.5; }
955
+ .parameter-select-option { padding: 6px 8px; white-space: normal; text-align: left; }
956
+ .parameter-select-option > small { display: block; margin-top: 3px; color: var(--text-3); font: 10px/1.4 var(--font-ui); }
957
+ .parameter-option-swatch { display: inline-block; width: 12px; height: 12px; margin-right: 7px; border-radius: 2px; vertical-align: middle; box-shadow: inset 0 0 0 1px #ffffff22; }
958
+ .parameter-option-font { display: block; margin-top: 4px; font-size: 18px; }
959
+ .control-color .parameter-right { flex-wrap: wrap; }
960
+ .parameter-swatches { display: flex; flex-wrap: wrap; gap: 5px; padding-top: 3px; }
961
+ .parameter-swatches button { width: 18px; height: 18px; border: 1px solid #ffffff22; border-radius: 3px; }
962
+ .parameter-swatches button:focus-visible { outline: 1px solid var(--text); outline-offset: 2px; }
924
963
  .status.saving { color: var(--text-2); }
925
964
  .status.saved { color: var(--ok); }
926
965
 
@@ -945,6 +984,7 @@ button:focus-visible, textarea:focus-visible {
945
984
  font-variant-numeric: tabular-nums;
946
985
  letter-spacing: .01em;
947
986
  }
987
+ .timeline { --timeline-ruler-height: 22px; }
948
988
  .timeline-body {
949
989
  flex: 1;
950
990
  min-height: 0;
@@ -969,7 +1009,7 @@ button:focus-visible, textarea:focus-visible {
969
1009
  position: sticky;
970
1010
  top: 0;
971
1011
  z-index: 10;
972
- height: 22px;
1012
+ height: var(--timeline-ruler-height);
973
1013
  display: flex;
974
1014
  align-items: center;
975
1015
  justify-content: flex-end;
@@ -1014,8 +1054,6 @@ button:focus-visible, textarea:focus-visible {
1014
1054
  text-align: left;
1015
1055
  }
1016
1056
  .track-copy strong { color: #cfd2d8; font-size: 11px; font-weight: 500; line-height: 18px; }
1017
- .track-label-has-state { grid-template-columns: 18px minmax(0, 1fr) 18px; }
1018
- .track-state { display: grid; place-items: center; }
1019
1057
  .track-attachment-mark {
1020
1058
  position: relative;
1021
1059
  width: 18px;
@@ -1044,10 +1082,13 @@ button:focus-visible, textarea:focus-visible {
1044
1082
  transform: translateY(-50%);
1045
1083
  }
1046
1084
  .track-tone-blue { --track: var(--tone-blue); --rail: var(--tone-blue-rail); }
1085
+ .track-tone-blue-muted { --track: var(--tone-blue-muted); --rail: var(--tone-blue-muted-rail); }
1047
1086
  .track-tone-green { --track: var(--tone-green); --rail: var(--tone-green-rail); }
1087
+ .track-tone-green-muted { --track: var(--tone-green-muted); --rail: var(--tone-green-muted-rail); }
1048
1088
  .track-tone-teal { --track: var(--tone-teal); --rail: var(--tone-teal-rail); }
1049
1089
  .track-tone-violet { --track: var(--tone-violet); --rail: var(--tone-violet-rail); }
1050
1090
  .track-tone-magenta { --track: var(--tone-magenta); --rail: var(--tone-magenta-rail); }
1091
+ .track-tone-magenta-muted { --track: var(--tone-magenta-muted); --rail: var(--tone-magenta-muted-rail); }
1051
1092
  .track-tone-orange { --track: var(--tone-orange); --rail: var(--tone-orange-rail); }
1052
1093
  .track-tone-orange-muted { --track: var(--tone-orange-muted); --rail: var(--tone-orange-muted-rail); }
1053
1094
  .track-tone-neutral { --track: var(--tone-neutral); --rail: var(--tone-neutral-rail); }
@@ -1056,7 +1097,7 @@ button:focus-visible, textarea:focus-visible {
1056
1097
  position: sticky;
1057
1098
  top: 0;
1058
1099
  z-index: 9;
1059
- height: 22px;
1100
+ height: var(--timeline-ruler-height);
1060
1101
  overflow: hidden;
1061
1102
  border-bottom: 1px solid var(--line);
1062
1103
  background: #111216;
@@ -1102,8 +1143,8 @@ button:focus-visible, textarea:focus-visible {
1102
1143
  }
1103
1144
  .tick-last { padding-right: 4px; padding-left: 0; border-right: 1px solid #45484e; border-left: 0; transform: translateX(-100%); }
1104
1145
  .lanes { min-height: 0; cursor: default; }
1105
- .lane { position: relative; min-height: 0; overflow: hidden; border-bottom: 1px solid #191b1f; background: var(--lane); }
1106
- .semantic-lane { min-height: 0; background: var(--lane); }
1146
+ .lane { position: relative; isolation: isolate; min-height: 0; overflow: hidden; border-bottom: 1px solid #191b1f; background: var(--lane); }
1147
+ .semantic-lane { position: sticky; top: var(--timeline-ruler-height); z-index: 8; min-height: 0; border-bottom: 1px solid var(--line); background: var(--lane); }
1107
1148
  .semantic-band {
1108
1149
  position: absolute;
1109
1150
  right: 0;
@@ -1111,8 +1152,10 @@ button:focus-visible, textarea:focus-visible {
1111
1152
  height: var(--semantic-band-height);
1112
1153
  overflow: hidden;
1113
1154
  background: var(--lane);
1155
+ box-shadow: inset 0 -1px var(--line);
1156
+ isolation: isolate;
1114
1157
  }
1115
- .semantic-band-intent { border-bottom: 0; }
1158
+ .semantic-band:last-child { box-shadow: none; }
1116
1159
  .lane-attached {
1117
1160
  border-left: 0;
1118
1161
  background: var(--lane);
@@ -1132,12 +1175,12 @@ button:focus-visible, textarea:focus-visible {
1132
1175
  border: 0;
1133
1176
  border-radius: 0;
1134
1177
  background: var(--semantic-cell);
1135
- box-shadow: none;
1178
+ box-shadow: inset 0 0 0 1px #ffffff12;
1136
1179
  color: var(--text);
1137
1180
  text-align: left;
1138
1181
  cursor: default;
1139
1182
  }
1140
- .semantic-cell:focus-visible { outline: 0; }
1183
+ .semantic-cell:focus-visible { outline: 0; box-shadow: inset 0 0 0 1px #ffffff60; }
1141
1184
  .semantic-segment {
1142
1185
  --semantic-cell: var(--semantic-segment);
1143
1186
  }
@@ -1148,11 +1191,9 @@ button:focus-visible, textarea:focus-visible {
1148
1191
  --semantic-cell: var(--semantic-intent);
1149
1192
  color: #fff;
1150
1193
  }
1151
- .semantic-cell.selected,
1152
- .semantic-cell.live { z-index: 4; filter: brightness(1.22); }
1153
- .semantic-segment.selected { box-shadow: none; }
1154
- .semantic-segment.live.selected { filter: brightness(1.22); }
1155
- .semantic-moment.selected { z-index: 4; filter: brightness(1.22); }
1194
+ .semantic-cell.live { filter: brightness(1.12); }
1195
+ .semantic-cell.selected { z-index: 4; filter: brightness(1.16); box-shadow: inset 0 0 0 1px #ffffff60; }
1196
+ .semantic-moment.selected { z-index: 5; filter: brightness(1.16); box-shadow: inset 0 0 0 1px #ffffff60; }
1156
1197
  .semantic-segment-label {
1157
1198
  flex: 1 1 auto;
1158
1199
  min-width: 0;
@@ -1198,31 +1239,19 @@ button:focus-visible, textarea:focus-visible {
1198
1239
  .semantic-word .semantic-cell-content { padding: 0 5px; }
1199
1240
  .semantic-moment {
1200
1241
  position: absolute;
1201
- top: 4px;
1202
- width: 14px;
1203
- height: 14px;
1204
- transform: translateX(-7px) rotate(45deg);
1242
+ top: calc((var(--semantic-band-height) - 9px) / 2);
1243
+ z-index: 1;
1244
+ width: 9px;
1245
+ height: 9px;
1246
+ transform: translateX(-50%) scaleX(.6) rotate(45deg);
1205
1247
  border-radius: 0;
1206
1248
  padding: 0;
1207
- border: 0;
1208
- background: var(--semantic-intent);
1249
+ border: 1px solid var(--lane);
1250
+ background: var(--semantic-moment);
1209
1251
  }
1210
1252
  .semantic-moment:focus-visible { outline: 0; }
1211
- .track-label-semantic::before {
1212
- border-radius: 0;
1213
- background: #181a1f;
1214
- }
1215
- .track-fold {
1216
- min-width: 17px;
1217
- height: 17px;
1218
- padding: 0 3px;
1219
- border: 0;
1220
- border-radius: 3px;
1221
- background: #24262a;
1222
- color: #92969e;
1223
- font-size: 11px;
1224
- line-height: 17px;
1225
- }
1253
+ .track-label-semantic { position: sticky; top: 0; z-index: 8; border-bottom: 1px solid var(--line); background: #111216; }
1254
+ .track-label-semantic::before { display: none; }
1226
1255
  .track-label-attached {
1227
1256
  /* The branch marker occupies the same 18px prefix as a root icon;
1228
1257
  attached and root labels therefore share one exact text column. */
@@ -1231,6 +1260,7 @@ button:focus-visible, textarea:focus-visible {
1231
1260
  }
1232
1261
  .track-label-attached::before { inset: var(--timeline-item-inset-y) 6px; background: #181a1f; }
1233
1262
  .clip {
1263
+ z-index: 0;
1234
1264
  --track: var(--visual);
1235
1265
  --item-head: color-mix(in srgb, var(--track) 58%, var(--lane));
1236
1266
  --item-body: color-mix(in srgb, var(--track) 20%, var(--lane));
@@ -1244,7 +1274,6 @@ button:focus-visible, textarea:focus-visible {
1244
1274
  display: block;
1245
1275
  padding: 0;
1246
1276
  border: 0;
1247
- border-bottom: 1px solid color-mix(in srgb, var(--track) 48%, var(--lane));
1248
1277
  border-radius: var(--timeline-item-radius);
1249
1278
  background: var(--item-body);
1250
1279
  box-shadow: none;
@@ -1252,8 +1281,7 @@ button:focus-visible, textarea:focus-visible {
1252
1281
  text-align: left;
1253
1282
  cursor: default;
1254
1283
  }
1255
- /* The edge affordance is intentionally visual-only for now. Actual trim and
1256
- writeback remain disabled until their SVML mapping is implemented. */
1284
+ /* Only Companion-declared editable intervals enable edge gestures. */
1257
1285
  #app .clip::before,
1258
1286
  #app .clip::after {
1259
1287
  content: "";
@@ -1274,17 +1302,26 @@ button:focus-visible, textarea:focus-visible {
1274
1302
  cursor: ew-resize !important;
1275
1303
  }
1276
1304
  .clip.selected {
1277
- z-index: 4;
1305
+ z-index: 1;
1278
1306
  overflow: visible;
1279
1307
  box-shadow: none;
1280
1308
  color: #fff;
1281
1309
  }
1282
1310
  .clip.editing { box-shadow: 0 0 0 1px #fff; }
1283
1311
  .clip:focus-visible { outline: 0; }
1312
+ /* Draw above thumbnails and text without changing interval geometry. */
1313
+ .clip-boundary {
1314
+ position: absolute;
1315
+ z-index: 5;
1316
+ inset: 0;
1317
+ border: 1px solid #ffffff20;
1318
+ border-radius: inherit;
1319
+ pointer-events: none;
1320
+ }
1284
1321
  .clip-selection {
1285
1322
  position: absolute;
1286
1323
  z-index: 6;
1287
- inset: calc(-1 * var(--timeline-selection-stroke));
1324
+ inset: 0;
1288
1325
  display: none;
1289
1326
  border: var(--timeline-selection-stroke) solid var(--timeline-selection-color);
1290
1327
  border-radius: var(--timeline-selection-radius);
@@ -1293,20 +1330,21 @@ button:focus-visible, textarea:focus-visible {
1293
1330
  .clip-selection::before, .clip-selection::after {
1294
1331
  content: "";
1295
1332
  position: absolute;
1296
- top: -1px;
1297
- bottom: -1px;
1333
+ top: 0;
1334
+ bottom: 0;
1298
1335
  width: var(--timeline-selection-edge);
1299
1336
  background: var(--timeline-selection-color);
1300
1337
  }
1301
1338
  .clip-selection::before {
1302
- left: calc(-1 * var(--timeline-selection-stroke));
1339
+ left: 0;
1303
1340
  border-radius: var(--timeline-selection-radius) 0 0 var(--timeline-selection-radius);
1304
1341
  }
1305
1342
  .clip-selection::after {
1306
- right: calc(-1 * var(--timeline-selection-stroke));
1343
+ right: 0;
1307
1344
  border-radius: 0 var(--timeline-selection-radius) var(--timeline-selection-radius) 0;
1308
1345
  }
1309
1346
  .clip.selected > .clip-selection { display: block; }
1347
+ .clip.selected > .clip-boundary { border-color: var(--timeline-selection-color); }
1310
1348
  .clip-head {
1311
1349
  position: absolute;
1312
1350
  z-index: 3;
@@ -1325,6 +1363,7 @@ button:focus-visible, textarea:focus-visible {
1325
1363
  }
1326
1364
  .clip-body {
1327
1365
  position: absolute;
1366
+ z-index: 1;
1328
1367
  top: var(--timeline-item-header-height);
1329
1368
  right: 0;
1330
1369
  bottom: 0;
@@ -1383,10 +1422,13 @@ button:focus-visible, textarea:focus-visible {
1383
1422
  font-variant-numeric: tabular-nums;
1384
1423
  }
1385
1424
  .clip-tone-blue { --track: var(--tone-blue); }
1425
+ .clip-tone-blue-muted { --track: var(--tone-blue-muted); }
1386
1426
  .clip-tone-green { --track: var(--tone-green); }
1427
+ .clip-tone-green-muted { --track: var(--tone-green-muted); }
1387
1428
  .clip-tone-teal { --track: var(--tone-teal); }
1388
1429
  .clip-tone-violet { --track: var(--tone-violet); }
1389
1430
  .clip-tone-magenta { --track: var(--tone-magenta); }
1431
+ .clip-tone-magenta-muted { --track: var(--tone-magenta-muted); }
1390
1432
  .clip-tone-orange { --track: var(--tone-orange); }
1391
1433
  .clip-tone-orange-muted { --track: var(--tone-orange-muted); }
1392
1434
  .clip-tone-neutral { --track: var(--tone-neutral); }
@@ -1520,6 +1562,116 @@ button:focus-visible, textarea:focus-visible {
1520
1562
  @media (max-width: 920px) {
1521
1563
  .meta, .topbar-right { display: none; }
1522
1564
  .topbar { grid-template-columns: 1fr minmax(120px, 1fr); }
1523
- .upper-shell { grid-template-columns: minmax(280px, var(--source-width)) 8px minmax(300px, 1fr); }
1565
+ .upper-shell { grid-template-columns: minmax(320px, var(--source-width)) 8px minmax(300px, 1fr); }
1524
1566
  .workspace-handle, .workspace-panel { display: none; }
1525
1567
  }
1568
+
1569
+
1570
+ /* The same transport serves the composition and selected Result media. */
1571
+ .stage-transport { display: flex; align-items: center; gap: 2px; }
1572
+ .stage-bar button[hidden], .stage-transport[hidden], .stage-artifact[hidden], .stage-scaler[hidden] { display: none; }
1573
+ .stage-bar .stage-mute { position: absolute; right: 12px; margin: 0; }
1574
+ .stage-time { position: absolute; left: 12px; color: #969ba5; font: 10px var(--font-mono); }
1575
+ .stage-title { min-width: 0; }
1576
+ .stage-title strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1577
+ .stage-return { flex: none; margin-left: auto; border: 0; background: transparent; color: #aeb3bd; font: 10px var(--font-ui); cursor: pointer; }
1578
+ .stage-return[hidden] { display: none; }
1579
+ .stage-artifact { position: relative; display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; min-height: 0; }
1580
+ .stage-artifact > img, .stage-artifact > video { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; }
1581
+ .stage-artifact audio { display: none; }
1582
+ .stage-audio-wave { width: 85%; padding: 24px 12px; border-radius: 2px; color: #b5c2bb; background: #202824; text-align: center; }
1583
+ .stage-audio-wave img { display: block; width: 100%; height: 100px; }
1584
+ .stage-media-error { position: absolute; bottom: 12px; padding: 8px; background: #24262b; color: #cacdd4; font-size: 11px; }
1585
+ .stage-progress { position: relative; flex: none; height: 0; z-index: 2; }
1586
+ .stage-progress[hidden], .scrub-preview[hidden] { display: none; }
1587
+ .stage-scrubber { position: absolute; inset: -5px 0 auto; width: 100%; height: 10px; padding: 0; margin: 0; appearance: none; background: transparent; cursor: pointer; }
1588
+ .stage-scrubber::-webkit-slider-runnable-track { height: 2px; background: #676c75; }
1589
+ .stage-scrubber::-webkit-slider-thumb { appearance: none; width: 8px; height: 8px; border-radius: 50%; margin-top: -3px; background: #e1e4e9; }
1590
+ .stage-scrubber::-moz-range-track { height: 2px; background: #676c75; }
1591
+ .stage-scrubber::-moz-range-thumb { width: 8px; height: 8px; border: 0; background: #e1e4e9; }
1592
+ .stage-review .stage-scaler, .stage-review .stage-viewport { cursor: pointer; }
1593
+ .stage-review .stage-progress { height: 24px; margin: 0 20px; }
1594
+ .stage-review .stage-scrubber { top: 0; height: 24px; }
1595
+ .stage-review .stage-scrubber::-webkit-slider-runnable-track { height: 4px; border-radius: 2px; background: #565b64; }
1596
+ .stage-review .stage-scrubber::-webkit-slider-thumb { width: 12px; height: 12px; margin-top: -4px; }
1597
+ .stage-review .stage-scrubber::-moz-range-track { height: 4px; border-radius: 2px; background: #565b64; }
1598
+ .stage-review .stage-scrubber::-moz-range-thumb { width: 12px; height: 12px; }
1599
+ .scrub-preview { position: absolute; bottom: calc(100% + 8px); padding: 3px; border: 1px solid #4b4f56; border-radius: 4px; background: #1b1d21; box-shadow: 0 4px 16px #0006; pointer-events: none; }
1600
+ .scrub-preview-picture { position: relative; display: grid; place-items: center; overflow: hidden; background: #111215; }
1601
+ .scrub-preview-picture iframe { position: absolute; top: 0; left: 0; border: 0; transform-origin: top left; pointer-events: none; }
1602
+ .scrub-preview-picture span { padding: 8px; color: var(--text-3); font: 10px var(--font-ui); text-align: center; }
1603
+ .scrub-preview-picture span[hidden] { display: none; }
1604
+ .scrub-preview-time { padding: 5px 3px 2px; color: #d5d8df; font: 10px var(--font-mono); text-align: center; }
1605
+
1606
+ .preview-unavailable .artifact-type { position: static; width: auto; height: auto; clip-path: none; color: #9298a2; font-size: 10px; }
1607
+
1608
+ .artifact-card.selected .artifact-preview { background: var(--artifact-selection); border-radius: 3px; }
1609
+ .artifact-card.selected .artifact-name-text { color: #f1f2f5; background: var(--artifact-selection); }
1610
+ .library-continuation { grid-column: 1 / -1; height: 28px; display: grid; place-items: center; color: #777e89; font-size: 10px; }
1611
+
1612
+ .timeline-overlap-menu, .selection-menu {
1613
+ position: fixed;
1614
+ z-index: 100;
1615
+ min-width: 160px;
1616
+ max-width: 280px;
1617
+ max-height: 240px;
1618
+ overflow: auto;
1619
+ padding: 4px;
1620
+ border: 1px solid var(--line-strong);
1621
+ border-radius: 5px;
1622
+ background: var(--panel-raised);
1623
+ box-shadow: 0 6px 20px #0006;
1624
+ }
1625
+ .timeline-overlap-menu button, .selection-menu button {
1626
+ display: block;
1627
+ width: 100%;
1628
+ padding: 6px 9px;
1629
+ border: 0;
1630
+ border-radius: 2px;
1631
+ background: transparent;
1632
+ color: var(--text);
1633
+ font-family: inherit;
1634
+ font-size: 12px;
1635
+ line-height: 1.4;
1636
+ text-align: left;
1637
+ overflow-wrap: anywhere;
1638
+ }
1639
+ .timeline-overlap-menu button:hover,
1640
+ .timeline-overlap-menu button:focus-visible,
1641
+ .selection-menu button:hover,
1642
+ .selection-menu button:focus-visible { background: var(--field); outline: none; }
1643
+
1644
+ /* Compact authored rules keep interval geometry without a thumbnail body. */
1645
+ .clip-chrome-compact > .clip-head {
1646
+ height: 100%;
1647
+ border-bottom: 0;
1648
+ border-radius: var(--timeline-item-radius);
1649
+ background: var(--item-head);
1650
+ }
1651
+ .clip-chrome-compact > .clip-body,
1652
+ .clip-chrome-compact .clip-meta { display: none; }
1653
+ .clip-chrome-compact .clip-name { font-size: 11px; font-weight: 500; }
1654
+
1655
+ /* Track-internal bands share one label and meet without child-track gutters. */
1656
+ .timeline-track-banded { padding: var(--timeline-item-inset-y) 0; }
1657
+ .timeline-track-banded > .track-band { border-bottom: 0; }
1658
+ .timeline-track-banded > .track-band > .clip {
1659
+ height: 100%;
1660
+ margin-top: 0;
1661
+ border-radius: 0;
1662
+ }
1663
+ .timeline-track-banded > .track-band:first-child > .clip {
1664
+ border-top-left-radius: var(--timeline-item-radius);
1665
+ border-top-right-radius: var(--timeline-item-radius);
1666
+ }
1667
+ .timeline-track-banded > .track-band:last-child > .clip {
1668
+ border-bottom-left-radius: var(--timeline-item-radius);
1669
+ border-bottom-right-radius: var(--timeline-item-radius);
1670
+ }
1671
+ .track-band .clip-head, .track-band .clip-body { border-radius: inherit; }
1672
+ .track-band-label .clip-head {
1673
+ height: 100%;
1674
+ border-bottom: 0;
1675
+ background: var(--item-head);
1676
+ }
1677
+ .track-band-label .clip-body, .track-band-label .clip-meta { display: none; }