@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,653 @@
1
+ /* The shell: the docked grid and where every cell sits in it, the stage frame, the tool footer's row, the floating recipe, the error strip and empty state, the resize handles, the shared stage window, scrollbars and the export scrims. */
2
+
3
+ :root {
4
+ /* ONE STEP PER TREE LEVEL, for every tree the chrome draws (the outliner,
5
+ the timeline's label column, the curve list, the code tree). The markup
6
+ passes only `--depth`; the step and each list's base inset live in CSS. */
7
+ --tree-indent: 12px;
8
+
9
+ /* The rounding of what still floats: the tool flyouts and the notices.
10
+ The chrome's own name, not the house --panel-radius, which the retired
11
+ editor still reads at 20px. */
12
+ --float-radius: 12px;
13
+
14
+ /* The inset of a menu that drops off a bar: the tool flyouts and the
15
+ shading menu. The name is the retired pill's, which these menus took
16
+ their inset from; the value stayed so no menu moves. Off the space scale
17
+ on purpose, as it always was. */
18
+ --pill-pad: 5px;
19
+
20
+ /* THE TOOL FOOTER: the docked row under the canvas cell that holds the
21
+ tools and the view track. Mirrors TOOL_FOOTER_H in state/panelSize.ts,
22
+ pinned by rowMetrics.test.ts. The grid reads `--tool-footer-row`, which
23
+ is 0 until `.shell.has-tool-footer` opens it. It opens at every level of
24
+ the stage workspace (the Project included, where it holds the shot's
25
+ metadata), so only the modes and a page with no document give the canvas
26
+ its height back. */
27
+ --tool-footer-h: 48px;
28
+ --tool-footer-row: 0px;
29
+
30
+ /* The grid's three dragged tracks. App.tsx writes all three from the stored
31
+ sizes through `fitShell` (state/panelSize.ts); these literals are only the
32
+ pre-hydration defaults and match RAIL_WIDTH, INSPECTOR_WIDTH and
33
+ DOCK_HEIGHT's defaults. A COLLAPSED column keeps its track: the timeline's
34
+ name column and meters sit under it, so collapsing never moves a bar, and
35
+ the canvas spans over the empty track instead. */
36
+ --rail-w: 224px;
37
+ --inspector-w: 304px;
38
+ --dock-row-h: 300px;
39
+ }
40
+
41
+ * {
42
+ box-sizing: border-box;
43
+ }
44
+
45
+ html,
46
+ body,
47
+ #root {
48
+ height: 100%;
49
+ margin: 0;
50
+ }
51
+
52
+ body {
53
+ font: var(--type-md)/var(--leading-body) var(--font-sans);
54
+ color: var(--ink-1);
55
+ background: var(--surface-app);
56
+ -webkit-font-smoothing: antialiased;
57
+ }
58
+
59
+ /* ── THE DOCKED GRID ───────────────────────────────────────────────────────
60
+ One grid, edge to edge. Rows: the top bar, the canvas bar, the stage, the
61
+ tool footer, the bottom row. Columns: the left column, the canvas, the right column. NO GAP:
62
+ a seam is a 1px border owned by one of the two cells beside it, so no live
63
+ stage pixel ever shows through a seam.
64
+
65
+ `overflow: clip`, never `hidden`: `hidden` makes the shell a scroll
66
+ container, and a focused control that overflows sideways would scroll every
67
+ cell while the fixed iframe stays put. `clip` scrolls nothing and makes no
68
+ containing block. And still NO transform, filter, backdrop-filter, contain
69
+ or will-change on the shell: any of those makes it the containing block of
70
+ the fixed iframe, which would then size itself to the shell's box. */
71
+ .shell {
72
+ position: relative;
73
+ height: 100%;
74
+ display: grid;
75
+ grid-template-columns: [edge-l] var(--rail-w) [rail-r] minmax(0, 1fr) [insp-l] var(--inspector-w) [edge-r];
76
+ grid-template-rows: [edge-t] var(--topbar-h) [main-t] var(--panel-head-h) [stage-t] minmax(0, 1fr) [foot-t] var(--tool-footer-row) [main-b] var(--dock-row-h) [edge-b];
77
+ overflow: clip;
78
+ }
79
+
80
+ /* A CLASS, not a measured height: App sets it in the same commit that mounts
81
+ `.tool-footer`, so the row and its content arrive together and there is no
82
+ frame where the track is open with nothing in it, or the footer is drawn
83
+ into a 0px track. */
84
+ .shell.has-tool-footer {
85
+ --tool-footer-row: var(--tool-footer-h);
86
+ }
87
+
88
+ /* THE TOOLBAR ON TOP (Preferences > Canvas > Toolbar position). The footer's
89
+ row moves up between the canvas bar and the stage; the dock row stays at the
90
+ bottom and the footer still costs the same height, so `dockCeiling` is
91
+ unchanged. `stage-t / foot-t` keeps meaning "the stage's own track" in both
92
+ templates (here `foot-t` is where the stage ends), so the canvas cell, the
93
+ overlay strip and every mode that spans the stage need no override. Only the
94
+ two boxes the move is ABOUT take one: the canvas bar ends at `head-b`, and
95
+ the footer sits `head-b / stage-t`. */
96
+ .shell.tool-footer-top {
97
+ grid-template-rows: [edge-t] var(--topbar-h) [main-t] var(--panel-head-h) [head-b] var(--tool-footer-row) [stage-t] minmax(0, 1fr) [foot-t main-b] var(--dock-row-h) [edge-b];
98
+ }
99
+ .shell.tool-footer-top > .control-strip {
100
+ grid-row: main-t / head-b;
101
+ }
102
+ .shell.tool-footer-top > .tool-footer {
103
+ grid-row: head-b / stage-t;
104
+ border-top: 0;
105
+ border-bottom: 1px solid var(--line);
106
+ }
107
+
108
+ /* The stage is the whole window, BEHIND the cells: every docked cell is
109
+ opaque and positioned above it, so the picture shows only through the cell
110
+ nothing is docked in. Sizing the iframe to that cell was rejected: every
111
+ collapse, Video toggle and mode swap would become a canvas resize, and a
112
+ resize while a compile is in flight presents a cleared canvas. */
113
+ .stage-frame {
114
+ position: fixed;
115
+ inset: 0;
116
+ width: 100%;
117
+ height: 100%;
118
+ border: 0;
119
+ display: block;
120
+ z-index: var(--z-stage);
121
+ }
122
+
123
+ /* ── EVERY DOCKED CELL ─────────────────────────────────────────────────────
124
+ Positioned with a z-index, which does two jobs: it paints the cell above
125
+ the fixed iframe (a non-positioned grid cell would paint UNDER it), and it
126
+ makes the cell a stacking context of its own, so the z-indices inside a
127
+ panel stay local to it. Opaque, with its seams drawn by its own borders. */
128
+ .shell-header,
129
+ .left-rail,
130
+ .control-strip,
131
+ .inspector-column,
132
+ .timeline-dock {
133
+ position: relative;
134
+ z-index: var(--z-panel);
135
+ min-width: 0;
136
+ min-height: 0;
137
+ }
138
+
139
+ /* A collapsed column hides its cell, not its track: `visibility` keeps the
140
+ panel laid out, so its scroll position and virtualised rows survive the
141
+ round trip, and `measureInset` skips a hidden box. */
142
+ .shell.is-rail-collapsed > .left-rail,
143
+ .shell.is-inspector-collapsed > .inspector-column {
144
+ visibility: hidden;
145
+ }
146
+
147
+ /* And the canvas takes the collapsed column's width. Everything that lives in
148
+ the canvas column spans out over the empty track. */
149
+ .shell.is-rail-collapsed > .control-strip,
150
+ .shell.is-rail-collapsed > .canvas-cell,
151
+ .shell.is-rail-collapsed > .tool-footer,
152
+ .shell.is-rail-collapsed > .overlay-strip,
153
+ .shell.is-rail-collapsed > .empty-state,
154
+ .shell.is-rail-collapsed > .panel-crash {
155
+ grid-column-start: edge-l;
156
+ }
157
+
158
+ .shell.is-inspector-collapsed > .control-strip,
159
+ .shell.is-inspector-collapsed > .canvas-cell,
160
+ .shell.is-inspector-collapsed > .tool-footer,
161
+ .shell.is-inspector-collapsed > .overlay-strip,
162
+ .shell.is-inspector-collapsed > .empty-state,
163
+ .shell.is-inspector-collapsed > .panel-crash {
164
+ grid-column-end: edge-r;
165
+ }
166
+
167
+ /* ── THE MODES' CELLS ──────────────────────────────────────────────────────
168
+ A mode shows its content in the docked grid's own cells (cellSlots.tsx).
169
+ The canvas cell is the one cell nothing is docked in: empty in the stage
170
+ workspace, so the picture shows through, and a mode's centre otherwise.
171
+ It takes no pointer and paints nothing itself, because a mode's centre can
172
+ be a HOLE onto the stage: each part that paints opts back in, and a hole
173
+ (`.stage-window`) stays out, so a drag on it reaches the stage. */
174
+ .canvas-cell {
175
+ grid-column: rail-r / insp-l;
176
+ grid-row: stage-t / foot-t;
177
+ position: relative;
178
+ z-index: var(--z-panel);
179
+ display: flex;
180
+ flex-direction: column;
181
+ min-width: 0;
182
+ min-height: 0;
183
+ pointer-events: none;
184
+ }
185
+
186
+ /* A SURFACE STILL LOADING (app/lazySurfaces.tsx): its skeleton holds its
187
+ cells, so nothing moves when its chunk lands. The board's is its bar on the
188
+ desk ground; a mode's is its left column's head and an opaque canvas, so the
189
+ stage never shows through a cell the mode is about to fill. */
190
+ .board-skeleton,
191
+ .mode-skeleton {
192
+ flex: 1 1 0;
193
+ display: flex;
194
+ flex-direction: column;
195
+ min-width: 0;
196
+ min-height: 0;
197
+ }
198
+
199
+ .board-skeleton {
200
+ pointer-events: auto;
201
+ background-color: var(--surface-board);
202
+ }
203
+
204
+ .mode-skeleton.is-canvas {
205
+ pointer-events: auto;
206
+ background-color: var(--surface-app);
207
+ }
208
+
209
+ /* The bottom row's stand-in, for Code Studio, whose strip replaces the
210
+ timeline: the same three tracks, as a subgrid, so a strip's cells land
211
+ under the left column, the canvas and the right column. Transparent and
212
+ pointer-less for the canvas cell's reason. */
213
+ .bottom-cell {
214
+ grid-column: edge-l / edge-r;
215
+ grid-row: main-b / edge-b;
216
+ position: relative;
217
+ z-index: var(--z-panel);
218
+ display: none;
219
+ grid-template-columns: subgrid;
220
+ grid-template-rows: minmax(0, 1fr);
221
+ min-width: 0;
222
+ min-height: 0;
223
+ pointer-events: none;
224
+ }
225
+
226
+ .shell.is-code-studio > .bottom-cell {
227
+ display: grid;
228
+ }
229
+
230
+ /* ── WHAT STILL FLOATS ─────────────────────────────────────────────────────
231
+ One recipe, and a short list: the tool flyouts that open off the footer,
232
+ and a notice. Everything else is docked, the tools included. */
233
+ .tool-flyout,
234
+ .overlay-message {
235
+ background: var(--surface-panel);
236
+ border: 1px solid var(--line);
237
+ border-radius: var(--float-radius);
238
+ box-shadow: var(--shadow-float);
239
+ }
240
+
241
+
242
+ /* ---- overlays ----------------------------------------------------------- */
243
+ /* ── THE ERROR SURFACE OUTRANKS EVERYTHING IN THE SHELL ───────────────────
244
+ This is where a refusal lands. `sayRefusal` sets `state.error`, the stage
245
+ reports its own failures the same way, and this strip is the only place
246
+ either is ever drawn — so a layer that covers it does not hide a decoration,
247
+ it makes the chrome silently ignore gestures with the reason it declined
248
+ them rendered underneath. The overlay tier is above every mode.
249
+
250
+ At the bottom of the canvas cell, with 12px of air above the tool footer
251
+ (or above the bottom row, where the footer's track is closed). */
252
+ .overlay-strip {
253
+ grid-column: rail-r / insp-l;
254
+ grid-row: stage-t / foot-t;
255
+ align-self: end;
256
+ justify-self: center;
257
+ position: relative;
258
+ z-index: var(--z-overlay);
259
+ margin-bottom: var(--space-6);
260
+ display: flex;
261
+ flex-direction: column;
262
+ gap: var(--space-3);
263
+ pointer-events: none;
264
+ max-width: min(560px, 100%);
265
+ }
266
+
267
+ .overlay-message {
268
+ pointer-events: auto;
269
+ display: flex;
270
+ gap: var(--space-5);
271
+ align-items: flex-start;
272
+ padding: var(--space-5) var(--space-6);
273
+ line-height: var(--leading-body);
274
+ border-color: color-mix(in srgb, var(--danger) 50%, transparent);
275
+ }
276
+
277
+ /* The same arrival the dialogs and toasts use — `dialog-in` comes from the ui
278
+ sheet this file @imports, and it is the `settle` spring transcribed to CSS.
279
+ This strip is the shot chrome's toast, so it should not arrive differently
280
+ from one. Surface only: no geometry animates, and nothing above `.stage-frame`
281
+ gains a transform. */
282
+ @media (prefers-reduced-motion: no-preference) {
283
+ .overlay-message { animation: dialog-in var(--dur-med) var(--ease); }
284
+ }
285
+
286
+ /* No dismiss button, so nothing reserves space for one. WARN and not DANGER:
287
+ nothing is broken yet, and the sentence is about a process the author has to
288
+ restart rather than about something they did. */
289
+ .overlay-message.is-sticky {
290
+ border-color: color-mix(in srgb, var(--warn) 50%, transparent);
291
+ }
292
+
293
+ .overlay-message button {
294
+ font: inherit;
295
+ font-size: var(--type-lg);
296
+ color: var(--ink-2);
297
+ background: transparent;
298
+ border: 0;
299
+ cursor: pointer;
300
+ padding: 0;
301
+ }
302
+
303
+ .overlay-message button:hover {
304
+ color: var(--ink-1);
305
+ }
306
+
307
+ /* A worded action on a sticky row (the save conflict's Reload): body size,
308
+ underlined so it reads as the one thing to press. */
309
+ .overlay-message .overlay-action {
310
+ flex: none;
311
+ font-size: inherit;
312
+ color: var(--ink-1);
313
+ text-decoration: underline;
314
+ white-space: nowrap;
315
+ }
316
+
317
+ /* No Project: said in the middle of the canvas, where the picture would be. */
318
+ .empty-state {
319
+ grid-column: rail-r / insp-l;
320
+ grid-row: main-t / main-b;
321
+ place-self: center;
322
+ position: relative;
323
+ z-index: var(--z-scrim);
324
+ display: grid;
325
+ text-align: center;
326
+ gap: var(--space-3);
327
+ pointer-events: none;
328
+ color: var(--ink-3);
329
+ }
330
+
331
+ .empty-state h1 {
332
+ font-size: var(--type-xl);
333
+ font-weight: 600;
334
+ margin: 0;
335
+ color: var(--ink-2);
336
+ }
337
+
338
+ .empty-state p {
339
+ margin: 0;
340
+ }
341
+
342
+ /* The way forward takes the click the container gives up. */
343
+ .empty-state a {
344
+ pointer-events: auto;
345
+ justify-self: center;
346
+ margin-top: var(--space-3);
347
+ text-decoration: none;
348
+ }
349
+
350
+ /* A mode's crash card (the fallback of the PanelBoundary App.tsx wraps around
351
+ each mode, a direct child of the shell) sits at the top of the centre
352
+ column, over the canvas bar and the canvas cell. The mode's portalled parts
353
+ went with the throw, so the card is what is left of the mode. */
354
+ .shell > .panel-crash {
355
+ grid-column: rail-r / insp-l;
356
+ grid-row: main-t / main-b;
357
+ align-self: start;
358
+ justify-self: center;
359
+ position: relative;
360
+ z-index: var(--z-overlay);
361
+ max-width: min(640px, 100%);
362
+ }
363
+
364
+
365
+ /* ---- resizable edges ---------------------------------------------------- */
366
+ /* 8px of hit area for a 1px seam, centred on it. Anything thinner is a target
367
+ you have to aim at. Paper draws the handle 6 wide; the extra 2px is hit
368
+ area only.
369
+
370
+ THE GRIP: a 20px stroke at the handle's middle, in ink-3 at rest, so an
371
+ edge that drags says so. The seam itself is the panel's own border at rest.
372
+ On hover the band takes the soft state fill, the seam is redrawn in the
373
+ selected fill, and the grip turns accent ink.
374
+
375
+ `touch-action: none` is what makes a pen or touch drag resize instead of
376
+ scrolling the page out from under the gesture. */
377
+ .rail-resize,
378
+ .inspector-resize,
379
+ .dock-resize,
380
+ .split-resize {
381
+ touch-action: none;
382
+ background: transparent;
383
+ transition: background var(--dur-fast) var(--ease);
384
+ }
385
+
386
+ .rail-resize::before,
387
+ .inspector-resize::before,
388
+ .dock-resize::before,
389
+ .split-resize::before,
390
+ .rail-resize::after,
391
+ .inspector-resize::after,
392
+ .dock-resize::after,
393
+ .split-resize::after {
394
+ content: "";
395
+ position: absolute;
396
+ pointer-events: none;
397
+ transition: background var(--dur-fast) var(--ease);
398
+ }
399
+
400
+ /* The seam, hover only, ON the panel's own border so the two never sit a
401
+ pixel apart: the rail's border is the last pixel before its track line,
402
+ the inspector's and the split's the first after theirs, and the dock's is
403
+ its top edge (the handle starts there, inside the dock). */
404
+ .rail-resize::before,
405
+ .inspector-resize::before,
406
+ .split-resize::before {
407
+ top: 0;
408
+ bottom: 0;
409
+ left: var(--space-2);
410
+ width: 1px;
411
+ }
412
+
413
+ .rail-resize::before {
414
+ left: calc(var(--space-2) - 1px);
415
+ }
416
+
417
+ .dock-resize::before {
418
+ left: 0;
419
+ right: 0;
420
+ top: 0;
421
+ height: 1px;
422
+ }
423
+
424
+ /* The grip, on the same line. */
425
+ .rail-resize::after,
426
+ .inspector-resize::after,
427
+ .split-resize::after {
428
+ top: calc(50% - 10px);
429
+ left: var(--space-2);
430
+ width: 1px;
431
+ height: 20px;
432
+ background: var(--ink-3);
433
+ }
434
+
435
+ .rail-resize::after {
436
+ left: calc(var(--space-2) - 1px);
437
+ }
438
+
439
+ .dock-resize::after {
440
+ left: calc(50% - 10px);
441
+ top: 0;
442
+ width: 20px;
443
+ height: 1px;
444
+ background: var(--ink-3);
445
+ }
446
+
447
+ .rail-resize:hover,
448
+ .inspector-resize:hover,
449
+ .dock-resize:hover,
450
+ .split-resize:hover {
451
+ background: var(--fill-state-soft);
452
+ }
453
+
454
+ .rail-resize:hover::before,
455
+ .inspector-resize:hover::before,
456
+ .dock-resize:hover::before,
457
+ .split-resize:hover::before {
458
+ background: var(--fill-selected);
459
+ }
460
+
461
+ .rail-resize:hover::after,
462
+ .inspector-resize:hover::after,
463
+ .dock-resize:hover::after,
464
+ .split-resize:hover::after {
465
+ background: var(--accent-ink);
466
+ }
467
+
468
+ /* The two column seams, as grid items on the seam's own line. Each runs on
469
+ down through the timeline, whose name column and meters cell are the two
470
+ columns' own tracks: one drag moves the column and the timeline cell under
471
+ it together. */
472
+ .rail-resize,
473
+ .inspector-resize {
474
+ grid-row: main-t / edge-b;
475
+ position: relative;
476
+ z-index: var(--z-handle);
477
+ width: 8px;
478
+ cursor: col-resize;
479
+ }
480
+
481
+ .rail-resize {
482
+ grid-column: edge-l / rail-r;
483
+ justify-self: end;
484
+ margin-right: calc(-1 * var(--space-2));
485
+ }
486
+
487
+ .inspector-resize {
488
+ grid-column: insp-l / edge-r;
489
+ justify-self: start;
490
+ margin-left: calc(-1 * var(--space-2));
491
+ }
492
+
493
+
494
+ /* The stage's own divider between the working and camera panes. It sits ON the
495
+ seam the scissor draws to, whose position is `--split-x` — written by the
496
+ shell's writer from the same `splitRatio` `paneRects` reads, so the handle
497
+ and the rendered boundary cannot end up a column apart. It spans exactly the
498
+ stage's visible window (`--window-*`, written beside it). */
499
+ .split-resize {
500
+ position: fixed;
501
+ top: var(--window-t, 0px);
502
+ bottom: var(--window-b, 0px);
503
+ left: var(--split-x);
504
+ z-index: var(--z-handle);
505
+ width: 8px;
506
+ margin-left: calc(-1 * var(--space-2));
507
+ cursor: col-resize;
508
+ }
509
+
510
+ /* The dock's top edge, inside the dock: the handle drags the row it heads. */
511
+ .dock-resize {
512
+ position: absolute;
513
+ top: 0;
514
+ left: 0;
515
+ right: 0;
516
+ /* Local to the dock (a stacking context): above its sticky ruler (5). */
517
+ z-index: 6;
518
+ height: 8px;
519
+ cursor: row-resize;
520
+ }
521
+
522
+
523
+
524
+ /* ---- the shared stage window -------------------------------------------- */
525
+ /* A HOLE, AND THE CLASS THAT MAKES IT ONE.
526
+ *
527
+ * A mode (the material workspace, the Component and Code Studios) paints its
528
+ * part of the docked cells and leaves exactly
529
+ * one box for the stage iframe behind them to show through, and
530
+ * `measureInset` (app/App.tsx) finds that box by THIS class. The two rules
531
+ * that make the cell a window rather than a lid are stated once here so a mode
532
+ * cannot half-implement them:
533
+ *
534
+ * NO PAINT. Anything opaque, including a "subtle" tint, covers the only live
535
+ * thing on screen.
536
+ * NO POINTER. Hit testing follows paint, so a box over the iframe swallows
537
+ * every press on the stage even where it draws nothing, and in every hole
538
+ * a drag on the subject ORBITS, which is the gesture that would be lost.
539
+ * Each cell that actually paints opts back in.
540
+ *
541
+ * Size and placement stay with each mode: they are laid out differently and
542
+ * only the modes know their own columns. */
543
+ .stage-window {
544
+ background: transparent;
545
+ pointer-events: none;
546
+ }
547
+
548
+
549
+ /* ---- scrollbars --------------------------------------------------------- */
550
+ /* Default scrollbars on a near-black panel are a bright grey slab. THE ONE
551
+ SCROLLBAR RULE: every chrome scroller is themed here and nowhere else
552
+ (sourceHygiene holds it), the board's desk, which scrolls the whole plan,
553
+ and its Style row, which scrolls sideways, included, and the bodies of the
554
+ board's right panels (the Plan, the component sheet, the item inspector)
555
+ and of the Brief. Those hold a stable gutter, so an unthemed one reserves
556
+ the default bar's width at rest and its rows end short of the inspector's
557
+ in the same column. `height` is declared beside `width` so a horizontal bar
558
+ is themed as well. Theming rather than hiding: a scrollbar is a scroller's
559
+ only resting statement of where it is and how much more there is. */
560
+ .rail-scroll::-webkit-scrollbar,
561
+ .inspector-body::-webkit-scrollbar,
562
+ .agent-transcript::-webkit-scrollbar,
563
+ .dock-scroll::-webkit-scrollbar,
564
+ .board-desk::-webkit-scrollbar,
565
+ .style-wall-items::-webkit-scrollbar,
566
+ .plan-body::-webkit-scrollbar,
567
+ .component-sheet-body::-webkit-scrollbar,
568
+ .sketch-inspector-body::-webkit-scrollbar,
569
+ .shot-brief-body::-webkit-scrollbar {
570
+ width: 10px;
571
+ height: 10px;
572
+ }
573
+
574
+ .rail-scroll::-webkit-scrollbar-thumb,
575
+ .inspector-body::-webkit-scrollbar-thumb,
576
+ .agent-transcript::-webkit-scrollbar-thumb,
577
+ .dock-scroll::-webkit-scrollbar-thumb,
578
+ .board-desk::-webkit-scrollbar-thumb,
579
+ .style-wall-items::-webkit-scrollbar-thumb,
580
+ .plan-body::-webkit-scrollbar-thumb,
581
+ .component-sheet-body::-webkit-scrollbar-thumb,
582
+ .sketch-inspector-body::-webkit-scrollbar-thumb,
583
+ .shot-brief-body::-webkit-scrollbar-thumb {
584
+ background: var(--fill-hover);
585
+ border: 3px solid transparent;
586
+ background-clip: content-box;
587
+ border-radius: var(--radius-full);
588
+ }
589
+
590
+ .rail-scroll::-webkit-scrollbar-thumb:hover,
591
+ .inspector-body::-webkit-scrollbar-thumb:hover,
592
+ .agent-transcript::-webkit-scrollbar-thumb:hover,
593
+ .dock-scroll::-webkit-scrollbar-thumb:hover,
594
+ .board-desk::-webkit-scrollbar-thumb:hover,
595
+ .style-wall-items::-webkit-scrollbar-thumb:hover,
596
+ .plan-body::-webkit-scrollbar-thumb:hover,
597
+ .component-sheet-body::-webkit-scrollbar-thumb:hover,
598
+ .sketch-inspector-body::-webkit-scrollbar-thumb:hover,
599
+ .shot-brief-body::-webkit-scrollbar-thumb:hover {
600
+ background: var(--line-strong);
601
+ background-clip: content-box;
602
+ }
603
+
604
+ .rail-scroll::-webkit-scrollbar-track,
605
+ .inspector-body::-webkit-scrollbar-track,
606
+ .agent-transcript::-webkit-scrollbar-track,
607
+ .dock-scroll::-webkit-scrollbar-track,
608
+ .board-desk::-webkit-scrollbar-track,
609
+ .style-wall-items::-webkit-scrollbar-track,
610
+ .plan-body::-webkit-scrollbar-track,
611
+ .component-sheet-body::-webkit-scrollbar-track,
612
+ .sketch-inspector-body::-webkit-scrollbar-track,
613
+ .shot-brief-body::-webkit-scrollbar-track {
614
+ background: transparent;
615
+ }
616
+
617
+ /* ── the in-browser export scrim ──────────────────────────────────────────
618
+ Over the stage's VISIBLE WINDOW and nothing else: the canvas cell, or a
619
+ mode's hole. `--window-*` is that rect, written by the shell's writer from
620
+ the same measure that tells the stage where it is covered, so the header,
621
+ the columns and the dock stay usable while the capture loop owns the
622
+ canvas. `pointer-events` swallows stage clicks, which is the point: the
623
+ export is driving that canvas. Above a mode, because a mode's hole is
624
+ transparent and the veil has to cover what shows through it.
625
+
626
+ No backdrop-filter: compositing a blur over a live GL canvas every frame
627
+ is exactly the work it is waiting on. */
628
+ .export-scrim {
629
+ position: fixed;
630
+ top: var(--window-t, 0px);
631
+ right: var(--window-r, 0px);
632
+ bottom: var(--window-b, 0px);
633
+ left: var(--window-l, 0px);
634
+ z-index: var(--z-scrim);
635
+ display: grid;
636
+ place-content: center;
637
+ gap: var(--space-4);
638
+ text-align: center;
639
+ background: var(--scrim);
640
+ color: var(--ink-1);
641
+ font-family: var(--font-sans);
642
+ font-variant-numeric: var(--numeric);
643
+ pointer-events: auto;
644
+ }
645
+
646
+ .export-scrim p {
647
+ margin: 0;
648
+ }
649
+
650
+ .export-scrim-note {
651
+ color: var(--ink-2);
652
+ font-size: var(--type-sm);
653
+ }