cursedbelt 1.0.0 → 2.3.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 (533) hide show
  1. package/dist/client/index.js +1 -1
  2. package/dist/core/category/index.d.ts.map +1 -1
  3. package/dist/core/category/index.js +2 -1
  4. package/dist/core/category/index.js.map +1 -1
  5. package/dist/core/category/types.js +1 -1
  6. package/dist/core/category/types.js.map +1 -1
  7. package/dist/core/file-tree/fileTreeModel.d.ts +49 -0
  8. package/dist/core/file-tree/fileTreeModel.d.ts.map +1 -1
  9. package/dist/core/file-tree/fileTreeModel.js +84 -0
  10. package/dist/core/file-tree/fileTreeModel.js.map +1 -1
  11. package/dist/core/layout/index.js +1 -1
  12. package/dist/core/layout/index.js.map +1 -1
  13. package/dist/core/media/index.js +1 -1
  14. package/dist/core/media/index.js.map +1 -1
  15. package/dist/core/media/types.js +1 -1
  16. package/dist/core/media/types.js.map +1 -1
  17. package/dist/core/media/uploadLimits.js +1 -1
  18. package/dist/core/media/uploadLimits.js.map +1 -1
  19. package/dist/core/sharing/model.d.ts +1 -1
  20. package/dist/ctgr/index.js +1 -1
  21. package/dist/index.js +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/react/activity-bar/ActivityBar.d.ts +17 -0
  24. package/dist/react/activity-bar/ActivityBar.d.ts.map +1 -1
  25. package/dist/react/activity-bar/ActivityBar.js.map +1 -1
  26. package/dist/react/analytics/index.d.ts +1 -1
  27. package/dist/react/analytics/index.js +1 -1
  28. package/dist/react/chat/MessageComposer.d.ts.map +1 -1
  29. package/dist/react/chat/MessageComposer.js +5 -4
  30. package/dist/react/chat/MessageComposer.js.map +1 -1
  31. package/dist/react/components/Button.d.ts.map +1 -1
  32. package/dist/react/components/Button.js +3 -2
  33. package/dist/react/components/Button.js.map +1 -1
  34. package/dist/react/components/Checkbox.d.ts +19 -3
  35. package/dist/react/components/Checkbox.d.ts.map +1 -1
  36. package/dist/react/components/Checkbox.js +29 -12
  37. package/dist/react/components/Checkbox.js.map +1 -1
  38. package/dist/react/components/CodeArea.d.ts.map +1 -1
  39. package/dist/react/components/CodeArea.js +2 -1
  40. package/dist/react/components/CodeArea.js.map +1 -1
  41. package/dist/react/components/Collapsible.d.ts.map +1 -1
  42. package/dist/react/components/Collapsible.js +2 -1
  43. package/dist/react/components/Collapsible.js.map +1 -1
  44. package/dist/react/components/ComboboxField.d.ts.map +1 -1
  45. package/dist/react/components/ComboboxField.js +3 -2
  46. package/dist/react/components/ComboboxField.js.map +1 -1
  47. package/dist/react/components/CopyButton.d.ts.map +1 -1
  48. package/dist/react/components/CopyButton.js +2 -1
  49. package/dist/react/components/CopyButton.js.map +1 -1
  50. package/dist/react/components/DataTable/ColumnChecklist.d.ts.map +1 -1
  51. package/dist/react/components/DataTable/ColumnChecklist.js +2 -1
  52. package/dist/react/components/DataTable/ColumnChecklist.js.map +1 -1
  53. package/dist/react/components/DataTable/Pagination.d.ts.map +1 -1
  54. package/dist/react/components/DataTable/Pagination.js +2 -1
  55. package/dist/react/components/DataTable/Pagination.js.map +1 -1
  56. package/dist/react/components/DataTable/SortHeader.d.ts.map +1 -1
  57. package/dist/react/components/DataTable/SortHeader.js +2 -1
  58. package/dist/react/components/DataTable/SortHeader.js.map +1 -1
  59. package/dist/react/components/DataTable/TableFilterBuilder.d.ts +61 -0
  60. package/dist/react/components/DataTable/TableFilterBuilder.d.ts.map +1 -0
  61. package/dist/react/components/DataTable/{FilterBuilder.js → TableFilterBuilder.js} +26 -3
  62. package/dist/react/components/DataTable/TableFilterBuilder.js.map +1 -0
  63. package/dist/react/components/DataTable/Toolbar.d.ts +1 -1
  64. package/dist/react/components/DataTable/Toolbar.js +3 -3
  65. package/dist/react/components/DataTable/Toolbar.js.map +1 -1
  66. package/dist/react/components/DataTable/cells/LinkCell.d.ts.map +1 -1
  67. package/dist/react/components/DataTable/cells/LinkCell.js +2 -1
  68. package/dist/react/components/DataTable/cells/LinkCell.js.map +1 -1
  69. package/dist/react/components/DataTable/index.d.ts +1 -1
  70. package/dist/react/components/DataTable/index.d.ts.map +1 -1
  71. package/dist/react/components/DataTable/index.js +4 -1
  72. package/dist/react/components/DataTable/index.js.map +1 -1
  73. package/dist/react/components/DragHandle.d.ts.map +1 -1
  74. package/dist/react/components/DragHandle.js +2 -1
  75. package/dist/react/components/DragHandle.js.map +1 -1
  76. package/dist/react/components/EmojiField.d.ts.map +1 -1
  77. package/dist/react/components/EmojiField.js +2 -1
  78. package/dist/react/components/EmojiField.js.map +1 -1
  79. package/dist/react/components/EventTimeline.d.ts +3 -2
  80. package/dist/react/components/EventTimeline.d.ts.map +1 -1
  81. package/dist/react/components/EventTimeline.js +3 -2
  82. package/dist/react/components/EventTimeline.js.map +1 -1
  83. package/dist/react/components/IconButton.d.ts +1 -1
  84. package/dist/react/components/IconButton.js +1 -1
  85. package/dist/react/components/InfoHint.d.ts.map +1 -1
  86. package/dist/react/components/InfoHint.js +5 -4
  87. package/dist/react/components/InfoHint.js.map +1 -1
  88. package/dist/react/components/InheritBadge.js +1 -1
  89. package/dist/react/components/InheritBadge.js.map +1 -1
  90. package/dist/react/components/InlineEditableText.d.ts.map +1 -1
  91. package/dist/react/components/InlineEditableText.js +2 -1
  92. package/dist/react/components/InlineEditableText.js.map +1 -1
  93. package/dist/react/components/MeterList.d.ts.map +1 -1
  94. package/dist/react/components/MeterList.js +2 -1
  95. package/dist/react/components/MeterList.js.map +1 -1
  96. package/dist/react/components/PathText.d.ts +2 -2
  97. package/dist/react/components/PathText.d.ts.map +1 -1
  98. package/dist/react/components/PathText.js +2 -1
  99. package/dist/react/components/PathText.js.map +1 -1
  100. package/dist/react/components/RatingField.d.ts.map +1 -1
  101. package/dist/react/components/RatingField.js +2 -1
  102. package/dist/react/components/RatingField.js.map +1 -1
  103. package/dist/react/components/SecretInput.js +3 -2
  104. package/dist/react/components/SecretInput.js.map +1 -1
  105. package/dist/react/components/SegmentedControl.d.ts.map +1 -1
  106. package/dist/react/components/SegmentedControl.js +2 -1
  107. package/dist/react/components/SegmentedControl.js.map +1 -1
  108. package/dist/react/components/StarRating.d.ts.map +1 -1
  109. package/dist/react/components/StarRating.js +9 -5
  110. package/dist/react/components/StarRating.js.map +1 -1
  111. package/dist/react/components/StatStrip.d.ts.map +1 -1
  112. package/dist/react/components/StatStrip.js +2 -1
  113. package/dist/react/components/StatStrip.js.map +1 -1
  114. package/dist/react/components/StatTile.d.ts.map +1 -1
  115. package/dist/react/components/StatTile.js +3 -2
  116. package/dist/react/components/StatTile.js.map +1 -1
  117. package/dist/react/components/Tabs.d.ts.map +1 -1
  118. package/dist/react/components/Tabs.js +2 -1
  119. package/dist/react/components/Tabs.js.map +1 -1
  120. package/dist/react/components/TruncatedText.d.ts +2 -1
  121. package/dist/react/components/TruncatedText.d.ts.map +1 -1
  122. package/dist/react/components/TruncatedText.js +2 -1
  123. package/dist/react/components/TruncatedText.js.map +1 -1
  124. package/dist/react/components/calendar/MonthGrid.d.ts.map +1 -1
  125. package/dist/react/components/calendar/MonthGrid.js +2 -1
  126. package/dist/react/components/calendar/MonthGrid.js.map +1 -1
  127. package/dist/react/components/calendar/WeekView.d.ts.map +1 -1
  128. package/dist/react/components/calendar/WeekView.js +2 -1
  129. package/dist/react/components/calendar/WeekView.js.map +1 -1
  130. package/dist/react/components/revealOnHover.d.ts.map +1 -1
  131. package/dist/react/components/revealOnHover.js +2 -1
  132. package/dist/react/components/revealOnHover.js.map +1 -1
  133. package/dist/react/file-tree/FileTree.d.ts +50 -1
  134. package/dist/react/file-tree/FileTree.d.ts.map +1 -1
  135. package/dist/react/file-tree/FileTree.js +234 -6
  136. package/dist/react/file-tree/FileTree.js.map +1 -1
  137. package/dist/react/file-tree/fileTree.css +52 -0
  138. package/dist/react/filter-rail/FilterRail.d.ts.map +1 -1
  139. package/dist/react/filter-rail/FilterRail.js +5 -4
  140. package/dist/react/filter-rail/FilterRail.js.map +1 -1
  141. package/dist/react/folder-tree/FolderTreeRail.d.ts.map +1 -1
  142. package/dist/react/folder-tree/FolderTreeRail.js +2 -1
  143. package/dist/react/folder-tree/FolderTreeRail.js.map +1 -1
  144. package/dist/react/index.d.ts +5 -1
  145. package/dist/react/index.d.ts.map +1 -1
  146. package/dist/react/index.js +5 -1
  147. package/dist/react/index.js.map +1 -1
  148. package/dist/react/layoutEngine/index.js +1 -1
  149. package/dist/react/layoutEngine/index.js.map +1 -1
  150. package/dist/react/lib/field.d.ts.map +1 -1
  151. package/dist/react/lib/field.js +3 -2
  152. package/dist/react/lib/field.js.map +1 -1
  153. package/dist/react/lib/floatingStyles.d.ts.map +1 -1
  154. package/dist/react/lib/floatingStyles.js +2 -1
  155. package/dist/react/lib/floatingStyles.js.map +1 -1
  156. package/dist/react/lib/tapTarget.d.ts +96 -0
  157. package/dist/react/lib/tapTarget.d.ts.map +1 -0
  158. package/dist/react/lib/tapTarget.js +96 -0
  159. package/dist/react/lib/tapTarget.js.map +1 -0
  160. package/dist/react/media/VideoTrimmer.d.ts +1 -1
  161. package/dist/react/media/VideoTrimmer.js +1 -1
  162. package/dist/react/media/denseGallery.css +3 -3
  163. package/dist/react/media/ffmpegWasm.js +2 -2
  164. package/dist/react/media/ffmpegWasm.js.map +1 -1
  165. package/dist/react/media/videoPlayer.css +42 -0
  166. package/dist/react/namespace/NamespaceTargetCapsule.d.ts +2 -2
  167. package/dist/react/namespace/NamespaceTargetCapsule.d.ts.map +1 -1
  168. package/dist/react/nav/BreadcrumbTrail.d.ts.map +1 -1
  169. package/dist/react/nav/BreadcrumbTrail.js +4 -3
  170. package/dist/react/nav/BreadcrumbTrail.js.map +1 -1
  171. package/dist/react/nav/HubTileGrid.d.ts.map +1 -1
  172. package/dist/react/nav/HubTileGrid.js +2 -1
  173. package/dist/react/nav/HubTileGrid.js.map +1 -1
  174. package/dist/react/nav/SideNav.d.ts.map +1 -1
  175. package/dist/react/nav/SideNav.js +4 -3
  176. package/dist/react/nav/SideNav.js.map +1 -1
  177. package/dist/react/nav/SideNavCustomize.d.ts.map +1 -1
  178. package/dist/react/nav/SideNavCustomize.js +2 -1
  179. package/dist/react/nav/SideNavCustomize.js.map +1 -1
  180. package/dist/react/palette/CommandPalette.d.ts.map +1 -1
  181. package/dist/react/palette/CommandPalette.js +3 -2
  182. package/dist/react/palette/CommandPalette.js.map +1 -1
  183. package/dist/server/drivers/pooledControlStores.pg.test.js +1 -0
  184. package/dist/server/drivers/pooledControlStores.pg.test.js.map +1 -1
  185. package/dist/server/drivers/pooledIdentityStore.pg.test.js +1 -0
  186. package/dist/server/drivers/pooledIdentityStore.pg.test.js.map +1 -1
  187. package/dist/server/drivers/retentionPolicy.pg.test.js +1 -0
  188. package/dist/server/drivers/retentionPolicy.pg.test.js.map +1 -1
  189. package/dist/server/guard/argon2Binding.d.ts +1 -1
  190. package/dist/server/guard/argon2Binding.js +1 -1
  191. package/dist/server/incidents/store.d.ts +3 -3
  192. package/dist/server/index.js +1 -1
  193. package/dist/server/index.js.map +1 -1
  194. package/dist/server/master-lock/masterLock.d.ts +1 -1
  195. package/dist/server/media-bun/index.js +1 -1
  196. package/dist/server/media-bun/index.js.map +1 -1
  197. package/dist/server/paths/appDataHome.d.ts +20 -0
  198. package/dist/server/paths/appDataHome.d.ts.map +1 -0
  199. package/dist/server/paths/appDataHome.js +69 -0
  200. package/dist/server/paths/appDataHome.js.map +1 -0
  201. package/dist/server/retention/archive.d.ts +3 -4
  202. package/dist/server/retention/archive.d.ts.map +1 -1
  203. package/dist/server/retention/archive.js +20 -15
  204. package/dist/server/retention/archive.js.map +1 -1
  205. package/dist/server/retention/index.d.ts +1 -1
  206. package/dist/server/retention/index.js +1 -1
  207. package/dist/server/retention/policy.d.ts +2 -2
  208. package/dist/server/retention/policy.d.ts.map +1 -1
  209. package/dist/server/retention/policy.js +1 -1
  210. package/dist/server/retention/store.d.ts.map +1 -1
  211. package/dist/server/retention/store.js +27 -20
  212. package/dist/server/retention/store.js.map +1 -1
  213. package/dist/server/runtime/localHost.d.ts +10 -5
  214. package/dist/server/runtime/localHost.d.ts.map +1 -1
  215. package/dist/server/runtime/localHost.js +12 -8
  216. package/dist/server/runtime/localHost.js.map +1 -1
  217. package/dist/server/runtime/meterRollup.pg.test.js +1 -0
  218. package/dist/server/runtime/meterRollup.pg.test.js.map +1 -1
  219. package/dist/server/runtime/recipe.d.ts +4 -4
  220. package/dist/server/runtime/retentionJob.pg.test.js +1 -0
  221. package/dist/server/runtime/retentionJob.pg.test.js.map +1 -1
  222. package/dist/server/search/pgSearchProvider.pg.test.js +1 -0
  223. package/dist/server/search/pgSearchProvider.pg.test.js.map +1 -1
  224. package/dist/shared/errors.d.ts +1 -1
  225. package/dist/shared/errors.js +1 -1
  226. package/dist/styles-static.css +391 -0
  227. package/dist/styles.css +27 -0
  228. package/package.json +19 -167
  229. package/scripts/generateStaticStyles.ts +122 -0
  230. package/scripts/publicSurface.ts +455 -0
  231. package/scripts/testTmpRoot.ts +34 -5
  232. package/src/client/index.ts +1 -1
  233. package/src/core/category/index.ts +2 -1
  234. package/src/core/category/types.ts +1 -1
  235. package/src/core/file-tree/fileTreeModel.spec.ts +134 -0
  236. package/src/core/file-tree/fileTreeModel.ts +104 -0
  237. package/src/core/layout/index.ts +1 -1
  238. package/src/core/media/index.ts +1 -1
  239. package/src/core/media/types.ts +1 -1
  240. package/src/core/media/uploadLimits.ts +1 -1
  241. package/src/core/sharing/model.ts +1 -1
  242. package/src/ctgr/index.ts +1 -1
  243. package/src/declaredDepsAreImported.spec.ts +87 -0
  244. package/src/demoFixture.spec.ts +133 -0
  245. package/src/index.ts +1 -1
  246. package/src/lockfileIsTracked.spec.ts +50 -0
  247. package/src/namedSubpathsResolve.spec.ts +119 -0
  248. package/src/publicSurface.spec.ts +72 -0
  249. package/src/react/activity-bar/ActivityBar.tsx +17 -0
  250. package/src/react/analytics/index.ts +1 -1
  251. package/src/react/chat/MessageComposer.tsx +5 -4
  252. package/src/react/components/Button.tsx +3 -2
  253. package/src/react/components/Checkbox.spec.tsx +51 -0
  254. package/src/react/components/Checkbox.tsx +68 -26
  255. package/src/react/components/CodeArea.tsx +2 -1
  256. package/src/react/components/CodeChip.spec.tsx +2 -2
  257. package/src/react/components/Collapsible.tsx +2 -1
  258. package/src/react/components/ComboboxField.tsx +3 -2
  259. package/src/react/components/CopyButton.tsx +2 -1
  260. package/src/react/components/CopyableText.spec.tsx +1 -1
  261. package/src/react/components/DataTable/ColumnChecklist.tsx +2 -1
  262. package/src/react/components/DataTable/Pagination.tsx +2 -1
  263. package/src/react/components/DataTable/SortHeader.tsx +2 -1
  264. package/src/react/components/DataTable/{FilterBuilder.tsx → TableFilterBuilder.tsx} +33 -5
  265. package/src/react/components/DataTable/Toolbar.tsx +3 -3
  266. package/src/react/components/DataTable/cells/LinkCell.tsx +2 -1
  267. package/src/react/components/DataTable/index.ts +8 -1
  268. package/src/react/components/DragHandle.tsx +2 -1
  269. package/src/react/components/EmojiField.tsx +2 -1
  270. package/src/react/components/EventTimeline.tsx +3 -2
  271. package/src/react/components/FileLocation.spec.tsx +1 -1
  272. package/src/react/components/IconButton.tsx +1 -1
  273. package/src/react/components/InfoHint.tsx +5 -4
  274. package/src/react/components/InheritBadge.tsx +1 -1
  275. package/src/react/components/InlineEditableText.tsx +2 -1
  276. package/src/react/components/MeterList.tsx +2 -1
  277. package/src/react/components/PathText.tsx +4 -3
  278. package/src/react/components/RatingField.tsx +2 -1
  279. package/src/react/components/SecretInput.tsx +3 -3
  280. package/src/react/components/SegmentedControl.tsx +2 -2
  281. package/src/react/components/StarRating.spec.tsx +2 -2
  282. package/src/react/components/StarRating.tsx +9 -5
  283. package/src/react/components/StatStrip.tsx +2 -1
  284. package/src/react/components/StatTile.tsx +3 -3
  285. package/src/react/components/Tabs.spec.tsx +3 -2
  286. package/src/react/components/Tabs.tsx +2 -1
  287. package/src/react/components/TruncatedText.tsx +2 -1
  288. package/src/react/components/calendar/MonthGrid.spec.tsx +2 -1
  289. package/src/react/components/calendar/MonthGrid.tsx +2 -1
  290. package/src/react/components/calendar/WeekView.tsx +2 -1
  291. package/src/react/components/revealOnHover.ts +3 -2
  292. package/src/react/file-tree/FileTree.spec.tsx +248 -0
  293. package/src/react/file-tree/FileTree.tsx +304 -4
  294. package/src/react/file-tree/fileTree.css +52 -0
  295. package/src/react/file-tree/fileTreeGeometry.fixture.json +151 -0
  296. package/src/react/file-tree/fileTreeGeometry.spec.ts +33 -52
  297. package/src/react/filter-rail/FilterRail.spec.tsx +2 -1
  298. package/src/react/filter-rail/FilterRail.tsx +5 -4
  299. package/src/react/folder-tree/FolderTreeRail.tsx +2 -1
  300. package/src/react/index.ts +13 -3
  301. package/src/react/layoutEngine/index.ts +1 -1
  302. package/src/react/layoutEngine/types.ts +1 -1
  303. package/src/react/lib/field.ts +4 -2
  304. package/src/react/lib/floatingStyles.spec.ts +2 -1
  305. package/src/react/lib/floatingStyles.ts +3 -1
  306. package/src/react/lib/tapTarget.ts +100 -0
  307. package/src/react/media/MaskPainter.tsx +2 -2
  308. package/src/react/media/VideoTrimmer.tsx +1 -1
  309. package/src/react/media/denseGallery.css +3 -3
  310. package/src/react/media/ffmpegWasm.ts +2 -2
  311. package/src/react/media/videoPlayer.css +42 -0
  312. package/src/react/namespace/NamespaceTargetCapsule.tsx +2 -2
  313. package/src/react/nav/BreadcrumbTrail.tsx +4 -3
  314. package/src/react/nav/HubTileGrid.tsx +2 -1
  315. package/src/react/nav/SideNav.tsx +4 -3
  316. package/src/react/nav/SideNavCustomize.tsx +2 -1
  317. package/src/react/palette/CommandPalette.tsx +3 -2
  318. package/src/server/ctgr.ts +1 -1
  319. package/src/server/drivers/pooledControlStores.pg.test.ts +1 -0
  320. package/src/server/drivers/pooledIdentityStore.pg.test.ts +1 -0
  321. package/src/server/drivers/retentionPolicy.pg.test.ts +1 -0
  322. package/src/server/guard/argon2Binding.ts +1 -1
  323. package/src/server/incidents/store.ts +3 -3
  324. package/src/server/index.ts +1 -1
  325. package/src/server/master-lock/masterLock.spec.ts +18 -2
  326. package/src/server/master-lock/masterLock.ts +1 -1
  327. package/src/server/media-bun/image.spec.ts +1 -0
  328. package/src/server/media-bun/index.ts +1 -1
  329. package/src/server/media-bun/video.spec.ts +1 -0
  330. package/src/server/paths/appDataHome.spec.ts +87 -0
  331. package/src/server/paths/appDataHome.ts +84 -0
  332. package/src/server/retention/archive.spec.ts +26 -4
  333. package/src/server/retention/archive.ts +20 -15
  334. package/src/server/retention/index.ts +1 -1
  335. package/src/server/retention/policy.ts +2 -2
  336. package/src/server/retention/store.spec.ts +38 -10
  337. package/src/server/retention/store.ts +26 -19
  338. package/src/server/runtime/localHost.spec.ts +22 -3
  339. package/src/server/runtime/localHost.ts +12 -9
  340. package/src/server/runtime/meterRollup.pg.test.ts +1 -0
  341. package/src/server/runtime/recipe.ts +4 -4
  342. package/src/server/runtime/retentionJob.pg.test.ts +1 -0
  343. package/src/server/search/pgSearchProvider.pg.test.ts +1 -0
  344. package/src/server/storage/binaryServerProcessing.integration.spec.ts +6 -2
  345. package/src/server/storage/chunked.integration.spec.ts +5 -2
  346. package/src/server/storage/fileUploadClient-chunked.integration.spec.ts +5 -2
  347. package/src/server/storage/files/adapter.photo.display.spec.ts +1 -0
  348. package/src/server/storage/imageThumbnail.spec.ts +1 -0
  349. package/src/server/storage/transcode.integration.spec.ts +5 -2
  350. package/src/server/storage/videoProcessor.posterOnly.spec.ts +1 -0
  351. package/src/shared/errors.ts +1 -1
  352. package/src/skippedTestsAreAnswered.spec.ts +215 -0
  353. package/src/styles-static.css +391 -0
  354. package/src/styles.css +27 -0
  355. package/src/stylesStaticMatches.spec.ts +134 -0
  356. package/src/tapTargetStylesheet.spec.ts +150 -0
  357. package/src/testTmpRoot.spec.ts +102 -0
  358. package/dist/core/duplicates/index.d.ts +0 -116
  359. package/dist/core/duplicates/index.d.ts.map +0 -1
  360. package/dist/core/duplicates/index.js +0 -178
  361. package/dist/core/duplicates/index.js.map +0 -1
  362. package/dist/core/namespace/helpers.d.ts +0 -14
  363. package/dist/core/namespace/helpers.d.ts.map +0 -1
  364. package/dist/core/namespace/helpers.js +0 -29
  365. package/dist/core/namespace/helpers.js.map +0 -1
  366. package/dist/core/namespace/index.d.ts +0 -4
  367. package/dist/core/namespace/index.d.ts.map +0 -1
  368. package/dist/core/namespace/index.js +0 -6
  369. package/dist/core/namespace/index.js.map +0 -1
  370. package/dist/core/namespace/memoryStore.d.ts +0 -19
  371. package/dist/core/namespace/memoryStore.d.ts.map +0 -1
  372. package/dist/core/namespace/memoryStore.js +0 -70
  373. package/dist/core/namespace/memoryStore.js.map +0 -1
  374. package/dist/core/namespace/types.d.ts +0 -44
  375. package/dist/core/namespace/types.d.ts.map +0 -1
  376. package/dist/core/namespace/types.js +0 -8
  377. package/dist/core/namespace/types.js.map +0 -1
  378. package/dist/game/core/DisposeRegistry.d.ts +0 -42
  379. package/dist/game/core/DisposeRegistry.d.ts.map +0 -1
  380. package/dist/game/core/DisposeRegistry.js +0 -67
  381. package/dist/game/core/DisposeRegistry.js.map +0 -1
  382. package/dist/game/core/drawBudget.d.ts +0 -26
  383. package/dist/game/core/drawBudget.d.ts.map +0 -1
  384. package/dist/game/core/drawBudget.js +0 -55
  385. package/dist/game/core/drawBudget.js.map +0 -1
  386. package/dist/game/core/fixedTimestep.d.ts +0 -38
  387. package/dist/game/core/fixedTimestep.d.ts.map +0 -1
  388. package/dist/game/core/fixedTimestep.js +0 -47
  389. package/dist/game/core/fixedTimestep.js.map +0 -1
  390. package/dist/game/core/index.d.ts +0 -9
  391. package/dist/game/core/index.d.ts.map +0 -1
  392. package/dist/game/core/index.js +0 -8
  393. package/dist/game/core/index.js.map +0 -1
  394. package/dist/game/core/inputCollector.d.ts +0 -82
  395. package/dist/game/core/inputCollector.d.ts.map +0 -1
  396. package/dist/game/core/inputCollector.js +0 -176
  397. package/dist/game/core/inputCollector.js.map +0 -1
  398. package/dist/game/core/resizeCanvas.d.ts +0 -19
  399. package/dist/game/core/resizeCanvas.d.ts.map +0 -1
  400. package/dist/game/core/resizeCanvas.js +0 -29
  401. package/dist/game/core/resizeCanvas.js.map +0 -1
  402. package/dist/game/react/index.d.ts +0 -3
  403. package/dist/game/react/index.d.ts.map +0 -1
  404. package/dist/game/react/index.js +0 -5
  405. package/dist/game/react/index.js.map +0 -1
  406. package/dist/game/react/useGameEngine.d.ts +0 -64
  407. package/dist/game/react/useGameEngine.d.ts.map +0 -1
  408. package/dist/game/react/useGameEngine.js +0 -78
  409. package/dist/game/react/useGameEngine.js.map +0 -1
  410. package/dist/react/canvas/CanvasNavHUD.d.ts +0 -64
  411. package/dist/react/canvas/CanvasNavHUD.d.ts.map +0 -1
  412. package/dist/react/canvas/CanvasNavHUD.js +0 -58
  413. package/dist/react/canvas/CanvasNavHUD.js.map +0 -1
  414. package/dist/react/canvas/fitLabel.d.ts +0 -53
  415. package/dist/react/canvas/fitLabel.d.ts.map +0 -1
  416. package/dist/react/canvas/fitLabel.js +0 -104
  417. package/dist/react/canvas/fitLabel.js.map +0 -1
  418. package/dist/react/canvas/index.d.ts +0 -4
  419. package/dist/react/canvas/index.d.ts.map +0 -1
  420. package/dist/react/canvas/index.js +0 -4
  421. package/dist/react/canvas/index.js.map +0 -1
  422. package/dist/react/canvas/lod.d.ts +0 -40
  423. package/dist/react/canvas/lod.d.ts.map +0 -1
  424. package/dist/react/canvas/lod.js +0 -37
  425. package/dist/react/canvas/lod.js.map +0 -1
  426. package/dist/react/components/DataTable/FilterBuilder.d.ts +0 -38
  427. package/dist/react/components/DataTable/FilterBuilder.d.ts.map +0 -1
  428. package/dist/react/components/DataTable/FilterBuilder.js.map +0 -1
  429. package/dist/react/seo/HeadProvider.d.ts +0 -14
  430. package/dist/react/seo/HeadProvider.d.ts.map +0 -1
  431. package/dist/react/seo/HeadProvider.js +0 -44
  432. package/dist/react/seo/HeadProvider.js.map +0 -1
  433. package/dist/react/seo/applyHeadToDocument.d.ts +0 -3
  434. package/dist/react/seo/applyHeadToDocument.d.ts.map +0 -1
  435. package/dist/react/seo/applyHeadToDocument.js +0 -66
  436. package/dist/react/seo/applyHeadToDocument.js.map +0 -1
  437. package/dist/react/seo/index.d.ts +0 -3
  438. package/dist/react/seo/index.d.ts.map +0 -1
  439. package/dist/react/seo/index.js +0 -7
  440. package/dist/react/seo/index.js.map +0 -1
  441. package/dist/react/timeline/ClipView.d.ts +0 -29
  442. package/dist/react/timeline/ClipView.d.ts.map +0 -1
  443. package/dist/react/timeline/ClipView.js +0 -53
  444. package/dist/react/timeline/ClipView.js.map +0 -1
  445. package/dist/react/timeline/Playhead.d.ts +0 -16
  446. package/dist/react/timeline/Playhead.d.ts.map +0 -1
  447. package/dist/react/timeline/Playhead.js +0 -26
  448. package/dist/react/timeline/Playhead.js.map +0 -1
  449. package/dist/react/timeline/TimeRuler.d.ts +0 -21
  450. package/dist/react/timeline/TimeRuler.d.ts.map +0 -1
  451. package/dist/react/timeline/TimeRuler.js +0 -31
  452. package/dist/react/timeline/TimeRuler.js.map +0 -1
  453. package/dist/react/timeline/TimelineSurface.d.ts +0 -29
  454. package/dist/react/timeline/TimelineSurface.d.ts.map +0 -1
  455. package/dist/react/timeline/TimelineSurface.js +0 -56
  456. package/dist/react/timeline/TimelineSurface.js.map +0 -1
  457. package/dist/react/timeline/TrackLane.d.ts +0 -31
  458. package/dist/react/timeline/TrackLane.d.ts.map +0 -1
  459. package/dist/react/timeline/TrackLane.js +0 -32
  460. package/dist/react/timeline/TrackLane.js.map +0 -1
  461. package/dist/react/timeline/index.d.ts +0 -6
  462. package/dist/react/timeline/index.d.ts.map +0 -1
  463. package/dist/react/timeline/index.js +0 -12
  464. package/dist/react/timeline/index.js.map +0 -1
  465. package/dist/server/private-media/index.d.ts +0 -7
  466. package/dist/server/private-media/index.d.ts.map +0 -1
  467. package/dist/server/private-media/index.js +0 -13
  468. package/dist/server/private-media/index.js.map +0 -1
  469. package/dist/server/seo/index.d.ts +0 -3
  470. package/dist/server/seo/index.d.ts.map +0 -1
  471. package/dist/server/seo/index.js +0 -6
  472. package/dist/server/seo/index.js.map +0 -1
  473. package/dist/server/seo/mountSeoRoutes.d.ts +0 -9
  474. package/dist/server/seo/mountSeoRoutes.d.ts.map +0 -1
  475. package/dist/server/seo/mountSeoRoutes.js +0 -19
  476. package/dist/server/seo/mountSeoRoutes.js.map +0 -1
  477. package/dist/server/seo/serveHeadInjectedIndex.d.ts +0 -9
  478. package/dist/server/seo/serveHeadInjectedIndex.d.ts.map +0 -1
  479. package/dist/server/seo/serveHeadInjectedIndex.js +0 -20
  480. package/dist/server/seo/serveHeadInjectedIndex.js.map +0 -1
  481. package/dist/upload.d.ts +0 -148
  482. package/dist/upload.d.ts.map +0 -1
  483. package/dist/upload.js +0 -159
  484. package/dist/upload.js.map +0 -1
  485. package/dist/verify/runtime/index.d.ts +0 -16
  486. package/dist/verify/runtime/index.d.ts.map +0 -1
  487. package/dist/verify/runtime/index.js +0 -16
  488. package/dist/verify/runtime/index.js.map +0 -1
  489. package/scripts/demoCheck.ts +0 -42
  490. package/src/core/duplicates/index.spec.ts +0 -116
  491. package/src/core/duplicates/index.ts +0 -203
  492. package/src/core/namespace/helpers.ts +0 -31
  493. package/src/core/namespace/index.ts +0 -12
  494. package/src/core/namespace/memoryStore.ts +0 -77
  495. package/src/core/namespace/namespace.spec.ts +0 -117
  496. package/src/core/namespace/types.ts +0 -53
  497. package/src/game/core/DisposeRegistry.spec.ts +0 -53
  498. package/src/game/core/DisposeRegistry.ts +0 -70
  499. package/src/game/core/drawBudget.spec.ts +0 -51
  500. package/src/game/core/drawBudget.ts +0 -75
  501. package/src/game/core/fixedTimestep.spec.ts +0 -91
  502. package/src/game/core/fixedTimestep.ts +0 -79
  503. package/src/game/core/index.ts +0 -16
  504. package/src/game/core/inputCollector.spec.ts +0 -29
  505. package/src/game/core/inputCollector.ts +0 -245
  506. package/src/game/core/resizeCanvas.ts +0 -31
  507. package/src/game/react/index.ts +0 -10
  508. package/src/game/react/useGameEngine.ts +0 -125
  509. package/src/react/canvas/CanvasNavHUD.spec.tsx +0 -62
  510. package/src/react/canvas/CanvasNavHUD.tsx +0 -210
  511. package/src/react/canvas/fitLabel.spec.ts +0 -82
  512. package/src/react/canvas/fitLabel.ts +0 -150
  513. package/src/react/canvas/index.ts +0 -15
  514. package/src/react/canvas/lod.ts +0 -53
  515. package/src/react/seo/HeadProvider.tsx +0 -67
  516. package/src/react/seo/applyHeadToDocument.ts +0 -73
  517. package/src/react/seo/index.ts +0 -12
  518. package/src/react/seo/seo.spec.tsx +0 -101
  519. package/src/react/timeline/ClipView.tsx +0 -146
  520. package/src/react/timeline/Playhead.tsx +0 -63
  521. package/src/react/timeline/TimeRuler.tsx +0 -85
  522. package/src/react/timeline/TimelineSurface.tsx +0 -157
  523. package/src/react/timeline/TrackLane.tsx +0 -87
  524. package/src/react/timeline/index.ts +0 -12
  525. package/src/react/timeline/timeline.spec.tsx +0 -175
  526. package/src/server/private-media/index.ts +0 -45
  527. package/src/server/seo/index.ts +0 -8
  528. package/src/server/seo/mountSeoRoutes.ts +0 -37
  529. package/src/server/seo/seo.spec.ts +0 -128
  530. package/src/server/seo/serveHeadInjectedIndex.ts +0 -36
  531. package/src/upload.spec.ts +0 -300
  532. package/src/upload.ts +0 -288
  533. package/src/verify/runtime/index.ts +0 -64
