@next-buildr/editor 0.0.0-stage → 2.0.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 (471) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/app/builder-editor.d.ts +8 -0
  4. package/dist/app/builder-editor.d.ts.map +1 -0
  5. package/dist/app/builder-editor.js +14 -0
  6. package/dist/app/builder-editor.test.d.ts +2 -0
  7. package/dist/app/builder-editor.test.d.ts.map +1 -0
  8. package/dist/app/builder-editor.test.js +199 -0
  9. package/dist/app/config.d.ts +59 -0
  10. package/dist/app/config.d.ts.map +1 -0
  11. package/dist/app/config.js +18 -0
  12. package/dist/app/content-language.test.d.ts +2 -0
  13. package/dist/app/content-language.test.d.ts.map +1 -0
  14. package/dist/app/content-language.test.js +157 -0
  15. package/dist/app/editor-app.d.ts +17 -0
  16. package/dist/app/editor-app.d.ts.map +1 -0
  17. package/dist/app/editor-app.js +206 -0
  18. package/dist/app/editor-app.test.d.ts +2 -0
  19. package/dist/app/editor-app.test.d.ts.map +1 -0
  20. package/dist/app/editor-app.test.js +135 -0
  21. package/dist/app/layout.d.ts +32 -0
  22. package/dist/app/layout.d.ts.map +1 -0
  23. package/dist/app/layout.js +82 -0
  24. package/dist/app/manifest.d.ts +12 -0
  25. package/dist/app/manifest.d.ts.map +1 -0
  26. package/dist/app/manifest.js +17 -0
  27. package/dist/app/shell-panels.d.ts +15 -0
  28. package/dist/app/shell-panels.d.ts.map +1 -0
  29. package/dist/app/shell-panels.js +5 -0
  30. package/dist/app/small-screen.d.ts +12 -0
  31. package/dist/app/small-screen.d.ts.map +1 -0
  32. package/dist/app/small-screen.js +33 -0
  33. package/dist/app/small-screen.test.d.ts +2 -0
  34. package/dist/app/small-screen.test.d.ts.map +1 -0
  35. package/dist/app/small-screen.test.js +108 -0
  36. package/dist/app/status-info.d.ts +14 -0
  37. package/dist/app/status-info.d.ts.map +1 -0
  38. package/dist/app/status-info.js +34 -0
  39. package/dist/app/use-resizable.d.ts +34 -0
  40. package/dist/app/use-resizable.d.ts.map +1 -0
  41. package/dist/app/use-resizable.js +84 -0
  42. package/dist/canvas-host/canvas-frame.d.ts +53 -0
  43. package/dist/canvas-host/canvas-frame.d.ts.map +1 -0
  44. package/dist/canvas-host/canvas-frame.js +146 -0
  45. package/dist/canvas-host/canvas-frame.test.d.ts +2 -0
  46. package/dist/canvas-host/canvas-frame.test.d.ts.map +1 -0
  47. package/dist/canvas-host/canvas-frame.test.js +91 -0
  48. package/dist/canvas-host/host.d.ts +109 -0
  49. package/dist/canvas-host/host.d.ts.map +1 -0
  50. package/dist/canvas-host/host.js +293 -0
  51. package/dist/canvas-host/host.test.d.ts +2 -0
  52. package/dist/canvas-host/host.test.d.ts.map +1 -0
  53. package/dist/canvas-host/host.test.js +398 -0
  54. package/dist/canvas-host/index.d.ts +5 -0
  55. package/dist/canvas-host/index.d.ts.map +1 -0
  56. package/dist/canvas-host/index.js +2 -0
  57. package/dist/clipboard/clipboard.d.ts +38 -0
  58. package/dist/clipboard/clipboard.d.ts.map +1 -0
  59. package/dist/clipboard/clipboard.js +160 -0
  60. package/dist/clipboard/clipboard.test.d.ts +2 -0
  61. package/dist/clipboard/clipboard.test.d.ts.map +1 -0
  62. package/dist/clipboard/clipboard.test.js +457 -0
  63. package/dist/clipboard/format.d.ts +27 -0
  64. package/dist/clipboard/format.d.ts.map +1 -0
  65. package/dist/clipboard/format.js +37 -0
  66. package/dist/clipboard/index.d.ts +6 -0
  67. package/dist/clipboard/index.d.ts.map +1 -0
  68. package/dist/clipboard/index.js +3 -0
  69. package/dist/clipboard/react.d.ts +20 -0
  70. package/dist/clipboard/react.d.ts.map +1 -0
  71. package/dist/clipboard/react.js +71 -0
  72. package/dist/dialogs/index.d.ts +2 -0
  73. package/dist/dialogs/index.d.ts.map +1 -0
  74. package/dist/dialogs/index.js +1 -0
  75. package/dist/dialogs/media-picker/index.d.ts +7 -0
  76. package/dist/dialogs/media-picker/index.d.ts.map +1 -0
  77. package/dist/dialogs/media-picker/index.js +3 -0
  78. package/dist/dialogs/media-picker/library.d.ts +17 -0
  79. package/dist/dialogs/media-picker/library.d.ts.map +1 -0
  80. package/dist/dialogs/media-picker/library.js +9 -0
  81. package/dist/dialogs/media-picker/media-picker.d.ts +18 -0
  82. package/dist/dialogs/media-picker/media-picker.d.ts.map +1 -0
  83. package/dist/dialogs/media-picker/media-picker.js +99 -0
  84. package/dist/dialogs/media-picker/media-picker.test.d.ts +2 -0
  85. package/dist/dialogs/media-picker/media-picker.test.d.ts.map +1 -0
  86. package/dist/dialogs/media-picker/media-picker.test.js +161 -0
  87. package/dist/dialogs/media-picker/media-ref.d.ts +28 -0
  88. package/dist/dialogs/media-picker/media-ref.d.ts.map +1 -0
  89. package/dist/dialogs/media-picker/media-ref.js +52 -0
  90. package/dist/dnd/check.d.ts +8 -0
  91. package/dist/dnd/check.d.ts.map +1 -0
  92. package/dist/dnd/check.js +12 -0
  93. package/dist/dnd/destinations.d.ts +15 -0
  94. package/dist/dnd/destinations.d.ts.map +1 -0
  95. package/dist/dnd/destinations.js +43 -0
  96. package/dist/dnd/dnd-react.test.d.ts +2 -0
  97. package/dist/dnd/dnd-react.test.d.ts.map +1 -0
  98. package/dist/dnd/dnd-react.test.js +93 -0
  99. package/dist/dnd/dnd.test.d.ts +2 -0
  100. package/dist/dnd/dnd.test.d.ts.map +1 -0
  101. package/dist/dnd/dnd.test.js +327 -0
  102. package/dist/dnd/engine.d.ts +85 -0
  103. package/dist/dnd/engine.d.ts.map +1 -0
  104. package/dist/dnd/engine.js +185 -0
  105. package/dist/dnd/fragment.d.ts +6 -0
  106. package/dist/dnd/fragment.d.ts.map +1 -0
  107. package/dist/dnd/fragment.js +18 -0
  108. package/dist/dnd/geometry.d.ts +30 -0
  109. package/dist/dnd/geometry.d.ts.map +1 -0
  110. package/dist/dnd/geometry.js +31 -0
  111. package/dist/dnd/index.d.ts +14 -0
  112. package/dist/dnd/index.d.ts.map +1 -0
  113. package/dist/dnd/index.js +7 -0
  114. package/dist/dnd/move-to-dialog.d.ts +13 -0
  115. package/dist/dnd/move-to-dialog.d.ts.map +1 -0
  116. package/dist/dnd/move-to-dialog.js +30 -0
  117. package/dist/dnd/react.d.ts +43 -0
  118. package/dist/dnd/react.d.ts.map +1 -0
  119. package/dist/dnd/react.js +185 -0
  120. package/dist/dnd/tree-target.d.ts +29 -0
  121. package/dist/dnd/tree-target.d.ts.map +1 -0
  122. package/dist/dnd/tree-target.js +97 -0
  123. package/dist/fonts/LICENSE-inter.txt +93 -0
  124. package/dist/fonts/inter-latin-400-normal.woff2 +0 -0
  125. package/dist/fonts/inter-latin-500-normal.woff2 +0 -0
  126. package/dist/fonts/inter-latin-600-normal.woff2 +0 -0
  127. package/dist/fonts/inter-latin-ext-400-normal.woff2 +0 -0
  128. package/dist/fonts/inter-latin-ext-500-normal.woff2 +0 -0
  129. package/dist/fonts/inter-latin-ext-600-normal.woff2 +0 -0
  130. package/dist/index.d.ts +22 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +21 -0
  133. package/dist/messages/en.d.ts +335 -0
  134. package/dist/messages/en.d.ts.map +1 -0
  135. package/dist/messages/en.js +332 -0
  136. package/dist/messages/index.d.ts +16 -0
  137. package/dist/messages/index.d.ts.map +1 -0
  138. package/dist/messages/index.js +22 -0
  139. package/dist/messages/pl.d.ts +3 -0
  140. package/dist/messages/pl.d.ts.map +1 -0
  141. package/dist/messages/pl.js +327 -0
  142. package/dist/panels/breadcrumbs/breadcrumbs.d.ts +6 -0
  143. package/dist/panels/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  144. package/dist/panels/breadcrumbs/breadcrumbs.js +24 -0
  145. package/dist/panels/breadcrumbs/breadcrumbs.test.d.ts +2 -0
  146. package/dist/panels/breadcrumbs/breadcrumbs.test.d.ts.map +1 -0
  147. package/dist/panels/breadcrumbs/breadcrumbs.test.js +56 -0
  148. package/dist/panels/index.d.ts +9 -0
  149. package/dist/panels/index.d.ts.map +1 -0
  150. package/dist/panels/index.js +6 -0
  151. package/dist/panels/insert/catalog.d.ts +30 -0
  152. package/dist/panels/insert/catalog.d.ts.map +1 -0
  153. package/dist/panels/insert/catalog.js +76 -0
  154. package/dist/panels/insert/catalog.order.test.d.ts +2 -0
  155. package/dist/panels/insert/catalog.order.test.d.ts.map +1 -0
  156. package/dist/panels/insert/catalog.order.test.js +17 -0
  157. package/dist/panels/insert/category-name.d.ts +4 -0
  158. package/dist/panels/insert/category-name.d.ts.map +1 -0
  159. package/dist/panels/insert/category-name.js +8 -0
  160. package/dist/panels/insert/index.d.ts +3 -0
  161. package/dist/panels/insert/index.d.ts.map +1 -0
  162. package/dist/panels/insert/index.js +2 -0
  163. package/dist/panels/insert/insert-panel.d.ts +7 -0
  164. package/dist/panels/insert/insert-panel.d.ts.map +1 -0
  165. package/dist/panels/insert/insert-panel.js +155 -0
  166. package/dist/panels/insert/insert-panel.test.d.ts +2 -0
  167. package/dist/panels/insert/insert-panel.test.d.ts.map +1 -0
  168. package/dist/panels/insert/insert-panel.test.js +323 -0
  169. package/dist/panels/insert/target.d.ts +17 -0
  170. package/dist/panels/insert/target.d.ts.map +1 -0
  171. package/dist/panels/insert/target.js +48 -0
  172. package/dist/panels/inspector/controls/boolean.d.ts +4 -0
  173. package/dist/panels/inspector/controls/boolean.d.ts.map +1 -0
  174. package/dist/panels/inspector/controls/boolean.js +4 -0
  175. package/dist/panels/inspector/controls/compound.d.ts +15 -0
  176. package/dist/panels/inspector/controls/compound.d.ts.map +1 -0
  177. package/dist/panels/inspector/controls/compound.js +99 -0
  178. package/dist/panels/inspector/controls/compound.test.d.ts +2 -0
  179. package/dist/panels/inspector/controls/compound.test.d.ts.map +1 -0
  180. package/dist/panels/inspector/controls/compound.test.js +195 -0
  181. package/dist/panels/inspector/controls/icon.d.ts +5 -0
  182. package/dist/panels/inspector/controls/icon.d.ts.map +1 -0
  183. package/dist/panels/inspector/controls/icon.js +6 -0
  184. package/dist/panels/inspector/controls/index.d.ts +13 -0
  185. package/dist/panels/inspector/controls/index.d.ts.map +1 -0
  186. package/dist/panels/inspector/controls/index.js +11 -0
  187. package/dist/panels/inspector/controls/label.d.ts +4 -0
  188. package/dist/panels/inspector/controls/label.d.ts.map +1 -0
  189. package/dist/panels/inspector/controls/label.js +8 -0
  190. package/dist/panels/inspector/controls/link.d.ts +5 -0
  191. package/dist/panels/inspector/controls/link.d.ts.map +1 -0
  192. package/dist/panels/inspector/controls/link.js +6 -0
  193. package/dist/panels/inspector/controls/media.d.ts +9 -0
  194. package/dist/panels/inspector/controls/media.d.ts.map +1 -0
  195. package/dist/panels/inspector/controls/media.js +21 -0
  196. package/dist/panels/inspector/controls/number.d.ts +10 -0
  197. package/dist/panels/inspector/controls/number.d.ts.map +1 -0
  198. package/dist/panels/inspector/controls/number.js +33 -0
  199. package/dist/panels/inspector/controls/rich-text-model.d.ts +20 -0
  200. package/dist/panels/inspector/controls/rich-text-model.d.ts.map +1 -0
  201. package/dist/panels/inspector/controls/rich-text-model.js +91 -0
  202. package/dist/panels/inspector/controls/rich-text.d.ts +10 -0
  203. package/dist/panels/inspector/controls/rich-text.d.ts.map +1 -0
  204. package/dist/panels/inspector/controls/rich-text.js +159 -0
  205. package/dist/panels/inspector/controls/select.d.ts +5 -0
  206. package/dist/panels/inspector/controls/select.d.ts.map +1 -0
  207. package/dist/panels/inspector/controls/select.js +16 -0
  208. package/dist/panels/inspector/controls/select.test.d.ts +2 -0
  209. package/dist/panels/inspector/controls/select.test.d.ts.map +1 -0
  210. package/dist/panels/inspector/controls/select.test.js +43 -0
  211. package/dist/panels/inspector/controls/text.d.ts +4 -0
  212. package/dist/panels/inspector/controls/text.d.ts.map +1 -0
  213. package/dist/panels/inspector/controls/text.js +5 -0
  214. package/dist/panels/inspector/controls/textarea.d.ts +4 -0
  215. package/dist/panels/inspector/controls/textarea.d.ts.map +1 -0
  216. package/dist/panels/inspector/controls/textarea.js +4 -0
  217. package/dist/panels/inspector/controls/types.d.ts +16 -0
  218. package/dist/panels/inspector/controls/types.d.ts.map +1 -0
  219. package/dist/panels/inspector/controls/types.js +1 -0
  220. package/dist/panels/inspector/index.d.ts +17 -0
  221. package/dist/panels/inspector/index.d.ts.map +1 -0
  222. package/dist/panels/inspector/index.js +9 -0
  223. package/dist/panels/inspector/inspector.d.ts +16 -0
  224. package/dist/panels/inspector/inspector.d.ts.map +1 -0
  225. package/dist/panels/inspector/inspector.js +116 -0
  226. package/dist/panels/inspector/inspector.test.d.ts +2 -0
  227. package/dist/panels/inspector/inspector.test.d.ts.map +1 -0
  228. package/dist/panels/inspector/inspector.test.js +328 -0
  229. package/dist/panels/inspector/props-panel.d.ts +26 -0
  230. package/dist/panels/inspector/props-panel.d.ts.map +1 -0
  231. package/dist/panels/inspector/props-panel.js +117 -0
  232. package/dist/panels/inspector/styles/box-model.d.ts +20 -0
  233. package/dist/panels/inspector/styles/box-model.d.ts.map +1 -0
  234. package/dist/panels/inspector/styles/box-model.js +31 -0
  235. package/dist/panels/inspector/styles/index.d.ts +5 -0
  236. package/dist/panels/inspector/styles/index.d.ts.map +1 -0
  237. package/dist/panels/inspector/styles/index.js +2 -0
  238. package/dist/panels/inspector/styles/model.d.ts +55 -0
  239. package/dist/panels/inspector/styles/model.d.ts.map +1 -0
  240. package/dist/panels/inspector/styles/model.js +111 -0
  241. package/dist/panels/inspector/styles/segments.d.ts +18 -0
  242. package/dist/panels/inspector/styles/segments.d.ts.map +1 -0
  243. package/dist/panels/inspector/styles/segments.js +75 -0
  244. package/dist/panels/inspector/styles/sides-editor.d.ts +34 -0
  245. package/dist/panels/inspector/styles/sides-editor.d.ts.map +1 -0
  246. package/dist/panels/inspector/styles/sides-editor.js +86 -0
  247. package/dist/panels/inspector/styles/style-inspector.d.ts +15 -0
  248. package/dist/panels/inspector/styles/style-inspector.d.ts.map +1 -0
  249. package/dist/panels/inspector/styles/style-inspector.js +219 -0
  250. package/dist/panels/inspector/styles/style-inspector.test.d.ts +2 -0
  251. package/dist/panels/inspector/styles/style-inspector.test.d.ts.map +1 -0
  252. package/dist/panels/inspector/styles/style-inspector.test.js +265 -0
  253. package/dist/panels/inspector/styles/token-picker.d.ts +15 -0
  254. package/dist/panels/inspector/styles/token-picker.d.ts.map +1 -0
  255. package/dist/panels/inspector/styles/token-picker.js +23 -0
  256. package/dist/panels/inspector/styles/use-style-value.d.ts +28 -0
  257. package/dist/panels/inspector/styles/use-style-value.d.ts.map +1 -0
  258. package/dist/panels/inspector/styles/use-style-value.js +51 -0
  259. package/dist/panels/inspector/value.d.ts +20 -0
  260. package/dist/panels/inspector/value.d.ts.map +1 -0
  261. package/dist/panels/inspector/value.js +32 -0
  262. package/dist/panels/inspector/values/analyze.d.ts +49 -0
  263. package/dist/panels/inspector/values/analyze.d.ts.map +1 -0
  264. package/dist/panels/inspector/values/analyze.js +115 -0
  265. package/dist/panels/inspector/values/data.d.ts +18 -0
  266. package/dist/panels/inspector/values/data.d.ts.map +1 -0
  267. package/dist/panels/inspector/values/data.js +10 -0
  268. package/dist/panels/inspector/values/translation.d.ts +20 -0
  269. package/dist/panels/inspector/values/translation.d.ts.map +1 -0
  270. package/dist/panels/inspector/values/translation.js +25 -0
  271. package/dist/panels/inspector/values/value-editor.d.ts +30 -0
  272. package/dist/panels/inspector/values/value-editor.d.ts.map +1 -0
  273. package/dist/panels/inspector/values/value-editor.js +191 -0
  274. package/dist/panels/inspector/values/values.test.d.ts +2 -0
  275. package/dist/panels/inspector/values/values.test.d.ts.map +1 -0
  276. package/dist/panels/inspector/values/values.test.js +173 -0
  277. package/dist/panels/issues/collect.d.ts +70 -0
  278. package/dist/panels/issues/collect.d.ts.map +1 -0
  279. package/dist/panels/issues/collect.js +96 -0
  280. package/dist/panels/issues/index.d.ts +5 -0
  281. package/dist/panels/issues/index.d.ts.map +1 -0
  282. package/dist/panels/issues/index.js +2 -0
  283. package/dist/panels/issues/issues-panel.d.ts +17 -0
  284. package/dist/panels/issues/issues-panel.d.ts.map +1 -0
  285. package/dist/panels/issues/issues-panel.js +77 -0
  286. package/dist/panels/layers/flatten.d.ts +28 -0
  287. package/dist/panels/layers/flatten.d.ts.map +1 -0
  288. package/dist/panels/layers/flatten.js +61 -0
  289. package/dist/panels/layers/layers-panel.d.ts +14 -0
  290. package/dist/panels/layers/layers-panel.d.ts.map +1 -0
  291. package/dist/panels/layers/layers-panel.js +428 -0
  292. package/dist/panels/layers/layers-panel.test.d.ts +2 -0
  293. package/dist/panels/layers/layers-panel.test.d.ts.map +1 -0
  294. package/dist/panels/layers/layers-panel.test.js +315 -0
  295. package/dist/persistence/controller.d.ts +55 -0
  296. package/dist/persistence/controller.d.ts.map +1 -0
  297. package/dist/persistence/controller.js +341 -0
  298. package/dist/persistence/index.d.ts +6 -0
  299. package/dist/persistence/index.d.ts.map +1 -0
  300. package/dist/persistence/index.js +3 -0
  301. package/dist/persistence/load.d.ts +35 -0
  302. package/dist/persistence/load.d.ts.map +1 -0
  303. package/dist/persistence/load.js +67 -0
  304. package/dist/persistence/persistence.test.d.ts +2 -0
  305. package/dist/persistence/persistence.test.d.ts.map +1 -0
  306. package/dist/persistence/persistence.test.js +483 -0
  307. package/dist/persistence/react.d.ts +18 -0
  308. package/dist/persistence/react.d.ts.map +1 -0
  309. package/dist/persistence/react.js +105 -0
  310. package/dist/persistence/types.d.ts +182 -0
  311. package/dist/persistence/types.d.ts.map +1 -0
  312. package/dist/persistence/types.js +1 -0
  313. package/dist/preview/index.d.ts +3 -0
  314. package/dist/preview/index.d.ts.map +1 -0
  315. package/dist/preview/index.js +2 -0
  316. package/dist/preview/prepare.d.ts +16 -0
  317. package/dist/preview/prepare.d.ts.map +1 -0
  318. package/dist/preview/prepare.js +21 -0
  319. package/dist/preview/preview.d.ts +27 -0
  320. package/dist/preview/preview.d.ts.map +1 -0
  321. package/dist/preview/preview.js +51 -0
  322. package/dist/preview/preview.test.d.ts +2 -0
  323. package/dist/preview/preview.test.d.ts.map +1 -0
  324. package/dist/preview/preview.test.js +129 -0
  325. package/dist/shortcuts/actions.d.ts +17 -0
  326. package/dist/shortcuts/actions.d.ts.map +1 -0
  327. package/dist/shortcuts/actions.js +85 -0
  328. package/dist/shortcuts/index.d.ts +11 -0
  329. package/dist/shortcuts/index.d.ts.map +1 -0
  330. package/dist/shortcuts/index.js +5 -0
  331. package/dist/shortcuts/keys.d.ts +29 -0
  332. package/dist/shortcuts/keys.d.ts.map +1 -0
  333. package/dist/shortcuts/keys.js +100 -0
  334. package/dist/shortcuts/map.d.ts +17 -0
  335. package/dist/shortcuts/map.d.ts.map +1 -0
  336. package/dist/shortcuts/map.js +31 -0
  337. package/dist/shortcuts/registry.d.ts +32 -0
  338. package/dist/shortcuts/registry.d.ts.map +1 -0
  339. package/dist/shortcuts/registry.js +53 -0
  340. package/dist/shortcuts/shortcuts.d.ts +32 -0
  341. package/dist/shortcuts/shortcuts.d.ts.map +1 -0
  342. package/dist/shortcuts/shortcuts.js +95 -0
  343. package/dist/shortcuts/shortcuts.test.d.ts +2 -0
  344. package/dist/shortcuts/shortcuts.test.d.ts.map +1 -0
  345. package/dist/shortcuts/shortcuts.test.js +263 -0
  346. package/dist/store/create-store.d.ts +13 -0
  347. package/dist/store/create-store.d.ts.map +1 -0
  348. package/dist/store/create-store.js +248 -0
  349. package/dist/store/index.d.ts +9 -0
  350. package/dist/store/index.d.ts.map +1 -0
  351. package/dist/store/index.js +5 -0
  352. package/dist/store/locale.d.ts +23 -0
  353. package/dist/store/locale.d.ts.map +1 -0
  354. package/dist/store/locale.js +31 -0
  355. package/dist/store/react.d.ts +17 -0
  356. package/dist/store/react.d.ts.map +1 -0
  357. package/dist/store/react.js +32 -0
  358. package/dist/store/selection.d.ts +32 -0
  359. package/dist/store/selection.d.ts.map +1 -0
  360. package/dist/store/selection.js +84 -0
  361. package/dist/store/selection.test.d.ts +2 -0
  362. package/dist/store/selection.test.d.ts.map +1 -0
  363. package/dist/store/selection.test.js +95 -0
  364. package/dist/store/selectors.d.ts +18 -0
  365. package/dist/store/selectors.d.ts.map +1 -0
  366. package/dist/store/selectors.js +39 -0
  367. package/dist/store/store.test.d.ts +2 -0
  368. package/dist/store/store.test.d.ts.map +1 -0
  369. package/dist/store/store.test.js +331 -0
  370. package/dist/store/types.d.ts +114 -0
  371. package/dist/store/types.d.ts.map +1 -0
  372. package/dist/store/types.js +1 -0
  373. package/dist/styles/tokens.test.d.ts +2 -0
  374. package/dist/styles/tokens.test.d.ts.map +1 -0
  375. package/dist/styles/tokens.test.js +199 -0
  376. package/dist/styles.css +2885 -0
  377. package/dist/toolbar/brand.d.ts +7 -0
  378. package/dist/toolbar/brand.d.ts.map +1 -0
  379. package/dist/toolbar/brand.js +11 -0
  380. package/dist/toolbar/breakpoint-control.d.ts +9 -0
  381. package/dist/toolbar/breakpoint-control.d.ts.map +1 -0
  382. package/dist/toolbar/breakpoint-control.js +23 -0
  383. package/dist/toolbar/editable-title.d.ts +14 -0
  384. package/dist/toolbar/editable-title.d.ts.map +1 -0
  385. package/dist/toolbar/editable-title.js +46 -0
  386. package/dist/toolbar/editable-title.test.d.ts +2 -0
  387. package/dist/toolbar/editable-title.test.d.ts.map +1 -0
  388. package/dist/toolbar/editable-title.test.js +53 -0
  389. package/dist/toolbar/index.d.ts +12 -0
  390. package/dist/toolbar/index.d.ts.map +1 -0
  391. package/dist/toolbar/index.js +5 -0
  392. package/dist/toolbar/locale-switcher.d.ts +10 -0
  393. package/dist/toolbar/locale-switcher.d.ts.map +1 -0
  394. package/dist/toolbar/locale-switcher.js +20 -0
  395. package/dist/toolbar/more-menu.d.ts +12 -0
  396. package/dist/toolbar/more-menu.d.ts.map +1 -0
  397. package/dist/toolbar/more-menu.js +47 -0
  398. package/dist/toolbar/panel-toggles.d.ts +9 -0
  399. package/dist/toolbar/panel-toggles.d.ts.map +1 -0
  400. package/dist/toolbar/panel-toggles.js +19 -0
  401. package/dist/toolbar/publish-dialog.d.ts +18 -0
  402. package/dist/toolbar/publish-dialog.d.ts.map +1 -0
  403. package/dist/toolbar/publish-dialog.js +49 -0
  404. package/dist/toolbar/publish.test.d.ts +2 -0
  405. package/dist/toolbar/publish.test.d.ts.map +1 -0
  406. package/dist/toolbar/publish.test.js +258 -0
  407. package/dist/toolbar/sample-picker.d.ts +18 -0
  408. package/dist/toolbar/sample-picker.d.ts.map +1 -0
  409. package/dist/toolbar/sample-picker.js +72 -0
  410. package/dist/toolbar/sample-picker.test.d.ts +2 -0
  411. package/dist/toolbar/sample-picker.test.d.ts.map +1 -0
  412. package/dist/toolbar/sample-picker.test.js +78 -0
  413. package/dist/toolbar/save-indicator.d.ts +8 -0
  414. package/dist/toolbar/save-indicator.d.ts.map +1 -0
  415. package/dist/toolbar/save-indicator.js +30 -0
  416. package/dist/toolbar/theme.d.ts +22 -0
  417. package/dist/toolbar/theme.d.ts.map +1 -0
  418. package/dist/toolbar/theme.js +46 -0
  419. package/dist/toolbar/theme.test.d.ts +2 -0
  420. package/dist/toolbar/theme.test.d.ts.map +1 -0
  421. package/dist/toolbar/theme.test.js +49 -0
  422. package/dist/toolbar/toolbar-centre.d.ts +13 -0
  423. package/dist/toolbar/toolbar-centre.d.ts.map +1 -0
  424. package/dist/toolbar/toolbar-centre.js +7 -0
  425. package/dist/toolbar/toolbar-left.d.ts +12 -0
  426. package/dist/toolbar/toolbar-left.d.ts.map +1 -0
  427. package/dist/toolbar/toolbar-left.js +16 -0
  428. package/dist/toolbar/toolbar-right.d.ts +19 -0
  429. package/dist/toolbar/toolbar-right.d.ts.map +1 -0
  430. package/dist/toolbar/toolbar-right.js +21 -0
  431. package/dist/toolbar/toolbar.d.ts +38 -0
  432. package/dist/toolbar/toolbar.d.ts.map +1 -0
  433. package/dist/toolbar/toolbar.js +27 -0
  434. package/dist/toolbar/toolbar.test.d.ts +2 -0
  435. package/dist/toolbar/toolbar.test.d.ts.map +1 -0
  436. package/dist/toolbar/toolbar.test.js +289 -0
  437. package/dist/toolbar/use-overflow-level.d.ts +9 -0
  438. package/dist/toolbar/use-overflow-level.d.ts.map +1 -0
  439. package/dist/toolbar/use-overflow-level.js +40 -0
  440. package/dist/toolbar/zoom-menu.d.ts +10 -0
  441. package/dist/toolbar/zoom-menu.d.ts.map +1 -0
  442. package/dist/toolbar/zoom-menu.js +17 -0
  443. package/dist/ui/icon.d.ts +102 -0
  444. package/dist/ui/icon.d.ts.map +1 -0
  445. package/dist/ui/icon.js +182 -0
  446. package/dist/ui/icon.test.d.ts +2 -0
  447. package/dist/ui/icon.test.d.ts.map +1 -0
  448. package/dist/ui/icon.test.js +115 -0
  449. package/dist/ui/index.d.ts +11 -0
  450. package/dist/ui/index.d.ts.map +1 -0
  451. package/dist/ui/index.js +5 -0
  452. package/dist/ui/panel.d.ts +18 -0
  453. package/dist/ui/panel.d.ts.map +1 -0
  454. package/dist/ui/panel.js +21 -0
  455. package/dist/ui/portal.d.ts +14 -0
  456. package/dist/ui/portal.d.ts.map +1 -0
  457. package/dist/ui/portal.js +14 -0
  458. package/dist/ui/primitives.d.ts +190 -0
  459. package/dist/ui/primitives.d.ts.map +1 -0
  460. package/dist/ui/primitives.js +164 -0
  461. package/dist/ui/primitives.test.d.ts +2 -0
  462. package/dist/ui/primitives.test.d.ts.map +1 -0
  463. package/dist/ui/primitives.test.js +215 -0
  464. package/dist/ui/toast.d.ts +39 -0
  465. package/dist/ui/toast.d.ts.map +1 -0
  466. package/dist/ui/toast.js +76 -0
  467. package/dist/ui/toast.test.d.ts +2 -0
  468. package/dist/ui/toast.test.d.ts.map +1 -0
  469. package/dist/ui/toast.test.js +95 -0
  470. package/package.json +66 -3
  471. package/README.md +0 -3
