@panphora/bevel 0.1.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 (539) hide show
  1. package/LICENSE +16 -0
  2. package/README.md +226 -0
  3. package/bevel-fonts.css +16 -0
  4. package/bevel.css +3075 -0
  5. package/bevel.js +2126 -0
  6. package/dist/react/components/activity-feed.d.ts +89 -0
  7. package/dist/react/components/activity-feed.js +54 -0
  8. package/dist/react/components/alert-dialog.d.ts +14 -0
  9. package/dist/react/components/alert-dialog.js +19 -0
  10. package/dist/react/components/app-shell.d.ts +98 -0
  11. package/dist/react/components/app-shell.js +86 -0
  12. package/dist/react/components/app-toolbar.d.ts +19 -0
  13. package/dist/react/components/app-toolbar.js +22 -0
  14. package/dist/react/components/avatar-group.d.ts +67 -0
  15. package/dist/react/components/avatar-group.js +49 -0
  16. package/dist/react/components/badge-and-pill.d.ts +34 -0
  17. package/dist/react/components/badge-and-pill.js +12 -0
  18. package/dist/react/components/breadcrumbs.d.ts +56 -0
  19. package/dist/react/components/breadcrumbs.js +44 -0
  20. package/dist/react/components/bulk-bar.d.ts +22 -0
  21. package/dist/react/components/bulk-bar.js +59 -0
  22. package/dist/react/components/button.d.ts +15 -0
  23. package/dist/react/components/button.js +20 -0
  24. package/dist/react/components/callout-and-hint.d.ts +17 -0
  25. package/dist/react/components/callout-and-hint.js +8 -0
  26. package/dist/react/components/checkbox.d.ts +5 -0
  27. package/dist/react/components/checkbox.js +13 -0
  28. package/dist/react/components/chip.d.ts +149 -0
  29. package/dist/react/components/chip.js +29 -0
  30. package/dist/react/components/code-block.d.ts +50 -0
  31. package/dist/react/components/code-block.js +77 -0
  32. package/dist/react/components/code-editor.d.ts +122 -0
  33. package/dist/react/components/code-editor.js +695 -0
  34. package/dist/react/components/column-manager.d.ts +28 -0
  35. package/dist/react/components/column-manager.js +85 -0
  36. package/dist/react/components/combobox.d.ts +32 -0
  37. package/dist/react/components/combobox.js +37 -0
  38. package/dist/react/components/data-grid.d.ts +108 -0
  39. package/dist/react/components/data-grid.js +159 -0
  40. package/dist/react/components/data-table.d.ts +2 -0
  41. package/dist/react/components/data-table.js +6 -0
  42. package/dist/react/components/date.d.ts +23 -0
  43. package/dist/react/components/date.js +11 -0
  44. package/dist/react/components/details.d.ts +13 -0
  45. package/dist/react/components/details.js +20 -0
  46. package/dist/react/components/dialog.d.ts +74 -0
  47. package/dist/react/components/dialog.js +31 -0
  48. package/dist/react/components/diff-view.d.ts +73 -0
  49. package/dist/react/components/diff-view.js +68 -0
  50. package/dist/react/components/documents.d.ts +70 -0
  51. package/dist/react/components/documents.js +10 -0
  52. package/dist/react/components/drawer.d.ts +45 -0
  53. package/dist/react/components/drawer.js +35 -0
  54. package/dist/react/components/editable-grid-cells.d.ts +32 -0
  55. package/dist/react/components/editable-grid-cells.js +116 -0
  56. package/dist/react/components/eyebrow-kicker-lede-pull-quote.d.ts +39 -0
  57. package/dist/react/components/eyebrow-kicker-lede-pull-quote.js +12 -0
  58. package/dist/react/components/field.d.ts +32 -0
  59. package/dist/react/components/field.js +27 -0
  60. package/dist/react/components/file-tree.d.ts +75 -0
  61. package/dist/react/components/file-tree.js +247 -0
  62. package/dist/react/components/file.d.ts +43 -0
  63. package/dist/react/components/file.js +73 -0
  64. package/dist/react/components/files-table.d.ts +174 -0
  65. package/dist/react/components/files-table.js +237 -0
  66. package/dist/react/components/filter-builder.d.ts +37 -0
  67. package/dist/react/components/filter-builder.js +109 -0
  68. package/dist/react/components/form-error-summary.d.ts +16 -0
  69. package/dist/react/components/form-error-summary.js +49 -0
  70. package/dist/react/components/icon-button.d.ts +8 -0
  71. package/dist/react/components/icon-button.js +14 -0
  72. package/dist/react/components/icon.d.ts +7 -0
  73. package/dist/react/components/icon.js +15 -0
  74. package/dist/react/components/image.d.ts +72 -0
  75. package/dist/react/components/image.js +24 -0
  76. package/dist/react/components/inline-edit.d.ts +70 -0
  77. package/dist/react/components/inline-edit.js +149 -0
  78. package/dist/react/components/input.d.ts +29 -0
  79. package/dist/react/components/input.js +20 -0
  80. package/dist/react/components/kanban-board.d.ts +140 -0
  81. package/dist/react/components/kanban-board.js +374 -0
  82. package/dist/react/components/layout.d.ts +51 -0
  83. package/dist/react/components/layout.js +28 -0
  84. package/dist/react/components/list.d.ts +28 -0
  85. package/dist/react/components/list.js +6 -0
  86. package/dist/react/components/masthead-and-verdict.d.ts +60 -0
  87. package/dist/react/components/masthead-and-verdict.js +8 -0
  88. package/dist/react/components/menu.d.ts +26 -0
  89. package/dist/react/components/menu.js +31 -0
  90. package/dist/react/components/multi-select-picker.d.ts +49 -0
  91. package/dist/react/components/multi-select-picker.js +20 -0
  92. package/dist/react/components/note.d.ts +33 -0
  93. package/dist/react/components/note.js +8 -0
  94. package/dist/react/components/number-field.d.ts +16 -0
  95. package/dist/react/components/number-field.js +17 -0
  96. package/dist/react/components/pagination.d.ts +45 -0
  97. package/dist/react/components/pagination.js +87 -0
  98. package/dist/react/components/persistent-action-banner.d.ts +71 -0
  99. package/dist/react/components/persistent-action-banner.js +39 -0
  100. package/dist/react/components/popconfirm.d.ts +42 -0
  101. package/dist/react/components/popconfirm.js +59 -0
  102. package/dist/react/components/popover.d.ts +16 -0
  103. package/dist/react/components/popover.js +21 -0
  104. package/dist/react/components/progress-and-gauge.d.ts +44 -0
  105. package/dist/react/components/progress-and-gauge.js +19 -0
  106. package/dist/react/components/radio.d.ts +7 -0
  107. package/dist/react/components/radio.js +13 -0
  108. package/dist/react/components/rich-text-toolbar.d.ts +26 -0
  109. package/dist/react/components/rich-text-toolbar.js +64 -0
  110. package/dist/react/components/rows-and-card.d.ts +88 -0
  111. package/dist/react/components/rows-and-card.js +10 -0
  112. package/dist/react/components/save-status-indicator.d.ts +11 -0
  113. package/dist/react/components/save-status-indicator.js +33 -0
  114. package/dist/react/components/segmented-control.d.ts +21 -0
  115. package/dist/react/components/segmented-control.js +15 -0
  116. package/dist/react/components/select.d.ts +29 -0
  117. package/dist/react/components/select.js +29 -0
  118. package/dist/react/components/selectable-cards.d.ts +30 -0
  119. package/dist/react/components/selectable-cards.js +29 -0
  120. package/dist/react/components/settings-rows.d.ts +51 -0
  121. package/dist/react/components/settings-rows.js +8 -0
  122. package/dist/react/components/sidebar-nav.d.ts +77 -0
  123. package/dist/react/components/sidebar-nav.js +41 -0
  124. package/dist/react/components/skeleton-and-empty.d.ts +51 -0
  125. package/dist/react/components/skeleton-and-empty.js +14 -0
  126. package/dist/react/components/slider.d.ts +19 -0
  127. package/dist/react/components/slider.js +17 -0
  128. package/dist/react/components/small-charts.d.ts +60 -0
  129. package/dist/react/components/small-charts.js +76 -0
  130. package/dist/react/components/sortable.d.ts +30 -0
  131. package/dist/react/components/sortable.js +85 -0
  132. package/dist/react/components/split-button.d.ts +38 -0
  133. package/dist/react/components/split-button.js +43 -0
  134. package/dist/react/components/split-panes.d.ts +35 -0
  135. package/dist/react/components/split-panes.js +102 -0
  136. package/dist/react/components/stat-tiles.d.ts +54 -0
  137. package/dist/react/components/stat-tiles.js +8 -0
  138. package/dist/react/components/steps.d.ts +11 -0
  139. package/dist/react/components/steps.js +13 -0
  140. package/dist/react/components/switch.d.ts +6 -0
  141. package/dist/react/components/switch.js +13 -0
  142. package/dist/react/components/table.d.ts +61 -0
  143. package/dist/react/components/table.js +6 -0
  144. package/dist/react/components/tabs.d.ts +7 -0
  145. package/dist/react/components/tabs.js +13 -0
  146. package/dist/react/components/tags.d.ts +33 -0
  147. package/dist/react/components/tags.js +83 -0
  148. package/dist/react/components/textarea.d.ts +10 -0
  149. package/dist/react/components/textarea.js +6 -0
  150. package/dist/react/components/toast.d.ts +35 -0
  151. package/dist/react/components/toast.js +90 -0
  152. package/dist/react/components/tooltip-and-key.d.ts +20 -0
  153. package/dist/react/components/tooltip-and-key.js +20 -0
  154. package/dist/react/components/tree-view.d.ts +34 -0
  155. package/dist/react/components/tree-view.js +118 -0
  156. package/dist/react/components/upload-dropzone.d.ts +92 -0
  157. package/dist/react/components/upload-dropzone.js +116 -0
  158. package/dist/react/components/wizard-shell.d.ts +78 -0
  159. package/dist/react/components/wizard-shell.js +176 -0
  160. package/dist/react/fonts.css.d.ts +1 -0
  161. package/dist/react/index.d.ts +76 -0
  162. package/dist/react/index.js +77 -0
  163. package/dist/react/integrations/quickcrop.d.ts +58 -0
  164. package/dist/react/integrations/quickcrop.js +137 -0
  165. package/dist/react/integrations/richclay.d.ts +43 -0
  166. package/dist/react/integrations/richclay.js +129 -0
  167. package/dist/react/internal/classes.d.ts +3 -0
  168. package/dist/react/internal/classes.js +10 -0
  169. package/dist/react/internal/close-mark.d.ts +1 -0
  170. package/dist/react/internal/close-mark.js +10 -0
  171. package/dist/react/internal/controllable-state.d.ts +9 -0
  172. package/dist/react/internal/controllable-state.js +22 -0
  173. package/dist/react/internal/drop-effect.d.ts +28 -0
  174. package/dist/react/internal/drop-effect.js +8 -0
  175. package/dist/react/internal/form-reset.d.ts +2 -0
  176. package/dist/react/internal/form-reset.js +22 -0
  177. package/dist/react/internal/format.d.ts +1 -0
  178. package/dist/react/internal/format.js +14 -0
  179. package/dist/react/internal/link.d.ts +2 -0
  180. package/dist/react/internal/link.js +8 -0
  181. package/dist/react/internal/part.d.ts +20 -0
  182. package/dist/react/internal/part.js +47 -0
  183. package/dist/react/internal/pointer-session.d.ts +8 -0
  184. package/dist/react/internal/pointer-session.js +60 -0
  185. package/dist/react/internal/refs.d.ts +2 -0
  186. package/dist/react/internal/refs.js +22 -0
  187. package/dist/react/internal/rich-text.d.ts +28 -0
  188. package/dist/react/internal/rich-text.js +4 -0
  189. package/dist/react/internal/table-context.d.ts +39 -0
  190. package/dist/react/internal/table-context.js +12 -0
  191. package/dist/react/internal/use-object-url.d.ts +1 -0
  192. package/dist/react/internal/use-object-url.js +15 -0
  193. package/dist/react/layout.css +274 -0
  194. package/dist/react/layout.css.d.ts +1 -0
  195. package/dist/react/models/filter.d.ts +31 -0
  196. package/dist/react/models/filter.js +79 -0
  197. package/dist/react/models/kanban.d.ts +51 -0
  198. package/dist/react/models/kanban.js +35 -0
  199. package/dist/react/models/reorder.d.ts +9 -0
  200. package/dist/react/models/reorder.js +23 -0
  201. package/dist/react/models/table.d.ts +85 -0
  202. package/dist/react/models/table.js +144 -0
  203. package/dist/react/models/tree.d.ts +16 -0
  204. package/dist/react/models/tree.js +26 -0
  205. package/dist/react/provider.d.ts +18 -0
  206. package/dist/react/provider.js +31 -0
  207. package/dist/react/recipes/context-hypercms.d.ts +17 -0
  208. package/dist/react/recipes/context-hypercms.js +71 -0
  209. package/dist/react/recipes/context-quickcrop.d.ts +8 -0
  210. package/dist/react/recipes/context-quickcrop.js +49 -0
  211. package/dist/react/theme.css +8004 -0
  212. package/dist/react/theme.css.d.ts +1 -0
  213. package/examples/README.md +34 -0
  214. package/examples/components/activity-feed.html +28 -0
  215. package/examples/components/app-shell.html +12 -0
  216. package/examples/components/app-toolbar.html +38 -0
  217. package/examples/components/avatar-group.html +27 -0
  218. package/examples/components/breadcrumbs.html +26 -0
  219. package/examples/components/bulk-bar.html +22 -0
  220. package/examples/components/code-block.html +12 -0
  221. package/examples/components/code-editor.html +25 -0
  222. package/examples/components/column-manager.html +9 -0
  223. package/examples/components/combobox.html +13 -0
  224. package/examples/components/context-hypercms.css +41 -0
  225. package/examples/components/context-hypercms.html +40 -0
  226. package/examples/components/context-hypercms.js +62 -0
  227. package/examples/components/context-quickcrop.html +137 -0
  228. package/examples/components/diff-view.html +9 -0
  229. package/examples/components/drawer.html +11 -0
  230. package/examples/components/editable-grid-cells.html +9 -0
  231. package/examples/components/file-browser.html +53 -0
  232. package/examples/components/file-tree.html +34 -0
  233. package/examples/components/files-table.html +80 -0
  234. package/examples/components/filter-builder.html +11 -0
  235. package/examples/components/form-error-summary.html +11 -0
  236. package/examples/components/index.html +51 -0
  237. package/examples/components/inline-edit.html +42 -0
  238. package/examples/components/kanban-board.html +42 -0
  239. package/examples/components/manifest.json +3279 -0
  240. package/examples/components/modal.html +11 -0
  241. package/examples/components/multi-select-picker.html +13 -0
  242. package/examples/components/pagination.html +32 -0
  243. package/examples/components/persistent-action-banner.html +23 -0
  244. package/examples/components/popconfirm.html +13 -0
  245. package/examples/components/popover-menu.html +13 -0
  246. package/examples/components/reference/baseline/DECISIONS.md +85 -0
  247. package/examples/components/reference/baseline/README.md +58 -0
  248. package/examples/components/reference/baseline/bevel-fonts.css +16 -0
  249. package/examples/components/reference/baseline/bevel.css +1339 -0
  250. package/examples/components/reference/baseline/bevel.js +496 -0
  251. package/examples/components/reference/baseline/fonts/LICENSE-ibm-plex-mono.txt +93 -0
  252. package/examples/components/reference/baseline/fonts/LICENSE-ibm-plex-sans.txt +93 -0
  253. package/examples/components/reference/baseline/fonts/LICENSE-newsreader.txt +93 -0
  254. package/examples/components/reference/baseline/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  255. package/examples/components/reference/baseline/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
  256. package/examples/components/reference/baseline/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
  257. package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-400-italic.woff2 +0 -0
  258. package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
  259. package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
  260. package/examples/components/reference/baseline/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
  261. package/examples/components/reference/baseline/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
  262. package/examples/components/reference/baseline/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  263. package/examples/components/reference/fable/IMPROVEMENTS.md +106 -0
  264. package/examples/components/reference/fable/PARENT-REPAIRS.md +17 -0
  265. package/examples/components/reference/fable/__pycache__/build_repairs.cpython-311.pyc +0 -0
  266. package/examples/components/reference/fable/__pycache__/kanban.cpython-311.pyc +0 -0
  267. package/examples/components/reference/fable/as-authored/IMPROVEMENTS-completed.md +106 -0
  268. package/examples/components/reference/fable/as-authored/base-astra.css +17 -0
  269. package/examples/components/reference/fable/as-authored/base-parent.css +416 -0
  270. package/examples/components/reference/fable/as-authored/build.py +858 -0
  271. package/examples/components/reference/fable/as-authored/fable.css +823 -0
  272. package/examples/components/reference/fable/as-authored/kanban-completed.css +235 -0
  273. package/examples/components/reference/fable/as-authored/kanban-completed.html +53 -0
  274. package/examples/components/reference/fable/as-authored/kanban-completed.py +212 -0
  275. package/examples/components/reference/fable/as-authored/kanban.py +207 -0
  276. package/examples/components/reference/fable/base-astra.css +17 -0
  277. package/examples/components/reference/fable/base-parent.css +416 -0
  278. package/examples/components/reference/fable/build.py +858 -0
  279. package/examples/components/reference/fable/build_repairs.py +25 -0
  280. package/examples/components/reference/fable/components/activity-feed.html +3 -0
  281. package/examples/components/reference/fable/components/app-toolbar.html +3 -0
  282. package/examples/components/reference/fable/components/avatar-group.html +4 -0
  283. package/examples/components/reference/fable/components/breadcrumbs.html +3 -0
  284. package/examples/components/reference/fable/components/code-block.html +9 -0
  285. package/examples/components/reference/fable/components/column-manager.html +3 -0
  286. package/examples/components/reference/fable/components/combobox.html +6 -0
  287. package/examples/components/reference/fable/components/context-hypercms.html +3 -0
  288. package/examples/components/reference/fable/components/context-quickcrop.html +4 -0
  289. package/examples/components/reference/fable/components/diff-view.html +13 -0
  290. package/examples/components/reference/fable/components/drawer.html +3 -0
  291. package/examples/components/reference/fable/components/editable-grid-cells.html +3 -0
  292. package/examples/components/reference/fable/components/filter-builder.html +3 -0
  293. package/examples/components/reference/fable/components/form-error-summary.html +4 -0
  294. package/examples/components/reference/fable/components/inline-edit.html +3 -0
  295. package/examples/components/reference/fable/components/kanban-board.html +53 -0
  296. package/examples/components/reference/fable/components/modal.html +3 -0
  297. package/examples/components/reference/fable/components/multi-select-picker.html +5 -0
  298. package/examples/components/reference/fable/components/pagination.html +3 -0
  299. package/examples/components/reference/fable/components/persistent-action-banner.html +4 -0
  300. package/examples/components/reference/fable/components/popconfirm.html +5 -0
  301. package/examples/components/reference/fable/components/popover-menu.html +3 -0
  302. package/examples/components/reference/fable/components/rich-text-toolbar.html +3 -0
  303. package/examples/components/reference/fable/components/save-status-indicator.html +2 -0
  304. package/examples/components/reference/fable/components/selectable-cards.html +3 -0
  305. package/examples/components/reference/fable/components/settings-rows.html +3 -0
  306. package/examples/components/reference/fable/components/sidebar-nav.html +4 -0
  307. package/examples/components/reference/fable/components/small-charts.html +5 -0
  308. package/examples/components/reference/fable/components/split-button.html +4 -0
  309. package/examples/components/reference/fable/components/split-panes.html +8 -0
  310. package/examples/components/reference/fable/components/stat-tiles.html +3 -0
  311. package/examples/components/reference/fable/components/toast-stack.html +5 -0
  312. package/examples/components/reference/fable/components/tree-view.html +4 -0
  313. package/examples/components/reference/fable/components/upload-dropzone.html +6 -0
  314. package/examples/components/reference/fable/components/wizard-shell.html +3 -0
  315. package/examples/components/reference/fable/coverage.json +414 -0
  316. package/examples/components/reference/fable/fable.css +823 -0
  317. package/examples/components/reference/fable/index.html +5 -0
  318. package/examples/components/reference/fable/kanban.css +237 -0
  319. package/examples/components/reference/fable/kanban.py +212 -0
  320. package/examples/components/reference/fable/parent-repairs.css +9 -0
  321. package/examples/components/reference/fixtures/data.json +102 -0
  322. package/examples/components/reference/fixtures/host.js +47 -0
  323. package/examples/components/reference/fixtures/static-host.js +39 -0
  324. package/examples/components/reference/fixtures/workspace.jpg +0 -0
  325. package/examples/components/reference/parent/CHANGES.md +179 -0
  326. package/examples/components/reference/parent/__pycache__/kanban.cpython-311.pyc +0 -0
  327. package/examples/components/reference/parent/base-astra.css +17 -0
  328. package/examples/components/reference/parent/base-parent.css +416 -0
  329. package/examples/components/reference/parent/build.py +148 -0
  330. package/examples/components/reference/parent/components/activity-feed.html +2 -0
  331. package/examples/components/reference/parent/components/app-toolbar.html +2 -0
  332. package/examples/components/reference/parent/components/avatar-group.html +4 -0
  333. package/examples/components/reference/parent/components/breadcrumbs.html +2 -0
  334. package/examples/components/reference/parent/components/code-block.html +8 -0
  335. package/examples/components/reference/parent/components/column-manager.html +2 -0
  336. package/examples/components/reference/parent/components/combobox.html +6 -0
  337. package/examples/components/reference/parent/components/context-hypercms.html +2 -0
  338. package/examples/components/reference/parent/components/context-quickcrop.html +4 -0
  339. package/examples/components/reference/parent/components/diff-view.html +4 -0
  340. package/examples/components/reference/parent/components/drawer.html +2 -0
  341. package/examples/components/reference/parent/components/editable-grid-cells.html +2 -0
  342. package/examples/components/reference/parent/components/filter-builder.html +2 -0
  343. package/examples/components/reference/parent/components/form-error-summary.html +2 -0
  344. package/examples/components/reference/parent/components/inline-edit.html +2 -0
  345. package/examples/components/reference/parent/components/kanban-board.html +84 -0
  346. package/examples/components/reference/parent/components/modal.html +2 -0
  347. package/examples/components/reference/parent/components/multi-select-picker.html +5 -0
  348. package/examples/components/reference/parent/components/pagination.html +2 -0
  349. package/examples/components/reference/parent/components/persistent-action-banner.html +4 -0
  350. package/examples/components/reference/parent/components/popconfirm.html +5 -0
  351. package/examples/components/reference/parent/components/popover-menu.html +2 -0
  352. package/examples/components/reference/parent/components/rich-text-toolbar.html +2 -0
  353. package/examples/components/reference/parent/components/save-status-indicator.html +2 -0
  354. package/examples/components/reference/parent/components/selectable-cards.html +2 -0
  355. package/examples/components/reference/parent/components/settings-rows.html +2 -0
  356. package/examples/components/reference/parent/components/sidebar-nav.html +4 -0
  357. package/examples/components/reference/parent/components/small-charts.html +2 -0
  358. package/examples/components/reference/parent/components/split-button.html +5 -0
  359. package/examples/components/reference/parent/components/split-panes.html +8 -0
  360. package/examples/components/reference/parent/components/stat-tiles.html +2 -0
  361. package/examples/components/reference/parent/components/toast-stack.html +5 -0
  362. package/examples/components/reference/parent/components/tree-view.html +4 -0
  363. package/examples/components/reference/parent/components/upload-dropzone.html +6 -0
  364. package/examples/components/reference/parent/components/wizard-shell.html +2 -0
  365. package/examples/components/reference/parent/coverage.json +414 -0
  366. package/examples/components/reference/parent/index.html +1 -0
  367. package/examples/components/reference/parent/kanban.css +114 -0
  368. package/examples/components/reference/parent/kanban.py +55 -0
  369. package/examples/components/reference/parent/refinement.css +53 -0
  370. package/examples/components/reference/selected/build.py +70 -0
  371. package/examples/components/reference/selected/components/activity-feed.html +3 -0
  372. package/examples/components/reference/selected/components/app-toolbar.html +3 -0
  373. package/examples/components/reference/selected/components/avatar-group.html +4 -0
  374. package/examples/components/reference/selected/components/breadcrumbs.html +3 -0
  375. package/examples/components/reference/selected/components/code-block.html +9 -0
  376. package/examples/components/reference/selected/components/column-manager.html +3 -0
  377. package/examples/components/reference/selected/components/combobox.html +6 -0
  378. package/examples/components/reference/selected/components/context-hypercms.html +3 -0
  379. package/examples/components/reference/selected/components/context-quickcrop.html +4 -0
  380. package/examples/components/reference/selected/components/diff-view.html +13 -0
  381. package/examples/components/reference/selected/components/drawer.html +3 -0
  382. package/examples/components/reference/selected/components/editable-grid-cells.html +3 -0
  383. package/examples/components/reference/selected/components/filter-builder.html +3 -0
  384. package/examples/components/reference/selected/components/form-error-summary.html +4 -0
  385. package/examples/components/reference/selected/components/inline-edit.html +3 -0
  386. package/examples/components/reference/selected/components/kanban-board.html +53 -0
  387. package/examples/components/reference/selected/components/modal.html +2 -0
  388. package/examples/components/reference/selected/components/multi-select-picker.html +5 -0
  389. package/examples/components/reference/selected/components/pagination.html +3 -0
  390. package/examples/components/reference/selected/components/persistent-action-banner.html +4 -0
  391. package/examples/components/reference/selected/components/popconfirm.html +5 -0
  392. package/examples/components/reference/selected/components/popover-menu.html +3 -0
  393. package/examples/components/reference/selected/components/rich-text-toolbar.html +3 -0
  394. package/examples/components/reference/selected/components/save-status-indicator.html +2 -0
  395. package/examples/components/reference/selected/components/selectable-cards.html +3 -0
  396. package/examples/components/reference/selected/components/settings-rows.html +3 -0
  397. package/examples/components/reference/selected/components/sidebar-nav.html +4 -0
  398. package/examples/components/reference/selected/components/small-charts.html +5 -0
  399. package/examples/components/reference/selected/components/split-button.html +4 -0
  400. package/examples/components/reference/selected/components/split-panes.html +8 -0
  401. package/examples/components/reference/selected/components/stat-tiles.html +3 -0
  402. package/examples/components/reference/selected/components/toast-stack.html +5 -0
  403. package/examples/components/reference/selected/components/tree-view.html +4 -0
  404. package/examples/components/reference/selected/components/upload-dropzone.html +6 -0
  405. package/examples/components/reference/selected/components/wizard-shell.html +3 -0
  406. package/examples/components/reference/selected/corrections.css +11 -0
  407. package/examples/components/reference/selected/coverage.json +413 -0
  408. package/examples/components/reference/selected/gallery-build.mjs +49 -0
  409. package/examples/components/reference/selected/gallery-spec.json +12 -0
  410. package/examples/components/reference/selected/index.html +1 -0
  411. package/examples/components/reference/selected/kanban-comparison.json +6 -0
  412. package/examples/components/reference/selected/manifest.json +476 -0
  413. package/examples/components/reference/sha256.json +142 -0
  414. package/examples/components/reference/sources/diagonal-close.svg +1 -0
  415. package/examples/components/reference/sources/hyperclay/public-assets/css/hyperclay-app-source.css +614 -0
  416. package/examples/components/reference/sources/hyperclay/public-assets/js/app.js +94 -0
  417. package/examples/components/reference/sources/hyperclayjs/src/ui/theModal.js +897 -0
  418. package/examples/components/reference/sources/hypercms/scripts/build-theme.js +203 -0
  419. package/examples/components/reference/sources/hypercms/src/anchor.js +24 -0
  420. package/examples/components/reference/sources/hypercms/src/apply-loop.js +167 -0
  421. package/examples/components/reference/sources/hypercms/src/diagnostics.js +44 -0
  422. package/examples/components/reference/sources/hypercms/src/enhance.js +173 -0
  423. package/examples/components/reference/sources/hypercms/src/events.js +955 -0
  424. package/examples/components/reference/sources/hypercms/src/form-builder.js +518 -0
  425. package/examples/components/reference/sources/hypercms/src/form-rules.js +208 -0
  426. package/examples/components/reference/sources/hypercms/src/hooks.js +100 -0
  427. package/examples/components/reference/sources/hypercms/src/hypercms-bundle.js +10 -0
  428. package/examples/components/reference/sources/hypercms/src/hypercms.js +347 -0
  429. package/examples/components/reference/sources/hypercms/src/morph.js +10 -0
  430. package/examples/components/reference/sources/hypercms/src/path.js +61 -0
  431. package/examples/components/reference/sources/hypercms/src/place.js +131 -0
  432. package/examples/components/reference/sources/hypercms/src/platform.js +131 -0
  433. package/examples/components/reference/sources/hypercms/src/refresh.js +87 -0
  434. package/examples/components/reference/sources/hypercms/src/richclay-bridge.js +140 -0
  435. package/examples/components/reference/sources/hypercms/src/row-identity.js +111 -0
  436. package/examples/components/reference/sources/hypercms/src/scaffold.js +10 -0
  437. package/examples/components/reference/sources/hypercms/src/session.js +303 -0
  438. package/examples/components/reference/sources/hypercms/src/shell.js +248 -0
  439. package/examples/components/reference/sources/hypercms/src/styles.css +298 -0
  440. package/examples/components/reference/sources/hypercms/src/targets.js +144 -0
  441. package/examples/components/reference/sources/hypercms/src/templates.js +656 -0
  442. package/examples/components/reference/sources/hypercms/src/theme/pixel-quiet.overrides.css +761 -0
  443. package/examples/components/reference/sources/hypercms/src/theme.generated.css +1772 -0
  444. package/examples/components/reference/sources/hypercms/src/toggle.js +666 -0
  445. package/examples/components/reference/sources/hypercms/src/unresolved.js +211 -0
  446. package/examples/components/reference/sources/hypercms/src/vendor/mirk.vendor.js +212 -0
  447. package/examples/components/reference/sources/hypercms/src/views/inline-layer.js +421 -0
  448. package/examples/components/reference/sources/hypercms/src/views/inline.js +1072 -0
  449. package/examples/components/reference/sources/hypercms/src/views/sidebar.js +97 -0
  450. package/examples/components/reference/sources/modal-reference.html +301 -0
  451. package/examples/components/reference/sources/quickcrop/quickcrop.css +124 -0
  452. package/examples/components/reference/sources/quickcrop/quickcrop.js +400 -0
  453. package/examples/components/reference/sources/richclay/richclay.css +416 -0
  454. package/examples/components/reference/sources/richclay/richclay.js +2962 -0
  455. package/examples/components/reference/sources/richclay/src/a11y.js +67 -0
  456. package/examples/components/reference/sources/richclay/src/browser-global.js +7 -0
  457. package/examples/components/reference/sources/richclay/src/buttons.js +254 -0
  458. package/examples/components/reference/sources/richclay/src/hyperclay.js +470 -0
  459. package/examples/components/reference/sources/richclay/src/normalize.js +380 -0
  460. package/examples/components/reference/sources/richclay/src/richclay.js +1356 -0
  461. package/examples/components/reference/sources/richclay/src/sanitize.js +189 -0
  462. package/examples/components/reference/sources/richclay/src/styles.js +23 -0
  463. package/examples/components/reference/sources/richclay/src/toolbar-float.js +175 -0
  464. package/examples/components/reference/sources/richclay/src/toolbar.js +394 -0
  465. package/examples/components/reference/sources/richclay/src/vendor-bundle.js +15 -0
  466. package/examples/components/reference/sources/richclay/vendor/DOMPURIFY-LICENSE +202 -0
  467. package/examples/components/reference/sources/richclay/vendor/DOMPURIFY-LICENSE-MPL +373 -0
  468. package/examples/components/reference/sources/richclay/vendor/SQUIRE-LICENSE +21 -0
  469. package/examples/components/reference/sources/richclay/vendor/purify.es.mjs +2249 -0
  470. package/examples/components/reference/sources/richclay/vendor/purify.min.js +3 -0
  471. package/examples/components/reference/sources/richclay/vendor/squire.js +22 -0
  472. package/examples/components/reference/sources/richclay/vendor/squire.mjs +22 -0
  473. package/examples/components/reference/sources/richclay/vendor/squire.provenance.json +19 -0
  474. package/examples/components/rich-text-toolbar.html +43 -0
  475. package/examples/components/save-status-indicator.html +11 -0
  476. package/examples/components/selectable-cards.html +9 -0
  477. package/examples/components/settings-rows.html +10 -0
  478. package/examples/components/sidebar-nav.html +9 -0
  479. package/examples/components/small-charts.html +21 -0
  480. package/examples/components/split-button.html +13 -0
  481. package/examples/components/split-panes-editor.html +6 -0
  482. package/examples/components/split-panes.html +9 -0
  483. package/examples/components/stat-tiles.html +23 -0
  484. package/examples/components/toast-stack.html +21 -0
  485. package/examples/components/tree-view.html +9 -0
  486. package/examples/components/upload-dropzone.html +88 -0
  487. package/examples/components/wizard-shell.html +50 -0
  488. package/examples/datastar/index.html +38 -0
  489. package/examples/datastar/server.mjs +31 -0
  490. package/examples/fixtures/field-guide.pdf +14 -0
  491. package/examples/fixtures/workspace.jpg +0 -0
  492. package/examples/setup-peers.mjs +35 -0
  493. package/fonts/LICENSE-ibm-plex-mono.txt +93 -0
  494. package/fonts/LICENSE-ibm-plex-sans.txt +93 -0
  495. package/fonts/LICENSE-newsreader.txt +93 -0
  496. package/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  497. package/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
  498. package/fonts/ibm-plex-mono-latin-600-normal.woff2 +0 -0
  499. package/fonts/ibm-plex-sans-latin-400-italic.woff2 +0 -0
  500. package/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
  501. package/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
  502. package/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
  503. package/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
  504. package/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  505. package/icons/LICENSE +21 -0
  506. package/icons/house.json +71 -0
  507. package/icons/icons.d.ts +17 -0
  508. package/icons/icons.js +648 -0
  509. package/icons/icons.svg +126 -0
  510. package/icons/marks/build-tray.source.mjs +45 -0
  511. package/icons/marks/hyperclay-local.svg +11 -0
  512. package/icons/phosphor.json +53 -0
  513. package/icons/round.json +8 -0
  514. package/integrations/datastar.js +202 -0
  515. package/integrations/quickcrop.css +26 -0
  516. package/integrations/quickcrop.js +56 -0
  517. package/integrations/richclay.css +100 -0
  518. package/integrations/richclay.js +131 -0
  519. package/package.json +630 -0
  520. package/react/README.md +244 -0
  521. package/src/README.md +83 -0
  522. package/vendor/datastar/datastar-1.0.3.js +10 -0
  523. package/vendor/datastar/provenance.json +6 -0
  524. package/vendor/floating-ui/LICENSE-core +20 -0
  525. package/vendor/floating-ui/LICENSE-dom +20 -0
  526. package/vendor/floating-ui/floating-ui.core.umd.min.js +1 -0
  527. package/vendor/floating-ui/floating-ui.dom.umd.min.js +1 -0
  528. package/vendor/floating-ui/provenance.json +17 -0
  529. package/vendor/richclay/LICENSE +16 -0
  530. package/vendor/richclay/THIRD-PARTY-NOTICES.md +45 -0
  531. package/vendor/richclay/provenance.json +17 -0
  532. package/vendor/richclay/richclay.css +404 -0
  533. package/vendor/richclay/richclay.js +2940 -0
  534. package/vendor/richclay/vendor/DOMPURIFY-LICENSE +202 -0
  535. package/vendor/richclay/vendor/DOMPURIFY-LICENSE-MPL +373 -0
  536. package/vendor/richclay/vendor/SQUIRE-LICENSE +21 -0
  537. package/vendor/richclay/vendor/purify.min.js +3 -0
  538. package/vendor/richclay/vendor/squire.js +22 -0
  539. package/vendor/richclay/vendor/squire.provenance.json +30 -0
