@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,1561 @@
1
+ /* Components (C1, C2, C4): the components list in the left column, the subject's hole and transport in the canvas cell, the breadcrumb in the bar, the right panel's actions, History, footer and New badge, and Every use with THIS USE. */
2
+
3
+ /* ---- the Component Studio ------------------------------------------------ */
4
+ /* A COMPONENT IS NOT A PROPERTY OF THE SHOT IT SITS IN, so it gets the canvas.
5
+ *
6
+ * It lives in the docked frame like every mode (cellSlots.tsx): the components
7
+ * list in the left column's mode slot, the subject in the canvas cell as a HOLE onto
8
+ * the stage, its name, face and zoom in the canvas bar. The inspector shows
9
+ * its published surface and the timeline its own clock, both unchanged, so
10
+ * nothing here hides a cell and nothing here floats. */
11
+
12
+ /* ---- the components list, in the left column -------------------------------- */
13
+ /* The slot's one flexible row (left-column.css), bounded down to the list's
14
+ `.rail-scroll` so the list scrolls inside the column. */
15
+ .component-library {
16
+ flex: 1 1 0;
17
+ min-height: 0;
18
+ display: flex;
19
+ flex-direction: column;
20
+ }
21
+
22
+ /* The inspector's one empty state, inset like every row of the column. */
23
+ .component-library .insp-empty {
24
+ padding: var(--space-3) var(--space-6);
25
+ }
26
+
27
+ /* ---- the subject, in the canvas cell ---------------------------------------- */
28
+ /* The whole cell. `.stage-window` (shell.css) makes it a window rather than a
29
+ lid: no paint, no pointer, so a drag on the subject orbits the stage. */
30
+ .component-studio-hole {
31
+ flex: 1 1 auto;
32
+ min-width: 0;
33
+ min-height: 0;
34
+ }
35
+
36
+ /* ---- the bar ---------------------------------------------------------------- */
37
+ /* The bar slot's whole row, laid out like the canvas bar: the way out and the
38
+ name lead, the face switch and the zoom are pushed right. The name is the
39
+ part that gives; no control shrinks. */
40
+ .component-studio-bar {
41
+ flex: 1 1 auto;
42
+ display: flex;
43
+ align-items: center;
44
+ gap: var(--canvas-bar-gap);
45
+ min-width: 0;
46
+ height: 100%;
47
+ }
48
+
49
+ /* The back chip's look with only its chevron, so the inset is even on both
50
+ sides. Two classes, so it outranks `.back-chip` on specificity. */
51
+ .back-chip.component-studio-back {
52
+ flex: none;
53
+ padding: 0 var(--space-2);
54
+ }
55
+
56
+ /* The subject's name, and pressing it renames. A button that reads as text:
57
+ the title of the thing you are looking at should not also look like a
58
+ control until the pointer is on it. */
59
+ .component-studio-name {
60
+ flex: 0 1 auto;
61
+ min-width: 0;
62
+ height: var(--control-h);
63
+ overflow: hidden;
64
+ padding: 0 var(--space-3);
65
+ border: 0;
66
+ border-radius: var(--control-radius);
67
+ background: transparent;
68
+ color: var(--ink-1);
69
+ font: inherit;
70
+ font-size: var(--type-md);
71
+ font-weight: var(--weight-semibold);
72
+ text-overflow: ellipsis;
73
+ white-space: nowrap;
74
+ cursor: text;
75
+ }
76
+
77
+ .component-studio-name:hover {
78
+ background: var(--fill-rest);
79
+ }
80
+
81
+ .component-studio-name:focus-visible {
82
+ outline: none;
83
+ box-shadow: var(--focus-ring);
84
+ }
85
+
86
+ .component-studio-tools {
87
+ flex: none;
88
+ display: flex;
89
+ align-items: center;
90
+ gap: var(--canvas-bar-gap);
91
+ margin-left: auto;
92
+ }
93
+
94
+ /* PREVIEW | EDIT (`ComponentsTabSwitch`). `flex: none` because the house
95
+ track grows to fill a row (`.dock-modes`' reason), and here it would split
96
+ the room with the name and shrink until its words clip. */
97
+ .components-tab-switch,
98
+ .components-tab-switch .segmented-item {
99
+ flex: none;
100
+ }
101
+
102
+ /* ---- Components: the Preview tab and the empty state ------------------------ */
103
+ /* ComponentsPreview.tsx. The Preview tab is the Studio's cells with the
104
+ studio taken out: the list on the left, the subject as a hole in the canvas
105
+ cell, Back, the name and Preview | Edit in the bar. */
106
+ .components-preview-hole {
107
+ flex: 1 1 auto;
108
+ min-width: 0;
109
+ min-height: 0;
110
+ }
111
+
112
+ /* Read-only text, so it reads as the name rather than as a rename. */
113
+ /* A span does not centre its text the way the button does, so the line is
114
+ the control's height, 28px (`--leading-xl`). */
115
+ .component-studio-name.is-label {
116
+ line-height: var(--leading-xl);
117
+ cursor: default;
118
+ }
119
+
120
+ .component-studio-name.is-label:hover {
121
+ background: transparent;
122
+ }
123
+
124
+ /* ---- All components, the home (C5) ----------------------------------------- */
125
+ /* ComponentsHome.tsx: two sections of cards in the canvas cell. The cell is
126
+ pointer-transparent, so the home paints its own ground and takes the
127
+ pointer, the way Every use does. */
128
+ .components-home {
129
+ flex: 1 1 auto;
130
+ min-width: 0;
131
+ min-height: 0;
132
+ display: flex;
133
+ flex-direction: column;
134
+ gap: var(--space-8);
135
+ padding: var(--space-7) var(--space-8);
136
+ overflow-y: auto;
137
+ background: var(--surface-app);
138
+ pointer-events: auto;
139
+ }
140
+
141
+ .components-home-section {
142
+ display: flex;
143
+ flex-direction: column;
144
+ gap: var(--space-4);
145
+ }
146
+
147
+ .components-home-section > .components-section-title {
148
+ margin: 0;
149
+ }
150
+
151
+ .components-home-grid {
152
+ display: grid;
153
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
154
+ gap: var(--space-6);
155
+ }
156
+
157
+ .components-home-card {
158
+ display: flex;
159
+ flex-direction: column;
160
+ gap: var(--space-2);
161
+ min-width: 0;
162
+ padding: var(--space-3);
163
+ border: 1px solid var(--line);
164
+ border-radius: var(--radius-md);
165
+ background: var(--surface-panel);
166
+ color: var(--ink-1);
167
+ font: inherit;
168
+ text-align: left;
169
+ cursor: pointer;
170
+ }
171
+
172
+ .components-home-card:hover,
173
+ .components-home-card:focus-visible {
174
+ border-color: var(--accent);
175
+ }
176
+
177
+ .components-home-card[aria-disabled="true"] {
178
+ cursor: default;
179
+ opacity: var(--opacity-disabled);
180
+ }
181
+
182
+ .components-home-poster {
183
+ position: relative;
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: center;
187
+ aspect-ratio: 16 / 9;
188
+ overflow: hidden;
189
+ border-radius: var(--radius-sm);
190
+ background: var(--surface-secondary);
191
+ }
192
+
193
+ .components-home-poster > * {
194
+ width: 100%;
195
+ height: 100%;
196
+ }
197
+
198
+ /* The kind's glyph where no picture can be drawn: the poster's own child, or
199
+ the preview's fallback inside `.component-stage`. Centred at 24, the shot
200
+ set's own grid. A glyph left unsized grows to the card's width and is
201
+ cropped by the poster. */
202
+ .components-home-icon {
203
+ display: flex;
204
+ align-items: center;
205
+ justify-content: center;
206
+ width: 100%;
207
+ height: 100%;
208
+ color: var(--ink-3);
209
+ }
210
+
211
+ .components-home-icon > svg {
212
+ flex: none;
213
+ width: 24px;
214
+ height: 24px;
215
+ }
216
+
217
+ .components-home-foot {
218
+ display: flex;
219
+ align-items: center;
220
+ gap: var(--space-3);
221
+ min-width: 0;
222
+ padding-top: var(--space-2);
223
+ }
224
+
225
+ .components-home-name {
226
+ min-width: 0;
227
+ overflow: hidden;
228
+ font-size: var(--type-md);
229
+ font-weight: var(--weight-semibold);
230
+ text-overflow: ellipsis;
231
+ white-space: nowrap;
232
+ }
233
+
234
+ .components-home-where {
235
+ color: var(--ink-3);
236
+ font-size: var(--type-sm);
237
+ }
238
+
239
+ /* The dashed New card: two verbs, no picture. */
240
+ .components-home-card.is-new {
241
+ justify-content: center;
242
+ align-items: flex-start;
243
+ min-height: 140px;
244
+ padding: var(--space-6);
245
+ border-style: dashed;
246
+ background: transparent;
247
+ cursor: default;
248
+ }
249
+
250
+ .components-home-new-title {
251
+ font-size: var(--type-md);
252
+ font-weight: var(--weight-semibold);
253
+ }
254
+
255
+ .components-home-new-verbs {
256
+ display: flex;
257
+ gap: var(--space-3);
258
+ padding-top: var(--space-3);
259
+ }
260
+
261
+ /* The home's bar: the counts, then the search beside New component. */
262
+ .components-home-counts {
263
+ flex: 0 1 auto;
264
+ min-width: 0;
265
+ overflow: hidden;
266
+ color: var(--ink-3);
267
+ font-family: var(--font-mono);
268
+ font-size: var(--type-sm);
269
+ text-overflow: ellipsis;
270
+ white-space: nowrap;
271
+ }
272
+
273
+ .components-home-search {
274
+ display: flex;
275
+ flex: 0 1 200px;
276
+ min-width: 96px;
277
+ }
278
+
279
+ .components-home-search > input {
280
+ width: 100%;
281
+ height: var(--control-h);
282
+ padding: 0 var(--space-4);
283
+ border: 1px solid var(--line);
284
+ border-radius: var(--radius-sm);
285
+ background: var(--surface-secondary);
286
+ color: var(--ink-1);
287
+ font: inherit;
288
+ font-size: var(--type-md);
289
+ }
290
+
291
+ /* ---- the way back and the crumb from a Shot (C7) ---------------------------- */
292
+ /* "Back to Shot": the house button (`.btn`, G1 03) at the bar's control
293
+ height, the chevron tight to its edge. Blue is kept for the one primary. */
294
+ .components-back-to-shot {
295
+ flex: none;
296
+ gap: var(--space-2);
297
+ height: var(--control-h);
298
+ padding: 0 var(--space-4) 0 var(--space-2);
299
+ }
300
+
301
+ .components-crumb-use {
302
+ flex: none;
303
+ color: var(--ink-3);
304
+ font-family: var(--font-mono);
305
+ font-size: var(--type-sm);
306
+ white-space: nowrap;
307
+ }
308
+
309
+ /* ---- a definition's Edit tab (C6): its layers in the left column ------------ */
310
+ /* The Files panel's outline, scoped to the definition (FilePanel.tsx), in
311
+ place of the mode slot every other mode fills. */
312
+ .shell.is-mode.is-component-edit .left-rail:not(.is-inserting) > .file-panel {
313
+ display: flex;
314
+ }
315
+
316
+ .shell.is-mode.is-component-edit .left-rail > .rail-mode {
317
+ display: none;
318
+ }
319
+
320
+ /* No subject, no clock: the timeline steps aside and the bottom row closes
321
+ (App.tsx writes it 0 tall). */
322
+ .shell.is-components-empty > .timeline-dock {
323
+ display: none;
324
+ }
325
+
326
+ /* Nothing to inspect on the home: the right column has no occupant
327
+ (`boardRightPanel`), App writes its track 0 wide, and the empty cell is not
328
+ drawn, so it draws no seam. The board's rule (storyboard.css). */
329
+ .shell.is-components-empty > .inspector-column[data-empty] {
330
+ display: none;
331
+ }
332
+
333
+ /* ---- the components list, in the left column (C1, C2) ---------------------- */
334
+ /* ComponentLibraryRail.tsx: search (with a component open; the home's bar has
335
+ it otherwise), "This project", "Your library", then the 48 footer with
336
+ Browse Community. The list is the column's one scroller (`.rail-scroll`). */
337
+ .components-search {
338
+ flex: none;
339
+ }
340
+
341
+ .components-section-head {
342
+ display: flex;
343
+ align-items: center;
344
+ gap: var(--space-4);
345
+ height: var(--panel-head-h);
346
+ padding: 0 var(--space-6);
347
+ }
348
+
349
+ .components-section-head.is-library {
350
+ margin-top: var(--space-4);
351
+ border-top: 1px solid var(--line);
352
+ }
353
+
354
+ .components-section-title {
355
+ flex: 1 1 auto;
356
+ min-width: 0;
357
+ margin: 0;
358
+ color: var(--ink-2);
359
+ font-size: var(--type-sm);
360
+ font-weight: var(--weight-semibold);
361
+ line-height: var(--leading-xs);
362
+ letter-spacing: var(--tracking-caps);
363
+ text-transform: uppercase;
364
+ }
365
+
366
+ .components-section-action {
367
+ flex: none;
368
+ padding: 0;
369
+ border: 0;
370
+ background: transparent;
371
+ color: var(--accent-ink);
372
+ font-size: var(--type-md);
373
+ line-height: var(--leading-xs);
374
+ cursor: pointer;
375
+ }
376
+
377
+ .components-section-action:disabled {
378
+ color: var(--ink-3);
379
+ cursor: default;
380
+ }
381
+
382
+ .components-section-count {
383
+ flex: none;
384
+ color: var(--ink-3);
385
+ font-family: var(--font-mono);
386
+ font-size: var(--type-sm);
387
+ font-variant-numeric: var(--numeric);
388
+ }
389
+
390
+ /* The name field and the two kinds, one row under the head. */
391
+ .components-new-row {
392
+ display: flex;
393
+ align-items: center;
394
+ gap: var(--space-3);
395
+ padding: 0 var(--space-6) var(--space-4);
396
+ }
397
+
398
+ .components-new-name {
399
+ flex: 1 1 auto;
400
+ min-width: 0;
401
+ height: var(--control-h);
402
+ padding: 0 var(--space-4);
403
+ border: 1px solid var(--line);
404
+ border-radius: var(--radius-sm);
405
+ background: var(--surface-secondary);
406
+ color: var(--ink-1);
407
+ font: inherit;
408
+ font-size: var(--type-md);
409
+ }
410
+
411
+ .components-new-name:focus {
412
+ outline: none;
413
+ border-color: var(--accent);
414
+ }
415
+
416
+ .components-list {
417
+ margin: 0;
418
+ padding: 0 var(--space-3);
419
+ list-style: none;
420
+ }
421
+
422
+ .components-item {
423
+ display: flex;
424
+ align-items: center;
425
+ gap: var(--space-3);
426
+ min-width: 0;
427
+ border-radius: var(--radius-sm);
428
+ }
429
+
430
+ .components-item:hover {
431
+ background: var(--fill-rest);
432
+ }
433
+
434
+ .components-item.is-current {
435
+ background: var(--accent-quiet);
436
+ }
437
+
438
+ /* One 28 row: tile, name (and home), kind. A button when it opens. */
439
+ .components-item-main {
440
+ flex: 1 1 auto;
441
+ display: flex;
442
+ align-items: center;
443
+ gap: var(--space-4);
444
+ min-width: 0;
445
+ height: var(--control-h);
446
+ padding: 0 var(--space-4);
447
+ border: 0;
448
+ border-radius: var(--radius-sm);
449
+ background: transparent;
450
+ color: var(--ink-1);
451
+ font: inherit;
452
+ font-size: var(--type-md);
453
+ text-align: left;
454
+ cursor: pointer;
455
+ }
456
+
457
+ span.components-item-main {
458
+ cursor: default;
459
+ }
460
+
461
+ .components-item-main[aria-disabled="true"] {
462
+ color: var(--ink-3);
463
+ cursor: not-allowed;
464
+ }
465
+
466
+ .components-item-main:focus-visible {
467
+ outline: none;
468
+ box-shadow: var(--focus-ring);
469
+ }
470
+
471
+ .components-item-tile {
472
+ flex: none;
473
+ display: inline-flex;
474
+ align-items: center;
475
+ justify-content: center;
476
+ width: 20px;
477
+ height: 20px;
478
+ border-radius: var(--radius-xs);
479
+ background: var(--surface-secondary);
480
+ color: var(--ink-2);
481
+ }
482
+
483
+ .components-item-tile svg {
484
+ width: 12px;
485
+ height: 12px;
486
+ }
487
+
488
+ .components-item-name {
489
+ flex: 0 1 auto;
490
+ min-width: 0;
491
+ overflow: hidden;
492
+ text-overflow: ellipsis;
493
+ white-space: nowrap;
494
+ }
495
+
496
+ .components-item-author {
497
+ flex: 0 1 auto;
498
+ min-width: 0;
499
+ overflow: hidden;
500
+ text-overflow: ellipsis;
501
+ white-space: nowrap;
502
+ color: var(--ink-3);
503
+ font-size: var(--type-sm);
504
+ }
505
+
506
+ .components-item-kind {
507
+ flex: none;
508
+ margin-left: auto;
509
+ color: var(--ink-3);
510
+ font-family: var(--font-mono);
511
+ font-size: var(--type-micro);
512
+ letter-spacing: var(--tracking-caps);
513
+ }
514
+
515
+ .components-item.is-current .components-item-name,
516
+ .components-item.is-current .components-item-kind {
517
+ color: var(--accent-ink);
518
+ }
519
+
520
+ .components-use-here {
521
+ flex: none;
522
+ height: 22px;
523
+ margin-right: var(--space-2);
524
+ padding: 0 var(--space-4);
525
+ border: 1px solid var(--line);
526
+ border-radius: var(--radius-xs);
527
+ background: transparent;
528
+ color: var(--ink-2);
529
+ font-size: var(--type-sm);
530
+ cursor: pointer;
531
+ }
532
+
533
+ .components-use-here:hover:not(:disabled) {
534
+ color: var(--ink-1);
535
+ border-color: var(--line-strong);
536
+ }
537
+
538
+ .components-rail-footer {
539
+ flex: 0 0 var(--tool-footer-h);
540
+ display: flex;
541
+ align-items: center;
542
+ padding: 0 var(--space-5);
543
+ border-top: 1px solid var(--line);
544
+ }
545
+
546
+ .components-browse {
547
+ flex: 1 1 auto;
548
+ display: flex;
549
+ align-items: center;
550
+ justify-content: space-between;
551
+ height: var(--control-h);
552
+ padding: 0 var(--space-5);
553
+ border: 0;
554
+ border-radius: var(--radius-sm);
555
+ background: var(--surface-secondary);
556
+ color: var(--ink-1);
557
+ font: inherit;
558
+ font-size: var(--type-md);
559
+ cursor: pointer;
560
+ }
561
+
562
+ .components-browse:disabled {
563
+ color: var(--ink-3);
564
+ cursor: default;
565
+ }
566
+
567
+ .components-browse-arrow {
568
+ color: var(--ink-3);
569
+ }
570
+
571
+ /* ---- the breadcrumb, in the canvas bar -------------------------------------- */
572
+ .components-crumb {
573
+ flex: 0 1 auto;
574
+ display: flex;
575
+ align-items: center;
576
+ gap: var(--space-3);
577
+ min-width: 0;
578
+ }
579
+
580
+ .components-crumb-root {
581
+ flex: none;
582
+ color: var(--ink-3);
583
+ font-size: var(--type-lg);
584
+ white-space: nowrap;
585
+ }
586
+
587
+ /* "used in N places" opens Every use (C4), so it is a button that reads as
588
+ the crumb's quiet tail until it is hovered or pressed. */
589
+ .components-crumb-uses {
590
+ flex: none;
591
+ padding: 0;
592
+ border: 0;
593
+ background: none;
594
+ color: var(--ink-3);
595
+ font-family: var(--font-mono);
596
+ font-size: var(--type-sm);
597
+ white-space: nowrap;
598
+ cursor: pointer;
599
+ }
600
+
601
+ .components-crumb-uses:hover,
602
+ .components-crumb-uses[aria-pressed="true"] {
603
+ color: var(--accent-ink);
604
+ }
605
+
606
+ /* ---- the Preview tab's transport, under the hole ---------------------------- */
607
+ .components-transport {
608
+ flex: 0 0 var(--tool-footer-h);
609
+ display: flex;
610
+ align-items: center;
611
+ gap: var(--space-6);
612
+ padding: 0 var(--space-6);
613
+ border-top: 1px solid var(--line);
614
+ background: var(--surface-panel);
615
+ pointer-events: auto;
616
+ }
617
+
618
+ /* The play control (PlayButton.tsx, the dock's own). Positioned, for a
619
+ queued Play's ring. */
620
+ .components-play {
621
+ position: relative;
622
+ flex: none;
623
+ display: inline-flex;
624
+ align-items: center;
625
+ justify-content: center;
626
+ width: var(--control-h);
627
+ height: var(--control-h);
628
+ padding: 0;
629
+ border: 0;
630
+ border-radius: var(--radius-sm);
631
+ background: var(--surface-secondary);
632
+ color: var(--ink-1);
633
+ cursor: pointer;
634
+ }
635
+
636
+ /* A start `playHold` refuses: the one disabled strength. */
637
+ .components-play:disabled {
638
+ opacity: var(--opacity-disabled);
639
+ cursor: default;
640
+ }
641
+
642
+ /* The glyph, a child: the ring's own svg sits inside `.play-ring`. */
643
+ .components-play > svg {
644
+ width: 14px;
645
+ height: 14px;
646
+ }
647
+
648
+ /* A queued Play's ring sits inside the square, around the glyph: 4px in,
649
+ 20px across. A circle outside it would cut the square's corners. The
650
+ stroke is set for that size, to the 1.5px the dock's 36px ring draws. */
651
+ .components-play .play-ring {
652
+ inset: 4px;
653
+ }
654
+
655
+ .components-play .play-ring circle {
656
+ stroke-width: 2.7;
657
+ }
658
+
659
+ /* The loop length is the house select (`.select` in componentParts.tsx), so
660
+ it draws the house dropdown caret, not the system's arrow; here it only
661
+ takes the transport's look. Longhands, never `background` or `padding`:
662
+ those would wipe the caret and its lane. */
663
+ .components-loop {
664
+ flex: none;
665
+ padding-left: var(--space-4);
666
+ border-color: var(--line);
667
+ border-radius: var(--radius-sm);
668
+ background-color: var(--surface-secondary);
669
+ color: var(--ink-2);
670
+ font-family: var(--font-mono);
671
+ font-size: var(--type-sm);
672
+ }
673
+
674
+ .components-progress {
675
+ flex: 1 1 auto;
676
+ min-width: 0;
677
+ }
678
+
679
+ .components-backdrop {
680
+ flex: none;
681
+ }
682
+
683
+ /* ---- the right panel: the ways out ------------------------------------------ */
684
+ /* ComponentSidePanel.tsx, under the panel head and over the props. */
685
+ .components-actions {
686
+ flex: none;
687
+ display: flex;
688
+ flex-direction: column;
689
+ gap: var(--space-4);
690
+ padding: var(--space-6) var(--space-6);
691
+ border-bottom: 1px solid var(--line);
692
+ }
693
+
694
+ .components-actions-row {
695
+ display: flex;
696
+ gap: var(--space-4);
697
+ }
698
+
699
+ .components-add-board {
700
+ flex: 1 1 auto;
701
+ height: var(--control-h);
702
+ border: 0;
703
+ border-radius: var(--radius-tab);
704
+ background: var(--accent);
705
+ color: var(--on-accent);
706
+ font: inherit;
707
+ font-size: var(--type-md);
708
+ font-weight: var(--weight-semibold);
709
+ cursor: pointer;
710
+ }
711
+
712
+ .components-add-board:disabled {
713
+ opacity: var(--opacity-disabled);
714
+ cursor: default;
715
+ }
716
+
717
+ .components-share-button {
718
+ flex: none;
719
+ height: var(--control-h);
720
+ padding: 0 var(--space-6);
721
+ border: 1px solid var(--line);
722
+ border-radius: var(--radius-tab);
723
+ background: var(--surface-secondary);
724
+ color: var(--ink-1);
725
+ font: inherit;
726
+ font-size: var(--type-md);
727
+ cursor: pointer;
728
+ }
729
+
730
+ .components-field {
731
+ display: flex;
732
+ align-items: center;
733
+ gap: var(--space-4);
734
+ min-width: 0;
735
+ }
736
+
737
+ .components-field-label {
738
+ flex: 0 0 84px;
739
+ color: var(--ink-3);
740
+ font-size: var(--type-sm);
741
+ }
742
+
743
+ .components-field > .select {
744
+ flex: 1 1 auto;
745
+ min-width: 0;
746
+ }
747
+
748
+ .components-actions-note {
749
+ margin: 0;
750
+ color: var(--success);
751
+ font-size: var(--type-sm);
752
+ }
753
+
754
+ /* Where the component lists (ComponentMembership): "Made for this project"
755
+ and "In your library", each a 28px row, then one `insp-note` line. A box
756
+ that cannot change is `aria-disabled`: dimmed, and still pressable so the
757
+ press can say why. */
758
+ .components-membership {
759
+ display: flex;
760
+ flex-direction: column;
761
+ }
762
+
763
+ .components-membership-row {
764
+ display: flex;
765
+ align-items: center;
766
+ gap: var(--space-3);
767
+ min-height: var(--control-h);
768
+ color: var(--ink-1);
769
+ font-size: var(--type-md);
770
+ cursor: pointer;
771
+ }
772
+
773
+ .components-membership-row > .checkbox[aria-disabled="true"] {
774
+ opacity: var(--opacity-disabled);
775
+ cursor: not-allowed;
776
+ }
777
+
778
+ /* ---- the right panel: History, in the props' place ------------------------- */
779
+ .components-history {
780
+ display: flex;
781
+ flex-direction: column;
782
+ min-height: 0;
783
+ }
784
+
785
+ .components-history-head {
786
+ display: flex;
787
+ align-items: center;
788
+ justify-content: space-between;
789
+ height: var(--panel-head-h);
790
+ padding: 0 var(--space-6);
791
+ border-bottom: 1px solid var(--line);
792
+ }
793
+
794
+ .components-history-title {
795
+ margin: 0;
796
+ color: var(--ink-1);
797
+ font-size: var(--type-md);
798
+ font-weight: var(--weight-semibold);
799
+ }
800
+
801
+ .components-history-back,
802
+ .components-history-done,
803
+ .components-history-verb {
804
+ padding: 0;
805
+ border: 0;
806
+ background: transparent;
807
+ color: var(--accent-ink);
808
+ font: inherit;
809
+ font-size: var(--type-md);
810
+ cursor: pointer;
811
+ }
812
+
813
+ .components-history-verb {
814
+ color: var(--ink-3);
815
+ font-size: var(--type-sm);
816
+ }
817
+
818
+ .components-history-verb:hover:not(:disabled) {
819
+ color: var(--ink-1);
820
+ }
821
+
822
+ .components-history-verb:disabled {
823
+ opacity: var(--opacity-disabled);
824
+ cursor: default;
825
+ }
826
+
827
+ .components-history-list {
828
+ margin: 0;
829
+ padding: var(--space-3) 0;
830
+ list-style: none;
831
+ }
832
+
833
+ /* "No versions yet" and "Reading the versions…": the panel's own inset, the
834
+ head's and the rows' 12 a side, never flush against the column's edge. */
835
+ .components-history .insp-empty {
836
+ padding: var(--space-5) var(--space-6);
837
+ }
838
+
839
+ .components-history-row {
840
+ display: flex;
841
+ align-items: center;
842
+ gap: var(--space-5);
843
+ height: var(--control-h);
844
+ padding: 0 var(--space-6);
845
+ }
846
+
847
+ .components-history-row.is-current {
848
+ background: var(--accent-quiet);
849
+ }
850
+
851
+ .components-history-row.is-head {
852
+ height: var(--panel-head-h);
853
+ border-bottom: 1px solid var(--line);
854
+ }
855
+
856
+ .components-history-version {
857
+ flex: none;
858
+ min-width: 28px;
859
+ color: var(--ink-1);
860
+ font-family: var(--font-mono);
861
+ font-size: var(--type-sm);
862
+ }
863
+
864
+ .components-history-when {
865
+ flex: 1 1 auto;
866
+ min-width: 0;
867
+ overflow: hidden;
868
+ text-overflow: ellipsis;
869
+ white-space: nowrap;
870
+ color: var(--ink-3);
871
+ font-size: var(--type-sm);
872
+ }
873
+
874
+ .components-history-file {
875
+ margin: 0;
876
+ padding: var(--space-4) var(--space-6);
877
+ }
878
+
879
+ .components-history-path {
880
+ margin-bottom: var(--space-3);
881
+ color: var(--ink-3);
882
+ font-family: var(--font-mono);
883
+ font-size: var(--type-sm);
884
+ }
885
+
886
+ .components-history-code {
887
+ max-height: 360px;
888
+ margin: 0;
889
+ overflow: auto;
890
+ padding: var(--space-5);
891
+ border-radius: var(--radius-sm);
892
+ background: var(--surface-secondary);
893
+ color: var(--ink-1);
894
+ font-family: var(--font-mono);
895
+ font-size: var(--type-sm);
896
+ line-height: var(--leading-xs);
897
+ white-space: pre;
898
+ }
899
+
900
+ .components-history-props {
901
+ margin: 0;
902
+ padding: var(--space-5) var(--space-6);
903
+ color: var(--ink-2);
904
+ font-size: var(--type-md);
905
+ }
906
+
907
+ /* ---- the right panel's footer ------------------------------------------------ */
908
+ /* "Made by you · private · vN". Starts left, unlike the shot facts. */
909
+ .components-footer {
910
+ justify-content: flex-start;
911
+ }
912
+
913
+ .components-footer-avatar {
914
+ flex: none;
915
+ display: inline-flex;
916
+ align-items: center;
917
+ justify-content: center;
918
+ width: 24px;
919
+ height: 24px;
920
+ border-radius: var(--radius-full);
921
+ background: var(--surface-secondary);
922
+ color: var(--ink-2);
923
+ }
924
+
925
+ .components-footer-avatar {
926
+ overflow: hidden;
927
+ font-size: var(--type-micro);
928
+ font-weight: var(--weight-semibold);
929
+ line-height: var(--leading-none);
930
+ }
931
+
932
+ .components-footer-avatar svg {
933
+ width: 14px;
934
+ height: 14px;
935
+ }
936
+
937
+ .components-footer-avatar img {
938
+ width: 100%;
939
+ height: 100%;
940
+ object-fit: cover;
941
+ }
942
+
943
+ .components-footer-who {
944
+ flex: none;
945
+ color: var(--ink-1);
946
+ white-space: nowrap;
947
+ }
948
+
949
+ .components-footer-meta {
950
+ flex: 0 1 auto;
951
+ min-width: 0;
952
+ overflow: hidden;
953
+ text-overflow: ellipsis;
954
+ white-space: nowrap;
955
+ color: var(--ink-3);
956
+ font-family: var(--font-mono);
957
+ font-size: var(--type-sm);
958
+ }
959
+
960
+ .components-footer-verbs {
961
+ flex: none;
962
+ display: inline-flex;
963
+ gap: var(--space-5);
964
+ margin-left: auto;
965
+ }
966
+
967
+ /* ---- props from code: the New badge ----------------------------------------- */
968
+ /* CodeDefaultsPanel.tsx: a key the previous version did not have. Its row is
969
+ a PropRow, whose label column takes only words, so the badge is DRAWN in
970
+ that column after the name, and the row's own badge element is for screen
971
+ readers only. The drawn copy has empty alt text so it is not read twice. A
972
+ new prop's name reads full strength.
973
+ THE BADGE SPACES ITSELF. It is a flex item of the column, whose 2px gap is
974
+ for the column's own parts (the dot, the words, the verbs) packed tight to
975
+ leave a long name its room, not a word's distance from a badge. Its margin
976
+ adds the rest of the 6px a badge keeps from its words everywhere else
977
+ (`--space-3`: the gap's `--space-1` plus this `--space-2`). */
978
+ .code-default.is-new .prop-row-label {
979
+ color: var(--ink-1);
980
+ }
981
+
982
+ .code-default.is-new .prop-row-label::after {
983
+ content: "New" / "";
984
+ flex: none;
985
+ display: inline-flex;
986
+ align-items: center;
987
+ height: 16px;
988
+ margin-left: var(--space-2);
989
+ padding: 0 var(--space-2);
990
+ border-radius: var(--radius-xs);
991
+ background: var(--accent-quiet);
992
+ color: var(--accent-ink);
993
+ font-size: var(--type-micro);
994
+ font-weight: var(--weight-semibold);
995
+ line-height: var(--leading-none);
996
+ }
997
+
998
+ .component-new-badge {
999
+ position: absolute;
1000
+ width: 1px;
1001
+ height: 1px;
1002
+ overflow: hidden;
1003
+ clip-path: inset(50%);
1004
+ white-space: nowrap;
1005
+ }
1006
+
1007
+ /* The props head's Reset (C1, C2): quiet text beside the section title. */
1008
+ .props-head-reset {
1009
+ padding: 0;
1010
+ border: 0;
1011
+ background: none;
1012
+ color: var(--ink-3);
1013
+ font-size: var(--type-sm);
1014
+ line-height: var(--leading-xs);
1015
+ cursor: pointer;
1016
+ }
1017
+
1018
+ .props-head-reset:hover:not(:disabled) {
1019
+ color: var(--ink-1);
1020
+ }
1021
+
1022
+ .props-head-reset:disabled {
1023
+ color: var(--ink-3);
1024
+ cursor: default;
1025
+ }
1026
+
1027
+ /* "Apply to all instances" (ApplyAllToggle): the first thing in the props
1028
+ section, so the author knows whether an edit is tried or saved before
1029
+ making one. */
1030
+ .props-apply {
1031
+ padding: var(--space-2) var(--space-6) var(--space-4);
1032
+ border-bottom: 1px solid var(--line);
1033
+ margin-bottom: var(--space-2);
1034
+ }
1035
+
1036
+ .props-apply-row {
1037
+ display: flex;
1038
+ align-items: center;
1039
+ gap: var(--space-3);
1040
+ color: var(--ink-1);
1041
+ font-size: var(--type-md);
1042
+ line-height: var(--leading-xs);
1043
+ cursor: pointer;
1044
+ }
1045
+
1046
+ .props-apply-note {
1047
+ margin: var(--space-2) 0 0;
1048
+ color: var(--ink-3);
1049
+ font-size: var(--type-sm);
1050
+ }
1051
+
1052
+ .code-defaults-note {
1053
+ margin: 0;
1054
+ padding: var(--space-5) var(--space-6);
1055
+ color: var(--ink-3);
1056
+ font-size: var(--type-sm);
1057
+ }
1058
+
1059
+ /* ---- the use marks (C4), shared by Every use, THIS USE and the inspector ---- */
1060
+ /* The blue dot itself (`.use-dot`, a prop changed for this use only) is the
1061
+ house widget's, drawn by PropRow in every prop row (widgets.css). */
1062
+
1063
+ /* "1 change: Tilt", "Update available · v4". */
1064
+ .use-chip {
1065
+ flex: none;
1066
+ display: inline-flex;
1067
+ align-items: center;
1068
+ gap: var(--space-3);
1069
+ height: 24px;
1070
+ padding: 0 var(--space-4);
1071
+ border-radius: var(--radius-xs);
1072
+ background: var(--accent-quiet);
1073
+ color: var(--accent-ink);
1074
+ font-size: var(--type-sm);
1075
+ font-weight: var(--weight-semibold);
1076
+ line-height: var(--leading-xs);
1077
+ white-space: nowrap;
1078
+ }
1079
+
1080
+ .use-update-button {
1081
+ flex: none;
1082
+ display: inline-flex;
1083
+ align-items: center;
1084
+ justify-content: center;
1085
+ height: var(--control-h);
1086
+ padding: 0 var(--space-6);
1087
+ border: 0;
1088
+ border-radius: var(--radius-tab);
1089
+ background: var(--accent);
1090
+ color: var(--on-accent);
1091
+ font-size: var(--type-md);
1092
+ font-weight: var(--weight-semibold);
1093
+ line-height: var(--leading-xs);
1094
+ white-space: nowrap;
1095
+ cursor: pointer;
1096
+ }
1097
+
1098
+ .use-update-button:disabled {
1099
+ opacity: var(--opacity-disabled);
1100
+ cursor: default;
1101
+ }
1102
+
1103
+ /* The owner's picture of the button their users see: it does nothing here. */
1104
+ .use-update-button.is-picture {
1105
+ cursor: default;
1106
+ }
1107
+
1108
+ /* ---- Every use, in the canvas cell (C4) ------------------------------------- */
1109
+ /* The list takes the preview's place: no stage, no transport. */
1110
+ .every-use {
1111
+ flex: 1 1 auto;
1112
+ min-width: 0;
1113
+ min-height: 0;
1114
+ display: flex;
1115
+ flex-direction: column;
1116
+ gap: var(--space-4);
1117
+ padding: var(--space-7) var(--space-8);
1118
+ overflow-y: auto;
1119
+ background: var(--surface-app);
1120
+ pointer-events: auto;
1121
+ }
1122
+
1123
+ .every-use-head {
1124
+ flex: none;
1125
+ display: flex;
1126
+ align-items: center;
1127
+ justify-content: space-between;
1128
+ gap: var(--space-4);
1129
+ min-height: 28px;
1130
+ }
1131
+
1132
+ .every-use-caps {
1133
+ margin: 0;
1134
+ color: var(--ink-2);
1135
+ font-size: var(--type-sm);
1136
+ font-weight: var(--weight-semibold);
1137
+ line-height: var(--leading-xs);
1138
+ letter-spacing: var(--tracking-caps);
1139
+ text-transform: uppercase;
1140
+ }
1141
+
1142
+ .every-use-note {
1143
+ min-width: 0;
1144
+ color: var(--ink-3);
1145
+ font-size: var(--type-sm);
1146
+ line-height: var(--leading-xs);
1147
+ }
1148
+
1149
+ .every-use-empty {
1150
+ margin: 0;
1151
+ color: var(--ink-3);
1152
+ font-size: var(--type-sm);
1153
+ line-height: var(--leading-xs);
1154
+ }
1155
+
1156
+ .every-use-list {
1157
+ display: flex;
1158
+ flex-direction: column;
1159
+ gap: var(--space-4);
1160
+ margin: 0;
1161
+ padding: 0;
1162
+ list-style: none;
1163
+ }
1164
+
1165
+ .every-use-row {
1166
+ display: flex;
1167
+ align-items: center;
1168
+ gap: var(--space-6);
1169
+ padding: var(--space-4);
1170
+ border: 1px solid var(--line);
1171
+ border-radius: var(--radius-md);
1172
+ background: var(--surface-panel);
1173
+ }
1174
+
1175
+ .every-use-row.is-selected {
1176
+ border-color: var(--accent);
1177
+ background: var(--accent-quiet);
1178
+ }
1179
+
1180
+ /* The row's body is one button: picking it shows THIS USE. */
1181
+ .every-use-pick {
1182
+ flex: 1 1 auto;
1183
+ min-width: 0;
1184
+ display: flex;
1185
+ align-items: center;
1186
+ gap: var(--space-6);
1187
+ padding: 0;
1188
+ border: 0;
1189
+ background: none;
1190
+ color: inherit;
1191
+ font: inherit;
1192
+ text-align: left;
1193
+ cursor: pointer;
1194
+ }
1195
+
1196
+ .every-use-thumb {
1197
+ flex: none;
1198
+ width: 96px;
1199
+ height: 54px;
1200
+ border-radius: var(--radius-sm);
1201
+ background: var(--surface-app);
1202
+ }
1203
+
1204
+ .every-use-text {
1205
+ flex: 1 1 auto;
1206
+ min-width: 0;
1207
+ display: flex;
1208
+ flex-direction: column;
1209
+ gap: var(--space-1);
1210
+ }
1211
+
1212
+ .every-use-line {
1213
+ display: flex;
1214
+ align-items: center;
1215
+ gap: var(--space-4);
1216
+ min-width: 0;
1217
+ }
1218
+
1219
+ .every-use-kind {
1220
+ flex: none;
1221
+ display: inline-flex;
1222
+ align-items: center;
1223
+ height: 18px;
1224
+ padding: 0 var(--space-3);
1225
+ border-radius: var(--radius-xs);
1226
+ background: var(--surface-secondary);
1227
+ color: var(--ink-2);
1228
+ font-size: var(--type-micro);
1229
+ font-weight: var(--weight-semibold);
1230
+ line-height: var(--leading-none);
1231
+ letter-spacing: var(--tracking-caps);
1232
+ }
1233
+
1234
+ .every-use-title {
1235
+ min-width: 0;
1236
+ overflow: hidden;
1237
+ text-overflow: ellipsis;
1238
+ white-space: nowrap;
1239
+ color: var(--ink-1);
1240
+ font-size: var(--type-md);
1241
+ font-weight: var(--weight-semibold);
1242
+ line-height: var(--leading-xs);
1243
+ }
1244
+
1245
+ .every-use-location {
1246
+ min-width: 0;
1247
+ overflow: hidden;
1248
+ text-overflow: ellipsis;
1249
+ white-space: nowrap;
1250
+ color: var(--ink-3);
1251
+ font-size: var(--type-sm);
1252
+ line-height: var(--leading-xs);
1253
+ }
1254
+
1255
+ .every-use-nochange {
1256
+ flex: none;
1257
+ padding-right: var(--space-4);
1258
+ color: var(--ink-3);
1259
+ font-size: var(--type-sm);
1260
+ line-height: var(--leading-xs);
1261
+ white-space: nowrap;
1262
+ }
1263
+
1264
+ .every-use-go {
1265
+ flex: none;
1266
+ height: var(--control-h);
1267
+ padding: 0 var(--space-5);
1268
+ border: 0;
1269
+ border-radius: var(--radius-sm);
1270
+ background: var(--surface-secondary);
1271
+ color: var(--ink-2);
1272
+ font-size: var(--type-md);
1273
+ line-height: var(--leading-xs);
1274
+ cursor: pointer;
1275
+ }
1276
+
1277
+ .every-use-go:hover {
1278
+ color: var(--ink-1);
1279
+ }
1280
+
1281
+ /* ---- Community copies: the owner's side ------------------------------------ */
1282
+ .every-use-community {
1283
+ display: flex;
1284
+ flex-direction: column;
1285
+ gap: var(--space-4);
1286
+ padding-top: var(--space-4);
1287
+ border-top: 1px solid var(--line);
1288
+ }
1289
+
1290
+ .every-use-preview {
1291
+ display: flex;
1292
+ flex-direction: column;
1293
+ gap: var(--space-4);
1294
+ padding: var(--space-6);
1295
+ border: 1px dashed var(--line-strong);
1296
+ border-radius: var(--radius-md);
1297
+ }
1298
+
1299
+ .every-use-tile {
1300
+ flex: none;
1301
+ width: 28px;
1302
+ height: 28px;
1303
+ border-radius: var(--radius-sm);
1304
+ background: var(--accent-quiet);
1305
+ }
1306
+
1307
+ .every-use-help {
1308
+ margin: 0;
1309
+ color: var(--ink-3);
1310
+ font-size: var(--type-sm);
1311
+ line-height: var(--leading-xs);
1312
+ }
1313
+
1314
+ /* ---- THIS USE, in the right panel (C4) -------------------------------------- */
1315
+ .this-use {
1316
+ display: flex;
1317
+ flex-direction: column;
1318
+ }
1319
+
1320
+ .this-use-head {
1321
+ display: flex;
1322
+ flex-direction: column;
1323
+ gap: var(--space-4);
1324
+ padding: var(--space-6) var(--space-6);
1325
+ border-bottom: 1px solid var(--line);
1326
+ }
1327
+
1328
+ .this-use-titles {
1329
+ display: flex;
1330
+ flex-direction: column;
1331
+ gap: var(--space-1);
1332
+ min-width: 0;
1333
+ }
1334
+
1335
+ .this-use-caps {
1336
+ color: var(--ink-2);
1337
+ font-size: var(--type-sm);
1338
+ font-weight: var(--weight-semibold);
1339
+ line-height: var(--leading-xs);
1340
+ letter-spacing: var(--tracking-caps);
1341
+ text-transform: uppercase;
1342
+ }
1343
+
1344
+ .this-use-title {
1345
+ min-width: 0;
1346
+ overflow: hidden;
1347
+ text-overflow: ellipsis;
1348
+ white-space: nowrap;
1349
+ color: var(--ink-1);
1350
+ font-size: var(--type-lg);
1351
+ font-weight: var(--weight-semibold);
1352
+ line-height: var(--leading-sm);
1353
+ }
1354
+
1355
+ .this-use-linked {
1356
+ color: var(--ink-3);
1357
+ font-size: var(--type-sm);
1358
+ line-height: var(--leading-xs);
1359
+ }
1360
+
1361
+ /* Edit master and Detach, and the Update flow's verbs, are a house row of
1362
+ buttons (`.insp-buttons`, widgets.css): 28px house buttons, 6px apart,
1363
+ sharing the row by their words. Nothing here sizes or restyles them. */
1364
+
1365
+ /* "Reset all to master": a text link, in the props head or under the verbs. */
1366
+ .this-use-reset-all {
1367
+ padding: 0;
1368
+ border: 0;
1369
+ background: none;
1370
+ color: var(--accent-ink);
1371
+ font-size: var(--type-sm);
1372
+ line-height: var(--leading-xs);
1373
+ cursor: pointer;
1374
+ }
1375
+
1376
+ .this-use-reset-all.is-inline {
1377
+ align-self: flex-start;
1378
+ }
1379
+
1380
+ .this-use-reset-all:disabled {
1381
+ color: var(--ink-3);
1382
+ cursor: default;
1383
+ }
1384
+
1385
+ .this-use-props {
1386
+ display: flex;
1387
+ flex-direction: column;
1388
+ gap: var(--space-3);
1389
+ padding: var(--space-6) var(--space-6);
1390
+ }
1391
+
1392
+ .this-use-props-head {
1393
+ display: flex;
1394
+ align-items: center;
1395
+ justify-content: space-between;
1396
+ min-height: 28px;
1397
+ }
1398
+
1399
+ /* C4's prop rows are PropRows (UsePropRow): the label column with the dot
1400
+ and the reset, then the control, at the inspector's own type and rhythm,
1401
+ so a prop reads the same here as in the Studio. Nothing restyles them. */
1402
+
1403
+ .this-use-help {
1404
+ margin: 0;
1405
+ padding-top: var(--space-3);
1406
+ color: var(--ink-3);
1407
+ font-size: var(--type-sm);
1408
+ line-height: var(--leading-xs);
1409
+ }
1410
+
1411
+ /* C7's facts about the use in its Shot, and the master's other uses. */
1412
+ .origin-facts {
1413
+ display: grid;
1414
+ grid-template-columns: 84px 1fr;
1415
+ gap: var(--space-2) var(--space-3);
1416
+ margin: 0;
1417
+ font-size: var(--type-md);
1418
+ }
1419
+
1420
+ .origin-facts > dt {
1421
+ color: var(--ink-3);
1422
+ }
1423
+
1424
+ /* Where the use sits and when it is on screen: numbers, in the numeral face. */
1425
+ .origin-facts > dd {
1426
+ margin: 0;
1427
+ color: var(--ink-1);
1428
+ font-family: var(--font-numeric);
1429
+ font-variant-numeric: var(--numeric);
1430
+ }
1431
+
1432
+ .origin-uses {
1433
+ display: flex;
1434
+ flex-direction: column;
1435
+ gap: var(--space-2);
1436
+ margin: 0;
1437
+ padding: 0;
1438
+ list-style: none;
1439
+ }
1440
+
1441
+ .origin-use {
1442
+ display: flex;
1443
+ flex-direction: column;
1444
+ gap: var(--space-1);
1445
+ font-size: var(--type-md);
1446
+ }
1447
+
1448
+ .origin-use-changes {
1449
+ color: var(--ink-3);
1450
+ font-size: var(--type-sm);
1451
+ }
1452
+
1453
+ /* The Studio inspector's way into Components, at rest above This use. */
1454
+ .in-the-studio {
1455
+ display: flex;
1456
+ flex-direction: column;
1457
+ gap: var(--space-3);
1458
+ padding: var(--space-6);
1459
+ border-bottom: 1px solid var(--line);
1460
+ }
1461
+
1462
+ .in-the-studio-row {
1463
+ display: flex;
1464
+ align-items: center;
1465
+ gap: var(--space-3);
1466
+ min-width: 0;
1467
+ }
1468
+
1469
+ .in-the-studio-icon {
1470
+ display: flex;
1471
+ flex: none;
1472
+ color: var(--ink-2);
1473
+ }
1474
+
1475
+ .in-the-studio-name {
1476
+ min-width: 0;
1477
+ overflow: hidden;
1478
+ color: var(--ink-1);
1479
+ font-size: var(--type-md);
1480
+ font-weight: var(--weight-semibold);
1481
+ text-overflow: ellipsis;
1482
+ white-space: nowrap;
1483
+ }
1484
+
1485
+ .in-the-studio-open {
1486
+ height: var(--control-h);
1487
+ border: 1px solid var(--accent);
1488
+ border-radius: var(--radius-sm);
1489
+ background: transparent;
1490
+ color: var(--accent-ink);
1491
+ font: inherit;
1492
+ font-size: var(--type-md);
1493
+ cursor: pointer;
1494
+ }
1495
+
1496
+ .in-the-studio-open:hover {
1497
+ background: var(--surface-secondary);
1498
+ }
1499
+
1500
+ .in-the-studio > .this-use-help {
1501
+ padding-top: 0;
1502
+ }
1503
+
1504
+ /* Update available, and the list of what it would drop. */
1505
+ .this-use-update {
1506
+ display: flex;
1507
+ flex-direction: column;
1508
+ gap: var(--space-4);
1509
+ }
1510
+
1511
+ .this-use-update-row {
1512
+ display: flex;
1513
+ align-items: center;
1514
+ justify-content: space-between;
1515
+ gap: var(--space-4);
1516
+ }
1517
+
1518
+ .this-use-update-confirm {
1519
+ display: flex;
1520
+ flex-direction: column;
1521
+ gap: var(--space-4);
1522
+ }
1523
+
1524
+ /* Cancel and Done are house buttons in the row's recipe (28px, level with
1525
+ the 28px accent Update beside them). They keep their words rather than
1526
+ taking the rest of the row: the accent verb is the one that leads. */
1527
+ .this-use-update-confirm .btn {
1528
+ flex: none;
1529
+ }
1530
+
1531
+ .this-use-removed {
1532
+ display: flex;
1533
+ flex-direction: column;
1534
+ gap: var(--space-2);
1535
+ margin: 0;
1536
+ padding: 0;
1537
+ list-style: none;
1538
+ }
1539
+
1540
+ .this-use-removed li {
1541
+ display: flex;
1542
+ gap: var(--space-4);
1543
+ font-size: var(--type-sm);
1544
+ line-height: var(--leading-xs);
1545
+ }
1546
+
1547
+ .this-use-removed-where {
1548
+ color: var(--ink-1);
1549
+ }
1550
+
1551
+ .this-use-removed-keys {
1552
+ min-width: 0;
1553
+ overflow-wrap: anywhere;
1554
+ color: var(--ink-3);
1555
+ font-family: var(--font-mono);
1556
+ }
1557
+
1558
+ /* The props head's Reset stays readable: the section's actions dim otherwise. */
1559
+ .insp-section-actions:has(> .props-head-reset) {
1560
+ opacity: 1;
1561
+ }