@@ -0,0 +1,391 @@
1
+ /*
2
+ * cursedbelt component-class source registration.
3
+ * Consuming apps import (after `@import "tailwindcss";`):
4
+ * @import "cursedbelt/styles.css";
5
+ * @import "cursedbelt/theme.css";
6
+ * This `@source` makes Tailwind v4 scan cursedbelt's source files so the utility
7
+ * classes used by its components are generated in the app's stylesheet.
8
+ *
9
+ * ── Two entry points, and which one an app wants ─────────────────────────────
10
+ * `@source "."` is the expensive half: it points Tailwind's JIT at cursedbelt's
11
+ * ENTIRE source tree, so the app emits the union of the whole design system
12
+ * (113 KB / 846 selectors, measured in the previous generation) whether it
13
+ * renders three components or eighty. Everything else in this file is CSS the
14
+ * components genuinely need and no app can do without.
15
+ *
16
+ * A CSS `@import` takes the whole file, so the split is a second subpath:
17
+ *
18
+ * cursedbelt/styles.css this file — the real CSS + the `@source` scan
19
+ * cursedbelt/styles-static.css the same file MINUS the `@source` line
20
+ *
21
+ * The static one is for an app that pays for its own scanning — it gets the
22
+ * tooltip pointer-events fix, the Progress keyframes, the lightbox bridge, the
23
+ * ambient/glass layer and `tw-animate-css`, and emits none of cursedbelt's
24
+ * utility classes, so whatever component utilities it needs must come from
25
+ * sources IT registers. Do not hand-list cursedbelt's component files to get
26
+ * them back: a relative `@source` reaching into this package's source tree is a
27
+ * `file:` dependency wearing a stylesheet's clothes, and it is the thing the
28
+ * previous generation's 29-line-per-app arrangement is remembered for.
29
+ *
30
+ * 🔴 This header is in BOTH files, because one is generated from the other and a
31
+ * test holds them byte-identical apart from the `@source` line. Always edit
32
+ * `src/styles.css`; never `src/styles-static.css`, which
33
+ * `scripts/generateStaticStyles.ts` rewrites on every `bun run build` and
34
+ * `src/stylesStaticMatches.spec.ts` fails on when it is stale.
35
+ */
36
+
37
+ /* Animation utilities (animate-in/out, fade/zoom/slide-in-from-*) consumed by the
38
+ floating layer's FLOATING_ANIMATION and the modal/overlay family — the Tailwind v4
39
+ successor to tailwindcss-animate. Imported here so every consuming app inherits the
40
+ enter/exit motion with no per-app wiring. Lands after `@import "tailwindcss"` since
41
+ apps import this file after Tailwind. */
42
+ @import "tw-animate-css";
43
+
44
+ /*
45
+ * Typography utilities (task cbux-41) — theme-token-based replacements for the
46
+ * `uppercase tracking-wide text-muted-foreground text-xs` / `font-mono bg-…` clusters
47
+ * that were hand-rolled per call site. One class each, so a future restyle of "how a
48
+ * section header reads" or "how inline code reads" is a two-rule change here.
49
+ */
50
+
51
+ /* Category / section header label: small, bold, uppercase, wide tracking, muted.
52
+ Use for group headers, panel eyebrows, table section labels — anywhere a
53
+ "SECTION" style caption sits above real content. */
54
+ .cb-meta-label {
55
+ /* 🔴 12px, not the 11px this was until 2026-08-19 (unit 11). DESIGN.md §4 states a
56
+ FLOOR for secondary metadata and this class IS the fleet's section-label style, so
57
+ 11px here was the law being broken by the design system's own stylesheet — in a file
58
+ the `micro-typography-floor` lint did not scan, because the rule ran over `src/react`
59
+ only. It scans this file now too. */
60
+ font-size: 0.75rem; /* 12px */
61
+ font-weight: 700;
62
+ text-transform: uppercase;
63
+ letter-spacing: 0.06em;
64
+ color: var(--muted-foreground);
65
+ /* 🔴 NOT `user-select: none`, which this carried until 2026-08-23 (owner report:
66
+ *"I cannot highlight text on the card"* — the KPI tiles on orch's Insights board).
67
+ This class is the label of every stat tile, table section and panel eyebrow in the
68
+ fleet, i.e. the TOP-LEFT of a card and the natural place a drag-select starts.
69
+ Chrome refuses to begin a selection whose anchor is in an unselectable node, so one
70
+ declaration here made whole cards feel unselectable even though the value beside the
71
+ label never was. A label is content — it is what tells you what the number you are
72
+ copying MEANS — so it is selectable like everything else. Unselectable text belongs
73
+ on things that are gestures rather than content: a drag handle, a menu item, a
74
+ slider, a line-number gutter. */
75
+ }
76
+
77
+ /* Inline/block monospace "code" surface: mono font on the sunken-surface token
78
+ (never a hardcoded dark-slate box) — used for code snippets, IDs, hashes, and
79
+ other literal/technical values that want to read as data, not prose. */
80
+ .cb-code {
81
+ font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
82
+ font-size: 0.75rem; /* 12px */
83
+ line-height: 1.5;
84
+ background-color: var(--surface-sunken);
85
+ color: var(--foreground);
86
+ border-radius: var(--radius-sm);
87
+ padding: 0.5rem 0.625rem;
88
+ }
89
+
90
+ /* Indeterminate sweep for the Progress bar (no `value`): the 1/3-width fill slides
91
+ across the track on loop. Registered as a Tailwind theme animation so the
92
+ `animate-progress-indeterminate` utility is generated in consuming apps. */
93
+ @theme {
94
+ --animate-progress-indeterminate: progress-indeterminate 1.2s ease-in-out infinite;
95
+ }
96
+ @keyframes progress-indeterminate {
97
+ from {
98
+ transform: translateX(-100%);
99
+ }
100
+ to {
101
+ transform: translateX(300%);
102
+ }
103
+ }
104
+
105
+ /*
106
+ * Media subsystem (task 19) theme bridge — map the design tokens onto the CSS custom
107
+ * properties of yet-another-react-lightbox so the lightbox reads as part of the app
108
+ * (and its backdrop tracks light/dark instead of staying a fixed black). The doubled
109
+ * `.yarl__root.yarl__root` selector outranks YARL's own `.yarl__root` defaults no
110
+ * matter the stylesheet load order. The lightbox is an always-dark overlay, so the
111
+ * controls stay light; only the surfaces + accents derive from tokens.
112
+ */
113
+ .yarl__root.yarl__root {
114
+ --yarl__color_backdrop: color-mix(in srgb, #000 90%, var(--background)); /* guardrails-ignore no-hardcoded-colors: third-party yarl lightbox library CSS custom properties require literal color values */
115
+ --yarl__color_button: rgb(255 255 255 / 0.78); /* guardrails-ignore no-hardcoded-colors: third-party yarl lightbox library CSS custom properties require literal color values */
116
+ --yarl__color_button_active: #ffffff; /* guardrails-ignore no-hardcoded-colors: third-party yarl lightbox library CSS custom properties require literal color values */
117
+ --yarl__color_button_disabled: rgb(255 255 255 / 0.35); /* guardrails-ignore no-hardcoded-colors: third-party yarl lightbox library CSS custom properties require literal color values */
118
+ --yarl__slide_icon_loading_color: var(--accent);
119
+ --yarl__slide_icon_error_color: var(--destructive);
120
+ --yarl__counter_color: rgb(255 255 255 / 0.75); /* guardrails-ignore no-hardcoded-colors: third-party yarl lightbox library CSS custom properties require literal color values */
121
+
122
+ /* Thumbnails strip → token surfaces + accent active border. */
123
+ --yarl__thumbnails_container_background_color: transparent;
124
+ --yarl__thumbnails_thumbnail_background: var(--card-overlay);
125
+ --yarl__thumbnails_thumbnail_border_color: var(--border-strong);
126
+ --yarl__thumbnails_thumbnail_active_border_color: var(--accent-solid);
127
+ --yarl__thumbnails_thumbnail_border_radius: var(--radius-md);
128
+ --yarl__thumbnails_thumbnail_icon_color: #ffffff; /* guardrails-ignore no-hardcoded-colors: third-party yarl lightbox library CSS custom properties require literal color values */
129
+
130
+ /* Captions → translucent token-tinted bar. */
131
+ --yarl__slide_captions_container_background: color-mix(
132
+ in srgb,
133
+ var(--background) 55%,
134
+ transparent
135
+ );
136
+ --yarl__slide_title_color: #ffffff; /* guardrails-ignore no-hardcoded-colors: third-party yarl lightbox library CSS custom properties require literal color values */
137
+ --yarl__slide_description_color: rgb(255 255 255 / 0.8); /* guardrails-ignore no-hardcoded-colors: third-party yarl lightbox library CSS custom properties require literal color values */
138
+ }
139
+
140
+ /*
141
+ * Tooltip bubbles are transient hints and must NEVER be pointer targets: a
142
+ * focus-opened tooltip (e.g. a discard prompt auto-focusing its safe default
143
+ * button) otherwise hovers over the adjacent control and eats the user's click.
144
+ * The Content element carries `pointer-events-none`, but Radix positions it inside
145
+ * a transparent `data-radix-popper-content-wrapper` div that hit-tests on its own,
146
+ * so the wrapper must be neutralized too — scoped via :has() to tooltip bubbles
147
+ * only (popovers/menus/selects share the same popper wrapper and stay interactive).
148
+ */
149
+ [data-radix-popper-content-wrapper]:has(> [data-cb-tooltip]) {
150
+ pointer-events: none;
151
+ }
152
+ /* !important: when a modal dialog disables body pointer events, Radix's
153
+ DismissableLayer re-enables the tooltip layer with an INLINE `pointer-events:
154
+ auto` — exactly the case (tooltip inside an open modal) this rule exists for. */
155
+ [data-cb-tooltip] {
156
+ pointer-events: none !important;
157
+ }
158
+
159
+ /*
160
+ * ══════════════════════════ The ambient / glass layer ══════════════════════════
161
+ *
162
+ * The decorative half of the design language, as three plain component classes so
163
+ * they cost nothing to adopt: a scoped stylesheet gets them through the static
164
+ * import, with no per-component `@source` line to remember (the silent failure
165
+ * mode `cursed-satellites/scripts/cssSources.test.ts` exists for).
166
+ *
167
+ * All three read TOKENS — `--ambient-1..3`, `--ambient-strength`, `--glass-*`,
168
+ * `--accent-gradient` (theme.css) — never literals, so an app re-brands its whole
169
+ * atmosphere by overriding variables and every surface follows. That is the point:
170
+ * this began life as `.cb-auth-aurora`, a one-off welded to the sign-in card and
171
+ * to the marketing palette, and could not be reused by anything. Nothing here
172
+ * knows the word "aurora"; the aurora theme is just the first caller.
173
+ */
174
+
175
+ /* ── AmbientBackdrop ─────────────────────────────────────────────────────────
176
+ The lit field a page floats on: a soft wash from the top plus three big blurred
177
+ color blobs, screen-blended so they ADD light rather than paint over content.
178
+ `isolation` on the host is what keeps `mix-blend-mode: screen` blending against
179
+ this stack instead of punching through to whatever is behind the app. */
180
+ .cb-ambient-host {
181
+ position: relative;
182
+ isolation: isolate;
183
+ }
184
+
185
+ .cb-ambient {
186
+ position: absolute;
187
+ inset: 0;
188
+ z-index: -1;
189
+ overflow: hidden;
190
+ pointer-events: none;
191
+ background: radial-gradient(
192
+ ellipse 120% 60% at 50% -10%,
193
+ color-mix(in srgb, var(--ambient-2) calc(var(--ambient-strength) * 100%), transparent),
194
+ transparent 60%
195
+ );
196
+ }
197
+
198
+ /* `position: fixed` variant — the backdrop stays put while the app scrolls, which
199
+ is what makes a long page feel like it sits IN a space rather than on a
200
+ repeating texture. Separate class rather than a prop-driven inline style so the
201
+ value stays in CSS with the rest of the layer. */
202
+ .cb-ambient--fixed {
203
+ position: fixed;
204
+ }
205
+
206
+ .cb-ambient__blob {
207
+ position: absolute;
208
+ border-radius: 999px;
209
+ /* The blur is what turns three circles into weather. Below ~60px they read as
210
+ circles; the compositor cost is flat in radius, so this is free. */
211
+ filter: blur(90px);
212
+ mix-blend-mode: screen;
213
+ will-change: transform;
214
+ }
215
+
216
+ /* Each blob's alpha is `--ambient-strength` scaled by its own weight, so a theme
217
+ (or the component's `intensity` prop) tunes the whole field with one number and
218
+ the three hues keep their relative balance. */
219
+ .cb-ambient__blob--a {
220
+ width: 60vw;
221
+ height: 60vw;
222
+ min-width: 460px;
223
+ min-height: 460px;
224
+ left: -16vw;
225
+ top: -20vw;
226
+ background: radial-gradient(
227
+ circle at 35% 35%,
228
+ color-mix(in srgb, var(--ambient-1) calc(var(--ambient-strength) * 200%), transparent),
229
+ transparent 62%
230
+ );
231
+ }
232
+ .cb-ambient__blob--b {
233
+ width: 52vw;
234
+ height: 52vw;
235
+ min-width: 420px;
236
+ min-height: 420px;
237
+ right: -18vw;
238
+ top: -12vw;
239
+ background: radial-gradient(
240
+ circle at 60% 40%,
241
+ color-mix(in srgb, var(--ambient-2) calc(var(--ambient-strength) * 215%), transparent),
242
+ transparent 64%
243
+ );
244
+ }
245
+ .cb-ambient__blob--c {
246
+ width: 42vw;
247
+ height: 42vw;
248
+ min-width: 360px;
249
+ min-height: 360px;
250
+ left: 28vw;
251
+ bottom: -22vw;
252
+ background: radial-gradient(
253
+ circle at 50% 50%,
254
+ color-mix(in srgb, var(--ambient-3) calc(var(--ambient-strength) * 100%), transparent),
255
+ transparent 62%
256
+ );
257
+ }
258
+
259
+ /* Drift only when the visitor hasn't asked for reduced motion. Minute-scale
260
+ periods, all mutually prime-ish, so the field never visibly loops. */
261
+ @media (prefers-reduced-motion: no-preference) {
262
+ .cb-ambient__blob--a {
263
+ animation: cb-ambient-drift-a 46s ease-in-out infinite alternate;
264
+ }
265
+ .cb-ambient__blob--b {
266
+ animation: cb-ambient-drift-b 58s ease-in-out infinite alternate;
267
+ }
268
+ .cb-ambient__blob--c {
269
+ animation: cb-ambient-drift-c 70s ease-in-out infinite alternate;
270
+ }
271
+ }
272
+ @keyframes cb-ambient-drift-a {
273
+ from { transform: translate3d(0, 0, 0) scale(1); }
274
+ to { transform: translate3d(6vw, 5vh, 0) scale(1.12); }
275
+ }
276
+ @keyframes cb-ambient-drift-b {
277
+ from { transform: translate3d(0, 0, 0) scale(1.08); }
278
+ to { transform: translate3d(-5vw, 6vh, 0) scale(0.96); }
279
+ }
280
+ @keyframes cb-ambient-drift-c {
281
+ from { transform: translate3d(0, 0, 0); }
282
+ to { transform: translate3d(8vw, -4vh, 0); }
283
+ }
284
+
285
+ /* Fine grain over the whole field. Big soft gradients BAND on 8-bit displays —
286
+ this is the standard dither, and it is an inline SVG so it costs no request. */
287
+ .cb-ambient__grain {
288
+ position: absolute;
289
+ inset: 0;
290
+ pointer-events: none;
291
+ opacity: 0.045;
292
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.6'/%3E%3C/svg%3E");
293
+ }
294
+
295
+ /* ── Glass ───────────────────────────────────────────────────────────────────
296
+ `Surface level="glass"`. A translucent fill, a 1px light edge and a backdrop
297
+ blur, so the ambient field reads THROUGH the panel. In the default LIGHT theme
298
+ the fill is a near-opaque white frost — glass over white is white — so a glass
299
+ Surface is never a legibility regression on an app that never opted into a
300
+ theme. `backdrop-filter` degrades to a plain translucent fill where it is
301
+ unsupported, which is the correct failure. */
302
+ .cb-glass {
303
+ background: var(--glass-bg);
304
+ border: 1px solid var(--glass-edge);
305
+ box-shadow: var(--glass-shadow);
306
+ backdrop-filter: blur(var(--glass-blur)) saturate(140%);
307
+ -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(140%);
308
+ }
309
+
310
+ /* Chrome glass: the fill + blur ONLY — no edge, no shadow. For app chrome that owns
311
+ its own directional border (a header's `border-b`, a nav rail's `border-r`); the
312
+ full `.cb-glass` would draw a box around it. */
313
+ .cb-glass-chrome {
314
+ background: var(--glass-bg-strong);
315
+ backdrop-filter: blur(var(--glass-blur)) saturate(140%);
316
+ -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(140%);
317
+ }
318
+
319
+ /* The heavier fill, for a surface that has to hold dense text (a sidebar, a
320
+ sticky header) where maximum see-through would cost legibility. */
321
+ .cb-glass-strong {
322
+ background: var(--glass-bg-strong);
323
+ border: 1px solid var(--glass-edge);
324
+ box-shadow: var(--glass-shadow);
325
+ backdrop-filter: blur(var(--glass-blur)) saturate(140%);
326
+ -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(140%);
327
+ }
328
+
329
+ /* ── Brand gradient ──────────────────────────────────────────────────────────
330
+ Text in the accent ramp (a product wordmark, a hero headline). Deliberately NOT
331
+ offered for body copy: gradient text has no single contrast ratio to audit. */
332
+ .cb-gradient-text {
333
+ background: var(--accent-gradient);
334
+ -webkit-background-clip: text;
335
+ background-clip: text;
336
+ color: transparent;
337
+ }
338
+
339
+ /* A filled surface in the accent ramp — the "this is the one action" treatment.
340
+ The `.cb-gradient-fill` class carries its own white label because a gradient
341
+ has no token to derive an on-fill foreground from; every ramp this is used with
342
+ is saturated enough for white to clear AA (the same contract
343
+ `--accent-solid-foreground` makes for the flat solid). */
344
+ .cb-gradient-fill {
345
+ background: var(--accent-gradient);
346
+ color: #ffffff; /* guardrails-ignore no-hardcoded-colors: white label on the saturated accent gradient — the fill's own on-surface foreground, mode-independent by the same contract as --accent-solid-foreground */
347
+ border: 0;
348
+ transition:
349
+ filter var(--duration-fast, 120ms) ease,
350
+ box-shadow var(--duration-fast, 120ms) ease;
351
+ }
352
+ .cb-gradient-fill:hover:not(:disabled) {
353
+ background: var(--accent-gradient);
354
+ filter: brightness(1.08);
355
+ }
356
+
357
+ /*
358
+ * Aurora front door — the logged-out sign-in / register surface.
359
+ *
360
+ * Now just a THIN composition over the layer above: the aurora theme scope
361
+ * (`.cb-aurora` in theme.css) supplies the palette, `AmbientBackdrop` paints the
362
+ * field, `Surface level="glass"` is the card, `.cb-gradient-text` is the title.
363
+ * What remains here is the two things that are genuinely about this surface: it
364
+ * fills the viewport with the canvas color, and its submit button is the
365
+ * gradient action. Scoped under `.cb-auth-aurora` (AuthCard's `aurora` prop) so
366
+ * the product's own in-app chrome — including the EMBEDDED AuthCard in the
367
+ * account panel — is untouched.
368
+ */
369
+ .cb-auth-aurora {
370
+ position: relative;
371
+ isolation: isolate;
372
+ background-color: var(--background);
373
+ color: var(--foreground);
374
+ overflow: hidden;
375
+ }
376
+
377
+ /* Primary action carries the accent gradient instead of the flat solid.
378
+ Specificity (one class + the attribute-qualified element) clears Tailwind's
379
+ single-class `bg-accent-solid`. */
380
+ .cb-auth-aurora button[type="submit"] {
381
+ background: var(--accent-gradient);
382
+ color: #ffffff; /* guardrails-ignore no-hardcoded-colors: white label on the saturated accent gradient — the button's own on-fill foreground, mode-independent */
383
+ border: 0;
384
+ box-shadow: 0 8px 24px color-mix(in srgb, var(--ambient-1) 20%, transparent);
385
+ transition: filter var(--duration-fast, 120ms) ease, box-shadow var(--duration-fast, 120ms) ease;
386
+ }
387
+ .cb-auth-aurora button[type="submit"]:hover:not(:disabled) {
388
+ background: var(--accent-gradient);
389
+ filter: brightness(1.08);
390
+ box-shadow: 0 10px 28px color-mix(in srgb, var(--ambient-2) 30%, transparent);
391
+ }
package/src/styles.css CHANGED
@@ -5,6 +5,33 @@
5
5
  * @import "cursedbelt/theme.css";
6
6
  * This `@source` makes Tailwind v4 scan cursedbelt's source files so the utility
7
7
  * classes used by its components are generated in the app's stylesheet.
8
+ *
9
+ * ── Two entry points, and which one an app wants ─────────────────────────────
10
+ * `@source "."` is the expensive half: it points Tailwind's JIT at cursedbelt's
11
+ * ENTIRE source tree, so the app emits the union of the whole design system
12
+ * (113 KB / 846 selectors, measured in the previous generation) whether it
13
+ * renders three components or eighty. Everything else in this file is CSS the
14
+ * components genuinely need and no app can do without.
15
+ *
16
+ * A CSS `@import` takes the whole file, so the split is a second subpath:
17
+ *
18
+ * cursedbelt/styles.css this file — the real CSS + the `@source` scan
19
+ * cursedbelt/styles-static.css the same file MINUS the `@source` line
20
+ *
21
+ * The static one is for an app that pays for its own scanning — it gets the
22
+ * tooltip pointer-events fix, the Progress keyframes, the lightbox bridge, the
23
+ * ambient/glass layer and `tw-animate-css`, and emits none of cursedbelt's
24
+ * utility classes, so whatever component utilities it needs must come from
25
+ * sources IT registers. Do not hand-list cursedbelt's component files to get
26
+ * them back: a relative `@source` reaching into this package's source tree is a
27
+ * `file:` dependency wearing a stylesheet's clothes, and it is the thing the
28
+ * previous generation's 29-line-per-app arrangement is remembered for.
29
+ *
30
+ * 🔴 This header is in BOTH files, because one is generated from the other and a
31
+ * test holds them byte-identical apart from the `@source` line. Always edit
32
+ * `src/styles.css`; never `src/styles-static.css`, which
33
+ * `scripts/generateStaticStyles.ts` rewrites on every `bun run build` and
34
+ * `src/stylesStaticMatches.spec.ts` fails on when it is stale.
8
35
  */
9
36
 
10
37
  /* Animation utilities (animate-in/out, fade/zoom/slide-in-from-*) consumed by the
@@ -0,0 +1,134 @@
1
+ /**
2
+ * `src/styles-static.css` is `src/styles.css` minus its `@source` line — and
3
+ * nothing else (2026-09-14).
4
+ *
5
+ * ## What this exists to prevent
6
+ *
7
+ * The scoped entry point has to be a SECOND FILE, because a CSS `@import` takes
8
+ * the whole of the one it is given: an app cannot ask for `styles.css` without
9
+ * `@source "."`, and `@source "."` is what makes every consumer emit the union
10
+ * of the entire design system.
11
+ *
12
+ * The previous generation's second file was `satellite-kit/styles/belt-static.css`
13
+ * — a hand-kept copy with the one line deleted and nothing comparing the two.
14
+ * That is a file that drifts, and drifts SILENTLY: the day someone adds a rule to
15
+ * `styles.css` and not to the copy, every scoped app quietly loses it. The loss is
16
+ * invisible in review (the diff looks complete), invisible to `tsc` (it is CSS),
17
+ * and invisible to Biome (nothing is wrong with either file). It shows up as a
18
+ * tooltip eating a click, or a Progress bar that never animates, in one app, weeks
19
+ * later.
20
+ *
21
+ * So the copy is OUTPUT — `scripts/generateStaticStyles.ts`, which `bun run build`
22
+ * runs before it compiles — and this spec is the gate that makes that true rather
23
+ * than merely intended. `bun run verify` builds before it tests, so a forgotten
24
+ * regeneration self-heals there; editing `styles.css` and running `bun test src`
25
+ * alone is where this goes red.
26
+ *
27
+ * The assertions deliberately come at it from both sides: one compares the file on
28
+ * disk to what the generator produces (is the checked-in output current?), and the
29
+ * rest compare it to `styles.css` DIRECTLY (is the generator still doing only what
30
+ * it claims?). A spec that only asked the generator to agree with itself would pass
31
+ * a generator that had started dropping real rules.
32
+ *
33
+ * 🔴 `Bun.file`, NOT node:fs — this package's test preload virtualizes node:fs, so
34
+ * a `readFileSync` here would read MOCK data and pass against files it never
35
+ * opened. Same trap as `src/publishShape.spec.ts`; see its header.
36
+ */
37
+ import { describe, expect, it } from 'bun:test';
38
+ import pkg from '../package.json';
39
+ import {
40
+ REPO_ROOT,
41
+ SOURCE_DIRECTIVE,
42
+ STATIC_STYLESHEET,
43
+ readStylesheets,
44
+ staticStylesFrom,
45
+ } from '../scripts/generateStaticStyles';
46
+
47
+ const { source, expected, onDisk } = await readStylesheets();
48
+
49
+ /** The command every failure below is fixed by, as a line the owner can paste. */
50
+ const REGENERATE = `cd ${REPO_ROOT} && bun run styles:static`;
51
+
52
+ const lines = (css: string): string[] => css.split('\n');
53
+ const directives = (css: string): string[] => lines(css).filter((l) => SOURCE_DIRECTIVE.test(l));
54
+
55
+ describe('styles-static.css is a generated, gated copy of styles.css', () => {
56
+ it('is checked in and byte-identical to what the generator produces', () => {
57
+ expect(onDisk, `${STATIC_STYLESHEET} is missing. It is generated:\n ${REGENERATE}`).not.toBeNull();
58
+ expect(
59
+ onDisk,
60
+ `${STATIC_STYLESHEET} is stale — src/styles.css changed and the static variant was not\n` +
61
+ 'regenerated, so every app importing `cursedbelt/styles-static.css` is missing the\n' +
62
+ `difference. Run:\n ${REGENERATE}`,
63
+ ).toBe(expected);
64
+ });
65
+
66
+ it('drops the `@source` line and keeps every other line, in order', () => {
67
+ // The independent half: compared against styles.css itself, not against the
68
+ // generator's output. Blank lines are excluded from the sequence check only
69
+ // because the dropped directive takes its trailing blank line with it; the
70
+ // exact line-count assertion below is what pins that down.
71
+ const kept = lines(source).filter((l) => l.trim() !== '' && !SOURCE_DIRECTIVE.test(l));
72
+ expect(lines(expected).filter((l) => l.trim() !== '')).toEqual(kept);
73
+ });
74
+
75
+ it('removes exactly the directive and the blank line it leaves behind', () => {
76
+ expect(
77
+ directives(source),
78
+ 'src/styles.css must carry exactly the one `@source "."` this whole split is about',
79
+ ).toEqual(['@source ".";']);
80
+ expect(directives(expected), 'the static variant must carry no `@source` at all').toEqual([]);
81
+ // 2 = the directive + the now-orphaned blank line after it. A third line
82
+ // going missing means the transform grew a second job.
83
+ expect(lines(source).length - lines(expected).length).toBe(2);
84
+ });
85
+
86
+ it('is not a pointless duplicate', () => {
87
+ // If `@source "."` ever leaves styles.css, the two files become identical and
88
+ // the static subpath is dead weight — but worse, the FULL entry point has
89
+ // stopped scanning and every consuming app emits no cursedbelt utilities.
90
+ expect(expected).not.toBe(source);
91
+ });
92
+
93
+ it('is exported as a subpath that resolves into a directory `files` ships', () => {
94
+ const exports = (pkg as { exports: Record<string, unknown> }).exports;
95
+ expect(exports['./styles-static.css']).toBe(`./${STATIC_STYLESHEET}`);
96
+ // It must resolve out of `src/`, exactly like its sibling: `./styles.css`
97
+ // points at the SOURCE tree (not dist) because `@source "."` has to resolve
98
+ // relative to the files it is meant to scan, and a pair of app-facing
99
+ // stylesheets served from two different directories is a difference nobody
100
+ // can see in CSS.
101
+ expect(exports['./styles.css']).toBe('./src/styles.css');
102
+ // `files` ships whole directories, so `src` is what actually puts both of
103
+ // them in the tarball. publishShape.spec.ts proves the general rule; this is
104
+ // the one line that makes THIS subpath's failure legible.
105
+ expect((pkg as { files: string[] }).files).toContain('src');
106
+ });
107
+
108
+ it('resolves as `cursedbelt/styles-static.css` through the real resolver', () => {
109
+ // The assertions above read the manifest; this one RESOLVES the specifier the
110
+ // way a consumer's bundler does, through the package's own `exports` map (bun
111
+ // honours a self-reference by package name). An export entry pointing at a
112
+ // path that does not exist satisfies every string comparison in this file and
113
+ // fails here — which is the failure `belt-static.css` would have been.
114
+ expect(Bun.resolveSync(`${pkg.name}/styles-static.css`, REPO_ROOT)).toBe(
115
+ `${REPO_ROOT}/${STATIC_STYLESHEET}`,
116
+ );
117
+ });
118
+
119
+ it('is regenerated by the build, so a stale copy cannot be published', () => {
120
+ // `prepublishOnly` → `verify` → `build`, so the tarball's copy is always the
121
+ // one this repo's current styles.css produces. Without this step in `build`,
122
+ // the only thing standing between a drifted copy and a publish is a person
123
+ // remembering to run a script.
124
+ expect((pkg as { scripts: Record<string, string> }).scripts.build).toContain(
125
+ 'scripts/generateStaticStyles.ts',
126
+ );
127
+ });
128
+
129
+ it('exposes the transform as a pure function', () => {
130
+ // Cheap guard on the one behaviour every assertion above leans on.
131
+ expect(staticStylesFrom('a\n@source ".";\n\nb\n')).toBe('a\nb\n');
132
+ expect(staticStylesFrom('a\nb\n')).toBe('a\nb\n');
133
+ });
134
+ });