@dailies-studio/shot-editor 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/dist/.vite/manifest.json +382 -0
  2. package/dist/assets/AgentPanel-CQejLbiX.js +2 -0
  3. package/dist/assets/AgentPanel-DJEphah0.css +1 -0
  4. package/dist/assets/AgentQuestionDialog-BqkD0kXF.js +1 -0
  5. package/dist/assets/CodeStudio-Dv4ihHpz.js +23 -0
  6. package/dist/assets/CommentsPanel-B4yhhT1T.js +1 -0
  7. package/dist/assets/ComponentLibraryRail-Ch_dsAru.js +1 -0
  8. package/dist/assets/ComponentStage-BRhRotyH.js +1 -0
  9. package/dist/assets/CurvePane-BjFVabKX.css +1 -0
  10. package/dist/assets/CurvePane-R22WzllJ.js +1 -0
  11. package/dist/assets/ExportDialog-CWLQWTmG.js +2 -0
  12. package/dist/assets/FontPicker-DWKaYL7F.js +1 -0
  13. package/dist/assets/FontPicker-v0IOIArM.css +1 -0
  14. package/dist/assets/GenerateDrawer-Bh3SqDKt.js +2 -0
  15. package/dist/assets/InsertDrawer-Ce1fod1L.js +1 -0
  16. package/dist/assets/LibraryBrowser-D9sEGz5w.js +2 -0
  17. package/dist/assets/MakeItYoursSection-CMO4319_.js +2 -0
  18. package/dist/assets/MaterialGraphCanvas-BFzl4wWR.js +23 -0
  19. package/dist/assets/MaterialGraphCanvas-BIUD59ik.css +1 -0
  20. package/dist/assets/MaterialWorkspace-CqTWqaRA.js +14 -0
  21. package/dist/assets/PreferencesDialog-CBf9_OoD.js +1 -0
  22. package/dist/assets/PresetsSection-CUEaoCVU.js +1 -0
  23. package/dist/assets/SoundHistory-BeS8EW1h.js +1 -0
  24. package/dist/assets/SoundMode-BmcZru3i.js +3 -0
  25. package/dist/assets/StockSounds-DdAUGRYK.js +1 -0
  26. package/dist/assets/TemplateFieldSection-CaeXpLFo.js +1 -0
  27. package/dist/assets/VersionHistoryPanel-CxG6XhNP.js +1 -0
  28. package/dist/assets/board-B88EPuLO.css +1 -0
  29. package/dist/assets/board-CL-he7SL.js +3 -0
  30. package/dist/assets/components-0oOSPN0l.js +1 -0
  31. package/dist/assets/googleFontRanges-gp32wJMo.js +1 -0
  32. package/dist/assets/googleFonts-BNon6M7X.js +1 -0
  33. package/dist/assets/iconsAndAliases-DL7gXP5j.js +1863 -0
  34. package/dist/assets/index-4F5NQmI8.css +1 -0
  35. package/dist/assets/index-BGHQGV5z.js +117 -0
  36. package/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  37. package/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  38. package/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  39. package/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  40. package/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  41. package/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  42. package/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  43. package/dist/assets/libraryModel-CpIwfFha.js +1 -0
  44. package/dist/assets/lucide-6iK64tTB.js +9319 -0
  45. package/dist/assets/motionStamp-CH-Hew4E.js +1 -0
  46. package/dist/assets/takeMeasure-Tdg0TxEi.js +1 -0
  47. package/dist/assets/webmcp-BsB9gxWC.js +2 -0
  48. package/dist/index.html +34 -3
  49. package/package.json +12 -9
  50. package/src/addFamilies.ts +66 -0
  51. package/src/api.ts +1631 -55
  52. package/src/app/App.tsx +977 -198
  53. package/src/app/lazyPanel.tsx +137 -0
  54. package/src/app/lazySurfaces.tsx +203 -0
  55. package/src/audio/index.tsx +41 -10
  56. package/src/audio/meter.ts +485 -0
  57. package/src/audio/meterMath.ts +273 -0
  58. package/src/audio/meterStore.ts +155 -0
  59. package/src/audio/offlineMix.ts +289 -0
  60. package/src/audio/preview.ts +928 -118
  61. package/src/bridge.ts +15 -5
  62. package/src/bridgeTypes.ts +1611 -36
  63. package/src/channels.ts +17 -32
  64. package/src/fonts/googleFonts.ts +4 -0
  65. package/src/hostApi.ts +174 -0
  66. package/src/icons.tsx +770 -0
  67. package/src/layerWords.ts +61 -0
  68. package/src/main.tsx +56 -4
  69. package/src/panels/ResizeHandle.tsx +33 -43
  70. package/src/panels/agent/AgentDots.tsx +36 -0
  71. package/src/panels/agent/AgentPanel.tsx +119 -43
  72. package/src/panels/agent/AgentQuestionDialog.tsx +202 -0
  73. package/src/panels/agent/agent.css +113 -97
  74. package/src/panels/agent/agentGate.ts +35 -0
  75. package/src/panels/code/CodeDefaultsPanel.tsx +345 -0
  76. package/src/panels/code/CodeStudio.tsx +373 -0
  77. package/src/panels/code/FileTree.tsx +265 -0
  78. package/src/panels/code/codeBufferGuard.ts +52 -0
  79. package/src/panels/code/codeParts.tsx +321 -0
  80. package/src/panels/comments/CommentComposer.tsx +239 -0
  81. package/src/panels/comments/CommentThread.tsx +346 -0
  82. package/src/panels/comments/CommentsPanel.tsx +336 -0
  83. package/src/panels/comments/InboxButton.tsx +131 -0
  84. package/src/panels/comments/MentionMenu.tsx +98 -0
  85. package/src/panels/comments/parts.tsx +171 -0
  86. package/src/panels/export/ExportDialog.tsx +919 -96
  87. package/src/panels/export/ExportScrim.tsx +57 -0
  88. package/src/panels/files/AssetsTab.tsx +656 -0
  89. package/src/panels/files/FilePanel.tsx +1466 -216
  90. package/src/panels/files/LayerMarks.tsx +40 -0
  91. package/src/panels/files/LeftColumn.tsx +37 -0
  92. package/src/panels/files/McpSection.tsx +690 -47
  93. package/src/panels/files/MissingAssetsNotice.tsx +60 -0
  94. package/src/panels/files/assetDrag.ts +79 -0
  95. package/src/panels/files/resourceParts.tsx +255 -0
  96. package/src/panels/fonts/FontPicker.tsx +762 -0
  97. package/src/panels/fonts/faceCache.ts +207 -0
  98. package/src/panels/fonts/fontPicker.css +271 -0
  99. package/src/panels/fonts/pickerModel.ts +265 -0
  100. package/src/panels/fonts/pickerRequest.ts +46 -0
  101. package/src/panels/header/AccountAvatar.tsx +76 -0
  102. package/src/panels/header/AgentChip.tsx +77 -0
  103. package/src/panels/header/AppMenu.tsx +213 -0
  104. package/src/panels/header/Header.tsx +564 -84
  105. package/src/panels/header/HistoryControls.tsx +31 -5
  106. package/src/panels/header/PresenceStack.tsx +329 -0
  107. package/src/panels/header/ProjectTitle.tsx +232 -0
  108. package/src/panels/header/ShareButton.tsx +59 -0
  109. package/src/panels/header/StatusBadges.tsx +358 -27
  110. package/src/panels/header/SyncDeletedDialog.tsx +88 -0
  111. package/src/panels/header/ZoomControls.tsx +46 -15
  112. package/src/panels/header/agentHandoff.ts +52 -0
  113. package/src/panels/header/leave.ts +26 -0
  114. package/src/panels/help/HelpSection.tsx +189 -163
  115. package/src/panels/insert/InsertDrawer.tsx +723 -0
  116. package/src/panels/insert/iconSet.ts +109 -0
  117. package/src/panels/inspector/ExposeDot.tsx +117 -0
  118. package/src/panels/inspector/FramingRows.tsx +314 -44
  119. package/src/panels/inspector/InspectorFooter.tsx +91 -0
  120. package/src/panels/inspector/InspectorHead.tsx +425 -0
  121. package/src/panels/inspector/InspectorPanel.tsx +408 -124
  122. package/src/panels/inspector/KeyframeDot.tsx +373 -0
  123. package/src/panels/inspector/KeyframeSection.tsx +257 -0
  124. package/src/panels/inspector/MarkerSection.tsx +55 -11
  125. package/src/panels/inspector/ParamRow.tsx +84 -53
  126. package/src/panels/inspector/RightColumn.tsx +152 -0
  127. package/src/panels/inspector/TimeSection.tsx +866 -0
  128. package/src/panels/inspector/animate/EaseControl.tsx +244 -0
  129. package/src/panels/inspector/animate/PresetsSection.tsx +135 -0
  130. package/src/panels/inspector/animate/ShotSection.tsx +562 -48
  131. package/src/panels/inspector/design/AlignRow.tsx +95 -31
  132. package/src/panels/inspector/design/AppearanceSection.tsx +118 -9
  133. package/src/panels/inspector/design/ClonerSection.tsx +323 -62
  134. package/src/panels/inspector/design/ComponentSection.tsx +50 -43
  135. package/src/panels/inspector/design/CornerSection.tsx +45 -14
  136. package/src/panels/inspector/design/DefinitionProps.tsx +315 -0
  137. package/src/panels/inspector/design/DefinitionSection.tsx +136 -0
  138. package/src/panels/inspector/design/DeviceSection.tsx +210 -0
  139. package/src/panels/inspector/design/FillSection.tsx +83 -51
  140. package/src/panels/inspector/design/FontField.tsx +196 -0
  141. package/src/panels/inspector/design/HtmlSection.tsx +23 -12
  142. package/src/panels/inspector/design/InstanceSection.tsx +373 -154
  143. package/src/panels/inspector/design/MaskSection.tsx +84 -0
  144. package/src/panels/inspector/design/MaterialSection.tsx +177 -0
  145. package/src/panels/inspector/design/MediaSection.tsx +273 -120
  146. package/src/panels/inspector/design/MeshSection.tsx +910 -82
  147. package/src/panels/inspector/design/PaintRows.tsx +550 -0
  148. package/src/panels/inspector/design/PlateStyleSection.tsx +177 -0
  149. package/src/panels/inspector/design/ShadowSection.tsx +221 -48
  150. package/src/panels/inspector/design/SplineFollowSection.tsx +235 -0
  151. package/src/panels/inspector/design/StrokeSection.tsx +228 -43
  152. package/src/panels/inspector/design/TemplateFieldSection.tsx +57 -0
  153. package/src/panels/inspector/design/TransformSection.tsx +244 -50
  154. package/src/panels/inspector/design/TypographySection.tsx +679 -110
  155. package/src/panels/inspector/layout.ts +295 -0
  156. package/src/panels/inspector/propValue.ts +199 -0
  157. package/src/panels/inspector/scene/CameraSection.tsx +232 -22
  158. package/src/panels/inspector/scene/EffectsSection.tsx +722 -71
  159. package/src/panels/inspector/scene/MakeItYoursSection.tsx +180 -0
  160. package/src/panels/inspector/scene/SceneDocSection.tsx +191 -0
  161. package/src/panels/inspector/scene/SceneSection.tsx +219 -44
  162. package/src/panels/inspector/scene/TransitionSection.tsx +523 -72
  163. package/src/panels/inspector/storyboard/StoryboardReferenceSection.tsx +593 -0
  164. package/src/panels/inspector/storyboard/VideoStill.tsx +120 -0
  165. package/src/panels/inspector/timeModel.ts +190 -0
  166. package/src/panels/inspector/useDocWrite.ts +438 -146
  167. package/src/panels/library/LibraryBrowser.tsx +435 -0
  168. package/src/panels/library/LibraryGrid.tsx +190 -0
  169. package/src/panels/library/LibraryPreviewPanel.tsx +349 -0
  170. package/src/panels/library/LibraryRail.tsx +84 -0
  171. package/src/panels/library/LibrarySoundPanel.tsx +293 -0
  172. package/src/panels/library/SoundHistory.tsx +245 -0
  173. package/src/panels/library/StockSounds.tsx +390 -0
  174. package/src/panels/library/libraryModel.ts +147 -0
  175. package/src/panels/library/stockSearch.ts +77 -0
  176. package/src/panels/maskMarks.tsx +117 -0
  177. package/src/panels/material/MaterialCommentNode.tsx +54 -0
  178. package/src/panels/material/MaterialGraphCanvas.tsx +861 -0
  179. package/src/panels/material/MaterialGraphMenu.tsx +45 -0
  180. package/src/panels/material/MaterialGroupNode.tsx +56 -0
  181. package/src/panels/material/MaterialLibrary.tsx +253 -0
  182. package/src/panels/material/MaterialNode.tsx +453 -0
  183. package/src/panels/material/MaterialNodePalette.tsx +349 -0
  184. package/src/panels/material/MaterialParameterControls.tsx +525 -0
  185. package/src/panels/material/MaterialRerouteNode.tsx +42 -0
  186. package/src/panels/material/MaterialWorkspace.tsx +501 -0
  187. package/src/panels/material/NodePreview.tsx +70 -0
  188. package/src/panels/material/flowModel.ts +441 -0
  189. package/src/panels/material/parameterValues.ts +231 -0
  190. package/src/panels/material/previewScheduler.ts +235 -0
  191. package/src/panels/material/reactFlow.css +6 -0
  192. package/src/panels/material/socketGlyph.ts +85 -0
  193. package/src/panels/material/viewportMemory.ts +58 -0
  194. package/src/panels/preferences/PreferencesDialog.tsx +215 -0
  195. package/src/panels/share/ShareComponentDialog.tsx +247 -0
  196. package/src/panels/stage/StageMenu.tsx +35 -5
  197. package/src/panels/stage/StagePanel.tsx +338 -23
  198. package/src/panels/stage/cellSlots.tsx +70 -0
  199. package/src/panels/storyboard/BoardCanvas.tsx +739 -0
  200. package/src/panels/storyboard/BoardCursors.tsx +158 -0
  201. package/src/panels/storyboard/BoardDropDialog.tsx +161 -0
  202. package/src/panels/storyboard/BoardPlan.tsx +42 -0
  203. package/src/panels/storyboard/ComponentSheet.tsx +187 -0
  204. package/src/panels/storyboard/ComponentStage.tsx +235 -0
  205. package/src/panels/storyboard/MiniSketch.tsx +173 -0
  206. package/src/panels/storyboard/PartPicker.tsx +64 -0
  207. package/src/panels/storyboard/PlanPanel.tsx +617 -0
  208. package/src/panels/storyboard/ReferencePreview.tsx +217 -0
  209. package/src/panels/storyboard/ShotBrief.tsx +360 -0
  210. package/src/panels/storyboard/ShotCard.tsx +251 -0
  211. package/src/panels/storyboard/StagePreview.tsx +348 -0
  212. package/src/panels/storyboard/StillThumbs.tsx +162 -0
  213. package/src/panels/storyboard/StoryboardView.tsx +79 -0
  214. package/src/panels/storyboard/board.css +1065 -0
  215. package/src/panels/storyboard/board.ts +12 -0
  216. package/src/panels/storyboard/boardClipboard.ts +111 -0
  217. package/src/panels/storyboard/boardOrder.ts +68 -0
  218. package/src/panels/storyboard/boardRows.tsx +425 -0
  219. package/src/panels/storyboard/liveCap.ts +90 -0
  220. package/src/panels/storyboard/plan.css +295 -0
  221. package/src/panels/storyboard/posterCache.ts +133 -0
  222. package/src/panels/storyboard/shotboard/ComponentPicker.tsx +373 -0
  223. package/src/panels/storyboard/shotboard/ImagePicker.tsx +145 -0
  224. package/src/panels/storyboard/shotboard/ShotBoard.tsx +292 -0
  225. package/src/panels/storyboard/shotboard/SketchCanvas.tsx +443 -0
  226. package/src/panels/storyboard/shotboard/SketchInspector.tsx +471 -0
  227. package/src/panels/storyboard/shotboard/SketchItem.tsx +240 -0
  228. package/src/panels/storyboard/shotboard/SketchLayers.tsx +130 -0
  229. package/src/panels/storyboard/shotboard/SketchPlay.tsx +108 -0
  230. package/src/panels/storyboard/shotboard/SketchStrip.tsx +178 -0
  231. package/src/panels/storyboard/shotboard/SketchToolFooter.tsx +99 -0
  232. package/src/panels/storyboard/shotboard/sketch.css +1392 -0
  233. package/src/panels/storyboard/shotboard/sketchModel.ts +219 -0
  234. package/src/panels/storyboard/storyboardDrop.ts +164 -0
  235. package/src/panels/studio/ComponentLibraryRail.tsx +346 -0
  236. package/src/panels/studio/ComponentSidePanel.tsx +355 -0
  237. package/src/panels/studio/ComponentStudio.tsx +243 -0
  238. package/src/panels/studio/ComponentsHome.tsx +318 -0
  239. package/src/panels/studio/ComponentsPreview.tsx +179 -0
  240. package/src/panels/studio/EveryUse.tsx +244 -0
  241. package/src/panels/studio/ThisUsePanel.tsx +679 -0
  242. package/src/panels/studio/componentParts.tsx +341 -0
  243. package/src/panels/studio/components.ts +6 -0
  244. package/src/panels/studio/newCodeComponent.ts +66 -0
  245. package/src/panels/timeline/AudioFxButton.tsx +290 -0
  246. package/src/panels/timeline/AudioLane.tsx +674 -85
  247. package/src/panels/timeline/BlockRow.tsx +154 -85
  248. package/src/panels/timeline/ChannelRow.tsx +378 -129
  249. package/src/panels/timeline/CurvePane.tsx +508 -0
  250. package/src/panels/timeline/Filmstrip.tsx +361 -0
  251. package/src/panels/timeline/GenerateDrawer.tsx +407 -0
  252. package/src/panels/timeline/KeyStretch.tsx +115 -0
  253. package/src/panels/timeline/LifespanRow.tsx +730 -47
  254. package/src/panels/timeline/MarkerLane.tsx +46 -8
  255. package/src/panels/timeline/PlayButton.tsx +91 -0
  256. package/src/panels/timeline/PropertyPicker.tsx +254 -0
  257. package/src/panels/timeline/ShotRow.tsx +400 -0
  258. package/src/panels/timeline/SoundMode.tsx +1406 -0
  259. package/src/panels/timeline/TimelineDock.tsx +2338 -272
  260. package/src/panels/timeline/TransportVolume.tsx +163 -0
  261. package/src/panels/timeline/beatRuler.ts +74 -0
  262. package/src/panels/timeline/curveModel.ts +500 -0
  263. package/src/panels/timeline/duckUnderVoice.ts +68 -0
  264. package/src/panels/timeline/keyframeMenu.ts +138 -0
  265. package/src/panels/timeline/labelWidth.ts +49 -0
  266. package/src/panels/timeline/marquee.ts +155 -0
  267. package/src/panels/timeline/model.ts +1860 -199
  268. package/src/panels/timeline/snap.ts +125 -43
  269. package/src/panels/timeline/staggerPreview.tsx +92 -0
  270. package/src/panels/timeline/takeMeasure.ts +72 -0
  271. package/src/panels/timeline/useLive.ts +48 -0
  272. package/src/panels/timeline/viewport.ts +234 -0
  273. package/src/panels/toolbar/BackChip.tsx +116 -0
  274. package/src/panels/toolbar/CameraViewBar.tsx +118 -49
  275. package/src/panels/toolbar/CanvasBar.tsx +117 -0
  276. package/src/panels/toolbar/InsertButton.tsx +38 -0
  277. package/src/panels/toolbar/IsolationTrail.tsx +156 -0
  278. package/src/panels/toolbar/PanelToggles.tsx +86 -0
  279. package/src/panels/toolbar/ShadingBar.tsx +119 -26
  280. package/src/panels/toolbar/ToolDockBar.tsx +329 -80
  281. package/src/panels/toolbar/ToolFooter.tsx +102 -0
  282. package/src/panels/toolbar/ViewModeBar.tsx +247 -38
  283. package/src/panels/toolbar/WorkPlaneBar.tsx +94 -0
  284. package/src/panels/toolbar/useAddRows.tsx +326 -0
  285. package/src/panels/toolbar/useDismiss.ts +122 -0
  286. package/src/panels/versions/VersionHistoryPanel.tsx +274 -0
  287. package/src/panels/versions/versionModel.ts +103 -0
  288. package/src/panels/virtualWindow.ts +271 -0
  289. package/src/shotTokens.css +151 -60
  290. package/src/stage/FrustumGizmo.tsx +504 -84
  291. package/src/stage/GridPlane.tsx +225 -16
  292. package/src/stage/NodePreviews.tsx +628 -0
  293. package/src/stage/PerfHud.tsx +437 -47
  294. package/src/stage/SplitRenderer.tsx +816 -169
  295. package/src/stage/StageApp.tsx +4274 -486
  296. package/src/stage/StageRootBoundary.tsx +114 -0
  297. package/src/stage/StageTools.tsx +651 -151
  298. package/src/stage/TransformGizmo.tsx +696 -0
  299. package/src/stage/adaptivePresentation.ts +145 -0
  300. package/src/stage/bridgeClient.ts +2522 -41
  301. package/src/stage/exportWorker.ts +9 -0
  302. package/src/stage/feed.ts +305 -14
  303. package/src/stage/fontPreview.ts +176 -0
  304. package/src/stage/frustumGeometry.ts +319 -1
  305. package/src/stage/furnitureTokens.ts +33 -0
  306. package/src/stage/gizmoMath.ts +508 -16
  307. package/src/stage/gpuTimer.ts +276 -0
  308. package/src/stage/instanceModules.ts +194 -33
  309. package/src/stage/interactions/move.ts +24 -5
  310. package/src/stage/isolation.ts +291 -33
  311. package/src/stage/jsSelfProfiler.ts +325 -0
  312. package/src/stage/main.tsx +116 -16
  313. package/src/stage/modalState.ts +222 -23
  314. package/src/stage/moduleEpoch.ts +60 -0
  315. package/src/stage/motionPathStage.ts +279 -0
  316. package/src/stage/motionPreview.ts +74 -0
  317. package/src/stage/overlays/Overlays.tsx +1112 -159
  318. package/src/stage/overlays/Rulers.tsx +495 -0
  319. package/src/stage/panes.ts +159 -10
  320. package/src/stage/project.ts +68 -3
  321. package/src/stage/renderScaleController.ts +730 -0
  322. package/src/stage/rulers.ts +129 -0
  323. package/src/stage/sceneExtent.ts +75 -0
  324. package/src/stage/shading.ts +20 -0
  325. package/src/stage/splineStage.ts +632 -0
  326. package/src/stage/stagePerformanceTelemetry.ts +717 -0
  327. package/src/stage/stageTheme.ts +36 -0
  328. package/src/stage/stageWarmup.ts +11 -0
  329. package/src/stage/textAutoSize.ts +124 -0
  330. package/src/stage/tier1Export.ts +641 -0
  331. package/src/stage/tokenColor.ts +14 -9
  332. package/src/stage/view.ts +56 -9
  333. package/src/stage/workingView.ts +277 -33
  334. package/src/state/accountPrefs.ts +261 -0
  335. package/src/state/agentActions.ts +173 -15
  336. package/src/state/agentActivity.ts +198 -0
  337. package/src/state/agentQuestion.ts +239 -0
  338. package/src/state/bootOpen.ts +42 -0
  339. package/src/state/cameraVerbs.ts +139 -0
  340. package/src/state/clientId.ts +6 -1
  341. package/src/state/comments.ts +1099 -0
  342. package/src/state/context.tsx +19 -1
  343. package/src/state/editorPrefs.ts +220 -0
  344. package/src/state/errorReports.ts +121 -0
  345. package/src/state/fieldWrite.ts +161 -0
  346. package/src/state/fontRecents.ts +70 -0
  347. package/src/state/fonts.ts +656 -0
  348. package/src/state/graphClipboard.ts +414 -0
  349. package/src/state/imageThumbs.ts +216 -0
  350. package/src/state/insert.ts +444 -67
  351. package/src/state/isolationTrail.ts +92 -0
  352. package/src/state/keyMoves.ts +134 -0
  353. package/src/state/keyframeClipboard.ts +177 -0
  354. package/src/state/keymap.ts +1153 -117
  355. package/src/state/layoutPrefs.ts +272 -0
  356. package/src/state/layouts.ts +205 -0
  357. package/src/state/measureMedia.ts +167 -0
  358. package/src/state/menu.ts +2341 -28
  359. package/src/state/motionStamp.ts +7 -0
  360. package/src/state/panelSize.ts +375 -5
  361. package/src/state/pendingChanges.ts +119 -0
  362. package/src/state/playHold.ts +78 -0
  363. package/src/state/playbackPreparation.ts +562 -0
  364. package/src/state/posterCapture.ts +242 -0
  365. package/src/state/presence.ts +254 -0
  366. package/src/state/projectComponents.ts +160 -0
  367. package/src/state/renderEvents.ts +298 -18
  368. package/src/state/runtimeErrors.ts +46 -0
  369. package/src/state/selection.ts +12 -0
  370. package/src/state/shortcuts.ts +1606 -0
  371. package/src/state/sketchGuide.ts +51 -0
  372. package/src/state/splineRefs.ts +87 -0
  373. package/src/state/stageHealth.ts +259 -0
  374. package/src/state/stageWatchdog.ts +47 -0
  375. package/src/state/stillStage.ts +330 -0
  376. package/src/state/stillThumbs.ts +474 -0
  377. package/src/state/store.ts +23591 -2982
  378. package/src/state/storyboardModel.ts +528 -0
  379. package/src/state/sync.ts +1257 -0
  380. package/src/state/syncCache.ts +159 -0
  381. package/src/state/triangles.ts +13 -0
  382. package/src/state/types.ts +1698 -55
  383. package/src/state/unsavedGuard.ts +49 -0
  384. package/src/state/viewMode.ts +200 -0
  385. package/src/state/webmcp.ts +1128 -0
  386. package/src/state/workspace.ts +1147 -0
  387. package/src/styles/assets-tab.css +304 -0
  388. package/src/styles/canvas.css +545 -0
  389. package/src/styles/comments.css +1435 -0
  390. package/src/styles/controls.css +162 -0
  391. package/src/styles/dialogs.css +390 -0
  392. package/src/styles/insert-drawer.css +586 -0
  393. package/src/styles/inspector-board.css +207 -0
  394. package/src/styles/inspector-object.css +486 -0
  395. package/src/styles/inspector-shot.css +252 -0
  396. package/src/styles/inspector.css +360 -0
  397. package/src/styles/left-column.css +1628 -0
  398. package/src/styles/library-preview.css +575 -0
  399. package/src/styles/library.css +512 -0
  400. package/src/styles/modes/code.css +569 -0
  401. package/src/styles/modes/component.css +1561 -0
  402. package/src/styles/modes/material.css +1201 -0
  403. package/src/styles/modes/storyboard.css +518 -0
  404. package/src/styles/share-component.css +49 -0
  405. package/src/styles/shell.css +653 -0
  406. package/src/styles/shot-brief.css +360 -0
  407. package/src/styles/states.css +76 -0
  408. package/src/styles/sync.css +380 -0
  409. package/src/styles/timeline-graph.css +384 -0
  410. package/src/styles/timeline-meters.css +89 -0
  411. package/src/styles/timeline-rows.css +1959 -0
  412. package/src/styles/timeline-sound.css +1003 -0
  413. package/src/styles/timeline.css +754 -0
  414. package/src/styles/tool-footer.css +525 -0
  415. package/src/styles/topbar.css +886 -0
  416. package/src/styles/versions.css +262 -0
  417. package/src/styles.css +72 -2921
  418. package/src/tools.ts +108 -23
  419. package/dist/assets/index-B7notge7.css +0 -1
  420. package/dist/assets/index-BBE6Ta9L.js +0 -52
  421. package/src/panels/files/icons.tsx +0 -118
  422. package/src/panels/header/DocSwitcher.tsx +0 -85
  423. package/src/panels/header/TransportBar.tsx +0 -86
  424. package/src/panels/inspector/animate/BlockTiming.tsx +0 -341
  425. package/src/panels/inspector/animate/DuringBlocks.tsx +0 -85
  426. package/src/panels/inspector/animate/InOutPresets.tsx +0 -57
  427. package/src/panels/inspector/animate/ResolvedChannels.tsx +0 -150
  428. package/src/panels/inspector/animate/useBlocks.ts +0 -43
  429. package/src/panels/material/MaterialPicker.tsx +0 -172
  430. package/src/panels/timeline/SceneStrip.tsx +0 -145
  431. package/src/panels/toolbar/AddMenu.tsx +0 -230
  432. package/src/stage/MoveGizmo.tsx +0 -411