@@ -0,0 +1,823 @@
1
+ /* fable.css — the Fable seat's refinement layer. Loads after bevel.css and the
2
+ inherited base-astra.css / base-parent.css. Organised by component. */
3
+
4
+ /* ============================ FRAME ============================ */
5
+ [hidden]{display:none!important}
6
+ [data-ref-state]{position:relative}
7
+ body{font-size:15px;line-height:1.5}
8
+ .r-static-note{padding:10px 20px;border-top:1px solid var(--bevel-line);color:var(--bevel-muted);font:11px/1.5 var(--bevel-font-mono)}
9
+ .specimen,.reference-stage{padding:32px 36px 36px;min-height:580px}
10
+ .specimen>header{margin-bottom:26px;padding-bottom:18px;border-bottom:1px solid var(--bevel-line-2)}
11
+ .specimen>header p,.p-header p{color:var(--bevel-ink-2);margin-top:8px;font-size:14px;max-width:520px}
12
+ .p-header{margin-bottom:26px;padding-bottom:18px}
13
+ h1{font-size:36px;line-height:1.08;letter-spacing:-.022em}
14
+ .specimen>header .eyebrow,.p-header .p-eyebrow{color:var(--bevel-brass);letter-spacing:.16em;font-weight:500;margin-bottom:10px}
15
+ .eyebrow,.p-eyebrow{font:500 10px/1.6 var(--bevel-font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--bevel-muted)}
16
+ .bevel-button{font-size:14px;padding:6px 14px;gap:7px}
17
+ .bevel-button--small{font-size:13px;padding:4px 11px;gap:6px}
18
+ .bevel-button svg{flex-shrink:0}
19
+ .bevel-button--quiet{color:var(--bevel-brass)}
20
+ .note,.p-caption{font-size:12.5px;color:var(--bevel-muted)}
21
+ kbd,.f-keys kbd{font:500 10.5px/1 var(--bevel-font-mono);color:var(--bevel-muted);background:var(--bevel-sunk);border:1px solid var(--bevel-line-2);padding:2.5px 5px;white-space:nowrap}
22
+ .f-mono{font-family:var(--bevel-font-mono);font-size:12px}
23
+ mark{background:var(--bevel-brass-soft);color:inherit;padding:0 1px}
24
+
25
+ /* shared: icon button, avatar palette, status line, field error, tags */
26
+ .f-icon-button{width:32px;height:32px;display:inline-grid;place-items:center;padding:0;border:2px solid;border-color:var(--bevel-edge-hi) var(--bevel-edge-lo) var(--bevel-edge-lo) var(--bevel-edge-hi);background:var(--bevel-face);color:var(--bevel-ink);cursor:pointer;flex-shrink:0}
27
+ .f-icon-button:hover{background:color-mix(in srgb,var(--bevel-face),var(--bevel-edge-hi) 45%)}
28
+ .f-icon-button[aria-pressed="true"],.f-icon-button[aria-expanded="true"]{background:var(--bevel-face-in);border-color:var(--bevel-edge-in) var(--bevel-edge-in-hi) var(--bevel-edge-in-hi) var(--bevel-edge-in)}
29
+ .f-icon-button[aria-pressed="true"] svg,.f-icon-button[aria-expanded="true"] svg{translate:1px 1px}
30
+ .f-icon-button:disabled{opacity:.45;cursor:not-allowed}
31
+ .f-avatar{display:inline-grid;place-items:center;width:34px;height:34px;flex-shrink:0;font:500 11px/1 var(--bevel-font-mono);letter-spacing:.02em;border:1px solid var(--bevel-line-2);background:var(--bevel-sunk);color:var(--bevel-ink-2)}
32
+ .f-avatar.small{width:26px;height:26px;font-size:9.5px}
33
+ .f-avatar[data-who="MC"]{background:var(--bevel-brass-soft);color:var(--bevel-brass);border-color:color-mix(in srgb,var(--bevel-brass) 30%,var(--bevel-brass-soft))}
34
+ .f-avatar[data-who="AR"]{background:var(--bevel-teal-soft);color:var(--bevel-teal);border-color:color-mix(in srgb,var(--bevel-teal) 30%,var(--bevel-teal-soft))}
35
+ .f-avatar[data-who="SP"]{background:var(--bevel-sunk);color:var(--bevel-ink-2);border-color:var(--bevel-line-2)}
36
+ .f-avatar[data-who="JP"]{background:var(--bevel-ink);color:var(--bevel-ground);border-color:var(--bevel-ink)}
37
+ .f-avatar-more{background:var(--bevel-surface);color:var(--bevel-muted);border:1px dashed var(--bevel-line-2)}
38
+ .f-status-line{display:flex;align-items:center;gap:10px;margin-top:22px;padding:12px 14px;font-size:13.5px;color:var(--bevel-ink-2);border-top:1px solid var(--bevel-line);padding-left:0;padding-right:0}
39
+ .f-status-line.good{color:var(--bevel-teal)}
40
+ .f-status-line.good strong{color:var(--bevel-teal);font-weight:500}
41
+ .f-status-line.good span{color:var(--bevel-ink-2)}
42
+ .f-status-line .bevel-button{margin-left:auto}
43
+ .f-field-error{display:flex;align-items:center;gap:6px;color:var(--bevel-ox);font-size:12.5px;font-weight:500;margin-top:6px}
44
+ .f-field-error svg{flex-shrink:0}
45
+ .field{font-size:13px;font-weight:500;color:var(--bevel-ink)}
46
+ .f-label-dot{display:inline-block;width:8px;height:8px;background:var(--bevel-muted)}
47
+ [data-label="design"].f-label-dot,[data-label="design"].f-tag{--tone:var(--bevel-brass);--tone-soft:var(--bevel-brass-soft)}
48
+ [data-label="editorial"].f-label-dot,[data-label="editorial"].f-tag{--tone:var(--bevel-teal);--tone-soft:var(--bevel-teal-soft)}
49
+ [data-label="engineering"].f-label-dot,[data-label="engineering"].f-tag{--tone:var(--bevel-ink-2);--tone-soft:var(--bevel-sunk)}
50
+ [data-label="research"].f-label-dot,[data-label="research"].f-tag{--tone:var(--bevel-ox);--tone-soft:var(--bevel-ox-soft)}
51
+ .f-label-dot{background:var(--tone,var(--bevel-muted))}
52
+ .f-tag{display:inline-flex;align-items:center;gap:7px;padding:3px 6px 3px 9px;font-size:12.5px;background:var(--tone-soft);color:var(--bevel-ink);border:1px solid color-mix(in srgb,var(--tone) 28%,var(--tone-soft))}
53
+ .f-tag::before{content:"";width:7px;height:7px;background:var(--tone)}
54
+ .f-tag button{display:inline-grid;place-items:center;width:18px;height:18px;border:0;background:none;color:var(--bevel-muted);padding:0;cursor:pointer}
55
+ .f-tag button:hover{color:var(--bevel-ink)}
56
+ .f-file-icon{display:inline-grid;place-items:center;width:34px;height:34px;background:var(--bevel-sunk);border:1px solid var(--bevel-line);color:var(--bevel-muted);flex-shrink:0}
57
+ .f-archive-card{display:flex;align-items:center;gap:14px;padding:14px 16px;background:var(--bevel-sunk);border:1px solid var(--bevel-line);color:var(--bevel-ink)}
58
+ .f-archive-card>svg{color:var(--bevel-muted);flex-shrink:0}
59
+ .f-archive-card>div{flex:1;min-width:0}
60
+ .f-archive-card strong{display:block;font-weight:500;font-size:14px}
61
+ .f-archive-card small{display:block;color:var(--bevel-muted);margin-top:2px}
62
+ .f-keys{display:inline-flex;gap:6px;align-items:center;font:11px var(--bevel-font-mono);color:var(--bevel-muted);white-space:nowrap}
63
+ .bevel-seg .bevel-button{padding:5px 12px;font-size:13px;font-family:var(--bevel-font-sans);letter-spacing:0;text-transform:none}
64
+ .tk-tag{color:var(--bevel-teal)}.tk-attr{color:var(--bevel-brass)}.tk-str{color:var(--bevel-ink-2)}
65
+ .badge{font:500 11px/1.4 var(--bevel-font-mono);letter-spacing:.02em;padding:3px 7px;background:var(--bevel-sunk);color:var(--bevel-muted);border:1px solid var(--bevel-line)}
66
+ .badge.good{background:var(--bevel-teal-soft);color:var(--bevel-teal);border-color:color-mix(in srgb,var(--bevel-teal) 28%,var(--bevel-teal-soft))}
67
+ .badge.bad{background:var(--bevel-ox-soft);color:var(--bevel-ox);border-color:color-mix(in srgb,var(--bevel-ox) 28%,var(--bevel-ox-soft))}
68
+ .badge.accent{background:var(--bevel-brass-soft);color:var(--bevel-brass);border-color:color-mix(in srgb,var(--bevel-brass) 28%,var(--bevel-brass-soft))}
69
+ .badge svg{vertical-align:-1px;margin-right:3px}
70
+ .p-badge{font:500 10.5px/1.3 var(--bevel-font-mono)}
71
+ table td{color:var(--bevel-ink)}
72
+ th{font:500 10.5px/1.4 var(--bevel-font-mono);letter-spacing:.1em;padding:11px 12px;background:var(--bevel-sunk);border-bottom:1px solid var(--bevel-line-2)}
73
+ td{padding:13px 12px}
74
+
75
+ /* ============================ MODAL ============================ */
76
+ .overlay-scene{background:light-dark(rgb(43 36 27 / .16),rgb(0 0 0 / .55));padding:40px 28px}
77
+ .micromodal__container{border:2px solid var(--bevel-ink);outline:0;box-shadow:var(--bevel-shadow)}
78
+ .micromodal__inner{padding:34px 38px 28px}
79
+ .micromodal__inner .eyebrow{color:var(--bevel-brass);margin-bottom:14px;padding-right:56px}
80
+ .micromodal__heading{font-size:31px;letter-spacing:-.018em;margin-bottom:10px;padding-right:40px}
81
+ .micromodal__content>p{color:var(--bevel-ink-2);margin-bottom:22px;font-size:14px;line-height:1.55}
82
+ .micromodal__content .stack{gap:16px}
83
+ .micromodal__buttons{border-top:1px solid var(--bevel-line);padding-top:18px;margin-top:26px;gap:8px}
84
+ body[data-component="modal"] .micromodal__close,.r-diagonal-close,.f-crop-modal .micromodal__close{position:absolute;top:-2px;right:-2px;width:64px;height:64px;padding:0;border:0;background:none;cursor:pointer;clip-path:polygon(0 4%,0 0,100% 0,100% 100%,94% 100%);z-index:2}
85
+ body[data-component="modal"] .micromodal__close svg,.r-diagonal-close svg,.f-crop-modal .micromodal__close svg{display:block;width:100%;height:100%}
86
+ .micromodal__close-bg{fill:var(--bevel-ink)}
87
+ .micromodal__close:hover .micromodal__close-bg,.r-diagonal-close:hover .micromodal__close-bg{fill:color-mix(in srgb,var(--bevel-ink),var(--bevel-ground) 14%)}
88
+ .micromodal__close-x{fill:var(--bevel-ground)}
89
+ .f-scroll-copy{max-height:200px;overflow:auto;padding-right:16px;scrollbar-width:thin;scrollbar-color:var(--bevel-line-2) transparent;border-bottom:1px solid var(--bevel-line)}
90
+ .f-scroll-copy h3{font-size:17px;margin-top:16px}
91
+ .f-scroll-copy h3:first-child{margin-top:0}
92
+ .f-scroll-copy p{margin:6px 0 14px;color:var(--bevel-ink-2);font-size:14px;line-height:1.55}
93
+ .f-scroll-hint{font:11px var(--bevel-font-mono);color:var(--bevel-muted);margin-top:8px;letter-spacing:.04em}
94
+
95
+ /* ============================ POPOVER MENU ============================ */
96
+ .anchor-stage{min-height:360px;padding:22px 24px;border:1px solid var(--bevel-line)}
97
+ .anchor-stage .row.between strong{font-size:15px;font-weight:500}
98
+ .f-menu-trigger{width:34px;height:34px}
99
+ .anchor-stage .menu{margin-top:6px;width:272px;padding:6px;border-color:var(--bevel-line-2)}
100
+ .menu button{padding:8px 10px;gap:11px;font-size:14px;color:var(--bevel-ink)}
101
+ .menu button>span:first-child{display:inline-grid;place-items:center;width:18px;color:var(--bevel-muted)}
102
+ .menu button:hover{background:var(--bevel-sunk)}
103
+ .menu button:disabled{color:var(--bevel-faint)}
104
+ .menu button:disabled>span:first-child{color:var(--bevel-faint)}
105
+ .menu button.danger,.menu button.danger>span:first-child{color:var(--bevel-ox)}
106
+ .menu button.danger:hover{background:var(--bevel-ox-soft)}
107
+ .menu kbd{margin-left:auto;font-size:10px;padding:2px 5px}
108
+ .menu hr{margin:5px 4px}
109
+ .menu-title{padding:8px 10px 6px;font:500 10px/1.4 var(--bevel-font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--bevel-muted)}
110
+ .f-anchor-note{margin-top:120px;font-size:12.5px;color:var(--bevel-muted);text-align:center}
111
+
112
+ /* ============================ DRAWER ============================ */
113
+ .drawer-scene{grid-template-columns:1fr minmax(320px,430px)}
114
+ .drawer-underlay{padding:32px 26px;color:var(--bevel-ink-2)}
115
+ .drawer-underlay h2{margin-top:6px}
116
+ .drawer-underlay .note{margin:8px 0 18px}
117
+ .f-underlay-row{display:flex;gap:14px;padding:12px 10px;border-top:1px solid var(--bevel-line);font-size:13px;color:var(--bevel-muted)}
118
+ .f-underlay-row:last-child{border-bottom:1px solid var(--bevel-line)}
119
+ .f-underlay-row.is-open{background:var(--bevel-surface);color:var(--bevel-ink);box-shadow:inset 2px 0 var(--bevel-brass)}
120
+ .drawer-panel{position:relative;border-left:2px solid var(--bevel-ink);box-shadow:var(--bevel-shadow)}
121
+ .drawer-panel header{padding:30px 28px 20px}
122
+ .drawer-panel header>.row:first-child{padding-right:48px;min-height:20px}
123
+ .drawer-panel header h2{font-size:28px;margin-top:4px}
124
+ .f-drawer-amount{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-top:14px}
125
+ .f-drawer-amount .mono{font-size:26px;letter-spacing:-.03em}
126
+ .drawer-panel main{padding:22px 28px}
127
+ .f-detail-grid{grid-template-columns:96px 1fr;gap:12px 16px;font-size:13.5px}
128
+ .f-detail-grid dt{font:500 10px/1.8 var(--bevel-font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--bevel-muted)}
129
+ .f-detail-grid dd{color:var(--bevel-ink)}
130
+ .drawer-panel .rule{margin-top:18px;padding-top:16px}
131
+ .drawer-panel .listrow{padding:11px 0;font-size:13.5px}
132
+ .drawer-panel .listrow .mono.muted{width:20px;font-size:11px}
133
+ .drawer-panel .listrow small{color:var(--bevel-muted)}
134
+ .drawer-panel footer{padding:16px 28px}
135
+ .drawer-panel footer small{color:var(--bevel-muted)}
136
+ body[data-component="drawer"] .specimen .rule.row{margin-top:18px}
137
+
138
+ /* ============================ POPCONFIRM ============================ */
139
+ .p-panel{padding:22px 24px}
140
+ .f-popconfirm-trigger{width:34px;height:34px}
141
+ .p-popconfirm{position:relative;margin:14px 0 0 auto;padding:18px 20px 16px;max-width:340px;box-shadow:var(--bevel-shadow)}
142
+ .p-popconfirm::before{content:"";position:absolute;right:11px;top:-7px;width:12px;height:12px;background:var(--bevel-surface);border-top:1px solid var(--bevel-line-2);border-left:1px solid var(--bevel-line-2);transform:rotate(45deg)}
143
+ .f-popconfirm-head{display:flex;align-items:center;gap:9px;color:var(--bevel-ox)}
144
+ .f-popconfirm-head h3{font-size:15.5px;font-weight:600;color:var(--bevel-ink)}
145
+ .p-popconfirm p{font-size:13.5px;color:var(--bevel-ink-2);margin-top:8px;line-height:1.5}
146
+ .p-popconfirm .p-actions{margin-top:16px;gap:8px}
147
+
148
+ /* ============================ COMBOBOX ============================ */
149
+ .p-picker{width:440px}
150
+ .p-field{font-size:13px;font-weight:500}
151
+ .f-search{padding:0 4px 0 12px;gap:10px;min-height:42px;transition:border-color .14s,outline-color .14s}
152
+ .f-search>svg{color:var(--bevel-muted)}
153
+ .f-search input{font-size:15px;padding:8px 0}
154
+ .f-search.is-open{border-color:var(--bevel-brass);outline:2px solid var(--bevel-brass);outline-offset:1px}
155
+ .f-combo-toggle{width:30px;height:30px;border-width:1px;border-color:transparent;background:none}
156
+ .f-combo-toggle svg{transition:transform .14s}
157
+ .f-combo-toggle[aria-expanded="true"]{background:none;border-color:transparent}
158
+ .f-combo-toggle[aria-expanded="true"] svg{transform:rotate(180deg);translate:0}
159
+ .p-options{padding:5px;border-color:var(--bevel-line-2);box-shadow:var(--bevel-shadow)}
160
+ .p-option{padding:8px 10px;gap:12px}
161
+ .p-option[aria-selected="true"]{background:var(--bevel-sunk);box-shadow:inset 2px 0 var(--bevel-brass)}
162
+ .p-option[aria-selected="true"]>svg{color:var(--bevel-brass)}
163
+ .p-person strong{font-size:14px;font-weight:500;color:var(--bevel-ink)}
164
+ .p-person strong mark{background:var(--bevel-brass-soft);color:var(--bevel-brass);font-weight:600}
165
+ .p-person small{font-size:12px}
166
+ .f-empty{padding:26px 18px;color:var(--bevel-muted)}
167
+ .f-empty>svg{color:var(--bevel-faint);margin-bottom:10px}
168
+ .f-empty h3{font-size:15px;font-weight:500;margin-bottom:4px;color:var(--bevel-ink)}
169
+ .f-empty p{max-width:32ch;margin:0 auto;font-size:13px}
170
+ .f-empty .bevel-button{margin-top:14px}
171
+ .p-picker-foot{padding:10px 12px;font-size:10.5px}
172
+
173
+ /* ============================ MULTI-SELECT ============================ */
174
+ .f-tag-field{display:flex;flex-wrap:wrap;gap:8px;align-items:center;min-height:48px;padding:8px 10px;background:var(--bevel-surface);border:1px solid var(--bevel-line-2)}
175
+ .f-tag-field .p-row{gap:8px}
176
+ .f-tag-field.is-open{border-color:var(--bevel-brass);outline:2px solid var(--bevel-brass);outline-offset:1px}
177
+ .f-tag-field [data-tag-placeholder]{color:var(--bevel-faint);font-size:14px;padding-left:2px}
178
+ .f-tag-popover{margin-top:6px;box-shadow:var(--bevel-shadow)}
179
+ .f-tag-popover .p-search{padding:0 12px;gap:10px;min-height:40px;border-color:var(--bevel-line-2)}
180
+ .f-tag-popover .p-search input{font-size:14px;padding:8px 0}
181
+ .f-tag-popover .p-search svg{color:var(--bevel-muted)}
182
+ .f-tag-popover .p-options{box-shadow:none}
183
+ .f-tag-popover .p-option{padding:7px 10px}
184
+ .f-tag-popover .bevel-checkbox{gap:10px;font-size:14px}
185
+ .f-tag-popover .bevel-checkbox .f-label-dot{margin-right:2px}
186
+ body[data-component="multi-select-picker"] .p-picker-foot{border:0;padding:12px 2px 0}
187
+
188
+ /* ============================ SELECTABLE CARDS ============================ */
189
+ .choice{padding:18px 22px;gap:16px;align-items:flex-start}
190
+ .choice strong{font-size:15.5px;font-weight:500;color:var(--bevel-ink)}
191
+ .choice p{font-size:13.5px;color:var(--bevel-ink-2);margin:5px 0 10px}
192
+ .choice:has(:checked){background:color-mix(in srgb,var(--bevel-brass-soft) 60%,var(--bevel-surface));box-shadow:inset 3px 0 var(--bevel-brass)}
193
+ .choice:has(:disabled){opacity:.7}
194
+ .choice:has(:disabled) strong{color:var(--bevel-muted)}
195
+ .choice .bevel-radio__ring,.choice .bevel-checkbox__box{margin-top:1px}
196
+ .choice .badge svg{color:var(--bevel-muted)}
197
+
198
+ /* ============================ UPLOAD DROPZONE ============================ */
199
+ .p-dropzone{border:1px dashed var(--bevel-line-2);padding:34px 20px;transition:padding .14s}
200
+ .p-dropzone>svg{color:var(--bevel-brass);margin-bottom:10px}
201
+ .p-dropzone h3{font-size:15.5px;font-weight:500}
202
+ .p-dropzone p{margin:5px 0 16px;color:var(--bevel-muted)}
203
+ .p-dropzone.is-compact{display:flex;align-items:center;gap:14px;text-align:left;padding:12px 16px;margin-bottom:6px}
204
+ .p-dropzone.is-compact>svg{margin:0;width:22px;height:22px}
205
+ .p-dropzone.is-compact h3{font-size:14px}
206
+ .p-dropzone.is-compact p{margin:0;flex:1}
207
+ .p-dropzone.is-compact .bevel-button{margin-left:auto}
208
+ .f-upload-row{padding:14px 0;gap:14px}
209
+ .f-upload-row img{width:48px;height:40px;border:1px solid var(--bevel-line-2)}
210
+ .f-upload-row strong{font-size:13.5px;font-weight:500}
211
+ .f-upload-row p{margin-top:2px;font-size:12.5px}
212
+ .p-progress{background:var(--bevel-line);margin-top:9px;height:4px}
213
+ .p-progress span{background:var(--bevel-ink)}
214
+ .f-file-pct{font:500 12px var(--bevel-font-mono);color:var(--bevel-ink)}
215
+ .f-file-state{display:inline-flex;align-items:center;gap:5px;font:500 11px var(--bevel-font-mono);text-transform:uppercase;letter-spacing:.06em}
216
+ .f-file-state.good{color:var(--bevel-teal)}
217
+ .f-file-state.bad{color:var(--bevel-ox)}
218
+ .f-file-actions{display:inline-flex;align-items:center;gap:12px}
219
+ .f-crop-head{margin:20px 0 10px}
220
+ .f-crop-head strong{font-size:14px;font-weight:500}
221
+ .qc-box{box-shadow:0 0 0 1000px rgb(0 0 0 / .5)}
222
+ body[data-component="upload-dropzone"] .p-actions{margin-top:16px;padding-top:14px}
223
+
224
+ /* ============================ INLINE EDIT ============================ */
225
+ .f-inline-wrap{max-width:520px;margin:38px auto 0}
226
+ .inline-title{padding:18px 0;margin-top:22px}
227
+ .inline-title h2{font-size:32px}
228
+ .f-inline-hint{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-top:22px}
229
+ .f-inline-hint .eyebrow{color:var(--bevel-brass)}
230
+ .r-inline-name{position:relative;margin:0;padding:18px 0 16px;min-height:0;font-size:32px;border-top:1px solid var(--bevel-line);border-bottom:2px solid var(--bevel-brass);background:linear-gradient(transparent,transparent);outline:0}
231
+ .r-inline-name::after{content:"";display:inline-block;vertical-align:-4px;height:30px;margin-left:2px;border-left:1.5px solid var(--bevel-ink);animation:f-caret 1s steps(1) infinite}
232
+ @keyframes f-caret{50%{opacity:0}}
233
+ .r-inline-name[aria-invalid="true"]{border-bottom-color:var(--bevel-ox);color:var(--bevel-faint)}
234
+ .r-inline-name[aria-invalid="true"]::after{display:inline-block;border-color:var(--bevel-ox);margin-left:0}
235
+ .r-inline-name .r-placeholder{font-style:italic;color:var(--bevel-faint)}
236
+ body[data-component="inline-edit"] .actions{margin-top:18px}
237
+ .f-inline-saved{margin-top:12px;border:0;padding:0}
238
+ .f-inline-saved span{color:var(--bevel-teal)}
239
+
240
+ /* ============================ SETTINGS ROWS ============================ */
241
+ .f-setting{grid-template-columns:1fr 190px;gap:24px;padding:20px 0;align-items:center}
242
+ .f-setting strong{font-size:15px;font-weight:500;color:var(--bevel-ink)}
243
+ .f-setting p{font-size:13px;color:var(--bevel-ink-2);margin-top:4px;max-width:44ch}
244
+ .f-setting>.bevel-toggle,.f-setting>.bevel-button,.f-setting>.bevel-select{justify-self:end}
245
+ .f-setting .bevel-toggle__label{font-size:13.5px}
246
+ .f-setting .bevel-select{width:190px}
247
+ .f-setting .bevel-select__field{font-size:14px;padding:6px 32px 6px 11px}
248
+ .f-setting>.bevel-button{min-width:120px}
249
+ .f-settings-disabled{opacity:.62}
250
+ .f-locked{color:var(--bevel-muted);font-size:13px;margin-top:20px}
251
+ .f-locked svg{color:var(--bevel-muted)}
252
+
253
+ /* ============================ FORM ERROR SUMMARY ============================ */
254
+ .f-error-summary{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;font-size:13.5px;line-height:1.5}
255
+ .f-error-summary>svg{flex-shrink:0;margin-top:2px}
256
+ .f-error-summary strong{display:block;font-weight:600;color:var(--bevel-ink)}
257
+ .notice.error.f-error-summary{color:var(--bevel-ink)}
258
+ .notice.error.f-error-summary>svg{color:var(--bevel-ox)}
259
+ .notice.success.f-error-summary{color:var(--bevel-ink)}
260
+ .notice.success.f-error-summary>svg{color:var(--bevel-teal)}
261
+ .notice.success.f-error-summary strong{color:var(--bevel-teal)}
262
+ .notice.success.f-error-summary span{color:var(--bevel-ink-2)}
263
+ .f-error-summary ul{margin:6px 0 0;padding-left:18px;display:grid;gap:3px}
264
+ .f-error-summary a{color:var(--bevel-ox);font-weight:500;text-decoration-color:color-mix(in srgb,var(--bevel-ox) 50%,transparent)}
265
+ .f-error-summary a:hover{text-decoration-color:var(--bevel-ox)}
266
+ body[data-component="form-error-summary"] .stack{margin-top:22px;gap:18px}
267
+ .f-field.is-invalid{color:var(--bevel-ox)}
268
+ .f-field .f-field-error{margin-top:0}
269
+ body[data-component="form-error-summary"] .actions{margin-top:22px;padding-top:18px;border-top:1px solid var(--bevel-line)}
270
+
271
+ /* ============================ SPLIT BUTTON ============================ */
272
+ .p-split-button{display:inline-flex;align-items:stretch;height:36px;border:2px solid;border-color:var(--bevel-edge-hi) var(--bevel-edge-lo) var(--bevel-edge-lo) var(--bevel-edge-hi);background:var(--bevel-face)}
273
+ .p-split-button>button{height:32px;min-height:0;border:0;background:var(--bevel-face);color:var(--bevel-ink);box-shadow:none;transform:none;font-size:13.5px;cursor:pointer}
274
+ .p-split-button>.bevel-button{padding:0 12px 0 11px;gap:7px}
275
+ .p-split-button>.bevel-button .bevel-button__label{display:inline-flex;align-items:center;gap:7px}
276
+ .p-split-button>.bevel-button .bevel-button__label svg{color:var(--bevel-muted)}
277
+ .p-split-button>button:hover{background:color-mix(in srgb,var(--bevel-face),var(--bevel-edge-hi) 45%)}
278
+ .f-split-caret{display:inline-grid;place-items:center;width:30px;padding:0}
279
+ .p-split-button[data-divider="line"]>.f-split-caret{border-left:1px solid color-mix(in srgb,var(--bevel-edge-lo) 70%,var(--bevel-ink))}
280
+ .p-split-button[data-divider="inset"]>.f-split-caret{border-left:1px solid var(--bevel-edge-lo);box-shadow:inset 1px 0 var(--bevel-edge-hi)}
281
+ .p-split-button>.f-split-caret[aria-expanded="true"]{background:var(--bevel-face-in);box-shadow:inset 1px 1px var(--bevel-edge-in),inset -1px -1px var(--bevel-edge-in-hi)}
282
+ .p-split-button>.f-split-caret[aria-expanded="true"] svg{transform:rotate(180deg)}
283
+ .p-split-button:has(:disabled){opacity:.5}
284
+ .p-split-button:has(:disabled)>button{cursor:not-allowed}
285
+ .r-split-label{display:flex;align-items:center;gap:8px;font:11px var(--bevel-font-mono);color:var(--bevel-muted);margin-bottom:16px;letter-spacing:.04em}
286
+ .f-variant{display:inline-grid;place-items:center;width:18px;height:18px;border:1px solid var(--bevel-line-2);font-weight:600;color:var(--bevel-ink)}
287
+ .f-split-menu{margin:8px 0 0 auto;width:236px;box-shadow:var(--bevel-shadow)}
288
+ .f-split-menu button{padding:9px 10px;gap:10px}
289
+ .f-split-menu button svg:first-child{color:var(--bevel-muted)}
290
+ .f-split-menu button[aria-checked="true"] svg:last-child{color:var(--bevel-brass)}
291
+ .f-split-menu .p-menu-title{padding:8px 10px 6px}
292
+ .f-split-note{margin-top:38px}
293
+ body[data-component="split-button"] .p-between h2{font-size:26px}
294
+
295
+ /* ============================ SIDEBAR NAV ============================ */
296
+ .p-app-shell{min-height:380px}
297
+ .p-sidebar{position:relative;width:212px}
298
+ .p-sidebar.compact{width:68px}
299
+ .p-sidebar-brand{padding:16px 12px 16px 16px;gap:9px;min-height:64px;align-items:center}
300
+ .p-sidebar-brand>svg{width:18px;height:18px;color:var(--bevel-brass)}
301
+ .p-sidebar-brand strong{font-size:18px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
302
+ .p-sidebar-brand>.r-collapse{width:26px;height:26px;margin-left:auto;flex-shrink:0}
303
+ .p-sidebar.compact .p-sidebar-brand{flex-direction:column;gap:12px;padding:16px 8px}
304
+ .p-sidebar.compact .r-collapse{margin:0}
305
+ .p-sidebar-links{padding:14px 9px}
306
+ .p-sidebar-links .p-eyebrow{padding:0 9px 8px;color:var(--bevel-muted)}
307
+ .p-nav-item{padding:8px 9px;margin:2px 0;font-size:13.5px;color:var(--bevel-ink-2)}
308
+ .p-nav-item svg{color:var(--bevel-muted)}
309
+ .p-nav-item.active{color:var(--bevel-ink);background:var(--bevel-surface);box-shadow:inset 2px 0 var(--bevel-brass),0 0 0 1px var(--bevel-line)}
310
+ .p-nav-item.active svg{color:var(--bevel-ink)}
311
+ .f-count{font:500 10.5px var(--bevel-font-mono);color:var(--bevel-muted);background:var(--bevel-sunk);border:1px solid var(--bevel-line);padding:1px 5px}
312
+ .p-nav-item.active .f-count{color:var(--bevel-ink);background:var(--bevel-brass-soft);border-color:color-mix(in srgb,var(--bevel-brass) 25%,var(--bevel-brass-soft))}
313
+ .p-sidebar.compact .p-nav-item{justify-content:center;padding:10px 0}
314
+ .p-sidebar footer.r-identity{gap:10px;padding:12px 12px 12px 14px;border-top:1px solid var(--bevel-line-2);font-size:12px;position:relative}
315
+ .r-identity>span:nth-child(2){flex:1;min-width:0}
316
+ .r-identity strong{display:block;font-size:13px;font-weight:500;color:var(--bevel-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
317
+ .r-identity small{display:block;font-size:11px;color:var(--bevel-muted);margin-top:1px}
318
+ .f-identity-more{display:inline-grid;place-items:center;width:22px;height:22px;border:0;background:none;color:var(--bevel-muted);padding:0;cursor:pointer}
319
+ .p-sidebar.compact .r-identity>span:nth-child(2),.p-sidebar.compact .f-identity-more{display:none}
320
+ .p-sidebar.compact footer.r-identity{justify-content:center;padding:12px 8px}
321
+ .p-app-content{padding:22px 26px}
322
+ .p-app-content h2{margin-top:2px}
323
+ .p-app-content>p{margin:8px 0 14px}
324
+ .f-doc-row{padding:14px 0;gap:14px}
325
+ .f-doc-row>svg:first-child{color:var(--bevel-muted)}
326
+ .f-doc-row strong{font-size:14px;font-weight:500;color:var(--bevel-ink)}
327
+ .f-doc-row p{font-size:12px;margin-top:2px}
328
+ .f-doc-row>svg:last-child{color:var(--bevel-faint)}
329
+
330
+ /* ============================ APP TOOLBAR ============================ */
331
+ .f-toolbar{padding:10px 12px;gap:8px;border-color:var(--bevel-line-2);background:var(--bevel-surface)}
332
+ .f-toolbar-sep{width:1px;height:24px;background:var(--bevel-line-2);margin:0 2px}
333
+ .f-toolbar .f-icon-button{width:34px;height:34px}
334
+ .f-toolbar-seg{display:inline-flex}
335
+ .f-toolbar-seg .f-icon-button+.f-icon-button{margin-left:-2px}
336
+ .f-toolbar-seg .f-icon-button[aria-pressed="true"]{position:relative;z-index:1}
337
+ .f-toolbar .bevel-button{height:34px;padding:0 12px;font-size:13.5px}
338
+ .f-toolbar .bevel-button svg{color:var(--bevel-muted)}
339
+ .f-toolbar-search{display:flex;align-items:center;gap:8px;width:220px;height:34px;padding:0 8px 0 10px;background:var(--bevel-surface);border:1px solid var(--bevel-line-2);color:var(--bevel-muted)}
340
+ .f-toolbar-search input{border:0;background:none;padding:0;font-size:13.5px;flex:1;min-width:0;height:100%;outline:0}
341
+ .f-toolbar-search:focus-within{border-color:var(--bevel-brass);outline:2px solid var(--bevel-brass);outline-offset:1px}
342
+ .f-toolbar-search kbd{font-size:10px}
343
+ body[data-component="app-toolbar"] .rule.row.between{margin-top:22px}
344
+ body[data-component="app-toolbar"] .listrow{padding:12px 0;gap:14px}
345
+ body[data-component="app-toolbar"] .listrow strong{font-size:14px;font-weight:500}
346
+ body[data-component="app-toolbar"] .listrow small{color:var(--bevel-muted)}
347
+ .f-overflow-anchor{display:flex;justify-content:flex-end;margin-top:6px}
348
+ .f-overflow-menu{width:230px;box-shadow:var(--bevel-shadow)}
349
+ .f-overflow-menu button{gap:10px;font-size:13.5px}
350
+ .f-overflow-menu button>span{display:inline-grid;place-items:center;width:18px;color:var(--bevel-muted)}
351
+
352
+ /* ============================ BREADCRUMBS ============================ */
353
+ .f-breadcrumb{gap:8px;font-size:13.5px;padding:12px 0 14px}
354
+ .f-breadcrumb a{color:var(--bevel-brass);text-decoration:none;padding:2px 0}
355
+ .f-breadcrumb a:hover{text-decoration:underline}
356
+ .f-breadcrumb span[aria-hidden]{display:inline-grid;color:var(--bevel-faint)}
357
+ .f-breadcrumb strong{font-weight:500;color:var(--bevel-ink)}
358
+ .f-crumb-more{display:none;border:1px solid var(--bevel-line-2);background:var(--bevel-surface);color:var(--bevel-muted);font:600 13px/1 var(--bevel-font-mono);padding:3px 7px 5px;cursor:pointer}
359
+ .f-crumb-more-sep{display:none}
360
+ body[data-component="breadcrumbs"] .specimen>div[style]{padding-top:32px!important}
361
+ body[data-component="breadcrumbs"] .specimen h1{font-size:40px}
362
+ body[data-component="breadcrumbs"] .specimen p.muted{color:var(--bevel-ink-2);font-size:15px}
363
+ body[data-component="breadcrumbs"] .rule.row{margin-top:24px}
364
+ body[data-component="breadcrumbs"] .rule.row small{color:var(--bevel-muted)}
365
+
366
+ /* ============================ PAGINATION ============================ */
367
+ .f-pager-row{margin-top:18px;padding-top:16px;gap:14px}
368
+ .f-pager-row small{font:12px var(--bevel-font-mono);color:var(--bevel-muted)}
369
+ .f-pagination{gap:4px}
370
+ .f-pagination .bevel-button{min-width:34px;height:34px;padding:0 8px;font:500 13px var(--bevel-font-mono)}
371
+ .f-pagination .bevel-button svg{color:var(--bevel-ink)}
372
+ .f-pagination .bevel-button:disabled svg{color:var(--bevel-muted)}
373
+ .f-pagination .current{background:var(--bevel-face-in);border-color:var(--bevel-edge-in) var(--bevel-edge-in-hi) var(--bevel-edge-in-hi) var(--bevel-edge-in);color:var(--bevel-ink)}
374
+ .f-pagination .current .bevel-button__label{translate:1px 1px}
375
+ .f-page-gap{display:inline-grid;place-items:center;min-width:24px;height:34px;color:var(--bevel-faint);font:13px var(--bevel-font-mono);letter-spacing:.1em}
376
+ body[data-component="pagination"] .note{margin-top:14px}
377
+
378
+ /* ============================ TREE VIEW ============================ */
379
+ .p-tree{padding:6px 8px 8px;max-width:480px}
380
+ .p-tree-head{padding:12px 10px 12px;margin-bottom:6px}
381
+ .p-tree summary{display:flex;align-items:center;gap:8px;padding:0 8px;height:28px;margin:4px 0;font-size:14px;font-weight:500;color:var(--bevel-ink);list-style:none}
382
+ .p-tree summary::-webkit-details-marker{display:none}
383
+ .p-tree summary:hover{background:var(--bevel-sunk)}
384
+ .p-tree summary svg{margin:0;color:var(--bevel-muted)}
385
+ .f-tree-caret{display:inline-grid;place-items:center;width:14px;height:14px;color:var(--bevel-muted)}
386
+ .f-tree-caret svg{transition:transform .14s}
387
+ details[open]>summary .f-tree-caret svg{transform:rotate(90deg)}
388
+ .p-tree-children{margin-left:15px;padding-left:12px;border-left:1px solid var(--bevel-line)}
389
+ .p-tree-leaf{display:flex;align-items:center;gap:8px;height:28px;padding:0 8px 0 10px;margin:4px 0;font-size:13.5px;color:var(--bevel-ink-2);border-left:2px solid transparent;line-height:1}
390
+ .p-tree-leaf:hover{background:var(--bevel-sunk)}
391
+ .p-tree-leaf svg{color:var(--bevel-muted)}
392
+ .p-tree-leaf.selected{background:var(--bevel-brass-soft);border-left-color:var(--bevel-brass);color:var(--bevel-ink);font-weight:500}
393
+ .p-tree-leaf.selected svg{color:var(--bevel-brass)}
394
+ .f-tree-open{font-size:9.5px;padding:2px 5px;color:var(--bevel-brass);background:none;border-color:color-mix(in srgb,var(--bevel-brass) 40%,transparent)}
395
+ .p-tree summary .p-badge{font-size:9.5px;padding:1px 5px;margin-left:2px}
396
+ .p-tree-empty{display:flex;align-items:center;gap:8px;height:28px;margin:4px 0 4px 15px;padding:0 10px 0 12px;border-left:1px dashed var(--bevel-line-2);font-size:12.5px;color:var(--bevel-muted)}
397
+ .p-tree-empty svg{color:var(--bevel-faint)}
398
+
399
+ /* ============================ WIZARD SHELL ============================ */
400
+ .f-wizard{grid-template-columns:176px 1fr;gap:34px}
401
+ .wizard-steps{border-right:1px solid var(--bevel-line);padding-right:22px;position:relative}
402
+ .wizard-step{position:relative;padding:0 0 26px 40px;color:var(--bevel-muted);font-size:13px;line-height:1.35}
403
+ .wizard-step::before{content:"";position:absolute;left:14px;top:30px;bottom:-2px;width:1px;background:var(--bevel-line-2)}
404
+ .wizard-step:last-child::before{display:none}
405
+ .wizard-step b{position:absolute;left:0;top:-1px;display:grid;place-items:center;width:30px;height:30px;margin:0;border:1px solid var(--bevel-line-2);font:500 12px/1 var(--bevel-font-mono);color:var(--bevel-muted);background:var(--bevel-surface)}
406
+ .wizard-step[data-step="done"] b{color:var(--bevel-teal);border-color:color-mix(in srgb,var(--bevel-teal) 45%,var(--bevel-line-2));background:var(--bevel-teal-soft)}
407
+ .wizard-step[data-step="done"]{color:var(--bevel-ink-2)}
408
+ .wizard-step[data-step="done"]::before{background:var(--bevel-teal)}
409
+ .wizard-step.current{color:var(--bevel-ink);font-weight:600}
410
+ .wizard-step.current b{background:var(--bevel-ink);color:var(--bevel-ground);border-color:var(--bevel-ink);box-shadow:0 0 0 3px var(--bevel-brass-soft)}
411
+ .f-step-note{display:block;margin-top:3px;font:400 11px var(--bevel-font-mono);color:var(--bevel-muted);letter-spacing:.02em}
412
+ .wizard-step[data-step="done"] .f-step-note{color:var(--bevel-teal)}
413
+ .wizard-step.current .f-step-note{color:var(--bevel-brass)}
414
+ .f-wizard>div:last-child .eyebrow{color:var(--bevel-brass)}
415
+ .f-wizard h2{font-size:27px;margin-top:6px}
416
+ .f-wizard-lede{font-size:14px;margin:10px 0 22px;color:var(--bevel-ink-2)}
417
+ .f-wizard .actions{margin-top:22px;padding-top:18px;border-top:1px solid var(--bevel-line)}
418
+ .f-wizard .note{margin-top:14px}
419
+ .f-wizard .badge.good svg{color:var(--bevel-teal)}
420
+
421
+ /* ============================ TOAST STACK ============================ */
422
+ .f-toast-stage{padding:22px;min-height:330px;justify-content:flex-end;align-items:flex-end;gap:10px}
423
+ .f-toast{width:400px;padding:14px 12px 14px 16px;gap:12px;border-left-width:3px;box-shadow:var(--bevel-shadow);flex-wrap:nowrap}
424
+ .f-toast .p-toast-icon{padding-top:1px;color:var(--bevel-brass)}
425
+ .f-toast.success .p-toast-icon{color:var(--bevel-teal)}
426
+ .f-toast.error .p-toast-icon{color:var(--bevel-ox)}
427
+ .f-toast h3{font-size:14px;font-weight:600;color:var(--bevel-ink)}
428
+ .f-toast p{font-size:12.5px;color:var(--bevel-ink-2);margin-top:3px}
429
+ .f-toast-action{margin-top:10px;height:26px;padding:0 9px;font-size:12px}
430
+ .f-toast-action svg{color:var(--bevel-muted)}
431
+ .f-toast-close{width:24px;height:24px;display:inline-grid;place-items:center;border:0;background:none;color:var(--bevel-muted);padding:0;cursor:pointer;flex-shrink:0;margin:-2px -2px 0 0}
432
+ .f-toast-close:hover{color:var(--bevel-ink);background:var(--bevel-sunk)}
433
+
434
+ /* ============================ PERSISTENT BANNER ============================ */
435
+ .f-banner{border-top:0;border-left:3px solid var(--bevel-brass);padding:16px 18px;gap:14px;align-items:center;background:color-mix(in srgb,var(--bevel-brass-soft) 70%,var(--bevel-surface))}
436
+ .f-banner>span:first-child{color:var(--bevel-brass);display:inline-grid;place-items:center;width:36px;height:36px;background:var(--bevel-surface);border:1px solid color-mix(in srgb,var(--bevel-brass) 25%,var(--bevel-line))}
437
+ .f-banner h3{font-size:15px;font-weight:600}
438
+ .f-banner p{font-size:13px;color:var(--bevel-ink-2);margin-top:3px}
439
+ .f-banner-actions{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
440
+ .f-banner-meta{font:10.5px var(--bevel-font-mono);color:var(--bevel-muted);letter-spacing:.02em;white-space:nowrap}
441
+ .f-banner.resolved{border-left-color:var(--bevel-teal);background:color-mix(in srgb,var(--bevel-teal-soft) 70%,var(--bevel-surface))}
442
+ .f-banner.resolved>span:first-child{color:var(--bevel-teal);border-color:color-mix(in srgb,var(--bevel-teal) 25%,var(--bevel-line))}
443
+ .f-banner-page{margin-top:18px;padding:22px 24px}
444
+ .f-banner-page h2{font-size:26px}
445
+ .f-banner-page p{margin-top:10px;font-size:14px}
446
+
447
+ /* ============================ SAVED ============================ */
448
+ .f-saved-page{min-height:580px;padding:32px 36px;position:relative}
449
+ .f-saved-page header{display:flex;align-items:center;justify-content:space-between;gap:20px;padding-bottom:16px;border-bottom:1px solid var(--bevel-line-2)}
450
+ .f-saved-page header .eyebrow{color:var(--bevel-brass)}
451
+ .f-saved-meta{display:inline-flex;gap:10px;align-items:center}
452
+ .f-saved-meta .mono{font-size:11px}
453
+ .f-saved-page article{max-width:480px;margin:48px auto}
454
+ .f-saved-page article .eyebrow{color:var(--bevel-muted)}
455
+ .f-saved-page h1{font:38px/1.12 var(--bevel-font-serif);letter-spacing:-.02em;margin:14px 0 18px}
456
+ .f-saved-page p{font-size:15.5px;line-height:1.7;color:var(--bevel-ink-2);margin:0 0 14px}
457
+ .r-saved-chip{position:absolute;right:16px;bottom:16px;display:inline-flex;align-items:center;gap:6px;padding:4px 12px 4px 10px;border-radius:999px;font:13px/1.6 var(--bevel-font-sans);background:var(--bevel-ink);color:var(--bevel-ground);border:0;box-shadow:var(--bevel-shadow);pointer-events:none}
458
+ .r-saved-chip svg{color:color-mix(in srgb,var(--bevel-teal) 70%,var(--bevel-ground))}
459
+
460
+ /* ============================ CODE BLOCK ============================ */
461
+ .f-code{border-color:var(--bevel-line-2)}
462
+ .f-code .code-head{padding:10px 12px 10px 16px;gap:10px;border-bottom:1px solid var(--bevel-line-2);background:var(--bevel-surface)}
463
+ .f-code-name{display:inline-flex;align-items:center;gap:8px;font:500 12.5px var(--bevel-font-mono);color:var(--bevel-ink)}
464
+ .f-code-name svg{color:var(--bevel-muted)}
465
+ .f-code-meta{font:11px var(--bevel-font-mono);color:var(--bevel-muted)}
466
+ .f-code .bevel-button[aria-pressed="true"]{background:var(--bevel-face-in);border-color:var(--bevel-edge-in) var(--bevel-edge-in-hi) var(--bevel-edge-in-hi) var(--bevel-edge-in)}
467
+ .f-code .bevel-button svg{color:var(--bevel-muted)}
468
+ .f-code-lines{margin:0;padding:14px 0;list-style:none;counter-reset:line;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--bevel-line-2) transparent;font:12.5px/1.9 var(--bevel-font-mono);color:var(--bevel-ink);background:var(--bevel-sunk);white-space:pre}
469
+ .f-code-lines li{counter-increment:line;display:grid;grid-template-columns:44px 1fr;padding:0 18px 0 0;min-width:max-content}
470
+ .f-code-lines li::before{content:counter(line);text-align:right;padding-right:14px;color:var(--bevel-faint);user-select:none;border-right:1px solid var(--bevel-line);margin-right:14px;position:sticky;left:0;background:var(--bevel-sunk)}
471
+ .f-code-lines li:hover{background:color-mix(in srgb,var(--bevel-surface) 50%,var(--bevel-sunk))}
472
+ .f-code-lines.wrap-code{white-space:pre-wrap}
473
+ .f-code-lines.wrap-code li{min-width:0}
474
+ .f-code-lines.wrap-code code{overflow-wrap:anywhere;white-space:pre-wrap}
475
+ .f-code code{font:inherit}
476
+ body[data-component="code-block"] .note{margin-top:14px}
477
+
478
+ /* ============================ DIFF VIEW ============================ */
479
+ .f-diff>header{padding:10px 12px 10px 16px;font:500 12.5px var(--bevel-font-mono);border-bottom:1px solid var(--bevel-line-2)}
480
+ .f-diff>header .p-row{gap:8px}
481
+ .f-diff>header svg{color:var(--bevel-muted)}
482
+ .f-diff-seg .bevel-button{font-size:12.5px;padding:3px 10px}
483
+ .f-diff-seg .bevel-button[aria-pressed="true"]{background:var(--bevel-face-in);border-color:var(--bevel-edge-in) var(--bevel-edge-in-hi) var(--bevel-edge-in-hi) var(--bevel-edge-in)}
484
+ .p-diff-hunk{padding:7px 16px;font-size:11px}
485
+ .f-diff-line{padding:6px 12px;font:12px/1.7 var(--bevel-font-mono);gap:10px;color:var(--bevel-ink)}
486
+ .f-diff-line>span:first-child{width:22px;color:var(--bevel-faint)}
487
+ .f-diff-line>span:nth-child(2){width:12px;text-align:center;font-weight:600}
488
+ .f-diff-line.removed>span:nth-child(2){color:var(--bevel-ox)}
489
+ .f-diff-line.added>span:nth-child(2){color:var(--bevel-teal)}
490
+ .removed{background:color-mix(in srgb,var(--bevel-ox-soft) 70%,var(--bevel-surface))}
491
+ .added{background:color-mix(in srgb,var(--bevel-teal-soft) 70%,var(--bevel-surface))}
492
+ .removed mark{background:color-mix(in srgb,var(--bevel-ox) 30%,transparent);text-decoration:line-through;text-decoration-color:color-mix(in srgb,var(--bevel-ox) 60%,transparent)}
493
+ .added mark{background:color-mix(in srgb,var(--bevel-teal) 32%,transparent)}
494
+ .f-diff-split{display:grid;grid-template-columns:1fr 1fr}
495
+ .f-diff-split section+section{border-left:1px solid var(--bevel-line-2)}
496
+ .f-diff-split h3{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font:500 10.5px/1.4 var(--bevel-font-mono);text-transform:uppercase;letter-spacing:.1em;padding:9px 16px;background:var(--bevel-sunk);border-bottom:1px solid var(--bevel-line);color:var(--bevel-ink-2)}
497
+ .f-diff-split h3 small{font-size:10px;text-transform:none;letter-spacing:0;color:var(--bevel-faint)}
498
+ .f-diff footer{padding:10px 16px;font-size:11px}
499
+
500
+ /* ============================ ACTIVITY FEED ============================ */
501
+ .f-day{display:flex;align-items:center;gap:12px;margin:0 0 16px;color:var(--bevel-brass)}
502
+ .f-day::after{content:"";flex:1;height:1px;background:var(--bevel-line)}
503
+ .f-day+.timeline{margin-top:0}
504
+ .timeline{margin-left:17px;padding-left:28px;border-left:1px solid var(--bevel-line-2);margin-bottom:8px}
505
+ .f-event{padding-bottom:20px;position:relative}
506
+ .f-event .f-avatar{position:absolute;left:-46px;top:-2px;width:34px;height:34px;box-shadow:0 0 0 4px var(--bevel-ground)}
507
+ .f-event-head{display:flex;align-items:baseline;justify-content:space-between;gap:14px;flex-wrap:wrap}
508
+ .f-event-head p{font-size:14px;color:var(--bevel-ink-2);margin:0}
509
+ .f-event-head p strong{color:var(--bevel-ink);font-weight:500}
510
+ .f-event-head time{font:11px var(--bevel-font-mono);color:var(--bevel-muted);margin:0;display:inline}
511
+ .f-event-detail{font-size:13px;color:var(--bevel-muted);margin-top:4px}
512
+ .f-show-more{margin-left:0;margin-top:4px}
513
+ .f-show-more svg{color:var(--bevel-muted)}
514
+ body[data-component="activity-feed"] .timeline+.f-day{margin-top:24px}
515
+
516
+ /* ============================ STAT TILES ============================ */
517
+ .stat-grid{border-color:var(--bevel-line-2)}
518
+ .stat{padding:22px 22px 20px}
519
+ .f-stat-label{color:var(--bevel-muted);margin-bottom:0}
520
+ .stat-value{font-size:38px;letter-spacing:-.05em;margin:10px 0 6px;color:var(--bevel-ink);line-height:1}
521
+ .f-delta{display:inline-flex;align-items:center;gap:4px;font:500 11.5px var(--bevel-font-mono);color:var(--bevel-muted)}
522
+ .f-delta.good{color:var(--bevel-teal)}
523
+ .f-delta.bad{color:var(--bevel-ox)}
524
+ .sparkline{height:40px;margin-top:20px;color:var(--bevel-brass)}
525
+ .f-spark-flat{color:var(--bevel-line-2)}
526
+ .f-stat-foot{margin-top:18px;padding-top:14px}
527
+ .f-stat-foot small{font-size:12.5px;color:var(--bevel-ink-2)}
528
+
529
+ /* ============================ AVATAR GROUP ============================ */
530
+ .f-avatar-stack{display:flex;align-items:center;margin:24px 0;padding-left:5px}
531
+ .f-avatar-stack>*{margin-left:-5px;box-shadow:0 0 0 3px var(--bevel-surface)}
532
+ .f-avatar-stack .f-avatar,.f-avatar-stack .p-avatar-photo{width:42px;height:42px}
533
+ .f-avatar-stack .p-avatar-photo{border:1px solid var(--bevel-line-2);object-fit:cover}
534
+ .f-avatar-stack .p-avatar-wrap{display:inline-flex}
535
+ .p-presence{width:10px;height:10px;right:-1px;bottom:-1px;border:2px solid var(--bevel-surface)}
536
+ .f-avatar-list{gap:0;padding-top:6px;margin-top:6px}
537
+ .f-avatar-list .p-row{gap:12px;padding:10px 0;border-bottom:1px solid var(--bevel-line)}
538
+ .f-avatar-list .p-row:last-child{border-bottom:0}
539
+ .f-avatar-list strong{font-size:13.5px;font-weight:500;color:var(--bevel-ink)}
540
+ .f-avatar-list p{font-size:12px;margin-top:1px}
541
+ .f-presence-dot{display:inline-block;width:7px;height:7px;background:var(--bevel-teal);margin-right:6px;vertical-align:1px}
542
+ body[data-component="avatar-group"] .p-panel h2{font-size:26px}
543
+ body[data-component="avatar-group"] .p-between p{margin-top:5px}
544
+
545
+ /* ============================ SMALL CHARTS ============================ */
546
+ .f-chart text{fill:var(--bevel-muted);font:500 11px var(--bevel-font-mono)}
547
+ .f-chart .grid{stroke:var(--bevel-line)}
548
+ .f-chart .data{fill:var(--bevel-brass)}
549
+ .f-chart .line{stroke:var(--bevel-brass);stroke-width:2.5}
550
+ .f-chart-legend{margin-top:16px;padding-top:14px}
551
+ .f-chart-legend small{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:var(--bevel-ink-2)}
552
+ .f-swatch{display:inline-block;width:9px;height:9px;background:var(--bevel-brass)}
553
+ .f-spark-row{display:flex;align-items:flex-end;gap:36px;margin:8px 0 0}
554
+ .f-spark-figure .stat-value{margin:0 0 6px}
555
+ .f-spark-body{flex:1;min-width:0}
556
+ .f-sparkline{display:block;width:100%;height:64px;margin:0}
557
+ .f-spark-days{display:grid;grid-template-columns:repeat(7,1fr);margin-top:8px;padding-top:8px;border-top:1px solid var(--bevel-line)}
558
+ .f-spark-days span{display:grid;justify-items:center;gap:2px;font:10px var(--bevel-font-mono);text-transform:uppercase;letter-spacing:.06em;color:var(--bevel-faint)}
559
+ .f-spark-days b{font-size:12px;font-weight:500;color:var(--bevel-ink);letter-spacing:0}
560
+ .f-spark-days .is-peak b{color:var(--bevel-brass)}
561
+ body[data-component="small-charts"] .specimen h2{font-size:30px}
562
+
563
+ /* ============================ FILTER BUILDER ============================ */
564
+ body[data-component="filter-builder"] .panel.pad{padding:20px 22px}
565
+ body[data-component="filter-builder"] .panel .row.between{margin-bottom:18px!important}
566
+ body[data-component="filter-builder"] .panel .row.between strong{font-size:15px;font-weight:500}
567
+ .filters{gap:10px}
568
+ .f-filter-row{grid-template-columns:52px 1fr 1fr 1.1fr 32px;gap:8px}
569
+ .f-rule-word{font:500 10.5px var(--bevel-font-mono);letter-spacing:.1em;color:var(--bevel-muted);text-align:right;padding-right:4px}
570
+ .f-filter-row .bevel-select__field{font-size:13px;padding:7px 28px 7px 10px}
571
+ .f-filter-row .bevel-input{font-size:13px;padding:7px 10px}
572
+ .f-rule-remove{width:32px;height:32px;border-color:transparent;background:none;color:var(--bevel-muted)}
573
+ .f-rule-remove:hover{background:var(--bevel-sunk);color:var(--bevel-ink)}
574
+ .f-empty-rules{display:flex;align-items:center;gap:12px;padding:16px 18px;border:1px dashed var(--bevel-line-2);color:var(--bevel-muted);font-size:13.5px}
575
+ .f-empty-rules svg{color:var(--bevel-faint);flex-shrink:0}
576
+ body[data-component="filter-builder"] .actions{margin-top:18px;padding-top:16px;border-top:1px solid var(--bevel-line)}
577
+ body[data-component="filter-builder"] .actions .bevel-button svg{color:var(--bevel-muted)}
578
+ .f-result-label{display:block;margin-bottom:6px}
579
+ body[data-component="filter-builder"] .listrow.between strong{font-size:14.5px;font-weight:500}
580
+ body[data-component="filter-builder"] .listrow.between .mono{font-size:15px}
581
+
582
+ /* ============================ COLUMN MANAGER ============================ */
583
+ .f-column-panel{max-width:470px;margin:auto}
584
+ .f-column-head{padding:18px 20px 16px;border-bottom:1px solid var(--bevel-line)}
585
+ .f-column-head h2{font-size:24px}
586
+ .f-column-head .note{margin-top:6px}
587
+ .f-column-item{padding:8px 12px 8px 10px;gap:10px}
588
+ .f-column-item label{flex:1}
589
+ .f-column-item .bevel-checkbox__label{font-size:14px;color:var(--bevel-ink)}
590
+ .f-column-item:has(:disabled) .bevel-checkbox__label{color:var(--bevel-ink-2)}
591
+ .f-column-item:has(input:not(:checked)) .bevel-checkbox__label{color:var(--bevel-muted)}
592
+ .f-grip{display:inline-grid;place-items:center;width:16px;color:var(--bevel-faint);cursor:grab}
593
+ .f-order-n{display:inline-flex;align-items:center;gap:6px;min-width:18px;font:500 11px var(--bevel-font-mono);color:var(--bevel-muted);justify-content:flex-end}
594
+ .f-order-n i{font:500 9.5px var(--bevel-font-mono);font-style:normal;letter-spacing:.08em;text-transform:uppercase;color:var(--bevel-brass);padding:1px 5px;background:var(--bevel-brass-soft)}
595
+ .f-column-item .badge{font-size:9.5px;padding:2px 6px}
596
+ .f-order-btn{width:28px;height:28px}
597
+ .f-column-item.is-moved{background:color-mix(in srgb,var(--bevel-brass-soft) 45%,var(--bevel-surface));box-shadow:inset 2px 0 var(--bevel-brass)}
598
+ .f-column-foot{display:flex;align-items:center;gap:8px;padding:12px 20px;background:var(--bevel-sunk);color:var(--bevel-muted);font-size:12px}
599
+ .f-column-foot svg{color:var(--bevel-faint);flex-shrink:0}
600
+ .f-order-summary{font:11px var(--bevel-font-mono)}
601
+
602
+ /* ============================ EDITABLE GRID CELLS ============================ */
603
+ .f-grid-table td{vertical-align:middle;padding:0 12px;height:48px}
604
+ .f-grid-table td.numeric{height:48px}
605
+ .f-grid-table tr.is-editing-row td{background:color-mix(in srgb,var(--bevel-brass-soft) 40%,var(--bevel-surface))}
606
+ .f-cell{position:relative}
607
+ .f-cell-button{display:inline-flex;align-items:center;gap:8px;margin:0 -8px 0 0;padding:4px 8px;border:1px dashed transparent;background:none;font:inherit;color:var(--bevel-ink);cursor:text}
608
+ .f-cell-button span{text-decoration:underline dotted var(--bevel-faint);text-underline-offset:4px}
609
+ .f-cell-button svg{color:var(--bevel-faint)}
610
+ .f-cell-button:hover{border-color:var(--bevel-line-2);background:var(--bevel-surface)}
611
+ .f-cell-button:hover svg{color:var(--bevel-brass)}
612
+ .f-cell-editor{display:inline-flex;align-items:stretch;justify-content:flex-end;height:32px;margin-right:-8px;background:var(--bevel-surface);border:1px solid var(--bevel-brass);outline:2px solid var(--bevel-brass);outline-offset:1px}
613
+ .f-cell-prefix{display:inline-grid;place-items:center;padding:0 0 0 8px;color:var(--bevel-muted);font-size:12px}
614
+ .f-cell-input{width:92px;border:0;background:none;padding:0 6px 0 4px;font:13px var(--bevel-font-mono);text-align:right;color:var(--bevel-ink);outline:0;min-width:0}
615
+ .f-cell-editor .f-icon-button{width:28px;height:30px;border-width:0 0 0 1px;border-left:1px solid var(--bevel-line);background:var(--bevel-sunk);color:var(--bevel-muted)}
616
+ .f-cell-editor .f-cell-ok{color:var(--bevel-teal)}
617
+ .f-cell-editor .f-cell-cancel{color:var(--bevel-ox)}
618
+ .f-cell-editor .f-icon-button:hover{background:var(--bevel-face)}
619
+ .f-cell.is-invalid .f-cell-editor{border-color:var(--bevel-ox);outline-color:var(--bevel-ox);background:color-mix(in srgb,var(--bevel-ox-soft) 40%,var(--bevel-surface))}
620
+ .f-cell.is-invalid .f-cell-input{color:var(--bevel-ox)}
621
+ .f-cell-error{position:absolute;right:12px;top:calc(50% + 20px);display:inline-flex;align-items:center;gap:5px;font:500 11px var(--bevel-font-mono);color:var(--bevel-ox);white-space:nowrap;background:var(--bevel-surface);border:1px solid var(--bevel-ox);padding:3px 7px;z-index:1;box-shadow:var(--bevel-shadow)}
622
+ .f-grid-table tr.is-editing-row td.f-cell.is-invalid{height:48px}
623
+ .f-edit-note{display:flex;align-items:center;gap:8px;margin-top:16px}
624
+ .f-edit-note svg{color:var(--bevel-faint)}
625
+ .f-edit-note kbd{margin:0 2px}
626
+
627
+ /* ============================ SPLIT PANES ============================ */
628
+ .f-split-panes{grid-template-columns:minmax(0,var(--split)) 10px minmax(0,1fr);min-height:300px}
629
+ .p-pane{padding:18px 14px}
630
+ .p-pane .p-eyebrow{padding:0 7px 8px}
631
+ .p-pane-divider{background:var(--bevel-face);color:var(--bevel-muted);border-inline:1px solid var(--bevel-line-2);cursor:col-resize}
632
+ .p-pane-divider:hover{background:var(--bevel-face-in)}
633
+ .p-pane-item{margin:2px 0;padding:8px 8px;font-size:13.5px;color:var(--bevel-ink-2);gap:9px;border-left:2px solid transparent}
634
+ .p-pane-item svg{color:var(--bevel-muted)}
635
+ .p-pane-item.active{background:var(--bevel-surface);border-left-color:var(--bevel-brass);color:var(--bevel-ink);font-weight:500}
636
+ .p-pane-item.active svg{color:var(--bevel-brass)}
637
+ .p-pane pre{font:12px/1.8 var(--bevel-font-mono);color:var(--bevel-ink);padding:6px 8px;margin:0}
638
+ .p-pane-detail{padding:22px 26px}
639
+ .p-pane-detail h2{font-size:27px;margin-top:2px}
640
+ .p-pane-detail p{margin-top:12px;font-size:14px;color:var(--bevel-ink-2)}
641
+ .f-pane-byline{margin-top:22px;padding-top:16px;border-top:1px solid var(--bevel-line);gap:10px}
642
+ .f-pane-caption{display:flex;align-items:center;gap:8px;margin-top:14px;font:11px var(--bevel-font-mono);color:var(--bevel-muted)}
643
+
644
+ /* ============================ RICH TEXT TOOLBAR ============================ */
645
+ .f-rt-toolbar{padding:8px;gap:3px;border-color:var(--bevel-line-2);background:var(--bevel-sunk)}
646
+ .f-rt-toolbar .richclay-button{min-width:32px;min-height:32px;padding:0 7px;display:inline-flex;align-items:center;justify-content:center;gap:6px;font-size:14px}
647
+ .f-rt-toolbar .richclay-button[aria-pressed="true"] > *{translate:1px 1px}
648
+ .f-rt-toolbar .richclay-button:disabled{opacity:.45;cursor:not-allowed}
649
+ .f-rt-toolbar [data-richclay-control="blockMenu"]{padding:0 8px 0 11px;font-size:13.5px;min-width:118px;justify-content:space-between}
650
+ .f-rt-toolbar [data-richclay-control="blockMenu"] svg{color:var(--bevel-muted)}
651
+ .f-rt-toolbar [aria-expanded="true"]{background:var(--bevel-face-in);border-color:var(--bevel-edge-in) var(--bevel-edge-in-hi) var(--bevel-edge-in-hi) var(--bevel-edge-in)}
652
+ .f-rt-toolbar .richclay-separator{height:22px;margin:0 5px;border-left:1px solid var(--bevel-line-2)}
653
+ .f-rt-menu{top:38px;left:0;width:210px;padding:5px;box-shadow:var(--bevel-shadow)}
654
+ .f-rt-menu .richclay-menu-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px}
655
+ .f-rt-menu .richclay-menu-item[aria-checked="true"]{background:var(--bevel-sunk);box-shadow:inset 2px 0 var(--bevel-brass)}
656
+ .f-rt-menu .richclay-menu-item svg{color:var(--bevel-brass)}
657
+ .f-rt-p{font-size:14px}.f-rt-h1{font:500 18px var(--bevel-font-serif)}.f-rt-h2{font:500 15.5px var(--bevel-font-serif)}.f-rt-q{font:italic 14px var(--bevel-font-serif);padding-left:8px;border-left:2px solid var(--bevel-brass)}
658
+ .f-rt-editor{padding:28px 30px;min-height:240px;border-color:var(--bevel-line-2);position:relative}
659
+ .f-rt-editor h2{font-size:29px}
660
+ .f-rt-editor p{font-size:14.5px;line-height:1.7;color:var(--bevel-ink-2);margin:14px 0}
661
+ .f-rt-editor p strong{color:var(--bevel-ink)}
662
+ .f-rt-editor blockquote{border-left:2px solid var(--bevel-brass);margin:20px 0;padding-left:18px;font:21px var(--bevel-font-serif);color:var(--bevel-ink)}
663
+ .f-rt-editor a{color:var(--bevel-brass)}
664
+ .f-rt-editor a.is-editing{background:var(--bevel-brass-soft);outline:1px solid var(--bevel-brass);outline-offset:2px}
665
+ .f-rt-link{position:relative;display:block;width:min(100%,360px);margin:16px 0 0;padding:14px 16px 12px;border:1px solid var(--bevel-line-2);background:var(--bevel-surface);box-shadow:var(--bevel-shadow)}
666
+ .f-rt-link::before{content:"";position:absolute;left:22px;top:-7px;width:12px;height:12px;background:var(--bevel-surface);border-top:1px solid var(--bevel-line-2);border-left:1px solid var(--bevel-line-2);transform:rotate(45deg)}
667
+ .f-rt-link-head{display:flex;align-items:center;gap:8px;margin-bottom:12px;color:var(--bevel-muted)}
668
+ .f-rt-link-head .eyebrow{flex:1;color:var(--bevel-ink)}
669
+ .f-rt-link .field{margin-top:10px;display:grid;gap:5px;font-size:12px}
670
+ .f-rt-link .field:first-of-type{margin-top:0}
671
+ .f-rt-link-actions{display:flex;align-items:center;gap:8px;margin-top:14px;padding-top:12px;border-top:1px solid var(--bevel-line)}
672
+ .f-rt-link-actions .bevel-button--quiet{padding-left:4px;color:var(--bevel-ox)}
673
+ .f-rt-link-actions .bevel-button--quiet svg{color:var(--bevel-ox)}
674
+ .f-rt-editor.is-floating{border-top:1px solid var(--bevel-line-2);margin-top:0}
675
+ .f-rt-float{position:relative;display:inline-flex;align-items:center;gap:3px;padding:5px;margin:8px 0 -4px 0;background:var(--bevel-sunk);border:1px solid var(--bevel-line-2);box-shadow:var(--bevel-shadow)}
676
+ .f-rt-float::after{content:"";position:absolute;left:18px;bottom:-7px;width:12px;height:12px;background:var(--bevel-sunk);border-right:1px solid var(--bevel-line-2);border-bottom:1px solid var(--bevel-line-2);transform:rotate(45deg)}
677
+ .f-rt-float .richclay-button{min-width:30px;min-height:30px;padding:0 6px;display:inline-flex;align-items:center;justify-content:center;font-size:14px}
678
+ .f-rt-float .richclay-separator{height:20px;margin:0 4px;border-left:1px solid var(--bevel-line-2)}
679
+ .f-selection{background:color-mix(in srgb,var(--bevel-brass) 28%,var(--bevel-surface));color:var(--bevel-ink);padding:1px 0}
680
+
681
+ /* ============================ HYPERCMS CONTEXT ============================ */
682
+ .hcms-context{grid-template-columns:1fr 360px}
683
+ .hcms-preview{padding:36px 28px}
684
+ .hcms-preview h1{font-size:40px}
685
+ .hcms-preview img{border:1px solid var(--bevel-line-2)}
686
+ .hcms-preview p.muted{color:var(--bevel-ink-2);font-size:14.5px;line-height:1.6}
687
+ .f-hcms-byline{display:flex;align-items:center;gap:10px}
688
+ .f-hcms-byline small{color:var(--bevel-muted)}
689
+ .hcms-shell{border-left:2px solid var(--bevel-ink)}
690
+ .hcms-shell-header{align-items:center;margin-bottom:18px}
691
+ .hcms-shell-eyebrow{color:var(--bevel-brass);letter-spacing:.14em;font-weight:500}
692
+ .hcms-shell-title{font-size:27px}
693
+ .f-hcms-close{width:30px;height:30px}
694
+ .hcms-form{gap:14px}
695
+ .hcms-field{gap:6px}
696
+ .hcms-label{font-size:11.5px;font-weight:500;color:var(--bevel-ink-2)}
697
+ .hcms-field textarea{font-size:13px;padding:7px 9px;min-height:34px;border-color:var(--bevel-line-2)}
698
+ .hcms-object-title,.hcms-array-title{font:500 10.5px/1.4 var(--bevel-font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--bevel-muted);margin-bottom:12px}
699
+ .hcms-array-title .f-count{margin-left:6px;text-transform:none;letter-spacing:0}
700
+ .hcms-object-fields{border-left:1px solid var(--bevel-line-2);padding-left:14px}
701
+ .hcms-card{padding:12px;gap:10px;background:var(--bevel-sunk);border-color:var(--bevel-line-2)}
702
+ .hcms-drag-handle{color:var(--bevel-faint);padding-top:2px}
703
+ .hcms-card-controls{position:static;text-align:right;margin-top:8px}
704
+ .hcms-card-controls .bevel-button{font-size:12px;padding:2px 8px}
705
+ .f-hcms-upload{align-items:center;gap:12px}
706
+ .f-hcms-upload img{width:88px;height:60px;border:1px solid var(--bevel-line-2)}
707
+ .f-hcms-upload small{color:var(--bevel-muted)}
708
+ .hcms-shell-error.f-error-summary{margin-bottom:16px;padding:12px 14px;font-size:13px}
709
+ .hcms-shell-error.f-error-summary strong{font-weight:500;color:var(--bevel-ink)}
710
+ .hcms-error.f-field-error{font-size:11.5px;margin-top:2px}
711
+ .hcms-shell-footer{margin-top:18px;padding-top:16px}
712
+
713
+ /* ============================ QUICKCROP CONTEXT ============================ */
714
+ .p-crop-context{padding:24px;background:light-dark(rgb(43 36 27 / .16),rgb(0 0 0 / .55))}
715
+ .f-crop-modal{width:100%;padding:30px 30px 24px;border:2px solid var(--bevel-ink);box-shadow:var(--bevel-shadow);position:relative}
716
+ .f-crop-modal .p-eyebrow{color:var(--bevel-brass);padding-right:56px}
717
+ .f-crop-modal .f-crop-head{margin:0 0 16px}
718
+ .f-crop-modal .f-crop-head h2{font-size:28px}
719
+ .f-crop-modal .qc-stage{border:1px solid var(--bevel-line-2)}
720
+ .p-crop-size{font-size:10.5px;padding:5px 8px}
721
+ .p-crop-actions{margin-top:18px;gap:14px}
722
+ .f-crop-seg .bevel-button{font:500 12.5px var(--bevel-font-mono);padding:4px 12px}
723
+ .f-crop-note{display:inline-flex;align-items:center;gap:6px}
724
+ .f-crop-note svg{color:var(--bevel-muted)}
725
+ .qc-bar{margin-left:auto}
726
+ .qc-bar .bevel-button svg{color:var(--bevel-muted)}
727
+
728
+ /* ============================ NARROW ============================ */
729
+ @media(max-width:540px){
730
+ .specimen,.reference-stage{padding:24px 20px 28px}
731
+ h1{font-size:31px}
732
+ .specimen>header,.p-header{margin-bottom:20px;padding-bottom:14px}
733
+ .overlay-scene{padding:24px 16px}
734
+ .micromodal__inner{padding:30px 22px 22px}
735
+ .micromodal__heading{font-size:27px}
736
+ .drawer-scene{grid-template-columns:1fr}
737
+ .drawer-underlay{display:none}
738
+ .drawer-panel{border-left:0}
739
+ .drawer-panel header,.drawer-panel main,.drawer-panel footer{padding-left:20px;padding-right:20px}
740
+ .f-detail-grid{grid-template-columns:84px 1fr}
741
+ .anchor-stage{padding:16px}
742
+ .anchor-stage .menu{max-width:100%}
743
+ .p-picker{width:100%}
744
+ .f-setting{grid-template-columns:1fr;gap:12px;padding:16px 0}
745
+ .f-setting>.bevel-toggle,.f-setting>.bevel-button,.f-setting>.bevel-select{justify-self:start}
746
+ .f-setting .bevel-select{width:100%}
747
+ .f-split-note{margin-top:24px}
748
+ body[data-component="split-button"] .p-between{flex-wrap:wrap}
749
+ .p-app-shell{min-height:0}
750
+ .p-sidebar:not(.compact){width:160px}
751
+ .p-sidebar-brand{padding:12px 8px 12px 12px;gap:6px}
752
+ .p-sidebar-brand>svg{display:none}
753
+ .p-sidebar-brand strong{font-size:16px}
754
+ .p-sidebar-brand>.r-collapse{width:24px;height:24px}
755
+ .p-sidebar-links{padding:10px 6px}
756
+ .p-nav-item{font-size:12.5px;gap:7px;padding:7px 7px}
757
+ .p-sidebar footer.r-identity{padding:10px 8px}
758
+ .p-app-content{padding:18px 14px}
759
+ .f-toolbar{gap:6px}
760
+ .f-toolbar .bevel-button{display:none}
761
+ .f-toolbar-search{width:100%;order:9}
762
+ .f-toolbar .spacer{display:none}
763
+ .f-toolbar-more{margin-left:auto}
764
+ .f-crumb-mid{display:none!important}
765
+ .f-crumb-more,.f-crumb-more-sep{display:inline-grid}
766
+ body[data-component="breadcrumbs"] .specimen h1{font-size:32px}
767
+ .f-pager-row{flex-direction:column;align-items:flex-start}
768
+ .f-wizard{grid-template-columns:1fr;gap:18px}
769
+ .wizard-steps{display:flex;gap:6px;border-right:0;border-bottom:1px solid var(--bevel-line);padding:0 0 14px}
770
+ .wizard-step{flex:1;padding:0 0 0 36px;font-size:11.5px}
771
+ .wizard-step::before{display:none}
772
+ .wizard-step b{width:28px;height:28px;top:0}
773
+ .f-step-note{display:none}
774
+ .f-toast-stage{padding:14px;min-height:0}
775
+ .f-toast{width:100%;padding:12px 10px 12px 14px}
776
+ .f-banner{padding:14px 14px 14px 16px;flex-wrap:wrap}
777
+ .f-banner-actions{align-items:flex-start;width:100%}
778
+ .f-saved-page{padding:24px 20px}
779
+ .f-saved-page h1{font-size:32px}
780
+ .f-code .code-head{padding:10px 12px}
781
+ .f-code-meta{display:none}
782
+ .f-diff-split{grid-template-columns:1fr}
783
+ .f-diff-split section+section{border-left:0;border-top:1px solid var(--bevel-line-2)}
784
+ .timeline{margin-left:14px;padding-left:24px}
785
+ .f-event .f-avatar{left:-41px;width:30px;height:30px;font-size:10px}
786
+ .stat-grid{grid-template-columns:1fr}
787
+ .stat{display:grid;grid-template-columns:1fr auto;align-items:center;gap:0 16px;padding:14px 0}
788
+ .stat+.stat{border-left:0;border-top:1px solid var(--bevel-line)}
789
+ .stat .f-stat-label{grid-column:1}
790
+ .stat-value{grid-column:1;margin:4px 0 0;font-size:30px}
791
+ .stat .f-delta{grid-column:2;grid-row:1/3;justify-self:end}
792
+ .stat .sparkline{display:none}
793
+ .f-spark-row{flex-direction:column;align-items:stretch;gap:16px}
794
+ .f-spark-days span{font-size:9px}
795
+ .f-filter-row{grid-template-columns:1fr 1fr 32px;gap:6px}
796
+ .f-filter-row .f-rule-word{grid-column:1/-1;text-align:left;padding:0}
797
+ .f-filter-row .bevel-input{grid-column:1/3}
798
+ .f-filter-row .f-rule-remove{grid-column:3;grid-row:2/4}
799
+ .f-column-item{padding:8px 8px}
800
+ .f-grid-table td{padding:0 8px}
801
+ .f-split-panes{grid-template-columns:minmax(0,38%) 10px minmax(0,1fr)}
802
+ .p-pane{padding:12px 8px}
803
+ .p-pane-item{font-size:12px;padding:7px 6px}
804
+ .p-pane-detail{padding:16px 12px}
805
+ .p-pane-detail h2{font-size:22px}
806
+ .f-rt-editor{padding:20px 18px}
807
+ .f-rt-editor blockquote{font-size:18px}
808
+ .f-rt-toolbar [data-richclay-control="blockMenu"]{min-width:0}
809
+ .hcms-context{grid-template-columns:1fr}
810
+ .hcms-preview{display:none}
811
+ .hcms-shell{border-left:0}
812
+ .p-crop-context{padding:12px}
813
+ .f-crop-modal{padding:24px 18px 18px}
814
+ .f-crop-modal .f-crop-head{flex-wrap:wrap;gap:8px}
815
+ .f-crop-modal .f-crop-head h2{font-size:24px}
816
+ .p-crop-actions{gap:10px}
817
+ .qc-bar{margin-left:0;width:100%;justify-content:flex-end}
818
+ .choice{padding:16px}
819
+ .f-status-line{flex-wrap:wrap}
820
+ .f-inline-wrap{margin-top:24px}
821
+ .inline-title h2,.r-inline-name{font-size:27px}
822
+ .f-toolbar .f-icon-button{width:32px;height:32px}
823
+ }