@@ -0,0 +1,2885 @@
1
+ /*
2
+ * The editor's stylesheet entry: ordered partials (tokens, base, shell, primitives, panels).
3
+ * Everything is scoped under `.buildr-editor` (plus the floating-layer classes), so importing
4
+ * it never touches the host page. The published `dist/styles.css` is these partials
5
+ * flattened in this order (see tooling/scripts/bundle-css.mjs).
6
+ * Dark mode follows `prefers-color-scheme`, or is forced with `data-theme="light" | "dark"`.
7
+ */
8
+ /*
9
+ * Design tokens (PB-119, values from docs/design/identity.md). This is the ONLY file where
10
+ * literal colours, spacing and font sizes may appear (stylelint enforces it).
11
+ *
12
+ * Theme: dark follows `prefers-color-scheme` unless the host sets `data-theme="light"`;
13
+ * `data-theme="dark"` forces dark; `data-theme="system"` (or no attribute) follows the system.
14
+ * Radix renders menus, popovers, dialogs and tooltips into the editor root (the portal container
15
+ * of `ui/portal.tsx`), so they inherit its tokens and its `data-theme`. Rendered outside a root
16
+ * (on <body>, e.g. a bare primitive), they receive the tokens through their own selectors.
17
+ */
18
+
19
+ .buildr-editor,
20
+ .bd-portal:not(.buildr-editor *),
21
+ .bd-popover:not(.buildr-editor *),
22
+ .bd-select-content:not(.buildr-editor *),
23
+ .bd-tooltip:not(.buildr-editor *),
24
+ .bd-dialog:not(.buildr-editor *),
25
+ .bd-dialog-overlay:not(.buildr-editor *),
26
+ .bd-menu:not(.buildr-editor *) {
27
+ /* Colour roles: light */
28
+ color-scheme: light;
29
+ --bd-bg: #e9ebf0;
30
+ --bd-surface: #ffffff;
31
+ --bd-surface-2: #f4f5f8;
32
+ --bd-surface-hover: #eceef2;
33
+ --bd-surface-selected: #e2e8fc;
34
+ --bd-border: #dfe1e7;
35
+ --bd-border-strong: #7d8391;
36
+ --bd-text: #1c1d22;
37
+ --bd-text-muted: #4b5060;
38
+ --bd-text-subtle: #5c6373;
39
+ --bd-accent: #3f5ae0;
40
+ --bd-accent-hover: #3049bd;
41
+ --bd-accent-soft: #e2e8fc;
42
+ --bd-accent-text: #ffffff;
43
+ --bd-focus: #3f5ae0;
44
+ --bd-danger: #c0282d;
45
+ --bd-danger-soft: #fdecec;
46
+ --bd-danger-text: #ffffff;
47
+ --bd-warning: #8a5300;
48
+ --bd-warning-soft: #fff3d9;
49
+ --bd-success: #1b7a3d;
50
+ --bd-success-soft: #e4f5ea;
51
+ --bd-info: #0b6b80;
52
+ --bd-info-soft: #e0f3f7;
53
+ --bd-toolbar: #1c1d22;
54
+ --bd-toolbar-hover: #33363f;
55
+ --bd-toolbar-border: #33363f;
56
+ --bd-toolbar-text: #f0f1f4;
57
+ --bd-toolbar-muted: #b4b9c6;
58
+ --bd-toolbar-focus: #a3b3f4;
59
+ --bd-shadow: rgb(18 19 23 / 14%);
60
+ --bd-overlay: rgb(18 19 23 / 50%);
61
+ --bd-primary: #3f5ae0;
62
+ --bd-primary-text: #ffffff;
63
+ --bd-primary-hover: #3049bd;
64
+ --bd-canvas-page: #ffffff;
65
+
66
+ /* Type */
67
+ --bd-font: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
68
+ --bd-font-mono: ui-monospace, "SF Mono", "Cascadia Mono", Menlo, Consolas, monospace;
69
+ --bd-text-xs: 11px;
70
+ --bd-leading-xs: 16px;
71
+ --bd-text-sm: 12px;
72
+ --bd-leading-sm: 16px;
73
+ --bd-text-md: 13px;
74
+ --bd-leading-md: 20px;
75
+ --bd-text-lg: 15px;
76
+ --bd-leading-lg: 24px;
77
+ --bd-weight-regular: 400;
78
+ --bd-weight-medium: 500;
79
+ --bd-weight-semibold: 600;
80
+ --bd-tracking-tight: -0.005em;
81
+
82
+ /* Spacing: 2 4 6 8 12 16 20 24 32 */
83
+ --bd-space-0: 2px;
84
+ --bd-space-1: 4px;
85
+ --bd-space-2: 6px;
86
+ --bd-space-3: 8px;
87
+ --bd-space-4: 12px;
88
+ --bd-space-5: 16px;
89
+ --bd-space-6: 20px;
90
+ --bd-space-7: 24px;
91
+ --bd-space-8: 32px;
92
+
93
+ /* Shape and sizes */
94
+ --bd-radius-sm: 4px;
95
+ --bd-radius-md: 6px;
96
+ --bd-radius-lg: 8px;
97
+ --bd-radius-pill: 999px;
98
+ --bd-radius: var(--bd-radius-md);
99
+ --bd-control-sm: 24px;
100
+ --bd-control-md: 28px;
101
+ --bd-control-lg: 32px;
102
+ --bd-panel-header: 40px;
103
+ --bd-statusbar-height: 28px;
104
+ --bd-toolbar-height: 44px;
105
+ --bd-issues-height: 160px;
106
+ --bd-border-width: 1px;
107
+ --bd-splitter-size: 1px;
108
+ --bd-splitter-hit: 8px;
109
+ --bd-left: 280px;
110
+ --bd-right: 320px;
111
+
112
+ /* Elevation: floating layers only */
113
+ --bd-elevation-1: 0 1px 2px var(--bd-shadow);
114
+ --bd-elevation-2: 0 4px 12px var(--bd-shadow), 0 0 0 1px var(--bd-border);
115
+ --bd-elevation-3: 0 12px 32px var(--bd-shadow), 0 0 0 1px var(--bd-border);
116
+
117
+ /* Motion */
118
+ --bd-duration-fast: 100ms;
119
+ --bd-duration-base: 160ms;
120
+ --bd-ease: cubic-bezier(0.2, 0, 0, 1);
121
+ }
122
+
123
+ @media (prefers-color-scheme: dark) {
124
+ .buildr-editor:not([data-theme="light"]),
125
+ .bd-portal:not(.buildr-editor *),
126
+ .bd-popover:not(.buildr-editor *),
127
+ .bd-select-content:not(.buildr-editor *),
128
+ .bd-tooltip:not(.buildr-editor *),
129
+ .bd-dialog:not(.buildr-editor *),
130
+ .bd-dialog-overlay:not(.buildr-editor *),
131
+ .bd-menu:not(.buildr-editor *) {
132
+ color-scheme: dark;
133
+ --bd-bg: #121317;
134
+ --bd-surface: #1c1d22;
135
+ --bd-surface-2: #23252b;
136
+ --bd-surface-hover: #2b2d35;
137
+ --bd-surface-selected: #243268;
138
+ --bd-border: #33363f;
139
+ --bd-border-strong: #7d8391;
140
+ --bd-text: #ecedf1;
141
+ --bd-text-muted: #b0b5c2;
142
+ --bd-text-subtle: #9fa5b4;
143
+ --bd-accent: #8ea2f5;
144
+ --bd-accent-hover: #a3b3f4;
145
+ --bd-accent-soft: #25325f;
146
+ --bd-accent-text: #0f1636;
147
+ --bd-focus: #a3b3f4;
148
+ --bd-danger: #ff8a8a;
149
+ --bd-danger-soft: #3d2226;
150
+ --bd-danger-text: #2a0b0e;
151
+ --bd-warning: #f2b552;
152
+ --bd-warning-soft: #3a2e15;
153
+ --bd-success: #5fce85;
154
+ --bd-success-soft: #173325;
155
+ --bd-info: #5fc9dc;
156
+ --bd-info-soft: #143038;
157
+ --bd-toolbar: #0c0d10;
158
+ --bd-toolbar-hover: #26282f;
159
+ --bd-toolbar-border: #26282f;
160
+ --bd-toolbar-text: #ecedf1;
161
+ --bd-toolbar-muted: #a9aebb;
162
+ --bd-toolbar-focus: #a3b3f4;
163
+ --bd-shadow: rgb(0 0 0 / 55%);
164
+ --bd-overlay: rgb(0 0 0 / 60%);
165
+ --bd-primary: #3f5ae0;
166
+ --bd-primary-text: #ffffff;
167
+ --bd-primary-hover: #3049bd;
168
+ }
169
+ }
170
+
171
+ .buildr-editor[data-theme="dark"] {
172
+ color-scheme: dark;
173
+ --bd-bg: #121317;
174
+ --bd-surface: #1c1d22;
175
+ --bd-surface-2: #23252b;
176
+ --bd-surface-hover: #2b2d35;
177
+ --bd-surface-selected: #243268;
178
+ --bd-border: #33363f;
179
+ --bd-border-strong: #7d8391;
180
+ --bd-text: #ecedf1;
181
+ --bd-text-muted: #b0b5c2;
182
+ --bd-text-subtle: #9fa5b4;
183
+ --bd-accent: #8ea2f5;
184
+ --bd-accent-hover: #a3b3f4;
185
+ --bd-accent-soft: #25325f;
186
+ --bd-accent-text: #0f1636;
187
+ --bd-focus: #a3b3f4;
188
+ --bd-danger: #ff8a8a;
189
+ --bd-danger-soft: #3d2226;
190
+ --bd-danger-text: #2a0b0e;
191
+ --bd-warning: #f2b552;
192
+ --bd-warning-soft: #3a2e15;
193
+ --bd-success: #5fce85;
194
+ --bd-success-soft: #173325;
195
+ --bd-info: #5fc9dc;
196
+ --bd-info-soft: #143038;
197
+ --bd-toolbar: #0c0d10;
198
+ --bd-toolbar-hover: #26282f;
199
+ --bd-toolbar-border: #26282f;
200
+ --bd-toolbar-text: #ecedf1;
201
+ --bd-toolbar-muted: #a9aebb;
202
+ --bd-toolbar-focus: #a3b3f4;
203
+ --bd-shadow: rgb(0 0 0 / 55%);
204
+ --bd-overlay: rgb(0 0 0 / 60%);
205
+ --bd-primary: #3f5ae0;
206
+ --bd-primary-text: #ffffff;
207
+ --bd-primary-hover: #3049bd;
208
+ }
209
+
210
+ @media (prefers-reduced-motion: reduce) {
211
+ .buildr-editor,
212
+ .bd-portal:not(.buildr-editor *),
213
+ .bd-popover:not(.buildr-editor *),
214
+ .bd-select-content:not(.buildr-editor *),
215
+ .bd-tooltip:not(.buildr-editor *),
216
+ .bd-dialog:not(.buildr-editor *),
217
+ .bd-dialog-overlay:not(.buildr-editor *),
218
+ .bd-menu:not(.buildr-editor *) {
219
+ --bd-duration-fast: 0ms;
220
+ --bd-duration-base: 0ms;
221
+ }
222
+ }
223
+
224
+ /*
225
+ * Base styles: self-hosted Inter (latin + latin-ext, weights 400/500/600; OFL, see
226
+ * fonts/LICENSE-inter.txt), the box model reset, the root text style, focus ring, themed
227
+ * scrollbars. The font URLs are relative to this file; the published build flattens the
228
+ * partials into dist/styles.css and rewrites them to ./fonts/.
229
+ */
230
+
231
+ @font-face {
232
+ font-family: "Inter";
233
+ font-style: normal;
234
+ font-weight: 400;
235
+ font-display: swap;
236
+ src: url("./fonts/inter-latin-ext-400-normal.woff2") format("woff2");
237
+ unicode-range:
238
+ U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
239
+ }
240
+
241
+ @font-face {
242
+ font-family: "Inter";
243
+ font-style: normal;
244
+ font-weight: 400;
245
+ font-display: swap;
246
+ src: url("./fonts/inter-latin-400-normal.woff2") format("woff2");
247
+ unicode-range:
248
+ U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
249
+ }
250
+
251
+ @font-face {
252
+ font-family: "Inter";
253
+ font-style: normal;
254
+ font-weight: 500;
255
+ font-display: swap;
256
+ src: url("./fonts/inter-latin-ext-500-normal.woff2") format("woff2");
257
+ unicode-range:
258
+ U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
259
+ }
260
+
261
+ @font-face {
262
+ font-family: "Inter";
263
+ font-style: normal;
264
+ font-weight: 500;
265
+ font-display: swap;
266
+ src: url("./fonts/inter-latin-500-normal.woff2") format("woff2");
267
+ unicode-range:
268
+ U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
269
+ }
270
+
271
+ @font-face {
272
+ font-family: "Inter";
273
+ font-style: normal;
274
+ font-weight: 600;
275
+ font-display: swap;
276
+ src: url("./fonts/inter-latin-ext-600-normal.woff2") format("woff2");
277
+ unicode-range:
278
+ U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
279
+ }
280
+
281
+ @font-face {
282
+ font-family: "Inter";
283
+ font-style: normal;
284
+ font-weight: 600;
285
+ font-display: swap;
286
+ src: url("./fonts/inter-latin-600-normal.woff2") format("woff2");
287
+ unicode-range:
288
+ U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
289
+ }
290
+
291
+ /* The floating layers share the editor's root text style. */
292
+ .buildr-editor,
293
+ .bd-portal,
294
+ .bd-popover,
295
+ .bd-select-content,
296
+ .bd-tooltip,
297
+ .bd-dialog,
298
+ .bd-menu {
299
+ font-family: var(--bd-font);
300
+ font-size: var(--bd-text-md);
301
+ font-weight: var(--bd-weight-regular);
302
+ line-height: var(--bd-leading-md);
303
+ scrollbar-width: thin;
304
+ scrollbar-color: var(--bd-border-strong) transparent;
305
+ }
306
+
307
+ .buildr-editor,
308
+ .buildr-editor *,
309
+ .buildr-editor *::before,
310
+ .buildr-editor *::after {
311
+ box-sizing: border-box;
312
+ }
313
+
314
+ .buildr-editor {
315
+ display: flex;
316
+ flex-direction: column;
317
+ width: 100%;
318
+ height: 100%;
319
+ min-height: 0;
320
+ background: var(--bd-bg);
321
+ color: var(--bd-text);
322
+ -webkit-font-smoothing: antialiased;
323
+ }
324
+
325
+ .buildr-editor :focus-visible {
326
+ outline: 2px solid var(--bd-focus);
327
+ outline-offset: 1px;
328
+ }
329
+
330
+ .buildr-editor .bd-toolbar :focus-visible {
331
+ outline-color: var(--bd-toolbar-focus);
332
+ }
333
+
334
+ /* Tabular numerals for numeric inputs (inspector) and anything opting in. */
335
+ .bd-tabular,
336
+ .buildr-editor input[type="number"] {
337
+ font-variant-numeric: tabular-nums;
338
+ }
339
+
340
+ /*
341
+ * Shell: toolbar, the three-column body, panels, splitters, the issues region, the canvas
342
+ * host and the composed application frame. Panel anatomy and splitters are refined in PB-122.
343
+ */
344
+
345
+ .bd-toolbar {
346
+ display: flex;
347
+ align-items: center;
348
+ gap: var(--bd-space-3);
349
+ flex: none;
350
+ height: var(--bd-toolbar-height);
351
+ padding: 0 var(--bd-space-4);
352
+ background: var(--bd-toolbar);
353
+ border-bottom: var(--bd-border-width) solid var(--bd-toolbar-border);
354
+ color: var(--bd-toolbar-text);
355
+ }
356
+
357
+ /* Controls on the dark toolbar use the toolbar tokens in both themes. */
358
+ .buildr-editor .bd-toolbar .bd-button,
359
+ .buildr-editor .bd-toolbar .bd-toggle,
360
+ .buildr-editor .bd-toolbar .bd-select-trigger {
361
+ border-color: var(--bd-toolbar-border);
362
+ background: transparent;
363
+ color: var(--bd-toolbar-text);
364
+ }
365
+
366
+ .buildr-editor .bd-toolbar .bd-button[data-variant="ghost"] {
367
+ border-color: transparent;
368
+ }
369
+
370
+ .buildr-editor .bd-toolbar .bd-button:hover:not(:disabled),
371
+ .buildr-editor .bd-toolbar .bd-toggle:hover,
372
+ .buildr-editor .bd-toolbar .bd-select-trigger:hover {
373
+ background: var(--bd-toolbar-hover);
374
+ }
375
+
376
+ .buildr-editor .bd-toolbar .bd-button[data-variant="primary"],
377
+ .buildr-editor .bd-toolbar .bd-toggle[data-state="on"] {
378
+ border-color: var(--bd-primary);
379
+ background: var(--bd-primary);
380
+ color: var(--bd-primary-text);
381
+ }
382
+
383
+ .buildr-editor .bd-toolbar .bd-button[data-variant="primary"]:hover:not(:disabled) {
384
+ border-color: var(--bd-primary-hover);
385
+ background: var(--bd-primary-hover);
386
+ }
387
+
388
+ .buildr-editor .bd-toolbar .bd-save-status {
389
+ color: var(--bd-toolbar-muted);
390
+ }
391
+
392
+ .buildr-editor .bd-toolbar .bd-save-status[data-status="error"],
393
+ .buildr-editor .bd-toolbar .bd-save-status[data-status="conflict"] {
394
+ color: var(--bd-toolbar-text);
395
+ }
396
+
397
+ .bd-body {
398
+ display: grid;
399
+ flex: 1;
400
+ min-height: 0;
401
+ grid-template-columns: var(--bd-left) var(--bd-splitter-size) minmax(0, 1fr) var(
402
+ --bd-splitter-size
403
+ ) var(--bd-right);
404
+ }
405
+
406
+ /* Panel anatomy (PB-122): one column that scrolls as a whole; header and footer stick to its edges. */
407
+ .bd-panel {
408
+ display: flex;
409
+ flex-direction: column;
410
+ min-width: 0;
411
+ min-height: 0;
412
+ overflow: auto;
413
+ background: var(--bd-surface);
414
+ }
415
+
416
+ .bd-panel[hidden] {
417
+ display: none;
418
+ }
419
+
420
+ .bd-panel-header {
421
+ position: sticky;
422
+ top: 0;
423
+ z-index: 1;
424
+ display: flex;
425
+ flex: none;
426
+ align-items: center;
427
+ gap: var(--bd-space-3);
428
+ height: var(--bd-panel-header);
429
+ padding: 0 var(--bd-space-4);
430
+ background: var(--bd-surface);
431
+ border-bottom: var(--bd-border-width) solid var(--bd-border);
432
+ }
433
+
434
+ .bd-panel-body {
435
+ flex: 1 0 auto;
436
+ padding: var(--bd-space-4);
437
+ }
438
+
439
+ .bd-panel-footer {
440
+ position: sticky;
441
+ bottom: 0;
442
+ z-index: 1;
443
+ flex: none;
444
+ padding: var(--bd-space-3) var(--bd-space-4);
445
+ background: var(--bd-surface);
446
+ border-top: var(--bd-border-width) solid var(--bd-border);
447
+ }
448
+
449
+ .bd-canvas {
450
+ min-width: 0;
451
+ min-height: 0;
452
+ overflow: auto;
453
+ background: var(--bd-bg);
454
+ }
455
+
456
+ /* A 1px line with a wider invisible hit area; the accent line shows on hover, focus and drag. */
457
+ .bd-splitter {
458
+ position: relative;
459
+ z-index: 2;
460
+ cursor: col-resize;
461
+ background: var(--bd-border);
462
+ touch-action: none;
463
+ }
464
+
465
+ .bd-splitter::before {
466
+ content: "";
467
+ position: absolute;
468
+ inset: 0 calc((var(--bd-splitter-hit) - var(--bd-splitter-size)) / -2);
469
+ }
470
+
471
+ .bd-splitter:hover,
472
+ .bd-splitter:focus-visible,
473
+ .bd-splitter[data-dragging="true"] {
474
+ background: var(--bd-accent);
475
+ box-shadow: 0 0 0 var(--bd-border-width) var(--bd-accent);
476
+ }
477
+
478
+ /* Narrow editor (below 1100px, measured): the side panels are overlays the toolbar toggles. */
479
+ .bd-body {
480
+ position: relative;
481
+ }
482
+
483
+ .bd-body[data-narrow="true"] {
484
+ grid-template-columns: minmax(0, 1fr);
485
+ }
486
+
487
+ .bd-body[data-narrow="true"] > .bd-splitter {
488
+ display: none;
489
+ }
490
+
491
+ .bd-body[data-narrow="true"] > .bd-panel {
492
+ position: absolute;
493
+ top: 0;
494
+ bottom: 0;
495
+ z-index: 10;
496
+ width: var(--bd-left);
497
+ max-width: 90%;
498
+ box-shadow: var(--bd-elevation-3);
499
+ }
500
+
501
+ .bd-body[data-narrow="true"] > .bd-panel[data-side="left"] {
502
+ left: 0;
503
+ }
504
+
505
+ .bd-body[data-narrow="true"] > .bd-panel[data-side="right"] {
506
+ right: 0;
507
+ width: var(--bd-right);
508
+ }
509
+
510
+ /* Status bar (PB-122): 28px, holding the issues toggle with the counts, and read-only facts. */
511
+ .bd-issues {
512
+ flex: none;
513
+ border-top: var(--bd-border-width) solid var(--bd-border);
514
+ background: var(--bd-surface);
515
+ }
516
+
517
+ .bd-issues[data-open="true"] {
518
+ display: flex;
519
+ flex-direction: column;
520
+ height: var(--bd-issues-height);
521
+ overflow: auto;
522
+ }
523
+
524
+ .bd-issues-bar {
525
+ display: flex;
526
+ flex: none;
527
+ align-items: center;
528
+ gap: var(--bd-space-4);
529
+ height: var(--bd-statusbar-height);
530
+ padding: 0 var(--bd-space-4);
531
+ font-size: var(--bd-text-sm);
532
+ line-height: var(--bd-leading-sm);
533
+ color: var(--bd-text-muted);
534
+ }
535
+
536
+ .bd-issues-bar .bd-toolbar-spacer {
537
+ flex: 1;
538
+ }
539
+
540
+ .buildr-editor .bd-issues-bar .bd-status-toggle {
541
+ height: var(--bd-control-sm);
542
+ gap: var(--bd-space-3);
543
+ color: inherit;
544
+ }
545
+
546
+ .bd-status-count {
547
+ display: inline-flex;
548
+ align-items: center;
549
+ gap: var(--bd-space-1);
550
+ font-variant-numeric: tabular-nums;
551
+ }
552
+
553
+ .bd-status-count[data-severity="error"] {
554
+ color: var(--bd-danger);
555
+ }
556
+
557
+ .bd-status-count[data-severity="warning"] {
558
+ color: var(--bd-warning);
559
+ }
560
+
561
+ .bd-status-item {
562
+ white-space: nowrap;
563
+ }
564
+
565
+ .bd-status-item[data-status="error"],
566
+ .bd-status-item[data-status="conflict"] {
567
+ color: var(--bd-danger);
568
+ }
569
+
570
+ .bd-heading {
571
+ margin: 0;
572
+ padding: var(--bd-space-3) var(--bd-space-4);
573
+ font-size: var(--bd-text-sm);
574
+ line-height: var(--bd-leading-sm);
575
+ font-weight: var(--bd-weight-semibold);
576
+ color: var(--bd-text-muted);
577
+ }
578
+
579
+ .buildr-editor .bd-breadcrumbs ol {
580
+ display: flex;
581
+ flex-wrap: wrap;
582
+ gap: var(--bd-space-1);
583
+ margin: 0;
584
+ padding: 0;
585
+ list-style: none;
586
+ }
587
+ .buildr-editor .bd-breadcrumbs li + li::before {
588
+ content: "›";
589
+ margin-right: var(--bd-space-1);
590
+ color: var(--bd-text-subtle);
591
+ }
592
+ .buildr-editor .bd-breadcrumb {
593
+ border: 0;
594
+ background: none;
595
+ padding: var(--bd-space-0) var(--bd-space-1);
596
+ border-radius: var(--bd-radius-sm);
597
+ color: var(--bd-text-muted);
598
+ font: inherit;
599
+ cursor: pointer;
600
+ }
601
+ .buildr-editor .bd-breadcrumb:hover {
602
+ background: var(--bd-surface-hover);
603
+ }
604
+ .buildr-editor .bd-breadcrumb[aria-current="location"] {
605
+ color: var(--bd-text);
606
+ font-weight: var(--bd-weight-semibold);
607
+ }
608
+
609
+ /* Canvas stage (PB-124) */
610
+ .buildr-editor .bd-canvas-host {
611
+ position: relative;
612
+ display: flex;
613
+ flex-direction: column;
614
+ gap: var(--bd-space-3);
615
+ height: 100%;
616
+ box-sizing: border-box;
617
+ padding: var(--bd-space-6);
618
+ overflow: auto;
619
+ background: var(--bd-bg);
620
+ }
621
+ .buildr-editor .bd-canvas-width {
622
+ flex: none;
623
+ margin: 0 auto;
624
+ font-size: var(--bd-text-sm);
625
+ line-height: var(--bd-leading-sm);
626
+ color: var(--bd-text-muted);
627
+ font-variant-numeric: tabular-nums;
628
+ }
629
+ .buildr-editor .bd-canvas-stage-area {
630
+ flex: 1;
631
+ min-height: 0;
632
+ }
633
+ .buildr-editor .bd-canvas-stage {
634
+ margin: 0 auto;
635
+ height: 100%;
636
+ overflow: hidden;
637
+ border-radius: var(--bd-radius-sm);
638
+ background: var(--bd-canvas-page);
639
+ box-shadow: var(--bd-elevation-2);
640
+ transition: width var(--bd-duration-base);
641
+ }
642
+ .buildr-editor .bd-canvas-frame {
643
+ display: block;
644
+ height: 100%;
645
+ border: 0;
646
+ background: var(--bd-canvas-page);
647
+ transform-origin: top left;
648
+ transition: transform var(--bd-duration-base);
649
+ }
650
+ .buildr-editor .bd-canvas-frame[data-status="connecting"] {
651
+ visibility: hidden;
652
+ }
653
+ .buildr-editor .bd-canvas-status,
654
+ .buildr-editor .bd-canvas-error {
655
+ position: absolute;
656
+ inset: 0;
657
+ display: flex;
658
+ flex-direction: column;
659
+ align-items: center;
660
+ justify-content: center;
661
+ gap: var(--bd-space-4);
662
+ margin: 0;
663
+ padding: var(--bd-space-5);
664
+ text-align: center;
665
+ color: var(--bd-text-muted);
666
+ }
667
+ .buildr-editor .bd-canvas-error {
668
+ background: var(--bd-bg);
669
+ color: var(--bd-text);
670
+ }
671
+ .buildr-editor .bd-canvas-card > * {
672
+ max-width: 48ch;
673
+ margin-block: 0;
674
+ }
675
+ .buildr-editor .bd-canvas-title {
676
+ font-size: var(--bd-text-lg);
677
+ line-height: var(--bd-leading-lg);
678
+ font-weight: var(--bd-weight-semibold);
679
+ }
680
+ .buildr-editor .bd-canvas-error dl.bd-canvas-detail {
681
+ padding: var(--bd-space-4);
682
+ border: 1px solid var(--bd-border);
683
+ border-radius: var(--bd-radius-md);
684
+ background: var(--bd-surface-2);
685
+ text-align: left;
686
+ }
687
+ .buildr-editor .bd-canvas-detail {
688
+ font-size: var(--bd-text-sm);
689
+ line-height: var(--bd-leading-sm);
690
+ color: var(--bd-text-muted);
691
+ }
692
+
693
+ /* Toolbar (PB-083, redesigned in PB-123) */
694
+ .buildr-editor .bd-toolbar-title {
695
+ flex: none;
696
+ max-width: 40ch;
697
+ margin: 0;
698
+ font-size: var(--bd-text-lg);
699
+ line-height: var(--bd-leading-lg);
700
+ font-weight: var(--bd-weight-semibold);
701
+ letter-spacing: var(--bd-tracking-tight);
702
+ overflow: hidden;
703
+ text-overflow: ellipsis;
704
+ white-space: nowrap;
705
+ }
706
+
707
+ .buildr-editor .bd-toolbar-spacer {
708
+ flex: 1;
709
+ }
710
+
711
+ .buildr-editor .bd-breakpoints,
712
+ .buildr-editor .bd-toolbar-group {
713
+ border: 0;
714
+ margin: 0;
715
+ padding: 0;
716
+ min-width: 0;
717
+ display: inline-flex;
718
+ gap: var(--bd-space-0);
719
+ }
720
+
721
+ .buildr-editor .bd-toolbar-link {
722
+ text-decoration: none;
723
+ }
724
+
725
+ .buildr-editor .bd-toolbar .bd-select-trigger {
726
+ width: auto;
727
+ min-width: 88px;
728
+ }
729
+
730
+ .buildr-editor .bd-save-status,
731
+ .bd-save-status {
732
+ display: inline-flex;
733
+ align-items: center;
734
+ gap: var(--bd-space-3);
735
+ font-size: var(--bd-text-sm);
736
+ line-height: var(--bd-leading-sm);
737
+ }
738
+
739
+ .bd-save-status[data-status="error"],
740
+ .bd-save-status[data-status="conflict"] {
741
+ color: var(--bd-danger);
742
+ }
743
+
744
+ /* Toolbar zones and collapsing (PB-123). The row is measured by a ResizeObserver, not a media query. */
745
+ .buildr-editor .bd-toolbar-row {
746
+ display: flex;
747
+ align-items: center;
748
+ gap: var(--bd-space-4);
749
+ flex: 1;
750
+ min-width: 0;
751
+ height: 100%;
752
+ overflow: hidden;
753
+ }
754
+
755
+ .buildr-editor .bd-toolbar-zone {
756
+ display: flex;
757
+ align-items: center;
758
+ gap: var(--bd-space-3);
759
+ flex: none;
760
+ white-space: nowrap;
761
+ }
762
+
763
+ /* Last step of collapsing: only now may the title give way. */
764
+ .buildr-editor .bd-toolbar-row[data-level="4"] .bd-toolbar-title {
765
+ flex: 0 1 auto;
766
+ min-width: 6ch;
767
+ }
768
+
769
+ .buildr-editor .bd-status-pill {
770
+ padding: var(--bd-space-0) var(--bd-space-3);
771
+ border: var(--bd-border-width) solid var(--bd-toolbar-border);
772
+ border-radius: var(--bd-radius-pill);
773
+ color: var(--bd-toolbar-muted);
774
+ font-size: var(--bd-text-xs);
775
+ line-height: var(--bd-leading-xs);
776
+ font-weight: var(--bd-weight-medium);
777
+ }
778
+
779
+ .buildr-editor .bd-toolbar .bd-icon-button {
780
+ min-width: var(--bd-control-md);
781
+ }
782
+
783
+ .buildr-editor .bd-toolbar .bd-toolbar-link {
784
+ color: var(--bd-toolbar-text);
785
+ }
786
+
787
+ .buildr-editor .bd-toolbar .bd-save-status {
788
+ gap: var(--bd-space-2);
789
+ white-space: nowrap;
790
+ }
791
+
792
+ /* Segmented control: breakpoints in the toolbar, the theme switch in the more menu. */
793
+ .bd-segmented {
794
+ display: inline-flex;
795
+ gap: var(--bd-space-0);
796
+ padding: var(--bd-space-0);
797
+ border: var(--bd-border-width) solid var(--bd-border);
798
+ border-radius: var(--bd-radius-md);
799
+ }
800
+
801
+ .bd-segmented .bd-segment {
802
+ min-height: var(--bd-control-sm);
803
+ padding: 0 var(--bd-space-3);
804
+ border-radius: var(--bd-radius-sm);
805
+ }
806
+
807
+ .bd-breakpoints .bd-segment {
808
+ width: var(--bd-control-md);
809
+ padding: 0;
810
+ }
811
+
812
+ .bd-segmented .bd-button.bd-segment[aria-pressed="true"],
813
+ .bd-segmented .bd-button.bd-segment[aria-pressed="true"]:hover:not(:disabled) {
814
+ background: var(--bd-surface-selected);
815
+ color: var(--bd-text);
816
+ }
817
+
818
+ .buildr-editor .bd-toolbar .bd-segmented {
819
+ border-color: var(--bd-toolbar-border);
820
+ }
821
+
822
+ /* PB-131: inactive segments must be readable on the dark toolbar in both themes. */
823
+ .buildr-editor .bd-toolbar .bd-segmented .bd-segment {
824
+ color: var(--bd-toolbar-muted);
825
+ }
826
+
827
+ .buildr-editor .bd-toolbar .bd-segmented .bd-segment:hover:not(:disabled) {
828
+ background: var(--bd-toolbar-hover);
829
+ color: var(--bd-toolbar-text);
830
+ }
831
+
832
+ /* On the dark toolbar the active segment is the inverse of the bar. */
833
+ .buildr-editor .bd-toolbar .bd-segmented .bd-button.bd-segment[aria-pressed="true"],
834
+ .buildr-editor
835
+ .bd-toolbar
836
+ .bd-segmented
837
+ .bd-button.bd-segment[aria-pressed="true"]:hover:not(:disabled) {
838
+ background: var(--bd-toolbar-text);
839
+ color: var(--bd-toolbar);
840
+ }
841
+
842
+ .buildr-editor .bd-zoom-trigger {
843
+ gap: var(--bd-space-1);
844
+ min-width: 64px;
845
+ justify-content: space-between;
846
+ }
847
+
848
+ /* Menu-like popovers (zoom, more): a plain list of items. */
849
+ .bd-popover.bd-menu-popover {
850
+ min-width: 160px;
851
+ padding: var(--bd-space-1);
852
+ }
853
+
854
+ .bd-menu-list {
855
+ display: flex;
856
+ flex-direction: column;
857
+ gap: var(--bd-space-0);
858
+ }
859
+
860
+ .bd-menu-list .bd-menu-item {
861
+ display: flex;
862
+ align-items: center;
863
+ gap: var(--bd-space-3);
864
+ border: 0;
865
+ background: none;
866
+ color: inherit;
867
+ font: inherit;
868
+ text-align: start;
869
+ text-decoration: none;
870
+ }
871
+
872
+ .bd-menu-list .bd-menu-item:hover,
873
+ .bd-menu-list .bd-menu-item:focus-visible {
874
+ background: var(--bd-surface-hover);
875
+ }
876
+
877
+ .bd-menu-list .bd-menu-item[aria-pressed="true"] {
878
+ background: var(--bd-surface-selected);
879
+ font-weight: var(--bd-weight-semibold);
880
+ }
881
+
882
+ .bd-menu-group {
883
+ margin: 0;
884
+ padding: var(--bd-space-2) var(--bd-space-1) var(--bd-space-1);
885
+ border: 0;
886
+ border-top: var(--bd-border-width) solid var(--bd-border);
887
+ }
888
+
889
+ .bd-menu-label {
890
+ padding: 0 var(--bd-space-1) var(--bd-space-1);
891
+ color: var(--bd-text-muted);
892
+ font-size: var(--bd-text-xs);
893
+ line-height: var(--bd-leading-xs);
894
+ }
895
+
896
+ /* Preview (PB-091) */
897
+ .bd-preview {
898
+ position: fixed;
899
+ inset: 0;
900
+ z-index: 1000;
901
+ display: flex;
902
+ flex-direction: column;
903
+ background: var(--bd-bg);
904
+ }
905
+ .bd-preview-bar {
906
+ display: flex;
907
+ align-items: center;
908
+ justify-content: space-between;
909
+ padding: var(--bd-space-3) var(--bd-space-4);
910
+ border-bottom: var(--bd-border-width) solid var(--bd-border);
911
+ }
912
+ .bd-preview-frame {
913
+ flex: 1;
914
+ width: 100%;
915
+ border: 0;
916
+ }
917
+
918
+ /* The composed editor (EditorApp) */
919
+ .buildr-editor .bd-app-canvas {
920
+ display: flex;
921
+ flex-direction: column;
922
+ height: 100%;
923
+ min-height: 0;
924
+ }
925
+ .buildr-editor .bd-app-canvas > .bd-canvas-host {
926
+ flex: 1;
927
+ min-height: 0;
928
+ }
929
+ .buildr-editor .bd-app-status {
930
+ margin: 0;
931
+ padding: var(--bd-space-7);
932
+ color: var(--bd-text-muted);
933
+ }
934
+ /* Content language (PB-115) */
935
+ .buildr-editor .bd-translation-banner {
936
+ margin: 0;
937
+ padding: var(--bd-space-3) var(--bd-space-4);
938
+ font-size: var(--bd-text-sm);
939
+ line-height: var(--bd-leading-sm);
940
+ border-bottom: var(--bd-border-width) solid var(--bd-border);
941
+ background: var(--bd-surface-2);
942
+ color: var(--bd-text-muted);
943
+ }
944
+
945
+ /* Shell frame (PB-122): the editor never makes its page scroll; what does not fit is clipped inside it. */
946
+ .buildr-editor {
947
+ overflow: hidden;
948
+ }
949
+
950
+ /* Product identity (top left of the toolbar) */
951
+ .buildr-editor .bd-brand {
952
+ display: inline-flex;
953
+ align-items: center;
954
+ gap: var(--bd-space-3);
955
+ flex: none;
956
+ padding-right: var(--bd-space-4);
957
+ border-right: var(--bd-border-width) solid var(--bd-toolbar-border);
958
+ color: var(--bd-toolbar-text);
959
+ font-size: var(--bd-text-lg);
960
+ line-height: var(--bd-leading-lg);
961
+ font-weight: var(--bd-weight-semibold);
962
+ letter-spacing: var(--bd-tracking-tight);
963
+ user-select: none;
964
+ }
965
+
966
+ .buildr-editor .bd-brand-tile {
967
+ fill: var(--bd-primary);
968
+ }
969
+
970
+ .buildr-editor .bd-brand-block {
971
+ fill: var(--bd-primary-text);
972
+ }
973
+
974
+ /* The name is the first thing to go when the row runs short. */
975
+ .buildr-editor .bd-toolbar-row[data-level="4"] .bd-brand-name {
976
+ display: none;
977
+ }
978
+
979
+ .buildr-editor .bd-toolbar-row[data-level="4"] .bd-brand {
980
+ padding-right: 0;
981
+ border-right: 0;
982
+ }
983
+
984
+ /* The page name is a field that reads as a heading until it is hovered or focused. */
985
+ .buildr-editor .bd-title-input {
986
+ min-width: 0;
987
+ height: var(--bd-control-md);
988
+ padding: 0 var(--bd-space-2);
989
+ border: var(--bd-border-width) solid transparent;
990
+ border-radius: var(--bd-radius-sm);
991
+ background: transparent;
992
+ color: inherit;
993
+ font-family: inherit;
994
+ text-overflow: ellipsis;
995
+ }
996
+
997
+ .buildr-editor .bd-title-input:hover:not(:disabled) {
998
+ border-color: var(--bd-toolbar-border);
999
+ }
1000
+
1001
+ .buildr-editor .bd-title-input:focus-visible {
1002
+ border-color: var(--bd-primary);
1003
+ background: var(--bd-toolbar-hover);
1004
+ outline: none;
1005
+ }
1006
+
1007
+ .buildr-editor .bd-title-input:disabled {
1008
+ opacity: 1;
1009
+ }
1010
+
1011
+ .buildr-editor .bd-toolbar-heading {
1012
+ display: flex;
1013
+ min-width: 0;
1014
+ margin: 0;
1015
+ }
1016
+
1017
+ /* Too small a window: the editor does not open (docs/editor.md#small-screens) */
1018
+ .buildr-editor .bd-small-screen {
1019
+ display: flex;
1020
+ align-items: center;
1021
+ justify-content: center;
1022
+ min-height: 100%;
1023
+ padding: var(--bd-space-7);
1024
+ box-sizing: border-box;
1025
+ background: var(--bd-surface-2);
1026
+ color: var(--bd-text);
1027
+ }
1028
+ .buildr-editor .bd-small-screen-card {
1029
+ display: flex;
1030
+ flex-direction: column;
1031
+ align-items: center;
1032
+ gap: var(--bd-space-4);
1033
+ max-width: 28rem;
1034
+ padding: var(--bd-space-8) var(--bd-space-7);
1035
+ text-align: center;
1036
+ border: var(--bd-border-width) solid var(--bd-border);
1037
+ border-radius: var(--bd-radius-lg);
1038
+ background: var(--bd-surface);
1039
+ }
1040
+ .buildr-editor .bd-small-screen-icon {
1041
+ display: inline-flex;
1042
+ align-items: center;
1043
+ justify-content: center;
1044
+ width: calc(var(--bd-space-8) * 2);
1045
+ height: calc(var(--bd-space-8) * 2);
1046
+ border-radius: var(--bd-radius-pill);
1047
+ background: var(--bd-surface-selected);
1048
+ color: var(--bd-accent);
1049
+ }
1050
+ .buildr-editor .bd-small-screen-title {
1051
+ margin: 0;
1052
+ font-size: var(--bd-text-lg);
1053
+ line-height: var(--bd-leading-lg);
1054
+ font-weight: var(--bd-weight-semibold);
1055
+ }
1056
+ .buildr-editor .bd-small-screen-body,
1057
+ .buildr-editor .bd-small-screen-hint {
1058
+ margin: 0;
1059
+ font-size: var(--bd-text-md);
1060
+ line-height: var(--bd-leading-md);
1061
+ color: var(--bd-text-muted);
1062
+ }
1063
+ .buildr-editor .bd-small-screen-hint {
1064
+ font-size: var(--bd-text-xs);
1065
+ line-height: var(--bd-leading-xs);
1066
+ color: var(--bd-text-subtle);
1067
+ }
1068
+
1069
+ /*
1070
+ * UI primitives: buttons, inputs, selects, popovers, tooltips, tabs, toggles, dialogs, menus,
1071
+ * transient notices and the drag ghost. States follow docs/design/identity.md section 6.
1072
+ */
1073
+
1074
+ .bd-button {
1075
+ display: inline-flex;
1076
+ align-items: center;
1077
+ justify-content: center;
1078
+ gap: var(--bd-space-1);
1079
+ min-height: var(--bd-control-md);
1080
+ padding: 0 var(--bd-space-4);
1081
+ border: var(--bd-border-width) solid var(--bd-border-strong);
1082
+ border-radius: var(--bd-radius-md);
1083
+ background: var(--bd-surface);
1084
+ color: var(--bd-text);
1085
+ font: inherit;
1086
+ cursor: pointer;
1087
+ transition: background-color var(--bd-duration-fast) var(--bd-ease);
1088
+ }
1089
+
1090
+ .bd-button:hover:not(:disabled) {
1091
+ background: var(--bd-surface-hover);
1092
+ }
1093
+
1094
+ .bd-button:disabled {
1095
+ opacity: 0.4;
1096
+ cursor: not-allowed;
1097
+ }
1098
+
1099
+ .bd-button[data-variant="primary"] {
1100
+ background: var(--bd-primary);
1101
+ border-color: var(--bd-primary);
1102
+ color: var(--bd-primary-text);
1103
+ font-weight: var(--bd-weight-semibold);
1104
+ }
1105
+
1106
+ .bd-button[data-variant="primary"]:hover:not(:disabled) {
1107
+ background: var(--bd-primary-hover);
1108
+ border-color: var(--bd-primary-hover);
1109
+ }
1110
+
1111
+ .bd-button[data-variant="ghost"] {
1112
+ border-color: transparent;
1113
+ background: transparent;
1114
+ }
1115
+
1116
+ .bd-button[data-variant="ghost"]:hover:not(:disabled) {
1117
+ background: var(--bd-surface-hover);
1118
+ }
1119
+
1120
+ .bd-button[data-variant="danger"] {
1121
+ color: var(--bd-danger);
1122
+ }
1123
+
1124
+ .bd-icon {
1125
+ display: block;
1126
+ flex: none;
1127
+ }
1128
+
1129
+ .bd-icon-button {
1130
+ display: inline-grid;
1131
+ place-items: center;
1132
+ padding: 0;
1133
+ width: var(--bd-control-md);
1134
+ }
1135
+
1136
+ .bd-input,
1137
+ .bd-select-trigger {
1138
+ min-height: var(--bd-control-md);
1139
+ width: 100%;
1140
+ padding: 0 var(--bd-space-3);
1141
+ border: var(--bd-border-width) solid var(--bd-border-strong);
1142
+ border-radius: var(--bd-radius-md);
1143
+ background: var(--bd-surface);
1144
+ color: var(--bd-text);
1145
+ font: inherit;
1146
+ }
1147
+
1148
+ .bd-input::placeholder {
1149
+ color: var(--bd-text-subtle);
1150
+ }
1151
+
1152
+ .bd-input:disabled {
1153
+ background: var(--bd-surface-2);
1154
+ color: var(--bd-text-subtle);
1155
+ }
1156
+
1157
+ .bd-select-trigger {
1158
+ display: inline-flex;
1159
+ align-items: center;
1160
+ justify-content: space-between;
1161
+ gap: var(--bd-space-3);
1162
+ cursor: pointer;
1163
+ }
1164
+
1165
+ .bd-popover,
1166
+ .bd-select-content,
1167
+ .bd-tooltip {
1168
+ z-index: 1000;
1169
+ border-radius: var(--bd-radius-md);
1170
+ background: var(--bd-surface);
1171
+ color: var(--bd-text);
1172
+ box-shadow: var(--bd-elevation-2);
1173
+ }
1174
+
1175
+ .bd-popover {
1176
+ padding: var(--bd-space-4);
1177
+ border-radius: var(--bd-radius-lg);
1178
+ }
1179
+
1180
+ .bd-tooltip {
1181
+ padding: var(--bd-space-1) var(--bd-space-3);
1182
+ font-size: var(--bd-text-sm);
1183
+ line-height: var(--bd-leading-sm);
1184
+ }
1185
+
1186
+ .bd-select-item {
1187
+ padding: var(--bd-space-1) var(--bd-space-4);
1188
+ cursor: pointer;
1189
+ outline: none;
1190
+ }
1191
+
1192
+ .bd-select-item[data-highlighted] {
1193
+ background: var(--bd-surface-hover);
1194
+ }
1195
+
1196
+ .bd-tabs-list {
1197
+ display: flex;
1198
+ gap: var(--bd-space-1);
1199
+ border-bottom: var(--bd-border-width) solid var(--bd-border);
1200
+ padding: 0 var(--bd-space-3);
1201
+ }
1202
+
1203
+ .bd-tab {
1204
+ padding: var(--bd-space-3) var(--bd-space-4);
1205
+ border: 0;
1206
+ border-bottom: 2px solid transparent;
1207
+ background: transparent;
1208
+ color: var(--bd-text-muted);
1209
+ font: inherit;
1210
+ font-size: var(--bd-text-sm);
1211
+ line-height: var(--bd-leading-sm);
1212
+ font-weight: var(--bd-weight-medium);
1213
+ cursor: pointer;
1214
+ }
1215
+
1216
+ .bd-tab[data-state="active"] {
1217
+ color: var(--bd-text);
1218
+ border-bottom-color: var(--bd-accent);
1219
+ }
1220
+
1221
+ .bd-toggle {
1222
+ min-height: var(--bd-control-md);
1223
+ min-width: var(--bd-control-md);
1224
+ padding: 0 var(--bd-space-3);
1225
+ border: var(--bd-border-width) solid var(--bd-border-strong);
1226
+ border-radius: var(--bd-radius-md);
1227
+ background: var(--bd-surface);
1228
+ color: var(--bd-text);
1229
+ font: inherit;
1230
+ cursor: pointer;
1231
+ }
1232
+
1233
+ .bd-toggle:hover {
1234
+ background: var(--bd-surface-hover);
1235
+ }
1236
+
1237
+ .bd-toggle[data-state="on"] {
1238
+ background: var(--bd-primary);
1239
+ border-color: var(--bd-primary);
1240
+ color: var(--bd-primary-text);
1241
+ }
1242
+
1243
+ .bd-dialog-overlay {
1244
+ position: fixed;
1245
+ inset: 0;
1246
+ z-index: 999;
1247
+ background: var(--bd-overlay);
1248
+ }
1249
+
1250
+ .bd-dialog {
1251
+ position: fixed;
1252
+ z-index: 1000;
1253
+ top: 50%;
1254
+ left: 50%;
1255
+ transform: translate(-50%, -50%);
1256
+ width: min(480px, calc(100vw - 32px));
1257
+ max-height: calc(100vh - 32px);
1258
+ display: flex;
1259
+ flex-direction: column;
1260
+ overflow: hidden;
1261
+ border-radius: var(--bd-radius-lg);
1262
+ background: var(--bd-surface);
1263
+ color: var(--bd-text);
1264
+ box-shadow: var(--bd-elevation-3);
1265
+ }
1266
+
1267
+ .bd-dialog-header {
1268
+ display: flex;
1269
+ flex: none;
1270
+ align-items: flex-start;
1271
+ justify-content: space-between;
1272
+ gap: var(--bd-space-4);
1273
+ padding: var(--bd-space-5) var(--bd-space-5) var(--bd-space-3);
1274
+ }
1275
+
1276
+ .bd-dialog-heading {
1277
+ min-width: 0;
1278
+ }
1279
+
1280
+ .bd-dialog-body {
1281
+ flex: 1;
1282
+ min-height: 0;
1283
+ overflow: auto;
1284
+ padding: var(--bd-space-3) var(--bd-space-5);
1285
+ }
1286
+
1287
+ .bd-dialog-footer {
1288
+ display: flex;
1289
+ flex: none;
1290
+ justify-content: flex-end;
1291
+ gap: var(--bd-space-3);
1292
+ padding: var(--bd-space-4) var(--bd-space-5);
1293
+ border-top: var(--bd-border-width) solid var(--bd-border);
1294
+ }
1295
+
1296
+ .bd-dialog-title {
1297
+ margin: 0;
1298
+ font-size: var(--bd-text-lg);
1299
+ line-height: var(--bd-leading-lg);
1300
+ font-weight: var(--bd-weight-semibold);
1301
+ letter-spacing: var(--bd-tracking-tight);
1302
+ }
1303
+
1304
+ .bd-dialog-description {
1305
+ margin: var(--bd-space-1) 0 0;
1306
+ color: var(--bd-text-muted);
1307
+ }
1308
+
1309
+ .bd-visually-hidden {
1310
+ position: absolute;
1311
+ width: 1px;
1312
+ height: 1px;
1313
+ /* stylelint-disable-next-line declaration-property-value-disallowed-list -- 1px clip hack */
1314
+ margin: -1px;
1315
+ padding: 0;
1316
+ overflow: hidden;
1317
+ clip-path: inset(50%);
1318
+ white-space: nowrap;
1319
+ border: 0;
1320
+ }
1321
+
1322
+ .bd-menu {
1323
+ z-index: 1000;
1324
+ min-width: 160px;
1325
+ padding: var(--bd-space-1);
1326
+ border-radius: var(--bd-radius-md);
1327
+ background: var(--bd-surface);
1328
+ color: var(--bd-text);
1329
+ box-shadow: var(--bd-elevation-2);
1330
+ }
1331
+ .bd-menu-item {
1332
+ padding: var(--bd-space-1) var(--bd-space-4);
1333
+ border-radius: var(--bd-radius-sm);
1334
+ cursor: pointer;
1335
+ outline: none;
1336
+ }
1337
+ .bd-menu-item[data-highlighted] {
1338
+ background: var(--bd-surface-hover);
1339
+ }
1340
+ .bd-menu-item[data-disabled] {
1341
+ opacity: 0.4;
1342
+ cursor: default;
1343
+ }
1344
+ .bd-menu-item[data-danger]:not([data-highlighted]) {
1345
+ color: var(--bd-danger);
1346
+ }
1347
+
1348
+ /* Keyboard shortcuts help (PB-084) */
1349
+ .buildr-editor .bd-shortcut-row,
1350
+ .bd-shortcut-row {
1351
+ display: flex;
1352
+ justify-content: space-between;
1353
+ gap: var(--bd-space-5);
1354
+ padding: var(--bd-space-0) 0;
1355
+ }
1356
+ .bd-shortcut-help dt,
1357
+ .bd-shortcut-help dd {
1358
+ margin: 0;
1359
+ }
1360
+ .bd-shortcut-help kbd {
1361
+ font-family: inherit;
1362
+ padding: 0 var(--bd-space-1);
1363
+ border: var(--bd-border-width) solid var(--bd-border-strong);
1364
+ border-radius: var(--bd-radius-sm);
1365
+ }
1366
+
1367
+ /* Toasts (PB-129): the one place a transient message is positioned with position: fixed. */
1368
+ .bd-toast-region {
1369
+ position: fixed;
1370
+ z-index: 1100;
1371
+ bottom: var(--bd-space-5);
1372
+ left: 50%;
1373
+ transform: translateX(-50%);
1374
+ display: flex;
1375
+ flex-direction: column;
1376
+ gap: var(--bd-space-3);
1377
+ width: min(480px, calc(100vw - 32px));
1378
+ pointer-events: none;
1379
+ }
1380
+
1381
+ .bd-toast-list {
1382
+ display: flex;
1383
+ flex-direction: column;
1384
+ gap: var(--bd-space-3);
1385
+ }
1386
+
1387
+ .bd-toast {
1388
+ display: flex;
1389
+ align-items: center;
1390
+ gap: var(--bd-space-3);
1391
+ padding: var(--bd-space-3) var(--bd-space-3) var(--bd-space-3) var(--bd-space-4);
1392
+ border: var(--bd-border-width) solid var(--bd-border);
1393
+ border-radius: var(--bd-radius-md);
1394
+ background: var(--bd-surface);
1395
+ color: var(--bd-text);
1396
+ box-shadow: var(--bd-elevation-3);
1397
+ font-size: var(--bd-text-md);
1398
+ line-height: var(--bd-leading-md);
1399
+ pointer-events: auto;
1400
+ }
1401
+
1402
+ .bd-toast-icon {
1403
+ flex: none;
1404
+ }
1405
+
1406
+ .bd-toast-text {
1407
+ flex: 1;
1408
+ min-width: 0;
1409
+ overflow-wrap: anywhere;
1410
+ }
1411
+
1412
+ .bd-toast-detail {
1413
+ color: var(--bd-text-muted);
1414
+ }
1415
+
1416
+ .bd-toast-action,
1417
+ .bd-toast-close {
1418
+ flex: none;
1419
+ }
1420
+
1421
+ .bd-toast[data-variant="success"] .bd-toast-icon {
1422
+ color: var(--bd-success);
1423
+ }
1424
+ .bd-toast[data-variant="info"] .bd-toast-icon {
1425
+ color: var(--bd-info);
1426
+ }
1427
+ .bd-toast[data-variant="warning"] .bd-toast-icon {
1428
+ color: var(--bd-warning);
1429
+ }
1430
+ .bd-toast[data-variant="error"] {
1431
+ border-color: var(--bd-danger);
1432
+ }
1433
+ .bd-toast[data-variant="error"] .bd-toast-icon {
1434
+ color: var(--bd-danger);
1435
+ }
1436
+
1437
+ /* Drag and drop (PB-086) */
1438
+ .bd-drag-shield {
1439
+ position: fixed;
1440
+ inset: 0;
1441
+ z-index: 1000;
1442
+ cursor: grabbing;
1443
+ }
1444
+ .bd-drag-shield[data-over="canvas"] {
1445
+ cursor: copy;
1446
+ }
1447
+ .bd-drag-ghost {
1448
+ position: fixed;
1449
+ top: 0;
1450
+ left: 0;
1451
+ z-index: 1001;
1452
+ pointer-events: none;
1453
+ padding: var(--bd-space-1) var(--bd-space-4);
1454
+ border-radius: var(--bd-radius-md);
1455
+ background: var(--bd-accent);
1456
+ color: var(--bd-accent-text);
1457
+ font-size: var(--bd-text-sm);
1458
+ line-height: var(--bd-leading-sm);
1459
+ box-shadow: var(--bd-elevation-2);
1460
+ will-change: transform;
1461
+ }
1462
+ .bd-drag-ghost[data-allowed="false"] {
1463
+ background: var(--bd-danger);
1464
+ color: var(--bd-danger-text);
1465
+ }
1466
+ .bd-drag-live {
1467
+ position: absolute;
1468
+ width: 1px;
1469
+ height: 1px;
1470
+ overflow: hidden;
1471
+ clip-path: inset(50%);
1472
+ }
1473
+ .bd-dnd-destinations {
1474
+ list-style: none;
1475
+ margin: var(--bd-space-3) 0;
1476
+ padding: 0;
1477
+ max-height: 50vh;
1478
+ overflow: auto;
1479
+ }
1480
+ .bd-dnd-destinations .bd-button {
1481
+ width: 100%;
1482
+ justify-content: flex-start;
1483
+ }
1484
+
1485
+ /* --- Segmented control, number with unit, colour swatch (PB-128) ------------------------------ */
1486
+ .bd-segmented {
1487
+ display: inline-flex;
1488
+ min-width: 0;
1489
+ margin: 0;
1490
+ gap: var(--bd-space-0);
1491
+ padding: var(--bd-space-0);
1492
+ border-radius: var(--bd-radius-md);
1493
+ background: var(--bd-surface-2);
1494
+ border: var(--bd-border-width) solid var(--bd-border);
1495
+ }
1496
+ .bd-segment {
1497
+ display: inline-flex;
1498
+ align-items: center;
1499
+ justify-content: center;
1500
+ gap: var(--bd-space-1);
1501
+ min-height: var(--bd-control-sm);
1502
+ min-width: var(--bd-control-sm);
1503
+ padding: 0 var(--bd-space-2);
1504
+ border: 0;
1505
+ border-radius: var(--bd-radius-sm);
1506
+ background: transparent;
1507
+ color: var(--bd-text-muted);
1508
+ font-size: var(--bd-text-xs);
1509
+ line-height: var(--bd-leading-xs);
1510
+ cursor: pointer;
1511
+ }
1512
+ .bd-segment:hover:not(:disabled) {
1513
+ background: var(--bd-surface-hover);
1514
+ color: var(--bd-text);
1515
+ }
1516
+ .bd-segment[aria-pressed="true"] {
1517
+ background: var(--bd-surface);
1518
+ color: var(--bd-accent);
1519
+ font-weight: var(--bd-weight-semibold);
1520
+ box-shadow: var(--bd-elevation-1);
1521
+ }
1522
+ .bd-segment:disabled {
1523
+ opacity: 0.5;
1524
+ cursor: default;
1525
+ }
1526
+
1527
+ .bd-number-unit {
1528
+ display: flex;
1529
+ align-items: stretch;
1530
+ gap: var(--bd-space-1);
1531
+ min-width: 0;
1532
+ }
1533
+ .bd-number-unit > .bd-input {
1534
+ flex: 1 1 auto;
1535
+ min-width: 0;
1536
+ font-variant-numeric: tabular-nums;
1537
+ }
1538
+ .bd-number-unit > .bd-select-trigger {
1539
+ flex: 0 0 auto;
1540
+ width: auto;
1541
+ padding: 0 var(--bd-space-2);
1542
+ font-size: var(--bd-text-xs);
1543
+ }
1544
+ .bd-number-unit[data-invalid] > .bd-input {
1545
+ border-color: var(--bd-danger);
1546
+ }
1547
+
1548
+ .bd-swatch {
1549
+ flex: 0 0 auto;
1550
+ width: var(--bd-control-md);
1551
+ height: var(--bd-control-md);
1552
+ border: var(--bd-border-width) solid var(--bd-border-strong);
1553
+ border-radius: var(--bd-radius-sm);
1554
+ background: var(--bd-surface-2);
1555
+ }
1556
+
1557
+ /* The token list is in a popover, which is outside the editor root. */
1558
+ .bd-token-list {
1559
+ display: flex;
1560
+ flex-direction: column;
1561
+ gap: var(--bd-space-0);
1562
+ max-height: 240px;
1563
+ min-width: 160px;
1564
+ margin: 0;
1565
+ padding: 0;
1566
+ overflow: auto;
1567
+ list-style: none;
1568
+ }
1569
+ .bd-token {
1570
+ display: flex;
1571
+ align-items: center;
1572
+ gap: var(--bd-space-3);
1573
+ width: 100%;
1574
+ padding: var(--bd-space-1) var(--bd-space-2);
1575
+ border: 0;
1576
+ border-radius: var(--bd-radius-sm);
1577
+ background: transparent;
1578
+ color: var(--bd-text);
1579
+ font: inherit;
1580
+ font-size: var(--bd-text-sm);
1581
+ text-align: left;
1582
+ cursor: pointer;
1583
+ }
1584
+ .bd-token:hover {
1585
+ background: var(--bd-surface-hover);
1586
+ }
1587
+ .bd-token[aria-pressed="true"] {
1588
+ background: var(--bd-accent-soft);
1589
+ font-weight: var(--bd-weight-semibold);
1590
+ }
1591
+ .bd-token .bd-swatch {
1592
+ width: var(--bd-control-sm);
1593
+ height: var(--bd-control-sm);
1594
+ }
1595
+ .bd-token-name {
1596
+ flex: 1 1 auto;
1597
+ }
1598
+ .bd-token-value {
1599
+ color: var(--bd-text-subtle);
1600
+ font-variant-numeric: tabular-nums;
1601
+ }
1602
+
1603
+ /*
1604
+ * Panels: layers, insert palette, inspector (fields, values, styles), issues and publish,
1605
+ * media picker. Panel anatomy and spacing are refined per panel in phase 13.
1606
+ */
1607
+
1608
+ /* --- Layers ------------------------------------------------------------------------------- */
1609
+ .buildr-editor .bd-layers {
1610
+ display: flex;
1611
+ flex-direction: column;
1612
+ height: 100%;
1613
+ min-height: 0;
1614
+ }
1615
+ .buildr-editor .bd-layers-scroll {
1616
+ flex: 1;
1617
+ min-height: 0;
1618
+ overflow: auto;
1619
+ }
1620
+ .buildr-editor .bd-layers-list {
1621
+ position: relative;
1622
+ }
1623
+ .buildr-editor .bd-layer {
1624
+ position: absolute;
1625
+ right: 0;
1626
+ left: 0;
1627
+ display: flex;
1628
+ align-items: center;
1629
+ gap: var(--bd-space-1);
1630
+ padding-right: var(--bd-space-1);
1631
+ cursor: default;
1632
+ white-space: nowrap;
1633
+ /* Indent guides: one hairline per ancestor level, centred under that level's chevron. */
1634
+ background-image: repeating-linear-gradient(
1635
+ to right,
1636
+ var(--bd-border) 0 var(--bd-border-width),
1637
+ transparent var(--bd-border-width) var(--layer-indent)
1638
+ );
1639
+ background-repeat: no-repeat;
1640
+ background-position: calc(var(--layer-pad) + var(--bd-control-sm) / 2) 0;
1641
+ background-size: calc(var(--layer-level) * var(--layer-indent)) 100%;
1642
+ }
1643
+ .buildr-editor .bd-layer[data-hovered="true"] {
1644
+ background-color: var(--bd-surface-hover);
1645
+ }
1646
+ .buildr-editor .bd-layer[data-selected="true"] {
1647
+ background-color: var(--bd-surface-selected);
1648
+ color: var(--bd-text);
1649
+ font-weight: var(--bd-weight-medium);
1650
+ }
1651
+ .buildr-editor .bd-layer[data-selected="true"]::before {
1652
+ content: "";
1653
+ position: absolute;
1654
+ top: 0;
1655
+ bottom: 0;
1656
+ left: 0;
1657
+ width: var(--bd-space-0);
1658
+ background: var(--bd-accent);
1659
+ }
1660
+ .buildr-editor .bd-layers-scroll:focus-visible .bd-layer[data-selected="true"] {
1661
+ outline: 2px solid var(--bd-focus);
1662
+ outline-offset: -2px;
1663
+ }
1664
+ .buildr-editor .bd-layer-toggle {
1665
+ display: grid;
1666
+ flex: none;
1667
+ place-items: center;
1668
+ width: var(--bd-control-sm);
1669
+ height: var(--bd-control-sm);
1670
+ color: var(--bd-text-muted);
1671
+ cursor: pointer;
1672
+ }
1673
+ .buildr-editor .bd-layer-icon {
1674
+ display: grid;
1675
+ flex: none;
1676
+ place-items: center;
1677
+ color: var(--bd-text-muted);
1678
+ }
1679
+ .buildr-editor .bd-layer[data-selected="true"] .bd-layer-icon {
1680
+ color: var(--bd-accent);
1681
+ }
1682
+ .buildr-editor .bd-layer-label {
1683
+ flex: 0 1 auto;
1684
+ min-width: 0;
1685
+ overflow: hidden;
1686
+ text-overflow: ellipsis;
1687
+ }
1688
+ /* The slot name is a muted suffix right after the label; the badges and actions sit at the end. */
1689
+ .buildr-editor .bd-layer-slot {
1690
+ flex: none;
1691
+ margin-right: auto;
1692
+ padding-left: var(--bd-space-1);
1693
+ font-size: var(--bd-text-xs);
1694
+ color: var(--bd-text-subtle);
1695
+ }
1696
+ .buildr-editor .bd-layer-label:not(:has(+ .bd-layer-slot)) {
1697
+ flex: 1 1 auto;
1698
+ }
1699
+ .buildr-editor .bd-layer-badge {
1700
+ display: grid;
1701
+ flex: none;
1702
+ place-items: center;
1703
+ color: var(--bd-text-muted);
1704
+ }
1705
+ .buildr-editor .bd-layer-badge[aria-label] {
1706
+ cursor: default;
1707
+ }
1708
+ .buildr-editor .bd-layer-more {
1709
+ display: none;
1710
+ flex: none;
1711
+ }
1712
+ .buildr-editor .bd-layer[data-hovered="true"] .bd-layer-more,
1713
+ .buildr-editor .bd-layer[data-selected="true"] .bd-layer-more {
1714
+ display: grid;
1715
+ }
1716
+ .buildr-editor .bd-layer-more .bd-icon-button {
1717
+ width: var(--bd-control-sm);
1718
+ height: var(--bd-control-sm);
1719
+ border-color: transparent;
1720
+ background: transparent;
1721
+ color: var(--bd-text-muted);
1722
+ }
1723
+ .buildr-editor .bd-layer-more .bd-icon-button:hover {
1724
+ background: var(--bd-surface-hover);
1725
+ color: var(--bd-text);
1726
+ }
1727
+ .buildr-editor .bd-layer[data-hovered] .bd-layer-rename ~ .bd-layer-more,
1728
+ .buildr-editor .bd-layer[data-selected] .bd-layer-rename ~ .bd-layer-more {
1729
+ display: none;
1730
+ }
1731
+ /* The rename field fits inside the row (row height minus a hairline of air above and below). */
1732
+ .buildr-editor .bd-layer-rename {
1733
+ flex: 1;
1734
+ min-width: 0;
1735
+ height: calc(var(--layer-row) - 2 * var(--bd-space-1));
1736
+ padding-block: 0;
1737
+ }
1738
+ .buildr-editor .bd-layers-notice {
1739
+ margin: 0;
1740
+ padding: var(--bd-space-1) var(--bd-space-3);
1741
+ color: var(--bd-danger);
1742
+ font-size: var(--bd-text-sm);
1743
+ line-height: var(--bd-leading-sm);
1744
+ }
1745
+ .buildr-editor .bd-layers-notice:empty {
1746
+ display: none;
1747
+ }
1748
+ /* Drop indicators (PB-086): a line before/after, a box inside, a red box where it is refused. */
1749
+ .buildr-editor .bd-layer[data-drop="inside"] {
1750
+ outline: 2px solid var(--bd-accent);
1751
+ outline-offset: -2px;
1752
+ background-color: var(--bd-accent-soft);
1753
+ }
1754
+ .buildr-editor .bd-layer[data-drop="before"] {
1755
+ box-shadow: inset 0 var(--bd-space-0) 0 var(--bd-accent);
1756
+ }
1757
+ .buildr-editor .bd-layer[data-drop="after"] {
1758
+ box-shadow: inset 0 calc(-1 * var(--bd-space-0)) 0 var(--bd-accent);
1759
+ }
1760
+ .buildr-editor .bd-layer[data-drop="denied"] {
1761
+ outline: 2px solid var(--bd-danger);
1762
+ outline-offset: -2px;
1763
+ }
1764
+
1765
+ /* --- Insert palette (PB-125) -------------------------------------------------------------- */
1766
+ .buildr-editor .bd-insert {
1767
+ container-type: inline-size;
1768
+ display: flex;
1769
+ flex-direction: column;
1770
+ height: 100%;
1771
+ min-height: 0;
1772
+ gap: var(--bd-space-3);
1773
+ padding: var(--bd-space-4);
1774
+ box-sizing: border-box;
1775
+ }
1776
+ .buildr-editor .bd-insert-bar {
1777
+ display: flex;
1778
+ align-items: center;
1779
+ gap: var(--bd-space-3);
1780
+ }
1781
+ .buildr-editor .bd-insert-searchbox {
1782
+ position: relative;
1783
+ flex: 1;
1784
+ min-width: 0;
1785
+ }
1786
+ .buildr-editor .bd-insert-search {
1787
+ padding-inline: var(--bd-space-8);
1788
+ }
1789
+ .buildr-editor .bd-insert-search::-webkit-search-cancel-button {
1790
+ display: none;
1791
+ }
1792
+ .buildr-editor .bd-insert-search-icon {
1793
+ position: absolute;
1794
+ inset-block: 0;
1795
+ inset-inline-start: var(--bd-space-3);
1796
+ margin-block: auto;
1797
+ color: var(--bd-text-subtle);
1798
+ pointer-events: none;
1799
+ }
1800
+ .buildr-editor .bd-insert-clear {
1801
+ position: absolute;
1802
+ inset-block: 0;
1803
+ inset-inline-end: 0;
1804
+ width: var(--bd-control-md);
1805
+ border: 0;
1806
+ background: transparent;
1807
+ }
1808
+ .buildr-editor .bd-insert-views {
1809
+ display: flex;
1810
+ gap: var(--bd-space-0);
1811
+ }
1812
+ .buildr-editor .bd-insert-views .bd-icon-button[aria-pressed="true"] {
1813
+ background: var(--bd-accent-soft);
1814
+ color: var(--bd-accent);
1815
+ }
1816
+ .buildr-editor .bd-insert-scroll {
1817
+ flex: 1;
1818
+ min-height: 0;
1819
+ overflow: auto;
1820
+ }
1821
+ .buildr-editor .bd-insert-heading {
1822
+ margin: var(--bd-space-4) 0 var(--bd-space-1);
1823
+ font-size: var(--bd-text-sm);
1824
+ line-height: var(--bd-leading-sm);
1825
+ font-weight: var(--bd-weight-semibold);
1826
+ }
1827
+ .buildr-editor .bd-insert-section:first-child .bd-insert-heading {
1828
+ margin-top: 0;
1829
+ }
1830
+ .buildr-editor .bd-insert-category {
1831
+ margin: var(--bd-space-2) 0 var(--bd-space-1);
1832
+ font-size: var(--bd-text-sm);
1833
+ line-height: var(--bd-leading-sm);
1834
+ font-weight: var(--bd-weight-semibold);
1835
+ color: var(--bd-text-muted);
1836
+ }
1837
+ .buildr-editor .bd-insert-category-toggle {
1838
+ display: flex;
1839
+ align-items: center;
1840
+ gap: var(--bd-space-1);
1841
+ width: 100%;
1842
+ min-height: var(--bd-control-sm);
1843
+ padding: 0;
1844
+ border: 0;
1845
+ background: transparent;
1846
+ color: inherit;
1847
+ font: inherit;
1848
+ text-align: start;
1849
+ cursor: pointer;
1850
+ }
1851
+ .buildr-editor .bd-insert-category-toggle:hover {
1852
+ color: var(--bd-text);
1853
+ }
1854
+ .buildr-editor .bd-insert-category-name {
1855
+ flex: 1;
1856
+ min-width: 0;
1857
+ }
1858
+ .buildr-editor .bd-insert-count {
1859
+ padding-inline: var(--bd-space-2);
1860
+ border-radius: var(--bd-radius-pill);
1861
+ background: var(--bd-surface-2);
1862
+ color: var(--bd-text-subtle);
1863
+ font-weight: var(--bd-weight-regular);
1864
+ font-variant-numeric: tabular-nums;
1865
+ }
1866
+ .buildr-editor .bd-insert-list {
1867
+ display: grid;
1868
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1869
+ gap: var(--bd-space-2);
1870
+ margin: 0 0 var(--bd-space-3);
1871
+ padding: 0;
1872
+ list-style: none;
1873
+ }
1874
+ .buildr-editor .bd-insert-list[hidden] {
1875
+ display: none;
1876
+ }
1877
+ .buildr-editor .bd-insert-list[data-kind="template"] {
1878
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1879
+ }
1880
+ .buildr-editor .bd-insert[data-view="list"] .bd-insert-list {
1881
+ grid-template-columns: minmax(0, 1fr);
1882
+ gap: var(--bd-space-1);
1883
+ }
1884
+ @container (max-width: 220px) {
1885
+ .buildr-editor .bd-insert[data-view="grid"] .bd-insert-list {
1886
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1887
+ }
1888
+ .buildr-editor .bd-insert[data-view="grid"] .bd-insert-list[data-kind="template"] {
1889
+ grid-template-columns: minmax(0, 1fr);
1890
+ }
1891
+ }
1892
+ .buildr-editor .bd-insert-item {
1893
+ display: flex;
1894
+ flex-direction: column;
1895
+ align-items: center;
1896
+ gap: var(--bd-space-1);
1897
+ width: 100%;
1898
+ min-width: 0;
1899
+ padding: var(--bd-space-3) var(--bd-space-1);
1900
+ border: var(--bd-border-width) solid var(--bd-border);
1901
+ border-radius: var(--bd-radius-md);
1902
+ background: var(--bd-surface-2);
1903
+ color: inherit;
1904
+ font: inherit;
1905
+ font-size: var(--bd-text-sm);
1906
+ line-height: var(--bd-leading-sm);
1907
+ cursor: grab;
1908
+ }
1909
+ .buildr-editor .bd-insert-item:hover {
1910
+ background: var(--bd-surface-hover);
1911
+ }
1912
+ .buildr-editor .bd-insert-item:active {
1913
+ cursor: grabbing;
1914
+ }
1915
+ .buildr-editor .bd-insert-label {
1916
+ max-width: 100%;
1917
+ overflow: hidden;
1918
+ text-overflow: ellipsis;
1919
+ white-space: nowrap;
1920
+ }
1921
+ .buildr-editor .bd-insert-desc {
1922
+ overflow: hidden;
1923
+ color: var(--bd-text-subtle);
1924
+ text-overflow: ellipsis;
1925
+ white-space: nowrap;
1926
+ }
1927
+ .buildr-editor .bd-insert-thumb {
1928
+ display: grid;
1929
+ place-items: center;
1930
+ width: 100%;
1931
+ aspect-ratio: 16 / 10;
1932
+ overflow: hidden;
1933
+ border-radius: var(--bd-radius-sm);
1934
+ background: var(--bd-surface);
1935
+ color: var(--bd-text-subtle);
1936
+ }
1937
+ .buildr-editor .bd-insert-thumb img {
1938
+ display: block;
1939
+ width: 100%;
1940
+ height: 100%;
1941
+ object-fit: cover;
1942
+ }
1943
+ .buildr-editor .bd-insert-icon {
1944
+ display: grid;
1945
+ place-items: center;
1946
+ flex: none;
1947
+ width: var(--bd-control-md);
1948
+ height: var(--bd-control-md);
1949
+ border-radius: var(--bd-radius-md);
1950
+ background: var(--bd-accent-soft);
1951
+ color: var(--bd-accent);
1952
+ }
1953
+ .buildr-editor .bd-insert[data-view="list"] .bd-insert-item {
1954
+ display: grid;
1955
+ grid-template-columns: var(--bd-control-md) minmax(0, 1fr);
1956
+ grid-template-areas: "icon label" "icon desc";
1957
+ align-items: center;
1958
+ column-gap: var(--bd-space-3);
1959
+ padding: var(--bd-space-2) var(--bd-space-3);
1960
+ text-align: start;
1961
+ }
1962
+ .buildr-editor .bd-insert[data-view="list"] .bd-insert-icon,
1963
+ .buildr-editor .bd-insert[data-view="list"] .bd-insert-thumb {
1964
+ grid-area: icon;
1965
+ }
1966
+ .buildr-editor .bd-insert[data-view="list"] .bd-insert-thumb {
1967
+ width: var(--bd-control-md);
1968
+ aspect-ratio: 16 / 10;
1969
+ height: auto;
1970
+ align-self: center;
1971
+ }
1972
+ .buildr-editor .bd-insert[data-view="list"] .bd-insert-label {
1973
+ grid-area: label;
1974
+ font-weight: var(--bd-weight-medium);
1975
+ }
1976
+ .buildr-editor .bd-insert[data-view="list"] .bd-insert-desc {
1977
+ grid-area: desc;
1978
+ }
1979
+ .buildr-editor .bd-insert-skeleton {
1980
+ aspect-ratio: 16 / 10;
1981
+ border-radius: var(--bd-radius-md);
1982
+ background: var(--bd-surface-2);
1983
+ animation: bd-insert-pulse 1.2s ease-in-out infinite;
1984
+ }
1985
+ @keyframes bd-insert-pulse {
1986
+ 50% {
1987
+ opacity: 0.5;
1988
+ }
1989
+ }
1990
+ @media (prefers-reduced-motion: reduce) {
1991
+ .buildr-editor .bd-insert-skeleton {
1992
+ animation: none;
1993
+ }
1994
+ }
1995
+ .buildr-editor .bd-insert-empty {
1996
+ margin: var(--bd-space-8) 0;
1997
+ text-align: center;
1998
+ color: var(--bd-text-muted);
1999
+ }
2000
+
2001
+ /* --- Inspector (layout: PB-127) ----------------------------------------------------------- */
2002
+ .buildr-editor .bd-inspector {
2003
+ display: flex;
2004
+ flex-direction: column;
2005
+ gap: var(--bd-space-3);
2006
+ padding: var(--bd-space-3) var(--bd-space-4);
2007
+ }
2008
+ .buildr-editor .bd-inspector-head {
2009
+ display: flex;
2010
+ flex-direction: column;
2011
+ gap: var(--bd-space-2);
2012
+ }
2013
+ .buildr-editor .bd-inspector-headline {
2014
+ display: flex;
2015
+ align-items: center;
2016
+ gap: var(--bd-space-3);
2017
+ }
2018
+ .buildr-editor .bd-inspector-icon {
2019
+ flex: none;
2020
+ color: var(--bd-accent);
2021
+ }
2022
+ .buildr-editor .bd-inspector-title {
2023
+ flex: 1;
2024
+ min-width: 0;
2025
+ margin: 0;
2026
+ overflow: hidden;
2027
+ text-overflow: ellipsis;
2028
+ white-space: nowrap;
2029
+ font-size: var(--bd-text-lg);
2030
+ line-height: var(--bd-leading-lg);
2031
+ font-weight: var(--bd-weight-semibold);
2032
+ letter-spacing: var(--bd-tracking-tight);
2033
+ }
2034
+ .buildr-editor .bd-inspector-actions {
2035
+ display: flex;
2036
+ flex: none;
2037
+ gap: var(--bd-space-0);
2038
+ }
2039
+ .buildr-editor .bd-inspector-count,
2040
+ .buildr-editor .bd-inspector-locked {
2041
+ margin: 0;
2042
+ font-size: var(--bd-text-xs);
2043
+ line-height: var(--bd-leading-xs);
2044
+ color: var(--bd-text-subtle);
2045
+ }
2046
+ .buildr-editor .bd-inspector .bd-tabs-list {
2047
+ padding: 0;
2048
+ }
2049
+ .buildr-editor .bd-inspector .bd-tab {
2050
+ flex: 1;
2051
+ padding: var(--bd-space-2) var(--bd-space-3);
2052
+ }
2053
+ .buildr-editor .bd-inspector-empty {
2054
+ display: flex;
2055
+ flex-direction: column;
2056
+ align-items: center;
2057
+ gap: var(--bd-space-2);
2058
+ padding: var(--bd-space-7) var(--bd-space-4);
2059
+ text-align: center;
2060
+ color: var(--bd-text-subtle);
2061
+ }
2062
+ .buildr-editor .bd-inspector-empty p {
2063
+ margin: 0;
2064
+ font-size: var(--bd-text-sm);
2065
+ line-height: var(--bd-leading-sm);
2066
+ }
2067
+ .buildr-editor .bd-inspector-empty-title {
2068
+ color: var(--bd-text-muted);
2069
+ font-weight: var(--bd-weight-medium);
2070
+ }
2071
+ .buildr-editor .bd-props-group + .bd-props-group {
2072
+ border-top: var(--bd-border-width) solid var(--bd-border);
2073
+ }
2074
+ .buildr-editor .bd-props-heading {
2075
+ margin: 0;
2076
+ font-size: var(--bd-text-sm);
2077
+ line-height: var(--bd-leading-sm);
2078
+ font-weight: var(--bd-weight-semibold);
2079
+ }
2080
+ .buildr-editor .bd-props-toggle {
2081
+ display: flex;
2082
+ align-items: center;
2083
+ gap: var(--bd-space-1);
2084
+ width: 100%;
2085
+ padding: var(--bd-space-3) 0;
2086
+ border: 0;
2087
+ background: transparent;
2088
+ color: inherit;
2089
+ font: inherit;
2090
+ text-align: start;
2091
+ cursor: pointer;
2092
+ }
2093
+ .buildr-editor .bd-props-fields {
2094
+ padding-bottom: var(--bd-space-2);
2095
+ }
2096
+ /* A field is a grid: the label row (label, reset, value modes) and the control under it; short
2097
+ controls put the control beside the label instead. */
2098
+ .buildr-editor .bd-field {
2099
+ display: grid;
2100
+ grid-template-columns: minmax(0, 1fr) auto;
2101
+ align-items: center;
2102
+ column-gap: var(--bd-space-3);
2103
+ row-gap: var(--bd-space-1);
2104
+ margin: var(--bd-space-2) 0;
2105
+ }
2106
+ .buildr-editor .bd-field > * {
2107
+ grid-column: 1 / -1;
2108
+ min-width: 0;
2109
+ }
2110
+ .buildr-editor .bd-field-head {
2111
+ grid-column: 1;
2112
+ grid-row: 1;
2113
+ display: flex;
2114
+ align-items: center;
2115
+ justify-content: space-between;
2116
+ gap: var(--bd-space-2);
2117
+ min-height: var(--bd-control-sm);
2118
+ }
2119
+ .buildr-editor .bd-field-body {
2120
+ display: contents;
2121
+ }
2122
+ .buildr-editor .bd-field-body > .bd-value {
2123
+ display: contents;
2124
+ }
2125
+ .buildr-editor .bd-field-body > .bd-value > :not(.bd-value-modes),
2126
+ .buildr-editor .bd-field-body > :not(.bd-value) {
2127
+ grid-column: 1 / -1;
2128
+ min-width: 0;
2129
+ }
2130
+ .buildr-editor .bd-field .bd-value-modes {
2131
+ grid-column: 2;
2132
+ grid-row: 1;
2133
+ }
2134
+ .buildr-editor .bd-field .bd-value-modes .bd-button {
2135
+ min-height: var(--bd-control-sm);
2136
+ padding: 0 var(--bd-space-2);
2137
+ font-size: var(--bd-text-xs);
2138
+ }
2139
+ .buildr-editor .bd-field[data-layout="row"] {
2140
+ grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
2141
+ }
2142
+ .buildr-editor .bd-field[data-layout="row"] > .bd-field-head {
2143
+ grid-column: 1;
2144
+ }
2145
+ .buildr-editor .bd-field[data-layout="row"] > .bd-field-body {
2146
+ display: block;
2147
+ grid-column: 2;
2148
+ grid-row: 1;
2149
+ }
2150
+ .buildr-editor .bd-field[data-layout="row"] > .bd-field-body > .bd-value {
2151
+ display: flex;
2152
+ }
2153
+ .buildr-editor .bd-field[data-layout="row"] > .bd-field-body > .bd-value > * {
2154
+ grid-column: auto;
2155
+ }
2156
+ .buildr-editor .bd-field[data-layout="row"] > .bd-field-hint,
2157
+ .buildr-editor .bd-field[data-layout="row"] > .bd-field-unsupported {
2158
+ grid-column: 2;
2159
+ }
2160
+ .buildr-editor .bd-field-label {
2161
+ font-size: var(--bd-text-sm);
2162
+ line-height: var(--bd-leading-sm);
2163
+ font-weight: var(--bd-weight-medium);
2164
+ }
2165
+ /* Reset is an icon that shows on hover or focus, and always where there is no hover. */
2166
+ .buildr-editor .bd-field-reset {
2167
+ opacity: 0;
2168
+ width: var(--bd-control-sm);
2169
+ height: var(--bd-control-sm);
2170
+ min-height: 0;
2171
+ }
2172
+ .buildr-editor .bd-field:hover .bd-field-reset,
2173
+ .buildr-editor .bd-field:focus-within .bd-field-reset,
2174
+ .buildr-editor .bd-field-reset:focus-visible {
2175
+ opacity: 1;
2176
+ }
2177
+ @media (hover: none) {
2178
+ .buildr-editor .bd-field-reset {
2179
+ opacity: 1;
2180
+ }
2181
+ }
2182
+ .buildr-editor .bd-field-hint,
2183
+ .buildr-editor .bd-field-unsupported {
2184
+ margin: 0;
2185
+ font-size: var(--bd-text-xs);
2186
+ line-height: var(--bd-leading-xs);
2187
+ color: var(--bd-text-subtle);
2188
+ }
2189
+ .buildr-editor .bd-field-chip {
2190
+ margin: 0;
2191
+ padding: var(--bd-space-0) var(--bd-space-3);
2192
+ border: var(--bd-border-width) solid var(--bd-border);
2193
+ border-radius: var(--bd-radius-pill);
2194
+ font-size: var(--bd-text-sm);
2195
+ line-height: var(--bd-leading-sm);
2196
+ overflow-wrap: anywhere;
2197
+ }
2198
+ .buildr-editor .bd-textarea {
2199
+ min-height: 72px;
2200
+ padding: var(--bd-space-2) var(--bd-space-3);
2201
+ resize: vertical;
2202
+ }
2203
+ .buildr-editor .bd-inspector-notice:empty {
2204
+ display: none;
2205
+ }
2206
+
2207
+ /* Rich text, list and object controls (PB-080) */
2208
+ .buildr-editor .bd-rich {
2209
+ display: flex;
2210
+ flex-direction: column;
2211
+ gap: var(--bd-space-1);
2212
+ }
2213
+ .buildr-editor .bd-rich-toolbar {
2214
+ display: flex;
2215
+ flex-wrap: wrap;
2216
+ gap: var(--bd-space-0);
2217
+ }
2218
+ .buildr-editor .bd-rich-button[aria-pressed="true"] {
2219
+ background: var(--bd-accent-soft);
2220
+ font-weight: var(--bd-weight-semibold);
2221
+ }
2222
+ .buildr-editor .bd-rich-link {
2223
+ display: flex;
2224
+ flex-wrap: wrap;
2225
+ gap: var(--bd-space-1);
2226
+ align-items: center;
2227
+ }
2228
+ .buildr-editor .bd-rich-editor {
2229
+ min-height: 72px;
2230
+ padding: var(--bd-space-2) var(--bd-space-3);
2231
+ overflow-wrap: anywhere;
2232
+ outline-offset: 1px;
2233
+ }
2234
+ .buildr-editor .bd-list,
2235
+ .buildr-editor .bd-object {
2236
+ display: flex;
2237
+ flex-direction: column;
2238
+ gap: var(--bd-space-2);
2239
+ margin: 0;
2240
+ padding: 0;
2241
+ border: 0;
2242
+ min-width: 0;
2243
+ }
2244
+ .buildr-editor .bd-list-items {
2245
+ display: flex;
2246
+ flex-direction: column;
2247
+ gap: var(--bd-space-2);
2248
+ margin: 0;
2249
+ padding: 0;
2250
+ list-style: none;
2251
+ }
2252
+ .buildr-editor .bd-list-item {
2253
+ padding: var(--bd-space-2);
2254
+ border: var(--bd-border-width) solid var(--bd-border);
2255
+ border-radius: var(--bd-radius-md);
2256
+ }
2257
+ .buildr-editor .bd-list-item-head {
2258
+ display: flex;
2259
+ align-items: center;
2260
+ justify-content: space-between;
2261
+ margin-bottom: var(--bd-space-1);
2262
+ font-size: var(--bd-text-xs);
2263
+ line-height: var(--bd-leading-xs);
2264
+ }
2265
+ .buildr-editor .bd-list-empty {
2266
+ margin: 0;
2267
+ font-size: var(--bd-text-xs);
2268
+ line-height: var(--bd-leading-xs);
2269
+ color: var(--bd-text-subtle);
2270
+ }
2271
+ .buildr-editor .bd-object-field {
2272
+ display: flex;
2273
+ flex-direction: column;
2274
+ gap: var(--bd-space-0);
2275
+ }
2276
+
2277
+ /* Style inspector (PB-082) */
2278
+ .buildr-editor .bd-styles-layer {
2279
+ margin: 0 0 var(--bd-space-2);
2280
+ font-size: var(--bd-text-xs);
2281
+ line-height: var(--bd-leading-xs);
2282
+ color: var(--bd-text-subtle);
2283
+ }
2284
+ .buildr-editor .bd-style-group > summary {
2285
+ cursor: pointer;
2286
+ font-weight: var(--bd-weight-semibold);
2287
+ padding: var(--bd-space-1) 0;
2288
+ }
2289
+ .buildr-editor .bd-style-box {
2290
+ display: grid;
2291
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2292
+ gap: var(--bd-space-1);
2293
+ }
2294
+ .buildr-editor .bd-style-source {
2295
+ font-size: var(--bd-text-xs);
2296
+ line-height: var(--bd-leading-xs);
2297
+ color: var(--bd-text-subtle);
2298
+ }
2299
+ .buildr-editor .bd-style-error {
2300
+ margin: 0;
2301
+ font-size: var(--bd-text-xs);
2302
+ line-height: var(--bd-leading-xs);
2303
+ color: var(--bd-danger);
2304
+ }
2305
+ .buildr-editor .bd-style-check {
2306
+ display: flex;
2307
+ gap: var(--bd-space-2);
2308
+ align-items: center;
2309
+ }
2310
+
2311
+ /* Value editor */
2312
+ .buildr-editor .bd-value {
2313
+ display: flex;
2314
+ flex-direction: column;
2315
+ gap: var(--bd-space-2);
2316
+ }
2317
+ .buildr-editor .bd-value-modes {
2318
+ display: flex;
2319
+ gap: var(--bd-space-0);
2320
+ margin: 0;
2321
+ padding: 0;
2322
+ border: 0;
2323
+ }
2324
+ .buildr-editor .bd-value-modes button[aria-pressed="true"] {
2325
+ background: var(--bd-accent-soft);
2326
+ font-weight: var(--bd-weight-semibold);
2327
+ }
2328
+ .buildr-editor .bd-value-fields {
2329
+ display: flex;
2330
+ flex-direction: column;
2331
+ max-height: 160px;
2332
+ overflow: auto;
2333
+ margin: 0;
2334
+ padding: 0;
2335
+ list-style: none;
2336
+ }
2337
+ .buildr-editor .bd-value-fields button[aria-pressed="true"] {
2338
+ font-weight: var(--bd-weight-semibold);
2339
+ }
2340
+ .buildr-editor .bd-value-chip[data-invalid="true"],
2341
+ .buildr-editor .bd-value-error,
2342
+ .buildr-editor .bd-value-diagnostics [data-severity="error"] {
2343
+ color: var(--bd-danger);
2344
+ }
2345
+ .buildr-editor .bd-value-diagnostics {
2346
+ margin: 0;
2347
+ padding-left: var(--bd-space-5);
2348
+ font-size: var(--bd-text-sm);
2349
+ line-height: var(--bd-leading-sm);
2350
+ }
2351
+ .buildr-editor .bd-value-preview {
2352
+ font-size: var(--bd-text-sm);
2353
+ line-height: var(--bd-leading-sm);
2354
+ color: var(--bd-text-muted);
2355
+ }
2356
+
2357
+ /* Content language (PB-115) */
2358
+ .buildr-editor .bd-field[data-untranslated] [data-prop] {
2359
+ opacity: 0.6;
2360
+ }
2361
+ .buildr-editor .bd-field[data-untranslated] input,
2362
+ .buildr-editor .bd-field[data-untranslated] textarea {
2363
+ color: var(--bd-text-muted);
2364
+ font-style: italic;
2365
+ }
2366
+ .buildr-editor .bd-translation-hint {
2367
+ display: flex;
2368
+ align-items: center;
2369
+ justify-content: space-between;
2370
+ gap: var(--bd-space-3);
2371
+ }
2372
+
2373
+ /* --- Issues and publish (PB-088) ---------------------------------------------------------- */
2374
+ .buildr-editor .bd-issues-filters {
2375
+ display: flex;
2376
+ flex-wrap: wrap;
2377
+ gap: var(--bd-space-0);
2378
+ margin: 0;
2379
+ padding: 0;
2380
+ border: 0;
2381
+ }
2382
+ .buildr-editor .bd-issues-filters button[aria-pressed="true"] {
2383
+ font-weight: var(--bd-weight-semibold);
2384
+ }
2385
+ .buildr-editor .bd-issues-list {
2386
+ margin: 0;
2387
+ padding: 0;
2388
+ list-style: none;
2389
+ }
2390
+ .buildr-editor .bd-issue {
2391
+ display: flex;
2392
+ flex-direction: column;
2393
+ gap: var(--bd-space-1);
2394
+ padding: var(--bd-space-2) 0;
2395
+ border-bottom: var(--bd-border-width) solid var(--bd-border);
2396
+ }
2397
+ .buildr-editor .bd-issue-target {
2398
+ display: flex;
2399
+ flex-direction: column;
2400
+ gap: var(--bd-space-1);
2401
+ padding: 0;
2402
+ border: 0;
2403
+ background: none;
2404
+ color: inherit;
2405
+ text-align: start;
2406
+ cursor: pointer;
2407
+ }
2408
+ .buildr-editor .bd-issue-target:disabled {
2409
+ cursor: default;
2410
+ }
2411
+ .bd-publish-blocked,
2412
+ .buildr-editor .bd-issue-error {
2413
+ color: var(--bd-danger);
2414
+ }
2415
+ .buildr-editor .bd-issues-severity {
2416
+ margin-top: var(--bd-space-3);
2417
+ }
2418
+ .buildr-editor .bd-issues-heading {
2419
+ display: flex;
2420
+ align-items: center;
2421
+ gap: var(--bd-space-2);
2422
+ margin: 0;
2423
+ font-size: var(--bd-text-sm);
2424
+ line-height: var(--bd-leading-sm);
2425
+ font-weight: var(--bd-weight-semibold);
2426
+ }
2427
+ .buildr-editor .bd-issues-severity[data-severity="error"] .bd-issues-heading,
2428
+ .buildr-editor .bd-issue[data-severity="error"] .bd-issue-severity {
2429
+ color: var(--bd-danger);
2430
+ }
2431
+ .buildr-editor .bd-issues-severity[data-severity="warning"] .bd-issues-heading,
2432
+ .buildr-editor .bd-issue[data-severity="warning"] .bd-issue-severity {
2433
+ color: var(--bd-warning);
2434
+ }
2435
+ .buildr-editor .bd-issues-severity[data-severity="info"] .bd-issues-heading,
2436
+ .buildr-editor .bd-issue[data-severity="info"] .bd-issue-severity {
2437
+ color: var(--bd-info);
2438
+ }
2439
+ .buildr-editor .bd-issue-head {
2440
+ display: flex;
2441
+ align-items: center;
2442
+ gap: var(--bd-space-2);
2443
+ color: var(--bd-text-muted);
2444
+ font-size: var(--bd-text-sm);
2445
+ line-height: var(--bd-leading-sm);
2446
+ }
2447
+ .buildr-editor .bd-issue-owner {
2448
+ font-weight: var(--bd-weight-medium);
2449
+ color: var(--bd-text);
2450
+ }
2451
+ .buildr-editor .bd-issue-source,
2452
+ .buildr-editor .bd-issue-help {
2453
+ margin: 0;
2454
+ font-size: var(--bd-text-sm);
2455
+ line-height: var(--bd-leading-sm);
2456
+ color: var(--bd-text-muted);
2457
+ }
2458
+ .buildr-editor .bd-issues-group > summary {
2459
+ cursor: pointer;
2460
+ padding: var(--bd-space-1) 0;
2461
+ font-weight: var(--bd-weight-semibold);
2462
+ }
2463
+ .bd-publish-summary {
2464
+ display: flex;
2465
+ gap: var(--bd-space-3);
2466
+ margin: var(--bd-space-3) 0;
2467
+ padding: 0;
2468
+ list-style: none;
2469
+ }
2470
+ .bd-publish-badge {
2471
+ display: inline-flex;
2472
+ align-items: center;
2473
+ gap: var(--bd-space-2);
2474
+ padding: var(--bd-space-1) var(--bd-space-3);
2475
+ border-radius: var(--bd-radius-pill);
2476
+ font-variant-numeric: tabular-nums;
2477
+ font-weight: var(--bd-weight-medium);
2478
+ }
2479
+ .bd-publish-badge[data-severity="error"] {
2480
+ background: var(--bd-danger-soft);
2481
+ color: var(--bd-danger);
2482
+ }
2483
+ .bd-publish-badge[data-severity="warning"] {
2484
+ background: var(--bd-warning-soft);
2485
+ color: var(--bd-warning);
2486
+ }
2487
+ .bd-publish-badge[data-severity="info"] {
2488
+ background: var(--bd-info-soft);
2489
+ color: var(--bd-info);
2490
+ }
2491
+
2492
+ /* --- Media picker and control (PB-089) ---------------------------------------------------- */
2493
+ .bd-media-picker {
2494
+ display: flex;
2495
+ flex-direction: column;
2496
+ gap: var(--bd-space-3);
2497
+ }
2498
+ .bd-media-tools {
2499
+ display: flex;
2500
+ gap: var(--bd-space-3);
2501
+ }
2502
+ .bd-media-grid {
2503
+ display: grid;
2504
+ grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
2505
+ gap: var(--bd-space-3);
2506
+ max-height: 320px;
2507
+ margin: 0;
2508
+ padding: 0;
2509
+ overflow: auto;
2510
+ list-style: none;
2511
+ }
2512
+ .bd-media-item {
2513
+ display: flex;
2514
+ flex-direction: column;
2515
+ gap: var(--bd-space-1);
2516
+ width: 100%;
2517
+ padding: var(--bd-space-1);
2518
+ border: var(--bd-border-width) solid var(--bd-border);
2519
+ border-radius: var(--bd-radius-sm);
2520
+ background: none;
2521
+ color: inherit;
2522
+ cursor: pointer;
2523
+ }
2524
+ .bd-media-item:hover {
2525
+ background: var(--bd-surface-hover);
2526
+ }
2527
+ .bd-media-item img {
2528
+ width: 100%;
2529
+ height: 72px;
2530
+ object-fit: cover;
2531
+ }
2532
+ .bd-media-name,
2533
+ .bd-media-file {
2534
+ overflow: hidden;
2535
+ font-size: var(--bd-text-sm);
2536
+ line-height: var(--bd-leading-sm);
2537
+ text-overflow: ellipsis;
2538
+ white-space: nowrap;
2539
+ }
2540
+ .bd-media-upload {
2541
+ display: flex;
2542
+ flex-direction: column;
2543
+ gap: var(--bd-space-2);
2544
+ }
2545
+ .bd-media-error {
2546
+ color: var(--bd-danger);
2547
+ }
2548
+ .bd-media-control,
2549
+ .bd-media-preview,
2550
+ .bd-media-actions {
2551
+ display: flex;
2552
+ gap: var(--bd-space-2);
2553
+ }
2554
+ .bd-media-control {
2555
+ flex-direction: column;
2556
+ }
2557
+ .bd-media-preview img {
2558
+ object-fit: cover;
2559
+ }
2560
+
2561
+ /* --- Style inspector and value editor controls (PB-128) ----------------------------------- */
2562
+ .buildr-editor .bd-style-field {
2563
+ display: flex;
2564
+ flex-direction: column;
2565
+ align-items: stretch;
2566
+ gap: var(--bd-space-1);
2567
+ }
2568
+ .buildr-editor .bd-style-head {
2569
+ display: flex;
2570
+ align-items: center;
2571
+ gap: var(--bd-space-2);
2572
+ min-height: var(--bd-control-sm);
2573
+ }
2574
+ .buildr-editor .bd-style-head > :first-child {
2575
+ flex: 1 1 auto;
2576
+ min-width: 0;
2577
+ }
2578
+ .buildr-editor .bd-style-head .bd-field-reset {
2579
+ flex: 0 0 auto;
2580
+ }
2581
+ .buildr-editor .bd-source-dot {
2582
+ flex: 0 0 auto;
2583
+ width: var(--bd-space-3);
2584
+ height: var(--bd-space-3);
2585
+ border-radius: var(--bd-radius-pill);
2586
+ border: var(--bd-border-width) solid var(--bd-border-strong);
2587
+ background: transparent;
2588
+ }
2589
+ .buildr-editor .bd-source-dot[data-origin="set"] {
2590
+ border-color: var(--bd-accent);
2591
+ background: var(--bd-accent);
2592
+ }
2593
+ .buildr-editor .bd-source-dot[data-origin="inherited"] {
2594
+ border-color: var(--bd-warning);
2595
+ background: var(--bd-warning-soft);
2596
+ }
2597
+ .buildr-editor .bd-style-value {
2598
+ display: flex;
2599
+ flex-direction: column;
2600
+ gap: var(--bd-space-1);
2601
+ min-width: 0;
2602
+ }
2603
+ .buildr-editor .bd-style-input {
2604
+ display: flex;
2605
+ align-items: stretch;
2606
+ gap: var(--bd-space-1);
2607
+ min-width: 0;
2608
+ }
2609
+ .buildr-editor .bd-style-input > .bd-input,
2610
+ .buildr-editor .bd-style-input > .bd-number-unit {
2611
+ flex: 1 1 auto;
2612
+ min-width: 0;
2613
+ }
2614
+ .buildr-editor .bd-style-enum {
2615
+ display: flex;
2616
+ flex-wrap: wrap;
2617
+ align-items: center;
2618
+ gap: var(--bd-space-2);
2619
+ }
2620
+ .buildr-editor .bd-style-enum > select {
2621
+ flex: 1 1 auto;
2622
+ width: auto;
2623
+ min-width: 0;
2624
+ }
2625
+ /* Elementor-style row: the label on the left, the control on the right. */
2626
+ .buildr-editor .bd-style-inline {
2627
+ display: grid;
2628
+ grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
2629
+ align-items: center;
2630
+ column-gap: var(--bd-space-2);
2631
+ }
2632
+ .buildr-editor .bd-style-inline .bd-style-head {
2633
+ grid-column: 1;
2634
+ }
2635
+ .buildr-editor .bd-style-inline > :not(.bd-style-head) {
2636
+ grid-column: 2;
2637
+ min-width: 0;
2638
+ }
2639
+ .buildr-editor .bd-style-inline .bd-style-enum {
2640
+ justify-content: flex-end;
2641
+ }
2642
+ /* A slider shares its row with the number field: label above, slider and number below. */
2643
+ .buildr-editor .bd-style-inline:has(.bd-range) {
2644
+ grid-template-columns: minmax(0, 1fr);
2645
+ }
2646
+ .buildr-editor .bd-style-inline:has(.bd-range) > :not(.bd-style-head) {
2647
+ grid-column: 1;
2648
+ }
2649
+ .buildr-editor .bd-style-value:has(> .bd-range) {
2650
+ flex-direction: row;
2651
+ flex-wrap: wrap;
2652
+ align-items: center;
2653
+ }
2654
+ .buildr-editor .bd-style-value:has(> .bd-range) > .bd-range {
2655
+ order: 0;
2656
+ flex: 1 1 0;
2657
+ min-width: 0;
2658
+ width: auto;
2659
+ }
2660
+ .buildr-editor .bd-style-value:has(> .bd-range) > .bd-style-input {
2661
+ order: 1;
2662
+ flex: 0 0 40%;
2663
+ }
2664
+ .buildr-editor .bd-style-value:has(> .bd-range) > .bd-style-error,
2665
+ .buildr-editor .bd-style-value:has(> .bd-range) > .bd-style-source {
2666
+ order: 2;
2667
+ flex: 1 0 100%;
2668
+ }
2669
+ .buildr-editor .bd-style-pair {
2670
+ display: grid;
2671
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2672
+ gap: var(--bd-space-3);
2673
+ align-items: start;
2674
+ }
2675
+ .buildr-editor .bd-style-pair > .bd-style-field {
2676
+ min-width: 0;
2677
+ }
2678
+ .buildr-editor .bd-range {
2679
+ width: 100%;
2680
+ accent-color: var(--bd-accent);
2681
+ }
2682
+ .buildr-editor .bd-unit-select {
2683
+ flex: 0 0 auto;
2684
+ height: var(--bd-control-md);
2685
+ padding: 0 var(--bd-space-1);
2686
+ border: var(--bd-border-width) solid var(--bd-border-strong);
2687
+ border-radius: var(--bd-radius-sm);
2688
+ background: var(--bd-surface);
2689
+ color: var(--bd-text);
2690
+ font: inherit;
2691
+ font-size: var(--bd-text-xs);
2692
+ }
2693
+ .buildr-editor .bd-unit-select:disabled {
2694
+ opacity: 0.5;
2695
+ }
2696
+ .buildr-editor .bd-number-unit-compact > .bd-input {
2697
+ padding-inline: var(--bd-space-1);
2698
+ text-align: center;
2699
+ }
2700
+ .buildr-editor .bd-color-input {
2701
+ position: relative;
2702
+ display: inline-flex;
2703
+ flex: 0 0 auto;
2704
+ }
2705
+ .buildr-editor .bd-color-native {
2706
+ position: absolute;
2707
+ inset: 0;
2708
+ width: 100%;
2709
+ height: 100%;
2710
+ margin: 0;
2711
+ padding: 0;
2712
+ border: 0;
2713
+ opacity: 0;
2714
+ cursor: pointer;
2715
+ }
2716
+ .buildr-editor .bd-color-input:focus-within .bd-swatch {
2717
+ outline: 2px solid var(--bd-accent);
2718
+ outline-offset: 1px;
2719
+ }
2720
+ .buildr-editor .bd-side-field {
2721
+ min-width: 0;
2722
+ }
2723
+ .buildr-editor .bd-side-field[data-source="set"] .bd-input {
2724
+ border-color: var(--bd-accent);
2725
+ }
2726
+ .buildr-editor .bd-sides,
2727
+ .buildr-editor .bd-ring {
2728
+ display: flex;
2729
+ flex-direction: column;
2730
+ gap: var(--bd-space-2);
2731
+ }
2732
+ .buildr-editor .bd-sides-grid {
2733
+ display: grid;
2734
+ grid-template-columns: repeat(4, minmax(0, 1fr));
2735
+ gap: var(--bd-space-1);
2736
+ }
2737
+ .buildr-editor .bd-sides-cell {
2738
+ display: flex;
2739
+ flex-direction: column;
2740
+ align-items: stretch;
2741
+ gap: var(--bd-space-0);
2742
+ min-width: 0;
2743
+ }
2744
+ .buildr-editor .bd-sides-label {
2745
+ color: var(--bd-text-muted);
2746
+ font-size: var(--bd-text-xs);
2747
+ text-align: center;
2748
+ }
2749
+ .buildr-editor .bd-ring {
2750
+ padding: var(--bd-space-2);
2751
+ border: var(--bd-border-width) dashed var(--bd-border-strong);
2752
+ border-radius: var(--bd-radius-md);
2753
+ background: var(--bd-surface-2);
2754
+ }
2755
+ .buildr-editor .bd-ring .bd-ring {
2756
+ border-style: solid;
2757
+ background: var(--bd-surface);
2758
+ }
2759
+ .buildr-editor .bd-ring .bd-ring .bd-ring {
2760
+ background: var(--bd-surface-2);
2761
+ }
2762
+ .buildr-editor .bd-ring .bd-style-head {
2763
+ flex-wrap: wrap;
2764
+ gap: var(--bd-space-1);
2765
+ margin-bottom: var(--bd-space-1);
2766
+ color: var(--bd-text-muted);
2767
+ font-size: var(--bd-text-xs);
2768
+ }
2769
+ .buildr-editor .bd-ring .bd-style-head .bd-source-dot,
2770
+ .buildr-editor .bd-ring .bd-style-head .bd-token-trigger {
2771
+ display: none;
2772
+ }
2773
+ .buildr-editor .bd-ring .bd-style-head .bd-unit-select {
2774
+ height: var(--bd-control-sm);
2775
+ }
2776
+ .buildr-editor .bd-ring .bd-style-head .bd-icon-button {
2777
+ width: var(--bd-control-sm);
2778
+ height: var(--bd-control-sm);
2779
+ }
2780
+ .buildr-editor .bd-ring-grid {
2781
+ display: grid;
2782
+ grid-template-columns: var(--bd-control-md) minmax(0, 1fr) var(--bd-control-md);
2783
+ grid-template-areas:
2784
+ ". top ."
2785
+ "left center right"
2786
+ ". bottom .";
2787
+ gap: var(--bd-space-1);
2788
+ align-items: center;
2789
+ justify-items: center;
2790
+ }
2791
+ .buildr-editor .bd-ring-grid .bd-side-field {
2792
+ width: var(--bd-control-md);
2793
+ }
2794
+ .buildr-editor .bd-ring-grid .bd-side-field .bd-input {
2795
+ border-color: transparent;
2796
+ background: transparent;
2797
+ color: var(--bd-text-muted);
2798
+ }
2799
+ .buildr-editor .bd-ring-grid .bd-side-field[data-source="set"] .bd-input {
2800
+ border-color: transparent;
2801
+ color: var(--bd-text);
2802
+ font-weight: var(--bd-weight-semibold);
2803
+ }
2804
+ .buildr-editor .bd-ring-grid .bd-side-field .bd-input:hover,
2805
+ .buildr-editor .bd-ring-grid .bd-side-field .bd-input:focus {
2806
+ border-color: var(--bd-accent);
2807
+ background: var(--bd-surface);
2808
+ }
2809
+ .buildr-editor .bd-ring-top {
2810
+ grid-area: top;
2811
+ }
2812
+ .buildr-editor .bd-ring-left {
2813
+ grid-area: left;
2814
+ }
2815
+ .buildr-editor .bd-ring-right {
2816
+ grid-area: right;
2817
+ }
2818
+ .buildr-editor .bd-ring-bottom {
2819
+ grid-area: bottom;
2820
+ }
2821
+ .buildr-editor .bd-ring-center {
2822
+ grid-area: center;
2823
+ min-width: 0;
2824
+ width: 100%;
2825
+ }
2826
+ .buildr-editor .bd-ring-core {
2827
+ display: flex;
2828
+ align-items: center;
2829
+ justify-content: center;
2830
+ height: var(--bd-control-md);
2831
+ border: var(--bd-border-width) solid var(--bd-border-strong);
2832
+ border-radius: var(--bd-radius-sm);
2833
+ background: var(--bd-surface);
2834
+ color: var(--bd-text-muted);
2835
+ font-size: var(--bd-text-xs);
2836
+ }
2837
+ .buildr-editor .bd-value-field {
2838
+ display: flex;
2839
+ align-items: center;
2840
+ gap: var(--bd-space-2);
2841
+ width: 100%;
2842
+ padding: var(--bd-space-1) var(--bd-space-2);
2843
+ border: 0;
2844
+ border-radius: var(--bd-radius-sm);
2845
+ background: transparent;
2846
+ color: var(--bd-text);
2847
+ font: inherit;
2848
+ font-size: var(--bd-text-sm);
2849
+ text-align: left;
2850
+ cursor: pointer;
2851
+ }
2852
+ .buildr-editor .bd-value-field:hover:not(:disabled) {
2853
+ background: var(--bd-surface-hover);
2854
+ }
2855
+ .buildr-editor .bd-value-field[aria-pressed="true"] {
2856
+ background: var(--bd-accent-soft);
2857
+ }
2858
+ .buildr-editor .bd-value-field code {
2859
+ flex: 1 1 auto;
2860
+ min-width: 0;
2861
+ overflow: hidden;
2862
+ text-overflow: ellipsis;
2863
+ }
2864
+ .buildr-editor .bd-value-field-icon {
2865
+ flex: 0 0 auto;
2866
+ color: var(--bd-text-subtle);
2867
+ }
2868
+ .buildr-editor .bd-value-field-type {
2869
+ color: var(--bd-text-subtle);
2870
+ font-size: var(--bd-text-xs);
2871
+ }
2872
+ .buildr-editor .bd-value-preview.bd-card {
2873
+ display: flex;
2874
+ align-items: center;
2875
+ gap: var(--bd-space-2);
2876
+ margin: 0;
2877
+ padding: var(--bd-space-2) var(--bd-space-3);
2878
+ border: var(--bd-border-width) solid var(--bd-border);
2879
+ border-radius: var(--bd-radius-md);
2880
+ background: var(--bd-surface-2);
2881
+ }
2882
+ .buildr-editor .bd-value-preview.bd-card output {
2883
+ color: var(--bd-text);
2884
+ overflow-wrap: anywhere;
2885
+ }