@@ -0,0 +1,1065 @@
1
+ /* THE STORYBOARD'S OWN SHEET: the board canvas, the Style wall, the shot
2
+ cards, the drop dialog's parts, the component sheet's parts and the
3
+ presence cursors (Paper SB1, S2, S3; values in plans/SHOT-BOARD-VALUES.md).
4
+
5
+ It ships in the board's chunk (board.ts, app/lazySurfaces.tsx), not in the
6
+ /scene entry, so it is wrapped in the `component-sheets` cascade layer: it
7
+ ranks below the house widgets and the chrome, and styles only the board's
8
+ own classes. A rule on an element that also carries a house class (the
9
+ panel head, a button, the dialog, the drop zone, caps) is in
10
+ styles/modes/storyboard.css, in the chrome layer, where it wins. */
11
+ @layer component-sheets {
12
+ /* ---- the canvas ----------------------------------------------------------- */
13
+ /* The board: its bar, then the desk, which scrolls the whole plan. It takes
14
+ the pointer (the cell does not). The SHEET'S LENGTHS are Paper's layout,
15
+ not spacing: a 348 card, the 88 gutter that holds the cut into the next. */
16
+ .board-canvas {
17
+ --shot-card-w: 348px;
18
+ --shot-gutter-w: 88px;
19
+ position: relative;
20
+ flex: 1 1 0;
21
+ min-width: 0;
22
+ min-height: 0;
23
+ display: flex;
24
+ flex-direction: column;
25
+ overflow: hidden;
26
+ outline: none;
27
+ pointer-events: auto;
28
+ background-color: var(--surface-board);
29
+ }
30
+
31
+ .board-canvas.is-drop {
32
+ box-shadow: inset 0 0 0 2px var(--accent);
33
+ }
34
+
35
+
36
+ .board-bar-title {
37
+ margin: 0;
38
+ font-size: var(--type-lg);
39
+ line-height: var(--leading-xs);
40
+ font-weight: var(--weight-medium);
41
+ color: var(--ink-1);
42
+ }
43
+
44
+ .board-bar-summary,
45
+ .board-section-count {
46
+ flex: none;
47
+ font-family: var(--font-numeric);
48
+ font-size: var(--type-md);
49
+ line-height: var(--leading-xs);
50
+ color: var(--ink-3);
51
+ white-space: nowrap;
52
+ }
53
+
54
+ .board-bar-spacer {
55
+ flex: 1 1 0;
56
+ }
57
+
58
+ /* THE DESK: the board ground and its 20px dot grid. Style on top, then the
59
+ shots. Positioned, so the presence cursors land in its scrolled content. */
60
+ .board-desk {
61
+ position: relative;
62
+ flex: 1 1 0;
63
+ min-height: 0;
64
+ display: flex;
65
+ flex-direction: column;
66
+ gap: var(--space-8);
67
+ padding: var(--space-8) var(--space-8) var(--space-7);
68
+ overflow: auto;
69
+ background-image: radial-gradient(circle, var(--board-dot) 1px, transparent 1px);
70
+ background-size: 20px 20px;
71
+ }
72
+
73
+ /* A section's head: the caps label, a hint, then its count or action. */
74
+ .board-section-head {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: var(--space-6);
78
+ min-width: 0;
79
+ min-height: var(--leading-xs);
80
+ }
81
+
82
+ .board-section-hint {
83
+ min-width: 0;
84
+ overflow: hidden;
85
+ text-overflow: ellipsis;
86
+ white-space: nowrap;
87
+ font-size: var(--type-md);
88
+ line-height: var(--leading-xs);
89
+ color: var(--ink-2);
90
+ }
91
+
92
+
93
+ /* ---- the Style wall ------------------------------------------------------- */
94
+ /* On the desk, with no box round it (SB1). */
95
+ .style-wall {
96
+ flex: none;
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: var(--space-5);
100
+ }
101
+
102
+ /* The row scrolls sideways once the cards outrun it. The 4px inset and its
103
+ negative margin keep a selected card's offset outline inside the scroller,
104
+ which clips. */
105
+ .style-wall-items {
106
+ display: flex;
107
+ gap: var(--space-5);
108
+ height: calc(76px + 2 * var(--space-2));
109
+ margin: calc(-1 * var(--space-2));
110
+ padding: var(--space-2);
111
+ overflow-x: auto;
112
+ overflow-y: hidden;
113
+ }
114
+
115
+ /* ---- a Style card --------------------------------------------------------- */
116
+ .style-card {
117
+ position: relative;
118
+ flex: none;
119
+ display: flex;
120
+ flex-direction: column;
121
+ width: 120px;
122
+ height: 100%;
123
+ border-radius: var(--radius-tab);
124
+ background: var(--surface-secondary);
125
+ overflow: hidden;
126
+ cursor: pointer;
127
+ outline: none;
128
+ }
129
+
130
+ .style-card.is-selected {
131
+ outline: 2px solid var(--accent);
132
+ outline-offset: 2px;
133
+ }
134
+
135
+ .style-card:focus-visible {
136
+ box-shadow: var(--focus-ring);
137
+ }
138
+
139
+ .style-card-media,
140
+ .style-card > .reference-preview,
141
+ .style-card > img {
142
+ display: block;
143
+ width: 100%;
144
+ height: 100%;
145
+ object-fit: cover;
146
+ }
147
+
148
+ /* A font card shows the font: the specimen on white paper, as on a desk.
149
+ The sample is the brand font's picture, so it keeps the specimen size, the
150
+ one documented content exception to the type ladder. */
151
+ .style-card.is-font {
152
+ justify-content: space-between;
153
+ padding: var(--space-5);
154
+ background: var(--specimen-paper);
155
+ }
156
+
157
+ .style-font-sample {
158
+ font-size: var(--type-heading);
159
+ line-height: var(--leading-lg);
160
+ font-weight: var(--weight-semibold);
161
+ letter-spacing: var(--tracking-body);
162
+ color: var(--specimen-ink);
163
+ }
164
+
165
+ .style-font-name {
166
+ overflow: hidden;
167
+ text-overflow: ellipsis;
168
+ white-space: nowrap;
169
+ font-size: var(--type-sm);
170
+ line-height: var(--leading-xs);
171
+ font-weight: var(--weight-medium);
172
+ color: color-mix(in srgb, var(--specimen-ink) 65%, var(--specimen-paper));
173
+ }
174
+
175
+ .style-card.is-palette {
176
+ justify-content: space-between;
177
+ padding: var(--space-5);
178
+ border: 1px solid var(--line);
179
+ }
180
+
181
+ .style-palette-swatches {
182
+ display: flex;
183
+ flex-wrap: wrap;
184
+ gap: var(--space-2);
185
+ }
186
+
187
+ /* Every swatch takes the strong hairline, so a dark one still reads on the
188
+ dark card. */
189
+ .style-palette-swatch {
190
+ width: 18px;
191
+ height: 18px;
192
+ border-radius: var(--radius-full);
193
+ box-shadow: inset 0 0 0 1px var(--line-strong);
194
+ }
195
+
196
+ .style-palette-name {
197
+ font-size: var(--type-sm);
198
+ line-height: var(--leading-xs);
199
+ font-weight: var(--weight-medium);
200
+ color: var(--ink-2);
201
+ }
202
+
203
+ .style-card.is-note {
204
+ justify-content: space-between;
205
+ gap: var(--space-2);
206
+ padding: var(--space-5);
207
+ background: var(--note-paper);
208
+ }
209
+
210
+ .style-note-text {
211
+ display: -webkit-box;
212
+ -webkit-line-clamp: 2;
213
+ -webkit-box-orient: vertical;
214
+ overflow: hidden;
215
+ font-size: var(--type-sm);
216
+ line-height: var(--leading-xs);
217
+ font-weight: var(--weight-medium);
218
+ color: var(--note-ink);
219
+ overflow-wrap: anywhere;
220
+ }
221
+
222
+ .style-note-meta {
223
+ overflow: hidden;
224
+ text-overflow: ellipsis;
225
+ white-space: nowrap;
226
+ font-size: var(--type-micro);
227
+ line-height: var(--leading-xs);
228
+ font-weight: var(--weight-medium);
229
+ color: var(--note-meta);
230
+ }
231
+
232
+ .style-card.is-link {
233
+ justify-content: flex-end;
234
+ gap: var(--space-1);
235
+ padding: var(--space-5);
236
+ border: 1px solid var(--line);
237
+ }
238
+
239
+ .style-link-host {
240
+ overflow: hidden;
241
+ text-overflow: ellipsis;
242
+ white-space: nowrap;
243
+ font-family: var(--font-mono);
244
+ font-size: var(--type-micro);
245
+ line-height: var(--leading-xs);
246
+ color: var(--ink-3);
247
+ }
248
+
249
+ .style-link-title {
250
+ display: -webkit-box;
251
+ -webkit-line-clamp: 2;
252
+ -webkit-box-orient: vertical;
253
+ overflow: hidden;
254
+ font-size: var(--type-sm);
255
+ line-height: var(--leading-xs);
256
+ font-weight: var(--weight-medium);
257
+ color: var(--ink-1);
258
+ overflow-wrap: anywhere;
259
+ }
260
+
261
+ .style-card.is-component {
262
+ border: 1px solid var(--line);
263
+ }
264
+
265
+ .style-component-preview {
266
+ position: relative;
267
+ flex: 1 1 0;
268
+ min-height: 0;
269
+ overflow: hidden;
270
+ background: var(--surface-sunken);
271
+ /* A picture, and it swaps under the pointer: the poster or static preview
272
+ gives way to the live stage on hover, and to the stage once the library
273
+ names the host. A press that went down on the old node and up on the new
274
+ one fired NO click, so a tap (enter and press at once) never picked the
275
+ card. Taking no pointer, every press lands on the card itself. */
276
+ pointer-events: none;
277
+ }
278
+
279
+ .style-component-foot {
280
+ flex: none;
281
+ display: flex;
282
+ align-items: center;
283
+ height: var(--space-8);
284
+ min-width: 0;
285
+ padding: 0 var(--space-4);
286
+ }
287
+
288
+ .style-component-name {
289
+ flex: 1 1 0;
290
+ min-width: 0;
291
+ overflow: hidden;
292
+ text-overflow: ellipsis;
293
+ white-space: nowrap;
294
+ font-size: var(--type-sm);
295
+ line-height: var(--leading-xs);
296
+ font-weight: var(--weight-medium);
297
+ color: var(--ink-1);
298
+ }
299
+
300
+ /* THE CARD'S COMMENTS (S5): one corner control, always shown. A button
301
+ revealed only on hover never shows on a touch device, and it is the card's
302
+ one pointer route to a comment besides its menu. With open threads it is
303
+ the pin carrying their count, in the Studio pin's accent and point. */
304
+ .style-card-comment {
305
+ position: absolute;
306
+ top: var(--space-2);
307
+ right: var(--space-2);
308
+ display: grid;
309
+ place-items: center;
310
+ width: 20px;
311
+ height: 20px;
312
+ padding: 0;
313
+ border: 0;
314
+ border-radius: var(--radius-xs);
315
+ background: var(--badge-scrim);
316
+ color: var(--on-media);
317
+ cursor: pointer;
318
+ }
319
+
320
+ .style-card-comment > svg {
321
+ width: 12px;
322
+ height: 12px;
323
+ }
324
+
325
+ .style-card-comment.is-pin {
326
+ border-radius: var(--radius-tab) var(--radius-tab) var(--radius-tab) var(--radius-2xs);
327
+ background: var(--accent);
328
+ color: var(--on-accent);
329
+ font-size: var(--type-sm);
330
+ line-height: var(--leading-xs);
331
+ font-weight: var(--weight-semibold);
332
+ }
333
+
334
+ span.style-card-comment {
335
+ cursor: default;
336
+ }
337
+
338
+ /* The note's words clear the corner control. */
339
+ .style-card.is-note .style-note-text {
340
+ padding-right: var(--space-7);
341
+ }
342
+
343
+ .style-card-comment:focus-visible {
344
+ outline: none;
345
+ box-shadow: var(--focus-ring);
346
+ }
347
+
348
+ /* ---- the Shots section ---------------------------------------------------- */
349
+ .board-shots {
350
+ flex: none;
351
+ display: flex;
352
+ flex-direction: column;
353
+ gap: var(--space-6);
354
+ }
355
+
356
+ /* THE SHEET (SB1): storyboard panels that wrap. Each cell is a card and the
357
+ gutter after it, which holds the cut into the next card. */
358
+ .board-shots-row {
359
+ display: flex;
360
+ flex-wrap: wrap;
361
+ align-items: stretch;
362
+ row-gap: var(--space-8);
363
+ }
364
+
365
+ .shot-cell {
366
+ position: relative;
367
+ flex: none;
368
+ display: flex;
369
+ }
370
+
371
+ /* The gutter: the cut chip level with the picture's middle, and "into 04"
372
+ under it where the row wraps. */
373
+ .shot-gutter {
374
+ position: relative;
375
+ flex: none;
376
+ width: var(--shot-gutter-w);
377
+ display: flex;
378
+ flex-direction: column;
379
+ align-items: center;
380
+ gap: var(--space-3);
381
+ padding-top: calc(var(--shot-card-w) * 9 / 32 - var(--badge-h) / 2);
382
+ }
383
+
384
+ /* ---- a shot card ---------------------------------------------------------- */
385
+ /* Off screen, a card costs no layout or paint (`content-visibility`); its
386
+ intrinsic size keeps the scroller's length. */
387
+ .shot-card {
388
+ position: relative;
389
+ flex: none;
390
+ width: var(--shot-card-w);
391
+ display: flex;
392
+ flex-direction: column;
393
+ background: var(--surface-panel);
394
+ border: 1px solid var(--line);
395
+ border-radius: var(--radius-tab);
396
+ overflow: hidden;
397
+ cursor: pointer;
398
+ outline: none;
399
+ content-visibility: auto;
400
+ contain-intrinsic-size: auto var(--shot-card-w) auto calc(var(--shot-card-w) * 0.85);
401
+ transition: border-color var(--dur-fast) var(--ease);
402
+ }
403
+
404
+ .shot-card:hover {
405
+ border-color: var(--line-strong);
406
+ }
407
+
408
+ /* 2px of accent without moving the card: one outline over the border and a
409
+ pixel past it (G1 06). */
410
+ .shot-card.is-selected {
411
+ outline: 2px solid var(--accent);
412
+ outline-offset: -1px;
413
+ }
414
+
415
+ .shot-card:focus-visible {
416
+ box-shadow: var(--focus-ring);
417
+ }
418
+
419
+ /* A drop pins straight to this shot (S2 note 3). */
420
+ .shot-card.is-drop {
421
+ border-style: dashed;
422
+ border-color: var(--accent);
423
+ }
424
+
425
+ /* ---- the picture ---------------------------------------------------------- */
426
+ .shot-card-picture {
427
+ position: relative;
428
+ flex: none;
429
+ aspect-ratio: 16 / 9;
430
+ background: var(--surface-sunken);
431
+ overflow: hidden;
432
+ }
433
+
434
+ .shot-card-picture > img {
435
+ display: block;
436
+ width: 100%;
437
+ height: 100%;
438
+ object-fit: cover;
439
+ }
440
+
441
+ .shot-card-picture.is-paper {
442
+ background: var(--sketch-paper);
443
+ }
444
+
445
+ .shot-card-sketch-empty {
446
+ position: absolute;
447
+ inset: 0;
448
+ display: grid;
449
+ place-items: center;
450
+ font-size: var(--type-md);
451
+ line-height: var(--leading-xs);
452
+ color: var(--sketch-ink);
453
+ }
454
+
455
+ /* "Built", laid over the built frame's top left. */
456
+ .shot-card-built {
457
+ position: absolute;
458
+ top: var(--space-4);
459
+ left: var(--space-4);
460
+ display: inline-flex;
461
+ align-items: center;
462
+ gap: var(--space-2);
463
+ height: var(--badge-h);
464
+ padding: 0 var(--space-3);
465
+ border-radius: var(--radius-xs);
466
+ background: var(--badge-scrim);
467
+ font-size: var(--type-sm);
468
+ line-height: var(--leading-xs);
469
+ font-weight: var(--weight-medium);
470
+ color: var(--on-media);
471
+ }
472
+
473
+ .shot-card-built > svg {
474
+ width: 12px;
475
+ height: 12px;
476
+ color: var(--success);
477
+ }
478
+
479
+ /* One dot per sketch, centred over the picture's foot, 8 up (the 6 here plus
480
+ the dot's own 2px inset). Each is a 5px dot in a 9px target; the one shown
481
+ is the sketch ink. */
482
+ .shot-card-dots {
483
+ position: absolute;
484
+ left: 50%;
485
+ bottom: var(--space-3);
486
+ display: flex;
487
+ translate: -50% 0;
488
+ }
489
+
490
+ .shot-card-dot {
491
+ width: 5px;
492
+ height: 5px;
493
+ padding: var(--space-1);
494
+ box-sizing: content-box;
495
+ border-radius: var(--radius-full);
496
+ background: var(--sketch-line);
497
+ background-clip: content-box;
498
+ }
499
+
500
+ .shot-card-dot.is-shown {
501
+ background-color: var(--sketch-ink);
502
+ }
503
+
504
+ /* The drag grip over the picture's top left, while the card is hovered. The
505
+ card itself drags: the grip says so. */
506
+ .shot-card-grip {
507
+ position: absolute;
508
+ top: var(--space-4);
509
+ left: var(--space-4);
510
+ display: none;
511
+ place-items: center;
512
+ width: 24px;
513
+ height: 24px;
514
+ border: 1px solid var(--line-strong);
515
+ border-radius: var(--radius-sm);
516
+ background: color-mix(in srgb, var(--surface-panel) 90%, transparent);
517
+ color: var(--ink-2);
518
+ cursor: grab;
519
+ }
520
+
521
+ .shot-card:hover > .shot-card-grip {
522
+ display: grid;
523
+ }
524
+
525
+ /* A built card's badge holds that corner; the grip takes the other. */
526
+ .shot-card:has(.shot-card-built) > .shot-card-grip {
527
+ left: auto;
528
+ right: var(--space-4);
529
+ }
530
+
531
+ /* ---- the body and footer -------------------------------------------------- */
532
+ .shot-card-body {
533
+ display: flex;
534
+ flex-direction: column;
535
+ gap: var(--space-3);
536
+ min-width: 0;
537
+ padding: var(--space-6);
538
+ }
539
+
540
+ .shot-card-title {
541
+ display: flex;
542
+ align-items: center;
543
+ gap: var(--space-4);
544
+ min-width: 0;
545
+ height: var(--badge-h);
546
+ }
547
+
548
+ .shot-card-number {
549
+ flex: none;
550
+ font-family: var(--font-numeric);
551
+ font-size: var(--type-md);
552
+ line-height: var(--leading-xs);
553
+ color: var(--ink-3);
554
+ }
555
+
556
+ .shot-card-name {
557
+ flex: 1 1 0;
558
+ min-width: 0;
559
+ overflow: hidden;
560
+ text-overflow: ellipsis;
561
+ white-space: nowrap;
562
+ font-size: var(--type-lg);
563
+ line-height: var(--leading-xs);
564
+ font-weight: var(--weight-medium);
565
+ color: var(--ink-1);
566
+ }
567
+
568
+ /* One line under the title: the voice, else What we see. A missing line
569
+ keeps its height, so the cards of a row stay one height. */
570
+ .shot-card-voice,
571
+ .shot-card-notes {
572
+ margin: 0;
573
+ overflow: hidden;
574
+ text-overflow: ellipsis;
575
+ white-space: nowrap;
576
+ font-size: var(--type-md);
577
+ line-height: var(--leading-xs);
578
+ color: var(--ink-2);
579
+ }
580
+
581
+ .shot-card-body:not(:has(.shot-card-voice, .shot-card-notes))::after {
582
+ content: "";
583
+ height: var(--leading-xs);
584
+ }
585
+
586
+ .shot-card-foot {
587
+ display: flex;
588
+ align-items: center;
589
+ gap: var(--space-4);
590
+ min-width: 0;
591
+ height: var(--button-h);
592
+ margin-top: auto;
593
+ padding: 0 var(--space-6);
594
+ border-top: 1px solid var(--line-soft);
595
+ }
596
+
597
+ .shot-card-counts {
598
+ min-width: 0;
599
+ overflow: hidden;
600
+ text-overflow: ellipsis;
601
+ white-space: nowrap;
602
+ font-size: var(--type-sm);
603
+ line-height: var(--leading-xs);
604
+ color: var(--ink-3);
605
+ }
606
+
607
+ .shot-card-length {
608
+ flex: none;
609
+ margin-left: auto;
610
+ font-family: var(--font-numeric);
611
+ font-size: var(--type-md);
612
+ line-height: var(--leading-xs);
613
+ color: var(--ink-2);
614
+ }
615
+
616
+ /* ---- the cut between two cards -------------------------------------------- */
617
+ .shot-transition-chip {
618
+ flex: none;
619
+ display: inline-flex;
620
+ align-items: center;
621
+ height: var(--badge-h);
622
+ padding: 0 var(--space-3);
623
+ border: 1px solid var(--line);
624
+ border-radius: var(--radius-xs);
625
+ background: var(--surface-secondary);
626
+ color: var(--ink-2);
627
+ font: inherit;
628
+ font-size: var(--type-sm);
629
+ line-height: var(--leading-xs);
630
+ font-weight: var(--weight-medium);
631
+ white-space: nowrap;
632
+ }
633
+
634
+ button.shot-transition-chip {
635
+ cursor: pointer;
636
+ }
637
+
638
+ button.shot-transition-chip:hover {
639
+ color: var(--ink-1);
640
+ }
641
+
642
+ .shot-transition-chip.is-selected {
643
+ border-color: var(--accent);
644
+ background: var(--accent-quiet);
645
+ color: var(--accent-ink);
646
+ }
647
+
648
+ .shot-transition-chip:focus-visible {
649
+ outline: none;
650
+ box-shadow: var(--focus-ring);
651
+ }
652
+
653
+ .shot-gutter-wrap {
654
+ font-size: var(--type-sm);
655
+ line-height: var(--leading-xs);
656
+ color: var(--ink-3);
657
+ white-space: nowrap;
658
+ }
659
+
660
+ /* ---- the reorder ---------------------------------------------------------- */
661
+ /* Where a dragged card lands: an accent line with a ring at each end, in the
662
+ gutter, behind its cut chip (which keeps a ring of the desk round it). */
663
+ .shot-insert {
664
+ position: absolute;
665
+ top: 0;
666
+ bottom: 0;
667
+ left: calc(50% - var(--space-2));
668
+ z-index: 0;
669
+ width: 8px;
670
+ pointer-events: none;
671
+ background: linear-gradient(var(--accent), var(--accent)) center / 2px 100% no-repeat;
672
+ }
673
+
674
+ .shot-insert::before,
675
+ .shot-insert::after {
676
+ content: "";
677
+ position: absolute;
678
+ left: 0;
679
+ width: 8px;
680
+ height: 8px;
681
+ box-sizing: border-box;
682
+ border: 2px solid var(--accent);
683
+ border-radius: var(--radius-xs);
684
+ background: var(--surface-board);
685
+ }
686
+
687
+ .shot-insert::before {
688
+ top: 0;
689
+ }
690
+
691
+ .shot-insert::after {
692
+ bottom: 0;
693
+ }
694
+
695
+ /* Before the first card: in the desk's inset, left of it. */
696
+ .shot-insert.is-before {
697
+ left: calc(-1 * var(--space-7) - var(--space-2));
698
+ }
699
+
700
+ .shot-gutter.is-insert > .shot-transition-chip,
701
+ .shot-gutter.is-insert > .shot-gutter-wrap {
702
+ position: relative;
703
+ z-index: 1;
704
+ box-shadow: 0 0 0 var(--space-2) var(--surface-board);
705
+ }
706
+
707
+ /* While a card moves, nothing in the sheet answers the pointer but the
708
+ cells, so the line follows the drag instead of the chips. */
709
+ .board-shots-row.is-moving .shot-transition-chip {
710
+ pointer-events: none;
711
+ }
712
+
713
+ /* ---- the add slot ---------------------------------------------------------- */
714
+ /* After the last card: a dashed panel the size of a card. */
715
+ .shot-add-slot {
716
+ flex: none;
717
+ width: var(--shot-card-w);
718
+ display: flex;
719
+ flex-direction: column;
720
+ align-items: center;
721
+ justify-content: center;
722
+ gap: var(--space-4);
723
+ padding: var(--space-7);
724
+ border: 1px dashed var(--line-strong);
725
+ border-radius: var(--radius-tab);
726
+ background: transparent;
727
+ color: var(--ink-2);
728
+ font: inherit;
729
+ cursor: pointer;
730
+ transition:
731
+ background var(--dur-fast) var(--ease),
732
+ border-color var(--dur-fast) var(--ease);
733
+ }
734
+
735
+ .shot-add-slot:hover {
736
+ background: var(--fill-rest);
737
+ border-color: var(--ink-3);
738
+ }
739
+
740
+ .shot-add-slot:focus-visible {
741
+ outline: none;
742
+ box-shadow: var(--focus-ring);
743
+ }
744
+
745
+ .shot-add-slot > svg {
746
+ width: 16px;
747
+ height: 16px;
748
+ }
749
+
750
+ .shot-add-slot-title {
751
+ font-size: var(--type-lg);
752
+ line-height: var(--leading-xs);
753
+ font-weight: var(--weight-medium);
754
+ color: var(--ink-1);
755
+ }
756
+
757
+ .shot-add-slot-hint {
758
+ font-size: var(--type-md);
759
+ line-height: var(--leading-xs);
760
+ color: var(--ink-3);
761
+ }
762
+
763
+ .board-drop-title {
764
+ min-width: 0;
765
+ font-size: var(--type-xl);
766
+ line-height: var(--leading-md);
767
+ font-weight: var(--weight-semibold);
768
+ color: var(--ink-1);
769
+ }
770
+
771
+ .board-drop-esc {
772
+ flex: none;
773
+ margin-left: auto;
774
+ font-size: var(--type-lg);
775
+ line-height: var(--leading-xs);
776
+ font-weight: var(--weight-regular);
777
+ color: var(--ink-3);
778
+ }
779
+
780
+
781
+ .board-drop-thumbs {
782
+ display: flex;
783
+ flex-wrap: wrap;
784
+ gap: var(--space-4);
785
+ padding: 0 var(--space-7);
786
+ }
787
+
788
+ .board-drop-thumb {
789
+ flex: none;
790
+ width: 112px;
791
+ height: 70px;
792
+ border-radius: var(--radius-sm);
793
+ object-fit: cover;
794
+ background: var(--surface-secondary);
795
+ }
796
+
797
+ .board-drop-thumb.is-file,
798
+ .board-drop-thumb.is-more {
799
+ display: grid;
800
+ place-items: center;
801
+ padding: 0 var(--space-4);
802
+ overflow: hidden;
803
+ text-overflow: ellipsis;
804
+ white-space: nowrap;
805
+ font-size: var(--type-sm);
806
+ line-height: var(--leading-xs);
807
+ color: var(--ink-2);
808
+ }
809
+
810
+ .board-drop-field {
811
+ display: flex;
812
+ flex-direction: column;
813
+ gap: var(--space-3);
814
+ padding: var(--space-7) var(--space-7) 0;
815
+ }
816
+
817
+ .board-drop-label {
818
+ font-size: var(--type-sm);
819
+ line-height: var(--leading-xs);
820
+ font-weight: var(--weight-semibold);
821
+ letter-spacing: var(--tracking-caps);
822
+ text-transform: uppercase;
823
+ color: var(--ink-2);
824
+ }
825
+
826
+ .board-drop-note {
827
+ width: 100%;
828
+ min-height: 0;
829
+ padding: var(--space-4);
830
+ border: 1px solid transparent;
831
+ border-radius: var(--radius-sm);
832
+ background: var(--surface-secondary);
833
+ color: var(--ink-1);
834
+ font: inherit;
835
+ font-size: var(--type-md);
836
+ line-height: var(--leading-xs);
837
+ resize: vertical;
838
+ outline: none;
839
+ }
840
+
841
+ .board-drop-note:focus {
842
+ border-color: var(--accent);
843
+ }
844
+
845
+ .board-drop-note::placeholder {
846
+ color: var(--ink-3);
847
+ }
848
+
849
+ .board-drop-scopes {
850
+ display: flex;
851
+ gap: var(--space-4);
852
+ }
853
+
854
+ /* 1.5px of accent when picked, as an inset ring over the 1px border, so the
855
+ card never moves. */
856
+ .board-drop-scope {
857
+ flex: 1 1 0;
858
+ min-width: 0;
859
+ display: flex;
860
+ flex-direction: column;
861
+ gap: var(--space-2);
862
+ padding: var(--space-6);
863
+ border: 1px solid var(--line);
864
+ border-radius: var(--radius-md);
865
+ background: var(--surface-secondary);
866
+ color: inherit;
867
+ font: inherit;
868
+ text-align: left;
869
+ cursor: pointer;
870
+ transition: border-color var(--dur-fast) var(--ease), background var(--dur-fast) var(--ease);
871
+ }
872
+
873
+ .board-drop-scope.is-selected {
874
+ border-color: var(--accent);
875
+ background: var(--accent-quiet);
876
+ box-shadow: inset 0 0 0 0.5px var(--accent);
877
+ }
878
+
879
+ .board-drop-scope:disabled {
880
+ opacity: var(--opacity-disabled);
881
+ cursor: default;
882
+ }
883
+
884
+ .board-drop-scope:focus-visible {
885
+ outline: none;
886
+ box-shadow: var(--focus-ring);
887
+ }
888
+
889
+ .board-drop-scope-title {
890
+ font-size: var(--type-title);
891
+ line-height: var(--leading-sm);
892
+ font-weight: var(--weight-semibold);
893
+ color: var(--ink-1);
894
+ }
895
+
896
+ .board-drop-scope-desc {
897
+ font-size: var(--type-md);
898
+ line-height: var(--leading-sm);
899
+ color: var(--ink-2);
900
+ }
901
+
902
+ .board-drop-agent {
903
+ display: flex;
904
+ align-items: flex-start;
905
+ gap: var(--space-5);
906
+ margin: var(--space-7) var(--space-7) 0;
907
+ padding: var(--space-6);
908
+ border: 1px solid var(--success-line);
909
+ border-radius: var(--radius-md);
910
+ background: var(--success-wash);
911
+ font-size: var(--type-lg);
912
+ line-height: var(--leading-md);
913
+ color: var(--ink-2);
914
+ }
915
+
916
+ .board-drop-agent-dot {
917
+ flex: none;
918
+ width: 8px;
919
+ height: 8px;
920
+ margin-top: var(--space-3);
921
+ border-radius: var(--radius-full);
922
+ background: var(--success);
923
+ }
924
+
925
+ /* ---- the component sheet (S3) --------------------------------------------- */
926
+ /* The right column's occupant while one component card is selected: the
927
+ column is 400 wide here (`BOARD_PANEL_W`), and the sheet brings its own bar
928
+ in place of the column head. The bar and the foot stay put and the body
929
+ between them scrolls, holding its gutter so a body that grows past the
930
+ fold does not narrow every row under the pointer. */
931
+ .component-sheet {
932
+ flex: 1 1 0;
933
+ min-height: 0;
934
+ display: flex;
935
+ flex-direction: column;
936
+ }
937
+
938
+ .component-sheet-body {
939
+ flex: 1 1 0;
940
+ min-height: 0;
941
+ display: flex;
942
+ flex-direction: column;
943
+ overflow-y: auto;
944
+ scrollbar-gutter: stable;
945
+ }
946
+
947
+ .component-sheet-name {
948
+ min-width: 0;
949
+ overflow: hidden;
950
+ text-overflow: ellipsis;
951
+ white-space: nowrap;
952
+ font-size: var(--type-lg);
953
+ line-height: var(--leading-xs);
954
+ font-weight: var(--weight-semibold);
955
+ color: var(--ink-1);
956
+ }
957
+
958
+ .component-sheet-author {
959
+ min-width: 0;
960
+ margin-left: auto;
961
+ overflow: hidden;
962
+ text-overflow: ellipsis;
963
+ white-space: nowrap;
964
+ font-family: var(--font-mono);
965
+ font-size: var(--type-sm);
966
+ line-height: var(--leading-xs);
967
+ color: var(--ink-3);
968
+ }
969
+
970
+ /* The live preview: 200 tall, the large corner, the loop chip in its corner. */
971
+ .component-sheet-stage {
972
+ position: relative;
973
+ flex: none;
974
+ height: 200px;
975
+ margin: var(--space-6) var(--space-6) 0;
976
+ border-radius: var(--radius-tab);
977
+ background: var(--surface-sunken);
978
+ overflow: hidden;
979
+ }
980
+
981
+ .component-sheet-loop {
982
+ position: absolute;
983
+ left: var(--space-5);
984
+ bottom: var(--space-5);
985
+ display: inline-flex;
986
+ align-items: center;
987
+ gap: var(--space-3);
988
+ padding: var(--space-1) var(--space-4);
989
+ border-radius: var(--radius-xs);
990
+ background: var(--scrim-strong);
991
+ font-family: var(--font-mono);
992
+ font-size: var(--type-sm);
993
+ line-height: var(--leading-xs);
994
+ color: var(--on-accent);
995
+ pointer-events: none;
996
+ }
997
+
998
+ .component-sheet-loop-play {
999
+ width: 0;
1000
+ height: 0;
1001
+ border-left: 6px solid currentColor;
1002
+ border-top: 4px solid transparent;
1003
+ border-bottom: 4px solid transparent;
1004
+ }
1005
+
1006
+ .component-sheet-tweaks {
1007
+ flex: 1 1 0;
1008
+ min-width: 0;
1009
+ overflow: hidden;
1010
+ text-overflow: ellipsis;
1011
+ white-space: nowrap;
1012
+ font-family: var(--font-mono);
1013
+ font-size: var(--type-sm);
1014
+ line-height: var(--leading-xs);
1015
+ color: var(--ink-3);
1016
+ }
1017
+
1018
+ /* OTHER PEOPLE'S CURSORS (Paper page 21): placed in the canvas content, the
1019
+ arrow's tip on the point, the name tag to its right on the person's colour.
1020
+ Paint only. */
1021
+ .board-cursors {
1022
+ position: absolute;
1023
+ top: 0;
1024
+ left: 0;
1025
+ z-index: var(--z-float);
1026
+ overflow: hidden;
1027
+ pointer-events: none;
1028
+ }
1029
+
1030
+ .board-cursor {
1031
+ position: absolute;
1032
+ display: flex;
1033
+ align-items: flex-start;
1034
+ transition:
1035
+ left var(--dur-fast) linear,
1036
+ top var(--dur-fast) linear;
1037
+ }
1038
+
1039
+ .board-cursor > svg {
1040
+ flex: none;
1041
+ }
1042
+
1043
+ .board-cursor-tag {
1044
+ height: 20px;
1045
+ margin-top: var(--space-6);
1046
+ margin-left: calc(-1 * var(--space-2));
1047
+ padding: 0 var(--space-3);
1048
+ overflow: hidden;
1049
+ max-width: 200px;
1050
+ font-family: var(--font-sans);
1051
+ font-size: var(--type-sm);
1052
+ font-weight: 600;
1053
+ line-height: var(--leading-md);
1054
+ color: #0b0b0b;
1055
+ text-overflow: ellipsis;
1056
+ white-space: nowrap;
1057
+ border-radius: var(--radius-sm);
1058
+ }
1059
+
1060
+ @media (prefers-reduced-motion: reduce) {
1061
+ .board-cursor {
1062
+ transition: none;
1063
+ }
1064
+ }
1065
+ }