@conduction/nextcloud-vue 2.79.0 → 2.81.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 (390) hide show
  1. package/dist/esm/components/CnActionButtons/CnActionButtons.vue2.js.map +1 -1
  2. package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js +3 -1
  3. package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js.map +1 -1
  4. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +32 -3
  5. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  6. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +13 -11
  7. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
  8. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +80 -4
  9. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  10. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +95 -91
  11. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  12. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +179 -13
  13. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
  14. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js +52 -16
  15. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
  16. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +96 -4
  17. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  18. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +158 -110
  19. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  20. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js +10 -0
  21. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js.map +1 -0
  22. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js +252 -0
  23. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js.map +1 -0
  24. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js +140 -0
  25. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js.map +1 -0
  26. package/dist/esm/components/CnChipsFieldWidget/index.js +26 -0
  27. package/dist/esm/components/CnChipsFieldWidget/index.js.map +1 -0
  28. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js +10 -0
  29. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js.map +1 -0
  30. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js +354 -0
  31. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js.map +1 -0
  32. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js +172 -0
  33. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js.map +1 -0
  34. package/dist/esm/components/CnChoicePickerWidget/index.js +27 -0
  35. package/dist/esm/components/CnChoicePickerWidget/index.js.map +1 -0
  36. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +1 -1
  37. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -1
  39. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +2 -2
  40. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
  41. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
  42. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +65 -5
  43. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  44. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +2 -1
  45. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  46. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +19 -11
  47. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  48. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +4 -2
  49. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  50. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +134 -4
  51. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  52. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +21 -4
  53. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  54. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +24 -0
  55. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  56. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +43 -4
  57. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  58. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js +1 -1
  59. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js.map +1 -1
  60. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue3.js.map +1 -1
  61. package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue2.js +7 -7
  62. package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue2.js.map +1 -1
  63. package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue3.js.map +1 -1
  64. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +11 -0
  65. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js.map +1 -0
  66. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +867 -0
  67. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -0
  68. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +238 -0
  69. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -0
  70. package/dist/esm/components/CnFactsWidget/index.js +30 -0
  71. package/dist/esm/components/CnFactsWidget/index.js.map +1 -0
  72. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +10 -0
  73. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js.map +1 -0
  74. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +626 -0
  75. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -0
  76. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +396 -0
  77. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -0
  78. package/dist/esm/components/CnFieldListWidget/index.js +29 -0
  79. package/dist/esm/components/CnFieldListWidget/index.js.map +1 -0
  80. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +302 -4
  81. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  82. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +417 -244
  83. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  84. package/dist/esm/components/CnFilesBrowser/filesBrowser.js +101 -1
  85. package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
  86. package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js +141 -1
  87. package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js.map +1 -1
  88. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +65 -17
  89. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  90. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +4 -4
  91. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  92. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +78 -3
  93. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
  94. package/dist/esm/components/CnFormPage/CnFormPage.vue3.js +74 -49
  95. package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
  96. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +333 -73
  97. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  98. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +79 -17
  99. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  100. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js +10 -0
  101. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js.map +1 -0
  102. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js +99 -0
  103. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js.map +1 -0
  104. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js +48 -0
  105. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js.map +1 -0
  106. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js +7 -7
  107. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
  108. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
  109. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js +1 -1
  110. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js.map +1 -1
  111. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +65 -2
  112. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  113. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +6 -2
  114. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  115. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +63 -1
  116. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  117. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +8 -1
  118. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  119. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js +14 -0
  120. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js.map +1 -1
  121. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js +5 -1
  122. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js.map +1 -1
  123. package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js +29 -1
  124. package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js.map +1 -1
  125. package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue3.js.map +1 -1
  126. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js +10 -0
  127. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js.map +1 -0
  128. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js +174 -0
  129. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js.map +1 -0
  130. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js +75 -0
  131. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js.map +1 -0
  132. package/dist/esm/components/CnRadioCardsWidget/index.js +28 -0
  133. package/dist/esm/components/CnRadioCardsWidget/index.js.map +1 -0
  134. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +10 -0
  135. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js.map +1 -0
  136. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +411 -0
  137. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -0
  138. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +178 -0
  139. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -0
  140. package/dist/esm/components/CnRecordListWidget/index.js +31 -0
  141. package/dist/esm/components/CnRecordListWidget/index.js.map +1 -0
  142. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js +10 -0
  143. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js.map +1 -0
  144. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js +222 -0
  145. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js.map +1 -0
  146. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js +64 -0
  147. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js.map +1 -0
  148. package/dist/esm/components/CnSavedViewsWidget/index.js +30 -0
  149. package/dist/esm/components/CnSavedViewsWidget/index.js.map +1 -0
  150. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js +10 -0
  151. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js.map +1 -0
  152. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js +351 -0
  153. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js.map +1 -0
  154. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js +71 -0
  155. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js.map +1 -0
  156. package/dist/esm/components/CnSectionsWidget/index.js +35 -0
  157. package/dist/esm/components/CnSectionsWidget/index.js.map +1 -0
  158. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js.map +1 -1
  159. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js.map +1 -1
  160. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js +10 -0
  161. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js.map +1 -0
  162. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js +347 -0
  163. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js.map +1 -0
  164. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js +184 -0
  165. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js.map +1 -0
  166. package/dist/esm/components/CnSettingsFormWidget/index.js +27 -0
  167. package/dist/esm/components/CnSettingsFormWidget/index.js.map +1 -0
  168. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +81 -2
  169. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
  170. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
  171. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +87 -6
  172. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  173. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +1 -0
  174. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  175. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +84 -1
  176. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
  177. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +85 -41
  178. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
  179. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js +10 -0
  180. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js.map +1 -0
  181. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js +159 -0
  182. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js.map +1 -0
  183. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js +60 -0
  184. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js.map +1 -0
  185. package/dist/esm/components/CnSwitchRowsWidget/index.js +26 -0
  186. package/dist/esm/components/CnSwitchRowsWidget/index.js.map +1 -0
  187. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +168 -7
  188. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  189. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +86 -23
  190. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  191. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js +80 -1
  192. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js.map +1 -1
  193. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js +75 -32
  194. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js.map +1 -1
  195. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js +10 -0
  196. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js.map +1 -0
  197. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +269 -0
  198. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -0
  199. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js +106 -0
  200. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js.map +1 -0
  201. package/dist/esm/components/CnToggleTableWidget/index.js +27 -0
  202. package/dist/esm/components/CnToggleTableWidget/index.js.map +1 -0
  203. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +11 -0
  204. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  205. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +7 -2
  206. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  207. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  208. package/dist/esm/components/CnWidgetObjectTable/dashboardRegistration.js +5 -0
  209. package/dist/esm/components/CnWidgetObjectTable/dashboardRegistration.js.map +1 -1
  210. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js +301 -6
  211. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js.map +1 -1
  212. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js +153 -55
  213. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js.map +1 -1
  214. package/dist/esm/composables/useFormDraft.js +140 -9
  215. package/dist/esm/composables/useFormDraft.js.map +1 -1
  216. package/dist/esm/composables/useListView.js +4 -4
  217. package/dist/esm/composables/useListView.js.map +1 -1
  218. package/dist/esm/index.js +21 -1
  219. package/dist/esm/index.js.map +1 -1
  220. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js +28 -20
  221. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js.map +1 -1
  222. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js +9 -0
  223. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js.map +1 -1
  224. package/dist/esm/integrations/builtin/field-inspection.js +21 -0
  225. package/dist/esm/integrations/builtin/field-inspection.js.map +1 -1
  226. package/dist/esm/integrations/offline/checklistSubmission.js +141 -0
  227. package/dist/esm/integrations/offline/checklistSubmission.js.map +1 -0
  228. package/dist/esm/integrations/offline/fieldCollectionHelpers.js +70 -5
  229. package/dist/esm/integrations/offline/fieldCollectionHelpers.js.map +1 -1
  230. package/dist/esm/integrations/offline/index.js +2 -1
  231. package/dist/esm/integrations/offline/index.js.map +1 -1
  232. package/dist/esm/integrations/offline/offlineDb.js +6 -1
  233. package/dist/esm/integrations/offline/offlineDb.js.map +1 -1
  234. package/dist/esm/integrations/offline/syncReplayService.js +8 -2
  235. package/dist/esm/integrations/offline/syncReplayService.js.map +1 -1
  236. package/dist/esm/l10n/en.json.js +20 -1
  237. package/dist/esm/l10n/en.json.js.map +1 -1
  238. package/dist/esm/l10n/nl.json.js +70 -2
  239. package/dist/esm/l10n/nl.json.js.map +1 -1
  240. package/dist/esm/nextcloud-vue.css +2192 -222
  241. package/dist/esm/utils/contentHeaderLink.js +51 -0
  242. package/dist/esm/utils/contentHeaderLink.js.map +1 -0
  243. package/dist/esm/utils/detailActionModel.js +60 -3
  244. package/dist/esm/utils/detailActionModel.js.map +1 -1
  245. package/dist/esm/utils/facets.js +75 -3
  246. package/dist/esm/utils/facets.js.map +1 -1
  247. package/dist/esm/utils/fetchFilterCounts.js +40 -5
  248. package/dist/esm/utils/fetchFilterCounts.js.map +1 -1
  249. package/dist/esm/utils/fillTemplate.js +120 -0
  250. package/dist/esm/utils/fillTemplate.js.map +1 -0
  251. package/dist/esm/utils/initials.js +32 -0
  252. package/dist/esm/utils/initials.js.map +1 -0
  253. package/dist/esm/utils/libraryWidgetKeys.js +11 -0
  254. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  255. package/dist/esm/utils/objectWrite.js +59 -0
  256. package/dist/esm/utils/objectWrite.js.map +1 -0
  257. package/dist/esm/utils/pageControls.js +81 -0
  258. package/dist/esm/utils/pageControls.js.map +1 -0
  259. package/dist/esm/utils/personalLenses.js +40 -3
  260. package/dist/esm/utils/personalLenses.js.map +1 -1
  261. package/dist/esm/utils/queryPresets.js +96 -0
  262. package/dist/esm/utils/queryPresets.js.map +1 -0
  263. package/dist/esm/utils/resolveFilterTokens.js +12 -1
  264. package/dist/esm/utils/resolveFilterTokens.js.map +1 -1
  265. package/dist/esm/utils/resolveManifestTokens.js +2 -0
  266. package/dist/esm/utils/resolveManifestTokens.js.map +1 -1
  267. package/dist/esm/utils/schema.js +21 -0
  268. package/dist/esm/utils/schema.js.map +1 -1
  269. package/dist/esm/utils/sentinelTokens.js +22 -4
  270. package/dist/esm/utils/sentinelTokens.js.map +1 -1
  271. package/dist/esm/utils/userGroupsPeek.js +91 -0
  272. package/dist/esm/utils/userGroupsPeek.js.map +1 -0
  273. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  274. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  275. package/dist/esm/utils/visibleWhen.js +57 -5
  276. package/dist/esm/utils/visibleWhen.js.map +1 -1
  277. package/dist/esm/utils/widgetDispatch.js +7 -1
  278. package/dist/esm/utils/widgetDispatch.js.map +1 -1
  279. package/dist/esm/utils/widgetVisibility.js +4 -57
  280. package/dist/esm/utils/widgetVisibility.js.map +1 -1
  281. package/dist/nextcloud-vue.cjs.js +19708 -9301
  282. package/dist/nextcloud-vue.cjs.js.map +2 -2
  283. package/dist/nextcloud-vue.css +2192 -222
  284. package/l10n/en.json +20 -1
  285. package/l10n/nl.json +70 -2
  286. package/package.json +2 -1
  287. package/scripts/check-docs-mdx.mjs +108 -0
  288. package/src/components/CnActionButtons/CnActionButtons.vue +2 -0
  289. package/src/components/CnActionsBar/CnActionsBar.md +4 -0
  290. package/src/components/CnActionsBar/CnActionsBar.vue +48 -11
  291. package/src/components/CnAppRoot/CnAppRoot.md +4 -2
  292. package/src/components/CnAppRoot/CnAppRoot.vue +151 -59
  293. package/src/components/CnBannerWidget/CnBannerWidget.vue +244 -23
  294. package/src/components/CnCellRenderer/CnCellRenderer.md +2 -0
  295. package/src/components/CnCellRenderer/CnCellRenderer.vue +235 -5
  296. package/src/components/CnChipsFieldWidget/CnChipsFieldWidget.vue +433 -0
  297. package/src/components/CnChipsFieldWidget/index.js +25 -0
  298. package/src/components/CnChoicePickerWidget/CnChoicePickerWidget.vue +556 -0
  299. package/src/components/CnChoicePickerWidget/index.js +26 -0
  300. package/src/components/CnConversationThread/CnConversationWidget.vue +1 -1
  301. package/src/components/CnDashboardGrid/CnDashboardGrid.vue +2 -2
  302. package/src/components/CnDashboardPage/CnDashboardPage.vue +78 -5
  303. package/src/components/CnDataTable/CnDataTable.vue +22 -12
  304. package/src/components/CnDetailPage/CnDetailPage.md +1 -1
  305. package/src/components/CnDetailPage/CnDetailPage.vue +152 -6
  306. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +66 -0
  307. package/src/components/CnDocumentReviewList/CnDocumentReviewWidget.vue +1 -1
  308. package/src/components/CnFacetSidebar/CnFacetSidebar.vue +7 -7
  309. package/src/components/CnFactsWidget/CnFactsWidget.vue +1190 -0
  310. package/src/components/CnFactsWidget/index.js +29 -0
  311. package/src/components/CnFieldListWidget/CnFieldListWidget.vue +1008 -0
  312. package/src/components/CnFieldListWidget/index.js +28 -0
  313. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +588 -117
  314. package/src/components/CnFilesBrowser/filesBrowser.js +100 -0
  315. package/src/components/CnFilesBrowser/filesBrowserColumns.js +140 -0
  316. package/src/components/CnFormDialog/CnFormDialog.md +9 -3
  317. package/src/components/CnFormDialog/CnFormDialog.vue +69 -21
  318. package/src/components/CnFormPage/CnFormPage.vue +99 -3
  319. package/src/components/CnIndexPage/CnIndexPage.vue +309 -9
  320. package/src/components/CnIndexPage/CnIndexPageWidgets.vue +169 -0
  321. package/src/components/CnIndexSidebar/CnIndexSidebar.vue +7 -7
  322. package/src/components/CnNextStepCard/CnNextStepWidget.vue +1 -1
  323. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +69 -2
  324. package/src/components/CnObjectSidebar/CnFilesTab.vue +70 -1
  325. package/src/components/CnObjectSidebar/CnNotesTab.vue +16 -0
  326. package/src/components/CnPageRenderer/CnPageRenderer.vue +29 -1
  327. package/src/components/CnRadioCardsWidget/CnRadioCardsWidget.vue +313 -0
  328. package/src/components/CnRadioCardsWidget/index.js +27 -0
  329. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +652 -0
  330. package/src/components/CnRecordListWidget/index.js +30 -0
  331. package/src/components/CnSavedViewsWidget/CnSavedViewsWidget.vue +296 -0
  332. package/src/components/CnSavedViewsWidget/index.js +29 -0
  333. package/src/components/CnSectionsWidget/CnSectionsWidget.vue +489 -0
  334. package/src/components/CnSectionsWidget/index.js +34 -0
  335. package/src/components/CnSegmentedControl/CnSegmentedControl.vue +13 -0
  336. package/src/components/CnSettingsFormWidget/CnSettingsFormWidget.vue +555 -0
  337. package/src/components/CnSettingsFormWidget/index.js +26 -0
  338. package/src/components/CnStagesWidget/CnStagesWidget.vue +81 -2
  339. package/src/components/CnStatWidget/CnStatWidget.vue +88 -7
  340. package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +180 -3
  341. package/src/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue +226 -0
  342. package/src/components/CnSwitchRowsWidget/index.js +25 -0
  343. package/src/components/CnTabsWidget/CnTabsWidget.vue +263 -8
  344. package/src/components/CnTasksWidget/CnTasksWidget.vue +175 -15
  345. package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +386 -0
  346. package/src/components/CnToggleTableWidget/index.js +26 -0
  347. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +11 -0
  348. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +7 -2
  349. package/src/components/CnWidgetObjectTable/dashboardRegistration.js +5 -0
  350. package/src/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue +493 -11
  351. package/src/components/index.js +19 -0
  352. package/src/composables/__tests__/useFormDraft.spec.js +69 -0
  353. package/src/composables/useFormDraft.js +139 -8
  354. package/src/composables/useListView.js +4 -4
  355. package/src/css/form-field.css +14 -0
  356. package/src/css/index-page.css +71 -0
  357. package/src/css/kpi-card.css +32 -0
  358. package/src/css/look-board-detail.css +113 -2
  359. package/src/css/look-board-index.css +90 -8
  360. package/src/css/look-board.css +109 -2
  361. package/src/css/table.css +19 -0
  362. package/src/index.js +19 -0
  363. package/src/integrations/builtin/field-inspection/CnFieldInspectionCard.vue +35 -20
  364. package/src/integrations/builtin/field-inspection.js +21 -0
  365. package/src/integrations/offline/checklistSubmission.js +137 -0
  366. package/src/integrations/offline/fieldCollectionHelpers.js +69 -4
  367. package/src/integrations/offline/index.js +3 -0
  368. package/src/integrations/offline/offlineDb.js +6 -1
  369. package/src/integrations/offline/syncReplayService.js +8 -2
  370. package/src/schemas/app-manifest-v2.schema.json +196 -13
  371. package/src/utils/contentHeaderLink.js +48 -0
  372. package/src/utils/detailActionModel.js +59 -2
  373. package/src/utils/facets.js +74 -2
  374. package/src/utils/fetchFilterCounts.js +39 -4
  375. package/src/utils/fillTemplate.js +116 -0
  376. package/src/utils/initials.js +29 -0
  377. package/src/utils/libraryWidgetKeys.js +11 -0
  378. package/src/utils/objectWrite.js +55 -0
  379. package/src/utils/pageControls.js +78 -0
  380. package/src/utils/personalLenses.js +39 -2
  381. package/src/utils/queryPresets.js +93 -0
  382. package/src/utils/resolveFilterTokens.js +14 -1
  383. package/src/utils/resolveManifestTokens.js +2 -0
  384. package/src/utils/schema.js +21 -0
  385. package/src/utils/sentinelTokens.js +22 -4
  386. package/src/utils/userGroupsPeek.js +87 -0
  387. package/src/utils/validateManifestV2.compiled.js +3 -3
  388. package/src/utils/visibleWhen.js +56 -4
  389. package/src/utils/widgetDispatch.js +7 -1
  390. package/src/utils/widgetVisibility.js +7 -56
@@ -79,9 +79,14 @@
79
79
  * counterpart default to one.
80
80
  */
81
81
  .cn-look-board {
82
- /* Page content area: padding, max width, gap between blocks. */
82
+ /* Page content area: padding, max width, gap between blocks. The content
83
+ spans the whole content area (screens-one-scroller-parity): grids grow
84
+ with the window and shrink only when the sidebar takes its share. A
85
+ 1240px cap left dead space right of the content, and on a dashboard,
86
+ which scrolled itself, put the scrollbar beside the content instead of
87
+ at the window edge. */
83
88
  --cn-board-content-padding: 24px 28px;
84
- --cn-board-content-max-width: 1240px;
89
+ --cn-board-content-max-width: none;
85
90
  --cn-board-section-gap: 20px;
86
91
  /* Buttons and inputs. */
87
92
  --cn-board-control-height: 40px;
@@ -121,6 +126,15 @@
121
126
  gap: var(--cn-board-section-gap);
122
127
  }
123
128
 
129
+ /* One scroller: the content area. CnDashboardPage scrolls itself
130
+ (`height: 100%; overflow-y: auto`), which nested a second scrollbar inside
131
+ NcAppContent's; under the board look the page grows with its widgets and
132
+ NcAppContent, which already spans to the window edge, scrolls it. */
133
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) {
134
+ height: auto;
135
+ overflow-y: visible;
136
+ }
137
+
124
138
  .cn-look-board .cn-index-page:not(.cn-look-nextcloud *) .cn-page-header,
125
139
  .cn-look-board .cn-settings-page:not(.cn-look-nextcloud *) .cn-page-header,
126
140
  .cn-look-board .cn-index-page:not(.cn-look-nextcloud *) .cn-index-page__below-header,
@@ -234,6 +248,27 @@
234
248
  gap: 2px;
235
249
  }
236
250
 
251
+ /* No scrollbars inside the navigation (screens-one-scroller-parity).
252
+ NcAppNavigation gives the region above the list `overflow-y: scroll`, an
253
+ always-on track (with arrow buttons on classic scrollbars) beside the
254
+ primary action that has nothing to scroll. It takes its content's height
255
+ instead. A menu taller than the window still scrolls (wheel, touch, focus),
256
+ without drawing a bar of its own; the one visible scrollbar is the page's. */
257
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__body:not(.app-navigation__body--no-list) {
258
+ flex-shrink: 0;
259
+ overflow: visible;
260
+ }
261
+
262
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__list,
263
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__body--no-list {
264
+ scrollbar-width: none;
265
+ }
266
+
267
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__list::-webkit-scrollbar,
268
+ .cn-look-board .app-navigation[data-testid="cn-nav"] .app-navigation__body--no-list::-webkit-scrollbar {
269
+ display: none;
270
+ }
271
+
237
272
  /* The board's vertical rhythm (AppZijbalk): the primary action 20px from the
238
273
  top, the list 20px under it, entries 2px apart. An empty search slot is a
239
274
  flex child too and pushed everything 20px down, so it goes. */
@@ -587,6 +622,78 @@
587
622
  .cn-look-board .cn-cell-renderer__age:not(.cn-look-nextcloud *) {
588
623
  font-weight: 600;
589
624
  }
625
+
626
+ /* ---- Record list on a dashboard card (PtDashboard) ---------------------- */
627
+ /* The dashboard's card body is flush, so the rows carry their own inset: the
628
+ board's card pads 24px at the sides and each row 14px, a soft hairline
629
+ between rows, the title 15px weight 600 and the meta 13px muted. A row is a
630
+ link, but only the hover says so: no underline on any text run, however the
631
+ host styles its links (`!important`, because a host rule such as
632
+ `#content a` outranks any class). The pill and the date sit at the right. */
633
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list {
634
+ padding: 0 24px 10px;
635
+ }
636
+
637
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list--rows .cn-record-list__item + .cn-record-list__item {
638
+ border-top: 1px solid var(--color-border-dark, var(--color-border));
639
+ }
640
+
641
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row {
642
+ padding: 14px 0;
643
+ flex-wrap: wrap;
644
+ gap: 8px 16px;
645
+ }
646
+
647
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row,
648
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row:hover,
649
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row:focus-visible,
650
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row * {
651
+ color: inherit;
652
+ text-decoration: none !important;
653
+ }
654
+
655
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__title {
656
+ color: var(--color-main-text);
657
+ font-size: 15px;
658
+ font-weight: 600;
659
+ }
660
+
661
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__meta {
662
+ color: var(--color-text-maxcontrast);
663
+ font-size: 13px;
664
+ }
665
+
666
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__trailing {
667
+ color: var(--color-text-maxcontrast);
668
+ font-size: 13px;
669
+ font-weight: 600;
670
+ }
671
+
672
+ /* Hover: the whole row takes the hover ground, 8px beyond the text so the
673
+ text does not move. */
674
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link {
675
+ margin-inline: -8px;
676
+ padding-inline: 8px;
677
+ border-radius: 8px;
678
+ }
679
+
680
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link:hover,
681
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link:focus-visible {
682
+ background: var(--color-background-hover);
683
+ }
684
+
685
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link:hover .cn-record-list__title {
686
+ text-decoration: none !important;
687
+ }
688
+
689
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__aside {
690
+ margin-inline-start: auto;
691
+ }
692
+
693
+ /* The board draws no chevron after the pill and date. */
694
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__chevron {
695
+ display: none;
696
+ }
590
697
  /*
591
698
  * The board dialog (screens-dialog-parity, canon section 5).
592
699
  *
@@ -874,6 +981,20 @@
874
981
  min-height: var(--cn-field-height);
875
982
  }
876
983
 
984
+ /* NcTextField draws its input inside `.input-field__main-wrapper`, which has a
985
+ FIXED height (`--default-clickable-area`, 34px on Nextcloud 34) and a 2px
986
+ padding ring for the focus outline. The min-height above makes the input
987
+ 40px, so without this the input overflowed its wrapper by 6px and the help
988
+ line under it, which starts at the wrapper's bottom edge, sat behind the
989
+ input's lower border. NcSelect grows with its content, which is why only
990
+ plain inputs showed it. The wrapper now takes the field height plus its
991
+ padding ring, so the input fits and the help line starts below it.
992
+ @spec openspec/changes/form-draft-on-change-and-help-text-spacing/specs/form-draft-on-change-and-help-text-spacing/spec.md#requirement-help-text-starts-below-every-input */
993
+ .cn-look-board .cn-form-dialog__field .input-field__main-wrapper,
994
+ .cn-look-board .cn-form-page__field .input-field__main-wrapper {
995
+ height: calc(var(--cn-field-height) + 2 * var(--border-width-input-focused, 2px));
996
+ }
997
+
877
998
  .cn-look-board .cn-form-dialog__field textarea,
878
999
  .cn-look-board .cn-form-page__field textarea {
879
1000
  padding: 10px 12px;
@@ -1481,7 +1602,8 @@
1481
1602
  }
1482
1603
 
1483
1604
  /* Filter: a labelled secondary button, 36px, radius 8, with the active count. */
1484
- .cn-look-board .cn-actions-bar__filter-button.button-vue {
1605
+ .cn-look-board .cn-actions-bar__filter-button.button-vue,
1606
+ .cn-look-board .cn-actions-bar__filter-menu .button-vue {
1485
1607
  min-height: 36px;
1486
1608
  height: 36px;
1487
1609
  border-radius: 8px;
@@ -1533,6 +1655,15 @@
1533
1655
  color: var(--color-main-text);
1534
1656
  }
1535
1657
 
1658
+ /* A segment the page cannot open: drawn, as the boards do, but faded and inert. */
1659
+ .cn-look-board .cn-actions-bar--board .cn-actions-bar__view-toggle .cn-actions-bar__view-toggle-btn--disabled,
1660
+ .cn-look-board .cn-actions-bar--board .cn-actions-bar__view-toggle .cn-actions-bar__view-toggle-btn--disabled:hover {
1661
+ background: transparent !important;
1662
+ color: var(--color-text-maxcontrast);
1663
+ opacity: 0.5;
1664
+ cursor: not-allowed;
1665
+ }
1666
+
1536
1667
  /* The search field: 40px, radius 8, not a pill. */
1537
1668
  .cn-look-board .cn-actions-bar--board .cn-actions-bar__search {
1538
1669
  flex: 1 1 260px;
@@ -1680,11 +1811,58 @@
1680
1811
  border-bottom: 0;
1681
1812
  }
1682
1813
 
1683
- /* The selection column: 28px, 18px checkboxes. */
1814
+ /* The table fits its card (screens-index-table-fit-parity). Under the auto
1815
+ layout every one-line cell asked for its whole text up to the 22rem cap, so
1816
+ seven text columns made a 1500px table in a 1118px card at a 1440px
1817
+ viewport: the last columns and the row menus sat past the card's edge. The
1818
+ fixed layout shares the card's width: the selection and menu columns keep
1819
+ their own width, the first data column takes 18%, the others split the
1820
+ rest, and a value that does not fit is cut with an ellipsis (its full text
1821
+ stays in the cell's tooltip). A column's own `width` still wins. */
1822
+ .cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table {
1823
+ table-layout: fixed;
1824
+ width: 100%;
1825
+ }
1826
+
1827
+ .cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th.cn-table-head--title {
1828
+ width: 18%;
1829
+ }
1830
+
1831
+ /* The board's data cells sit 12px apart (PqTickets), the first one 18px from
1832
+ the selection column; the selection and menu columns keep 16px. */
1833
+ .cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th:not(.cn-table-col--checkbox):not(.cn-table-col--actions):not(.cn-table-col--icon),
1834
+ .cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table td:not(.cn-table-col--checkbox):not(.cn-table-col--actions):not(.cn-table-col--icon) {
1835
+ padding-inline: 12px;
1836
+ }
1837
+
1838
+ .cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th.cn-table-head--title,
1839
+ .cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table td.cn-table-col--title {
1840
+ padding-inline-start: 18px;
1841
+ }
1842
+
1843
+ .cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table td > .cn-cell-renderer {
1844
+ display: block;
1845
+ min-width: 0;
1846
+ overflow: hidden;
1847
+ text-overflow: ellipsis;
1848
+ white-space: nowrap;
1849
+ }
1850
+
1851
+ /* A narrow header cuts its label, not its filter funnel. */
1852
+ .cn-look-board .cn-index-page__main--table .cn-table-container--board .cn-data-table th .cn-table-header__sort:has(~ .cn-table-header__filter) {
1853
+ max-width: calc(100% - 26px);
1854
+ }
1855
+
1856
+ /* The selection column: 18px checkboxes, 28px of content after 16px of padding.
1857
+ The box model is set with `!important` and the widths include the padding:
1858
+ Nextcloud's server.css sets `box-sizing: border-box` on everything under
1859
+ `#content[class*="app-"]`, an id selector no class rule outranks, so a plain
1860
+ `content-box` here was ignored and the cell left 12px for the checkbox (the
1861
+ header's checkbox showed as a stray bracket). */
1684
1862
  .cn-look-board .cn-table-container--board .cn-data-table .cn-table-col--checkbox {
1685
- box-sizing: content-box;
1686
- width: 28px;
1687
- min-width: 28px;
1863
+ box-sizing: border-box !important;
1864
+ width: 44px;
1865
+ min-width: 44px;
1688
1866
  padding-inline: 16px 0;
1689
1867
  text-align: start;
1690
1868
  }
@@ -1732,6 +1910,29 @@
1732
1910
  font-size: 13px;
1733
1911
  }
1734
1912
 
1913
+ /* An avatar in the title column (PtAccounts): a 32px chip circle, 10px before
1914
+ the name, the e-mail under the name beside it. The name keeps the title's
1915
+ weight and size, and its underline: an inline-flex box is atomic, so the
1916
+ cell's own underline does not reach it. */
1917
+ .cn-look-board .cn-table-container--board .cn-data-table .cn-cell-renderer__avatar {
1918
+ gap: 10px;
1919
+ }
1920
+
1921
+ .cn-look-board .cn-table-container--board .cn-data-table .cn-cell-renderer__avatar-initials {
1922
+ background: var(--color-background-dark);
1923
+ color: var(--color-main-text);
1924
+ font-size: 12px;
1925
+ }
1926
+
1927
+ .cn-look-board .cn-table-container--board .cn-data-table td.cn-table-col--title .cn-cell-renderer__avatar-name {
1928
+ text-decoration: underline;
1929
+ text-underline-offset: 2px;
1930
+ }
1931
+
1932
+ .cn-look-board .cn-table-container--board.cn-table-container--title-plain .cn-data-table td.cn-table-col--title .cn-cell-renderer__avatar-name {
1933
+ text-decoration: none;
1934
+ }
1935
+
1735
1936
  /* A status pill: 3px 10px, radius 12, 13px weight 600. The colours stay the
1736
1937
  status colour map's. */
1737
1938
  .cn-look-board .cn-table-container--board .cn-data-table .cn-status-badge {
@@ -1742,10 +1943,12 @@
1742
1943
  line-height: 1.4;
1743
1944
  }
1744
1945
 
1745
- /* The row menu column holds one 34px button. */
1946
+ /* The row menu column holds one 34px button between 16px of padding, so 66px
1947
+ border to border (see the selection column for why the box model is forced). */
1746
1948
  .cn-look-board .cn-table-container--board .cn-data-table .cn-table-col--actions {
1747
- width: 34px;
1748
- min-width: 0;
1949
+ box-sizing: border-box !important;
1950
+ width: 66px;
1951
+ min-width: 66px;
1749
1952
  padding-inline: 16px;
1750
1953
  text-align: end;
1751
1954
  }
@@ -2371,6 +2574,25 @@
2371
2574
  white-space: nowrap;
2372
2575
  }
2373
2576
 
2577
+ /* The secondary line of the growing column ("2026-0004" under a case title)
2578
+ is a line of its own with its own ellipsis. The cell does not wrap, so in
2579
+ the board look, where the secondary line is an inline block (the title
2580
+ underline cannot reach an atomic inline box), it stayed on the title's line
2581
+ and ran out of the tile. A full-width float is a block (computed `display:
2582
+ block`) that always starts under the line before it, and, being out of the
2583
+ flow, the cell's underline does not reach it either. The cell is a table
2584
+ cell, which contains its floats, so the row grows to hold the line.
2585
+ @spec openspec/changes/dashboard-tile-text-fits/specs/dashboard-tile-text-fits/spec.md#requirement-the-secondary-line-of-a-narrow-tables-growing-column-sits-under-the-value */
2586
+ .cn-data-table.cn-data-table--fit td.cn-table-col--grow .cn-table-cell__secondary {
2587
+ float: inline-start;
2588
+ clear: both;
2589
+ box-sizing: border-box;
2590
+ width: 100%;
2591
+ overflow: hidden;
2592
+ text-overflow: ellipsis;
2593
+ white-space: nowrap;
2594
+ }
2595
+
2374
2596
  .cn-data-table th {
2375
2597
  background: var(--color-background-dark);
2376
2598
  font-weight: 500;
@@ -3569,6 +3791,38 @@ a.cn-kpi-card--stacked:focus-visible {
3569
3791
  font-weight: 400;
3570
3792
  }
3571
3793
 
3794
+ /* A caption on a line of its own wraps, up to two lines (DqDashboard: "haalden
3795
+ hun termijn, naar doorlooptijd" runs over two lines in a narrow tile). The
3796
+ one-line rule of `.cn-kpi-card__label` is for a caption BESIDE the number,
3797
+ where a second line would push the tile taller; this line has the width of
3798
+ the tile to itself. The clamp is safe here because the element is a plain
3799
+ span, not a flex row (compare the title note above).
3800
+ @spec openspec/changes/dashboard-tile-text-fits/specs/dashboard-tile-text-fits/spec.md#requirement-a-kpi-tiles-caption-and-board-label-wrap-to-two-lines */
3801
+ .cn-kpi-card--stacked .cn-kpi-card__caption-line {
3802
+ display: -webkit-box;
3803
+ -webkit-box-orient: vertical;
3804
+ -webkit-line-clamp: 2;
3805
+ line-clamp: 2;
3806
+ white-space: normal;
3807
+ overflow-wrap: break-word;
3808
+ }
3809
+
3810
+ /* Board look: the label wraps too, up to two lines, beside its icon badge
3811
+ ("Afgehandeld deze maand"). The clamp sits on the label's own span
3812
+ (`cn-kpi-card__title-text`), not on the title row, which stays the flex row
3813
+ that carries the badge or the range select. */
3814
+ .cn-kpi-card--board .cn-kpi-card__title-text {
3815
+ flex: 1 1 auto;
3816
+ min-width: 0;
3817
+ display: -webkit-box;
3818
+ -webkit-box-orient: vertical;
3819
+ -webkit-line-clamp: 2;
3820
+ line-clamp: 2;
3821
+ overflow: hidden;
3822
+ white-space: normal;
3823
+ overflow-wrap: break-word;
3824
+ }
3825
+
3572
3826
  /* The 18px glyph before the label, drawn only on a link tile. */
3573
3827
  .cn-kpi-card--board .cn-kpi-card__title {
3574
3828
  display: flex;
@@ -4861,6 +5115,77 @@ a.cn-kpi-card--board * {
4861
5115
  color: var(--color-text-maxcontrast);
4862
5116
  font-size: 0.9em;
4863
5117
  }
5118
+
5119
+ /* An index page with cards beside its list (`sidePanel`,
5120
+ screens-index-stat-row): the header rows span the page, the toolbar and the
5121
+ list take the first column and the side panel the second (300px, 20px
5122
+ apart), spanning both. Every other child (dialogs, the inline sidebar) sits
5123
+ in a zero-height area after them. The list row is the flexible one, so a
5124
+ side panel taller than the toolbar never opens a gap under the toolbar.
5125
+ Below 1024px the panel moves above the toolbar. */
5126
+ .cn-index-page--with-side-panel {
5127
+ display: grid;
5128
+ grid-template-columns: minmax(0, 1fr) var(--cn-index-side-panel-width, 300px);
5129
+ grid-template-rows: auto auto auto auto minmax(0, 1fr) auto;
5130
+ grid-template-areas:
5131
+ "head head"
5132
+ "below below"
5133
+ "stats stats"
5134
+ "bar side"
5135
+ "body side"
5136
+ "extra extra";
5137
+ column-gap: 20px;
5138
+ align-content: start;
5139
+ }
5140
+
5141
+ .cn-index-page--with-side-panel > * {
5142
+ grid-area: extra;
5143
+ min-width: 0;
5144
+ }
5145
+
5146
+ .cn-index-page--with-side-panel > :first-child {
5147
+ grid-area: head;
5148
+ }
5149
+
5150
+ .cn-index-page--with-side-panel > .cn-index-page__below-header {
5151
+ grid-area: below;
5152
+ }
5153
+
5154
+ .cn-index-page--with-side-panel > .cn-index-page__stat-row {
5155
+ grid-area: stats;
5156
+ }
5157
+
5158
+ .cn-index-page--with-side-panel > .cn-actions-bar {
5159
+ grid-area: bar;
5160
+ }
5161
+
5162
+ .cn-index-page--with-side-panel > .cn-index-page__body {
5163
+ grid-area: body;
5164
+ }
5165
+
5166
+ .cn-index-page--with-side-panel > .cn-index-page__side-panel {
5167
+ grid-area: side;
5168
+ align-self: start;
5169
+ }
5170
+
5171
+ @media (max-width: 1024px) {
5172
+ .cn-index-page--with-side-panel {
5173
+ grid-template-columns: minmax(0, 1fr);
5174
+ grid-template-areas:
5175
+ "head"
5176
+ "below"
5177
+ "stats"
5178
+ "side"
5179
+ "bar"
5180
+ "body"
5181
+ "extra";
5182
+ grid-template-rows: auto auto auto auto auto minmax(0, 1fr) auto;
5183
+ }
5184
+
5185
+ .cn-index-page--with-side-panel > .cn-index-page__side-panel {
5186
+ margin-bottom: 20px;
5187
+ }
5188
+ }
4864
5189
  /* CnIndexSidebar — NcAppSidebar wrapper styles */
4865
5190
 
4866
5191
  /* Tab content: limit height to container so overflow shows a scrollbar */
@@ -5859,6 +6184,61 @@ a.cn-kpi-card--board * {
5859
6184
  margin-bottom: 0;
5860
6185
  }
5861
6186
 
6187
+ /* The breadcrumb is a line of 14px text between the pills and the meta, as
6188
+ the boards draw it (screens-detail-header-row-parity). NcBreadcrumbs grows to
6189
+ the full row and draws each crumb as a 34px tertiary button, which pushed the
6190
+ pills above it and the meta under it. The doubled class outranks its scoped
6191
+ rules. */
6192
+ .cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs.cn-detail-page__breadcrumbs {
6193
+ flex: 0 1 auto;
6194
+ height: auto;
6195
+ min-height: 0;
6196
+ min-width: 0;
6197
+ width: auto;
6198
+ }
6199
+
6200
+ .cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .breadcrumb__crumbs {
6201
+ gap: 8px;
6202
+ margin: 0;
6203
+ min-height: 0;
6204
+ padding: 0;
6205
+ vertical-align: middle;
6206
+ }
6207
+
6208
+ .cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb.vue-crumb {
6209
+ gap: 8px;
6210
+ height: auto;
6211
+ min-height: 0;
6212
+ min-width: 0;
6213
+ }
6214
+
6215
+ .cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb .button-vue.button-vue {
6216
+ background: transparent;
6217
+ border: 0;
6218
+ font-size: 14px;
6219
+ font-weight: 400;
6220
+ height: auto;
6221
+ min-height: 0;
6222
+ min-width: 0;
6223
+ padding: 0;
6224
+ }
6225
+
6226
+ .cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb .button-vue__text {
6227
+ font-weight: inherit;
6228
+ line-height: 20px;
6229
+ padding: 0;
6230
+ }
6231
+
6232
+ /* The list is the link; the record's own crumb is plain muted text. */
6233
+ .cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb .button-vue[aria-current='page'] {
6234
+ color: var(--color-text-maxcontrast);
6235
+ cursor: default;
6236
+ }
6237
+
6238
+ .cn-look-board .cn-detail-page__header-row2 .cn-detail-page__breadcrumbs .vue-crumb__separator {
6239
+ margin: 0;
6240
+ }
6241
+
5862
6242
  .cn-look-board .cn-detail-page__header-dot,
5863
6243
  .cn-look-board .cn-detail-page__header-meta {
5864
6244
  color: var(--color-text-maxcontrast);
@@ -5919,6 +6299,15 @@ a.cn-kpi-card--board * {
5919
6299
  gap: 4px;
5920
6300
  }
5921
6301
 
6302
+ /* No inner scroller: tabs that do not fit the width wrap onto a second row
6303
+ instead of scrolling sideways (the library's default strip), so the strip
6304
+ has no scrollbar, no clipped tab and no fade or chevron to find the rest. */
6305
+ .cn-look-board .cn-tabs--board .cn-tabs__nav {
6306
+ flex-wrap: wrap;
6307
+ overflow: visible;
6308
+ row-gap: 4px;
6309
+ }
6310
+
5922
6311
  .cn-look-board .cn-tabs--board .cn-tabs__nav-item {
5923
6312
  background-color: var(--color-background-dark);
5924
6313
  border: 1px solid var(--color-border-dark);
@@ -6001,6 +6390,22 @@ a.cn-kpi-card--board * {
6001
6390
  border-radius: 0;
6002
6391
  }
6003
6392
 
6393
+ /* A tab that holds a stack (`widgetIds`, screens-relation-pages): the panel
6394
+ draws no frame and no padding; each widget is its own card. The first card
6395
+ joins the open tab (the first-card rule above), the next ones stand 20px
6396
+ apart, as the Overzicht of DqContact and PqOrganisatie draws them. */
6397
+ .cn-look-board .cn-tabs--board.cn-tabs-widget__tabs .cn-tabs__content:has(> .cn-tab:not([hidden]) > .cn-tabs-widget__stack) {
6398
+ background: transparent;
6399
+ border: 0;
6400
+ border-radius: 0;
6401
+ padding: 0;
6402
+ }
6403
+
6404
+ /* The stack's next cards are whole cards, not joined to the strip. */
6405
+ .cn-look-board .cn-tabs--board .cn-tabs__content .cn-tab .cn-tabs-widget__stack-item .cn-widget-wrapper {
6406
+ border-radius: var(--cn-board-card-radius);
6407
+ }
6408
+
6004
6409
  /* ---- Body cards and side cards ----------------------------------------- */
6005
6410
 
6006
6411
  .cn-look-board .cn-detail-page .cn-widget-wrapper,
@@ -6048,12 +6453,28 @@ a.cn-kpi-card--board * {
6048
6453
  padding: 0 0 10px;
6049
6454
  }
6050
6455
 
6051
- .cn-look-board .cn-object-data-widget__label {
6052
- color: var(--color-text-maxcontrast);
6456
+ /* Outranks the component's own `.cn-object-data-widget__label[data-v-...]`
6457
+ (weight 500, 0.85em, which has the same specificity as the look's rule and
6458
+ wins on source order wherever a bundle, such as a companion app's, loads
6459
+ after this stylesheet), through the grid the labels sit in. Measured live:
6460
+ the labels read bold and dark where the boards (DqContact, PqKlant, ShKlant)
6461
+ draw them 13px, regular weight and light grey.
6462
+
6463
+ The colour carries `!important`: a theme (nldesign's element overrides) sets
6464
+ the ink of every `div` outside the header with a selector that has an id in
6465
+ its `:not()`, which no class rule outranks. */
6466
+ .cn-look-board .cn-object-data-widget__grid .cn-object-data-widget__label {
6467
+ color: var(--color-text-maxcontrast) !important;
6053
6468
  font-size: 13px;
6054
6469
  font-weight: 400;
6055
6470
  }
6056
6471
 
6472
+ /* The facts card's labels: the same light grey, regular weight. */
6473
+ .cn-look-board .cn-facts-widget .cn-facts-widget__label {
6474
+ color: var(--color-text-maxcontrast);
6475
+ font-weight: 400;
6476
+ }
6477
+
6057
6478
  .cn-look-board .cn-object-data-widget__value {
6058
6479
  font-weight: 500;
6059
6480
  }
@@ -6080,6 +6501,12 @@ a.cn-kpi-card--board * {
6080
6501
  display: none;
6081
6502
  }
6082
6503
 
6504
+ /* A side card whose widget reports a header action (screens-relation-pages:
6505
+ the "+ Toevoegen" of Contactkanalen and Relaties) keeps that one button. */
6506
+ .cn-look-board .cn-detail-page__side .cn-widget-wrapper__actions:has(.cn-detail-page__catalog-action) {
6507
+ display: flex;
6508
+ }
6509
+
6083
6510
  /* The notice at the top of the side column: radius 12, padding 14px 16px. */
6084
6511
  .cn-look-board .cn-detail-page__side-item--notice .cn-widget-wrapper,
6085
6512
  .cn-look-board .cn-detail-page__side-item--notice .cn-banner-widget,
@@ -6305,6 +6732,15 @@ a.cn-kpi-card--board * {
6305
6732
  font-size: 13px;
6306
6733
  margin: 2px 0 0;
6307
6734
  }
6735
+
6736
+ /* The sidebar's own open toggle (NcAppSidebar's `.app-sidebar__toggle`, drawn
6737
+ when the sidebar is closed) is positioned over the content's top-right
6738
+ corner, which in this look is the header's last button: a stray square icon
6739
+ on "More". The board draws none, so it is hidden on a detail page and the
6740
+ header menu offers "Open sidebar" instead. */
6741
+ .cn-look-board:has(.cn-detail-page) > .app-sidebar__toggle {
6742
+ display: none;
6743
+ }
6308
6744
  /* CnReferencePreview — a reference that shows what it points at. */
6309
6745
 
6310
6746
  .cn-reference-preview {
@@ -9427,11 +9863,31 @@ svg.leaflet-image-layer.leaflet-interactive path {
9427
9863
  font-weight: 700;
9428
9864
  line-height: 1;
9429
9865
  }
9866
+ .cn-cell-renderer__avatar-text[data-v-37d7b88f] {
9867
+ display: flex;
9868
+ flex-direction: column;
9869
+ min-width: 0;
9870
+ }
9430
9871
  .cn-cell-renderer__avatar-name[data-v-37d7b88f] {
9431
9872
  min-width: 0;
9432
9873
  overflow: hidden;
9433
9874
  text-overflow: ellipsis;
9434
9875
  white-space: nowrap;
9876
+ /* The name is the cell's text: it keeps the weight, size and colour the
9877
+ cell sets, as a plain value does. */
9878
+ font: inherit;
9879
+ color: inherit;
9880
+ }
9881
+ .cn-cell-renderer__avatar-secondary[data-v-37d7b88f] {
9882
+ min-width: 0;
9883
+ overflow: hidden;
9884
+ color: var(--color-text-maxcontrast);
9885
+ font-size: 13px;
9886
+ font-weight: 400;
9887
+ line-height: 1.35;
9888
+ text-overflow: ellipsis;
9889
+ text-decoration: none;
9890
+ white-space: nowrap;
9435
9891
  }
9436
9892
 
9437
9893
  /* A date that matched a rule is also set in a heavier weight, so the signal
@@ -9447,6 +9903,77 @@ svg.leaflet-image-layer.leaflet-interactive path {
9447
9903
  .cn-cell-renderer__age[data-v-37d7b88f] {
9448
9904
  white-space: nowrap;
9449
9905
  }
9906
+
9907
+ /* The progress cell (abstract-progress-cell): a 56 x 8 bar, the percentage
9908
+ 8px beside it in the bar's tone, and an optional age badge after them, as
9909
+ PqLeads' Winkans column. The value is bold, so the tone is not the only signal. */
9910
+ .cn-cell-renderer__progress[data-v-37d7b88f] {
9911
+ display: inline-flex;
9912
+ flex-wrap: wrap;
9913
+ align-items: center;
9914
+ gap: 4px 8px;
9915
+ }
9916
+ .cn-cell-renderer__progress-line[data-v-37d7b88f] {
9917
+ display: inline-flex;
9918
+ align-items: center;
9919
+ gap: 8px;
9920
+ white-space: nowrap;
9921
+ }
9922
+ .cn-cell-renderer__progress-bar[data-v-37d7b88f] {
9923
+ display: inline-block;
9924
+ width: 56px;
9925
+ height: 8px;
9926
+ border-radius: 4px;
9927
+ background: var(--color-background-dark);
9928
+ overflow: hidden;
9929
+ }
9930
+ .cn-cell-renderer__progress-fill[data-v-37d7b88f] {
9931
+ display: block;
9932
+ height: 100%;
9933
+ }
9934
+ .cn-cell-renderer__progress-fill--success[data-v-37d7b88f] {
9935
+ background: var(--color-element-success, var(--color-success));
9936
+ }
9937
+ .cn-cell-renderer__progress-fill--warning[data-v-37d7b88f] {
9938
+ background: var(--color-element-warning, var(--color-warning));
9939
+ }
9940
+ .cn-cell-renderer__progress-fill--error[data-v-37d7b88f] {
9941
+ background: var(--color-element-error, var(--color-error));
9942
+ }
9943
+ .cn-cell-renderer__progress-value[data-v-37d7b88f] {
9944
+ font-size: 14px;
9945
+ font-weight: 700;
9946
+ }
9947
+ .cn-cell-renderer__progress-value--success[data-v-37d7b88f] {
9948
+ color: var(--color-text-success, var(--color-success-text));
9949
+ }
9950
+ .cn-cell-renderer__progress-value--warning[data-v-37d7b88f] {
9951
+ color: var(--color-text-warning, var(--color-warning-text));
9952
+ }
9953
+ .cn-cell-renderer__progress-value--error[data-v-37d7b88f] {
9954
+ color: var(--color-text-error, var(--color-error-text));
9955
+ }
9956
+ .cn-cell-renderer__progress-badge[data-v-37d7b88f] {
9957
+ display: inline-block;
9958
+ padding: 3px 10px;
9959
+ border-radius: 12px;
9960
+ font-size: 13px;
9961
+ font-weight: 600;
9962
+ white-space: nowrap;
9963
+ }
9964
+ .cn-cell-renderer__progress-badge--error[data-v-37d7b88f] {
9965
+ color: var(--color-text-error, var(--color-error-text));
9966
+ background: var(--color-error-hover, var(--color-background-dark));
9967
+ background: color-mix(in srgb, var(--color-error) 12%, transparent);
9968
+ }
9969
+ .cn-cell-renderer__progress-badge--warning[data-v-37d7b88f] {
9970
+ color: var(--color-text-warning, var(--color-warning-text));
9971
+ background: color-mix(in srgb, var(--color-warning) 14%, transparent);
9972
+ }
9973
+ .cn-cell-renderer__progress-badge--success[data-v-37d7b88f] {
9974
+ color: var(--color-text-success, var(--color-success-text));
9975
+ background: color-mix(in srgb, var(--color-success) 12%, transparent);
9976
+ }
9450
9977
  .cn-cell-renderer__age--success[data-v-37d7b88f] {
9451
9978
  color: var(--color-text-success, var(--color-success-text));
9452
9979
  }
@@ -9779,6 +10306,25 @@ svg.leaflet-image-layer.leaflet-interactive path {
9779
10306
  white-space: nowrap;
9780
10307
  }
9781
10308
 
10309
+ /* The secondary line of the growing column ("2026-0004" under a case title)
10310
+ is a line of its own with its own ellipsis. The cell does not wrap, so in
10311
+ the board look, where the secondary line is an inline block (the title
10312
+ underline cannot reach an atomic inline box), it stayed on the title's line
10313
+ and ran out of the tile. A full-width float is a block (computed `display:
10314
+ block`) that always starts under the line before it, and, being out of the
10315
+ flow, the cell's underline does not reach it either. The cell is a table
10316
+ cell, which contains its floats, so the row grows to hold the line.
10317
+ @spec openspec/changes/dashboard-tile-text-fits/specs/dashboard-tile-text-fits/spec.md#requirement-the-secondary-line-of-a-narrow-tables-growing-column-sits-under-the-value */
10318
+ .cn-data-table.cn-data-table--fit td.cn-table-col--grow .cn-table-cell__secondary {
10319
+ float: inline-start;
10320
+ clear: both;
10321
+ box-sizing: border-box;
10322
+ width: 100%;
10323
+ overflow: hidden;
10324
+ text-overflow: ellipsis;
10325
+ white-space: nowrap;
10326
+ }
10327
+
9782
10328
  .cn-data-table th {
9783
10329
  background: var(--color-background-dark);
9784
10330
  font-weight: 500;
@@ -14884,6 +15430,70 @@ button.cn-files-card__open[data-v-46f7e3c9]:hover {
14884
15430
  white-space: nowrap;
14885
15431
  color: var(--color-text-maxcontrast);
14886
15432
  }
15433
+ .cn-files-browser__col-select[data-v-f5bdd9e2] {
15434
+ width: 36px;
15435
+ text-align: center;
15436
+ }
15437
+ .cn-files-browser__select[data-v-f5bdd9e2] {
15438
+ width: 18px;
15439
+ height: 18px;
15440
+ margin: 0;
15441
+ accent-color: var(--color-primary-element);
15442
+ }
15443
+ .cn-files-browser__bulk-bar[data-v-f5bdd9e2] {
15444
+ display: flex;
15445
+ flex-wrap: wrap;
15446
+ align-items: center;
15447
+ gap: 8px;
15448
+ padding: 8px 12px;
15449
+ border-radius: var(--border-radius-large);
15450
+ background: var(--color-primary-element-light);
15451
+ }
15452
+ .cn-files-browser__bulk-count[data-v-f5bdd9e2] {
15453
+ font-weight: 600;
15454
+ margin-inline-end: 8px;
15455
+ }
15456
+ .cn-files-browser__facets[data-v-f5bdd9e2] {
15457
+ display: flex;
15458
+ flex-wrap: wrap;
15459
+ align-items: center;
15460
+ gap: 8px 16px;
15461
+ }
15462
+ .cn-files-browser__facet[data-v-f5bdd9e2] {
15463
+ display: flex;
15464
+ flex-wrap: wrap;
15465
+ gap: 6px;
15466
+ }
15467
+ .cn-files-browser__facet-chip[data-v-f5bdd9e2] {
15468
+ display: inline-flex;
15469
+ align-items: center;
15470
+ gap: 6px;
15471
+ min-height: 32px;
15472
+ padding: 0 12px;
15473
+ border: 1px solid var(--color-border-dark);
15474
+ border-radius: var(--border-radius-pill);
15475
+ background: var(--color-main-background);
15476
+ color: var(--color-main-text);
15477
+ cursor: pointer;
15478
+ }
15479
+ .cn-files-browser__facet-chip--active[data-v-f5bdd9e2] {
15480
+ border-color: var(--color-primary-element);
15481
+ background: var(--color-primary-element-light);
15482
+ }
15483
+ .cn-files-browser__group-heading[data-v-f5bdd9e2] {
15484
+ padding: 12px 8px 4px;
15485
+ text-align: start;
15486
+ font-weight: 700;
15487
+ }
15488
+ .cn-files-browser__group-count[data-v-f5bdd9e2] {
15489
+ margin-inline-start: 6px;
15490
+ font-weight: 400;
15491
+ color: var(--color-text-maxcontrast);
15492
+ }
15493
+ .cn-files-browser__no-match[data-v-f5bdd9e2] {
15494
+ padding: 16px 8px;
15495
+ color: var(--color-text-maxcontrast);
15496
+ }
14887
15497
  .cn-files-browser__col-actions[data-v-f5bdd9e2] {
14888
15498
  width: 48px;
14889
15499
  }
@@ -21210,6 +21820,38 @@ a.cn-kpi-card--stacked:focus-visible {
21210
21820
  font-weight: 400;
21211
21821
  }
21212
21822
 
21823
+ /* A caption on a line of its own wraps, up to two lines (DqDashboard: "haalden
21824
+ hun termijn, naar doorlooptijd" runs over two lines in a narrow tile). The
21825
+ one-line rule of `.cn-kpi-card__label` is for a caption BESIDE the number,
21826
+ where a second line would push the tile taller; this line has the width of
21827
+ the tile to itself. The clamp is safe here because the element is a plain
21828
+ span, not a flex row (compare the title note above).
21829
+ @spec openspec/changes/dashboard-tile-text-fits/specs/dashboard-tile-text-fits/spec.md#requirement-a-kpi-tiles-caption-and-board-label-wrap-to-two-lines */
21830
+ .cn-kpi-card--stacked .cn-kpi-card__caption-line {
21831
+ display: -webkit-box;
21832
+ -webkit-box-orient: vertical;
21833
+ -webkit-line-clamp: 2;
21834
+ line-clamp: 2;
21835
+ white-space: normal;
21836
+ overflow-wrap: break-word;
21837
+ }
21838
+
21839
+ /* Board look: the label wraps too, up to two lines, beside its icon badge
21840
+ ("Afgehandeld deze maand"). The clamp sits on the label's own span
21841
+ (`cn-kpi-card__title-text`), not on the title row, which stays the flex row
21842
+ that carries the badge or the range select. */
21843
+ .cn-kpi-card--board .cn-kpi-card__title-text {
21844
+ flex: 1 1 auto;
21845
+ min-width: 0;
21846
+ display: -webkit-box;
21847
+ -webkit-box-orient: vertical;
21848
+ -webkit-line-clamp: 2;
21849
+ line-clamp: 2;
21850
+ overflow: hidden;
21851
+ white-space: normal;
21852
+ overflow-wrap: break-word;
21853
+ }
21854
+
21213
21855
  /* The 18px glyph before the label, drawn only on a link tile. */
21214
21856
  .cn-kpi-card--board .cn-kpi-card__title {
21215
21857
  display: flex;
@@ -21507,6 +22149,59 @@ a.cn-kpi-card--board * {
21507
22149
  gap: var(--cn-kpi-stack-gap, 12px);
21508
22150
  }
21509
22151
 
22152
+ /* Rows layout: the board's "label left, number right" card body. */
22153
+ .cn-stats-block-widget--rows[data-v-4f8583ef] {
22154
+ display: flex;
22155
+ flex-direction: column;
22156
+ gap: 12px;
22157
+ box-sizing: border-box;
22158
+ padding: 20px 22px;
22159
+ }
22160
+ .cn-stats-block-widget__rows-title[data-v-4f8583ef] {
22161
+ margin: 0;
22162
+ font-size: 15px;
22163
+ font-weight: 600;
22164
+ color: var(--color-text-maxcontrast);
22165
+ }
22166
+ .cn-stats-block-widget__rows[data-v-4f8583ef] {
22167
+ display: flex;
22168
+ flex-direction: column;
22169
+ gap: 8px;
22170
+ margin: 0;
22171
+ font-size: 14px;
22172
+ }
22173
+ .cn-stats-block-widget__row[data-v-4f8583ef] {
22174
+ display: flex;
22175
+ align-items: baseline;
22176
+ justify-content: space-between;
22177
+ gap: 16px;
22178
+ }
22179
+ .cn-stats-block-widget__row-label[data-v-4f8583ef] {
22180
+ min-width: 0;
22181
+ margin: 0;
22182
+ overflow: hidden;
22183
+ text-overflow: ellipsis;
22184
+ }
22185
+ .cn-stats-block-widget__row-value[data-v-4f8583ef] {
22186
+ flex: none;
22187
+ margin: 0;
22188
+ font-size: 17px;
22189
+ font-weight: 700;
22190
+ text-align: right;
22191
+ }
22192
+ .cn-stats-block-widget__row-value--success[data-v-4f8583ef] {
22193
+ color: var(--color-text-success, var(--color-success-text));
22194
+ }
22195
+ .cn-stats-block-widget__row-value--warning[data-v-4f8583ef] {
22196
+ color: var(--color-text-warning, var(--color-warning-text));
22197
+ }
22198
+ .cn-stats-block-widget__row-value--error[data-v-4f8583ef] {
22199
+ color: var(--color-text-error, var(--color-error-text));
22200
+ }
22201
+ .cn-stats-block-widget__row-value--primary[data-v-4f8583ef] {
22202
+ color: var(--color-primary-element);
22203
+ }
22204
+
21510
22205
 
21511
22206
  .cn-stats-block-form[data-v-20f3b26f] {
21512
22207
  display: flex;
@@ -22025,6 +22720,20 @@ to { background-position: -200% 0;
22025
22720
  .cn-banner-widget__card[data-v-3531692f] {
22026
22721
  margin: 0;
22027
22722
  }
22723
+ .cn-banner-widget__line[data-v-3531692f] {
22724
+ display: flex;
22725
+ flex-wrap: wrap;
22726
+ align-items: baseline;
22727
+ gap: 4px 20px;
22728
+ }
22729
+ .cn-banner-widget__lead[data-v-3531692f] {
22730
+ font-weight: 700;
22731
+ }
22732
+ .cn-banner-widget__link[data-v-3531692f] {
22733
+ margin-inline-start: auto;
22734
+ font-size: 14px;
22735
+ font-weight: 600;
22736
+ }
22028
22737
  .cn-banner-widget__text--clickable[data-v-3531692f] {
22029
22738
  cursor: pointer;
22030
22739
  text-decoration: underline;
@@ -22108,6 +22817,28 @@ to { background-position: -200% 0;
22108
22817
  margin: 0;
22109
22818
  color: var(--color-text-maxcontrast);
22110
22819
  }
22820
+
22821
+ /* Stacked (PqMijnWerk "Begin hier"): the text, then the action under it. */
22822
+ .cn-banner-widget--stacked[data-v-3531692f] {
22823
+ flex-direction: column;
22824
+ align-items: flex-start;
22825
+ gap: 10px;
22826
+ }
22827
+ .cn-banner-widget--stacked .cn-banner-widget__body[data-v-3531692f] {
22828
+ flex: 0 0 auto;
22829
+ gap: 10px;
22830
+ }
22831
+ .cn-banner-widget--stacked .cn-banner-widget__title[data-v-3531692f] {
22832
+ font-size: 16px;
22833
+ line-height: 1.4;
22834
+ }
22835
+ .cn-banner-widget--stacked .cn-banner-widget__reason[data-v-3531692f] {
22836
+ font-size: 14px;
22837
+ }
22838
+ .cn-banner-widget--stacked .cn-banner-widget__action[data-v-3531692f] {
22839
+ min-height: var(--cn-board-control-height, 40px);
22840
+ font-size: 14px;
22841
+ }
22111
22842
  .cn-banner-widget__actions[data-v-3531692f] {
22112
22843
  display: flex;
22113
22844
  flex-wrap: wrap;
@@ -22279,6 +23010,18 @@ to { background-position: -200% 0;
22279
23010
  box-shadow: 0 1px 2px var(--color-box-shadow);
22280
23011
  }
22281
23012
 
23013
+ /* On a phone (screens-dashboard-phone) the compact group's segments are 44px
23014
+ high touch targets, and the group wraps onto a second row instead of
23015
+ running off the screen. */
23016
+ @media (max-width: 640px) {
23017
+ .cn-segmented-control.cn-segmented-control--compact[data-v-7b344b4f] {
23018
+ flex-wrap: wrap;
23019
+ }
23020
+ .cn-segmented-control.cn-segmented-control--compact .cn-segmented-control__option[data-v-7b344b4f] {
23021
+ min-height: 44px;
23022
+ }
23023
+ }
23024
+
22282
23025
 
22283
23026
  .cn-header-widget[data-v-1b97430f] {
22284
23027
  width: 100%;
@@ -23103,6 +23846,13 @@ button.cn-stepper__step[data-v-19697746] {
23103
23846
  }
23104
23847
 
23105
23848
 
23849
+ .cn-form-page__honeypot {
23850
+ position: absolute;
23851
+ left: -10000px;
23852
+ width: 1px;
23853
+ height: 1px;
23854
+ overflow: hidden;
23855
+ }
23106
23856
  .cn-form-page {
23107
23857
  display: flex;
23108
23858
  flex-direction: column;
@@ -23239,6 +23989,27 @@ button.cn-stepper__step[data-v-19697746] {
23239
23989
  }
23240
23990
 
23241
23991
 
23992
+ .cn-detail-page__catalog-action[data-v-76c1b60f] {
23993
+ align-items: center;
23994
+ background: var(--color-primary-element-light);
23995
+ border: 0;
23996
+ border-radius: 16px;
23997
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
23998
+ cursor: pointer;
23999
+ display: inline-flex;
24000
+ font: inherit;
24001
+ font-size: 13px;
24002
+ font-weight: 700;
24003
+ gap: 6px;
24004
+ min-height: 32px;
24005
+ padding: 0 14px;
24006
+ white-space: nowrap;
24007
+ }
24008
+ .cn-detail-page__catalog-note[data-v-76c1b60f] {
24009
+ color: var(--color-text-maxcontrast);
24010
+ font-size: 14px;
24011
+ white-space: nowrap;
24012
+ }
23242
24013
  .cn-detail-widget-host[data-v-76c1b60f],
23243
24014
  .cn-detail-widget-host[data-v-76c1b60f] > * {
23244
24015
  height: 100%;
@@ -23528,6 +24299,33 @@ button.cn-stepper__step[data-v-19697746] {
23528
24299
  }
23529
24300
 
23530
24301
 
24302
+ /* A stack (`widgetIds`): the panel's widget, then cards 20px apart. */
24303
+ .cn-tabs-widget__stack[data-v-1dbd6122] {
24304
+ display: flex;
24305
+ flex-direction: column;
24306
+ gap: 20px;
24307
+ }
24308
+
24309
+ /* A gridded stack (`columns` / `layout` on the tab): 12 columns, widgets wrap
24310
+ onto the next row, a row's cards as tall as the tallest. Narrow, it is the
24311
+ plain stack again. */
24312
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] {
24313
+ display: grid;
24314
+ grid-template-columns: repeat(12, minmax(0, 1fr));
24315
+ align-items: stretch;
24316
+ }
24317
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] > * {
24318
+ min-width: 0;
24319
+ }
24320
+ @media (max-width: 700px) {
24321
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] {
24322
+ grid-template-columns: minmax(0, 1fr);
24323
+ }
24324
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] > * {
24325
+ grid-column: auto !important;
24326
+ }
24327
+ }
24328
+
23531
24329
  /* The panel is the card; the strip is not inside it. There is no title bar
23532
24330
  above the tabs either: the open tab names the panel, so a title row would
23533
24331
  say the same thing twice and cost a row of height on a card that is mostly
@@ -23644,6 +24442,14 @@ button.cn-stepper__step[data-v-19697746] {
23644
24442
  .cn-tabs-widget__tabs[data-v-1dbd6122] .cn-tab {
23645
24443
  height: 100%;
23646
24444
  }
24445
+
24446
+ /* A list widget's footer Add bleeds through its card's 16px content padding
24447
+ (margin 0 -16px -16px). The panel of a tab pads 12px, so on a tab that
24448
+ holds the list directly the footer stuck out 4px on the right and at the
24449
+ bottom and made the panel scroll. It bleeds exactly the panel's padding. */
24450
+ .cn-tabs-widget__tabs[data-v-1dbd6122] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
24451
+ margin: auto -12px -12px;
24452
+ }
23647
24453
  .cn-tabs-widget__title[data-v-1dbd6122] {
23648
24454
  align-items: center;
23649
24455
  display: inline-flex;
@@ -27599,6 +28405,50 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
27599
28405
  font-variant-numeric: tabular-nums;
27600
28406
  }
27601
28407
 
28408
+ /* List variant, after the dashboard board's My tasks card: a checkbox, the
28409
+ title, the subject on a muted second line and the due date at its right. */
28410
+ .cn-tasks-widget--list .cn-tasks-widget__row[data-v-ff399342] {
28411
+ align-items: flex-start;
28412
+ gap: 12px;
28413
+ padding: 12px 0;
28414
+ }
28415
+ .cn-tasks-widget--list .cn-tasks-widget__name[data-v-ff399342] {
28416
+ font-weight: 400;
28417
+ font-size: 15px;
28418
+ line-height: 1.35;
28419
+ color: var(--color-main-text);
28420
+ }
28421
+ .cn-tasks-widget__check[data-v-ff399342],
28422
+ .cn-tasks-widget__check-spacer[data-v-ff399342] {
28423
+ flex: none;
28424
+ width: 20px;
28425
+ height: 20px;
28426
+ margin: 1px 0 0;
28427
+ }
28428
+ .cn-tasks-widget__check[data-v-ff399342] {
28429
+ accent-color: var(--color-primary-element);
28430
+ cursor: pointer;
28431
+ }
28432
+ .cn-tasks-widget__meta--split[data-v-ff399342] {
28433
+ display: flex;
28434
+ justify-content: space-between;
28435
+ gap: 8px;
28436
+ font-size: 13px;
28437
+ overflow: visible;
28438
+ }
28439
+ .cn-tasks-widget__subject[data-v-ff399342] {
28440
+ min-width: 0;
28441
+ overflow: hidden;
28442
+ text-overflow: ellipsis;
28443
+ }
28444
+ .cn-tasks-widget--list .cn-tasks-widget__due[data-v-ff399342] {
28445
+ font-size: 13px;
28446
+ font-weight: 500;
28447
+ }
28448
+ .cn-tasks-widget--list .cn-tasks-widget__due--overdue[data-v-ff399342] {
28449
+ font-weight: 600;
28450
+ }
28451
+
27602
28452
  /* Overdue: weight AND colour on top of the wording, which already says
27603
28453
  "Overdue by N days" — the signal survives monochrome. */
27604
28454
  .cn-tasks-widget__due--overdue[data-v-ff399342] {
@@ -27610,219 +28460,1214 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
27610
28460
  }
27611
28461
 
27612
28462
 
27613
- .cn-notepad-widget-form[data-v-c752df66] {
28463
+ .cn-sections-widget[data-v-ea4f8722] {
28464
+ min-width: 0;
28465
+ }
28466
+ .cn-sections-widget__column[data-v-ea4f8722] {
27614
28467
  display: flex;
27615
28468
  flex-direction: column;
27616
- gap: 12px;
28469
+ gap: calc(var(--default-grid-baseline, 4px) * 4);
28470
+ min-width: 0;
27617
28471
  }
27618
28472
 
28473
+ /* A main and a side column (the settings boards: 1fr and 418px, 20px apart). */
28474
+ .cn-sections-widget--two-column[data-v-ea4f8722] {
28475
+ display: grid;
28476
+ grid-template-columns: minmax(0, 1fr) minmax(280px, 418px);
28477
+ gap: 20px;
28478
+ align-items: start;
28479
+ }
28480
+ @media (max-width: 1024px) {
28481
+ .cn-sections-widget--two-column[data-v-ea4f8722] {
28482
+ grid-template-columns: minmax(0, 1fr);
28483
+ }
28484
+ }
27619
28485
 
27620
- .cn-notepad-widget {
27621
- display: flex;
27622
- flex-direction: column;
27623
- gap: 4px;
27624
- height: 100%;
27625
- min-height: var(--cn-notepad-min-height, 120px);
28486
+ /* A host page may space every <section>; these sections are spaced by the column gap only. */
28487
+ .cn-sections-widget__section[data-v-ea4f8722] {
28488
+ margin: 0;
28489
+ min-width: 0;
27626
28490
  }
27627
- .cn-notepad-widget__textarea {
27628
- flex: 1 1 auto;
27629
- width: 100%;
27630
- min-height: 80px;
27631
- resize: none;
27632
- border: none;
27633
- background: transparent;
27634
- color: var(--color-main-text);
27635
- font: inherit;
28491
+
28492
+ /* A rule above a section that follows a shown one. */
28493
+ .cn-sections-widget:not(.cn-sections-widget--cards) .cn-sections-widget__section:not(.cn-sections-widget__section--empty) ~ .cn-sections-widget__section[data-v-ea4f8722] {
28494
+ padding-top: calc(var(--default-grid-baseline, 4px) * 4);
28495
+ border-top: 1px solid var(--color-border);
27636
28496
  }
27637
- .cn-notepad-widget__rendered {
27638
- flex: 1 1 auto;
27639
- overflow: auto;
27640
- cursor: text;
28497
+
28498
+ /*
28499
+ * An empty section keeps its host mounted (display: none still mounts it, so
28500
+ * the widget fetches and can fill later) but takes no space, gap or rule.
28501
+ */
28502
+ .cn-sections-widget__section--empty[data-v-ea4f8722] {
28503
+ display: none;
28504
+ }
28505
+ .cn-sections-widget__heading[data-v-ea4f8722] {
28506
+ margin: 0 0 calc(var(--default-grid-baseline, 4px) * 2);
28507
+ font-size: 16px;
28508
+ font-weight: 600;
27641
28509
  color: var(--color-main-text);
27642
28510
  }
27643
- .cn-notepad-widget__status {
27644
- margin: 0;
27645
- min-height: 1.2em;
28511
+ .cn-sections-widget__description[data-v-ea4f8722] {
28512
+ margin: calc(var(--default-grid-baseline, 4px) * -1) 0 calc(var(--default-grid-baseline, 4px) * 3);
27646
28513
  color: var(--color-text-maxcontrast);
27647
- font-size: 0.85em;
27648
28514
  }
27649
- .cn-notepad-widget__status--failed {
27650
- color: var(--color-error-text, var(--color-error));
28515
+
28516
+ /* One card per section. */
28517
+ .cn-sections-widget--cards .cn-sections-widget__column[data-v-ea4f8722] {
28518
+ gap: 20px;
28519
+ }
28520
+ .cn-sections-widget--cards .cn-sections-widget__section[data-v-ea4f8722] {
28521
+ background: var(--color-main-background);
28522
+ border: 1px solid var(--color-border);
28523
+ border-radius: var(--cn-board-card-radius, var(--border-radius-large, 12px));
28524
+ padding: var(--cn-board-card-padding, 16px 20px);
28525
+ }
28526
+ .cn-sections-widget--cards .cn-sections-widget__heading[data-v-ea4f8722] {
28527
+ font-size: 18px;
28528
+ margin-bottom: 12px;
27651
28529
  }
27652
28530
 
27653
28531
 
27654
- .cn-data-form[data-v-10b5a40f] {
28532
+ .cn-facts-widget[data-v-2ca63011] {
27655
28533
  display: flex;
27656
28534
  flex-direction: column;
27657
- gap: 12px;
28535
+ gap: 10px;
28536
+ min-width: 0;
27658
28537
  }
27659
- .cn-data-form__section[data-v-10b5a40f] {
27660
- margin: 8px 0 0;
27661
- font-size: 0.8em;
27662
- text-transform: uppercase;
27663
- letter-spacing: 0.03em;
27664
- color: var(--color-text-maxcontrast);
28538
+ .cn-facts-widget__rows[data-v-2ca63011] {
28539
+ display: grid;
28540
+ grid-template-columns: max-content 1fr;
28541
+ gap: 8px 16px;
28542
+ margin: 0;
28543
+ font-size: 14px;
27665
28544
  }
27666
- .cn-data-form__hint[data-v-10b5a40f] {
27667
- color: var(--color-text-maxcontrast);
27668
- font-size: 0.9em;
28545
+
28546
+ /* Each row is a grid of its own children: the wrapper takes no box. */
28547
+ .cn-facts-widget__row[data-v-2ca63011] {
28548
+ display: contents;
27669
28549
  }
27670
- .cn-data-form__row2[data-v-10b5a40f] {
27671
- display: flex;
27672
- gap: 12px;
27673
- align-items: flex-end;
28550
+
28551
+ /* Nextcloud core styles `dt` and `dd` (text-align end, 12px padding), which
28552
+ pushed the label to the right of its column and added 12px around both. The
28553
+ class is doubled so these resets outrank that rule, and a dossiq-style
28554
+ `:deep()` override in an app is not needed. */
28555
+ .cn-facts-widget__label.cn-facts-widget__label[data-v-2ca63011] {
28556
+ margin: 0;
28557
+ padding: 0;
28558
+ text-align: start;
28559
+ color: var(--color-text-maxcontrast);
27674
28560
  }
27675
- .cn-data-form__row2[data-v-10b5a40f] > * {
27676
- flex: 1;
28561
+ .cn-facts-widget__value.cn-facts-widget__value[data-v-2ca63011] {
28562
+ margin: 0;
28563
+ padding: 0;
28564
+ text-align: start;
28565
+ font-weight: 500;
27677
28566
  min-width: 0;
28567
+ overflow-wrap: anywhere;
27678
28568
  }
27679
- .cn-data-form__layout[data-v-10b5a40f] {
27680
- display: flex;
27681
- align-items: flex-end;
27682
- gap: 12px;
27683
- flex-wrap: wrap;
27684
- }
27685
- .cn-data-form__layout-label[data-v-10b5a40f] {
27686
- align-self: center;
28569
+ .cn-facts-widget__title[data-v-2ca63011] {
28570
+ font-size: 15px;
27687
28571
  font-weight: 600;
27688
- }
27689
- .cn-data-form__presets[data-v-10b5a40f] {
27690
- display: inline-flex;
27691
- border: 1px solid var(--color-border);
27692
- border-radius: var(--border-radius-large, 8px);
27693
- overflow: hidden;
27694
- }
27695
- .cn-data-form__preset[data-v-10b5a40f] {
27696
- border: none;
27697
- background: var(--color-main-background);
27698
28572
  color: var(--color-main-text);
27699
- padding: 6px 12px;
27700
- cursor: pointer;
27701
- border-inline-start: 1px solid var(--color-border);
27702
- }
27703
- .cn-data-form__preset[data-v-10b5a40f]:first-child {
27704
- border-inline-start: none;
27705
28573
  }
27706
- .cn-data-form__preset--active[data-v-10b5a40f] {
27707
- background: var(--color-primary-element);
27708
- color: var(--color-primary-element-text);
27709
- font-weight: 600;
28574
+ .cn-facts-widget__line[data-v-2ca63011] {
28575
+ font-size: 13px;
28576
+ color: var(--color-text-maxcontrast);
27710
28577
  }
27711
- .cn-data-form__columns[data-v-10b5a40f] {
27712
- width: 90px;
27713
- flex: 0 0 auto;
28578
+ .cn-facts-widget__muted[data-v-2ca63011] {
28579
+ margin: 0;
28580
+ color: var(--color-text-maxcontrast);
27714
28581
  }
27715
- .cn-data-form__prop[data-v-10b5a40f] {
27716
- border: 1px solid var(--color-border);
27717
- border-radius: var(--border-radius-large, 8px);
27718
- padding: 8px 10px;
28582
+ .cn-facts-widget__label .hidden-visually[data-v-2ca63011] {
28583
+ clip-path: inset(50%);
28584
+ height: 1px;
28585
+ overflow: hidden;
28586
+ position: absolute;
28587
+ white-space: nowrap;
28588
+ width: 1px;
27719
28589
  }
27720
- .cn-data-form__prop--hidden[data-v-10b5a40f] {
27721
- opacity: 0.6;
28590
+ .cn-facts-widget__label--icon[data-v-2ca63011] {
28591
+ align-items: center;
28592
+ display: flex;
27722
28593
  }
27723
- .cn-data-form__prop--dragging[data-v-10b5a40f] {
27724
- opacity: 0.4;
27725
- border-style: dashed;
28594
+ .cn-facts-widget__value-link[data-v-2ca63011] {
28595
+ color: var(--color-primary-element);
28596
+ text-decoration: underline;
27726
28597
  }
27727
- .cn-data-form__prop-head[data-v-10b5a40f] {
27728
- display: flex;
28598
+ .cn-facts-widget__inline-button[data-v-2ca63011],
28599
+ .cn-facts-widget__icon-button[data-v-2ca63011],
28600
+ .cn-facts-widget__action[data-v-2ca63011] {
27729
28601
  align-items: center;
27730
- gap: 6px;
28602
+ cursor: pointer;
28603
+ display: inline-flex;
28604
+ font: inherit;
27731
28605
  }
27732
- .cn-data-form__grip[data-v-10b5a40f] {
27733
- cursor: grab;
28606
+ .cn-facts-widget__inline-button[data-v-2ca63011] {
28607
+ background: var(--color-main-background);
28608
+ border: 1px solid var(--color-border-dark);
28609
+ border-radius: 16px;
28610
+ font-size: 13px;
28611
+ font-weight: 600;
28612
+ gap: 4px;
28613
+ margin-inline-start: 8px;
28614
+ min-height: 28px;
28615
+ padding: 0 10px;
28616
+ }
28617
+ .cn-facts-widget__icon-button[data-v-2ca63011] {
28618
+ background: transparent;
28619
+ border: 0;
28620
+ border-radius: 6px;
27734
28621
  color: var(--color-text-maxcontrast);
27735
- letter-spacing: -2px;
27736
- user-select: none;
28622
+ margin-inline-start: 4px;
28623
+ padding: 2px;
28624
+ vertical-align: middle;
27737
28625
  }
27738
- .cn-data-form__prop-name[data-v-10b5a40f] {
27739
- font-weight: 600;
28626
+ .cn-facts-widget__icon-button[data-v-2ca63011]:hover,
28627
+ .cn-facts-widget__icon-button[data-v-2ca63011]:focus-visible {
28628
+ background: var(--color-background-hover);
28629
+ color: var(--color-main-text);
27740
28630
  }
27741
- .cn-data-form__prop-body[data-v-10b5a40f] {
27742
- display: grid;
27743
- grid-template-columns: 2fr 1fr 1fr 1.5fr;
27744
- gap: 10px;
27745
- align-items: center;
27746
- margin-top: 8px;
28631
+ .cn-facts-widget__text[data-v-2ca63011] {
28632
+ color: var(--color-main-text);
28633
+ font-size: 15px;
27747
28634
  }
27748
28635
 
27749
-
27750
- .cn-object-geo-form[data-v-42affc2f] {
28636
+ /* A lead: an icon tile or initials beside a bold title and a muted subtitle. */
28637
+ .cn-facts-widget__lead[data-v-2ca63011] {
28638
+ align-items: center;
27751
28639
  display: flex;
27752
- flex-direction: column;
27753
28640
  gap: 12px;
27754
28641
  }
27755
- .cn-object-geo-form__section[data-v-42affc2f] {
27756
- margin: 8px 0 0;
27757
- font-size: 0.8em;
27758
- text-transform: uppercase;
27759
- letter-spacing: 0.03em;
27760
- color: var(--color-text-maxcontrast);
28642
+ .cn-facts-widget__lead-tile[data-v-2ca63011] {
28643
+ align-items: center;
28644
+ background: var(--color-background-dark);
28645
+ border-radius: 8px;
28646
+ color: var(--color-main-text);
28647
+ display: flex;
28648
+ flex: none;
28649
+ font-size: 14px;
28650
+ font-weight: 700;
28651
+ height: 40px;
28652
+ justify-content: center;
28653
+ width: 40px;
27761
28654
  }
27762
- .cn-object-geo-form__hint[data-v-42affc2f] {
27763
- color: var(--color-text-maxcontrast);
27764
- font-size: 0.9em;
27765
- margin: 0;
28655
+ .cn-facts-widget__lead-tile--success[data-v-2ca63011] {
28656
+ background: color-mix(in srgb, var(--color-success) 14%, var(--color-main-background));
28657
+ border-radius: 50%;
28658
+ color: var(--color-success-text, var(--color-success));
27766
28659
  }
27767
-
27768
-
27769
- .cn-audit-trail-form[data-v-41073462] {
28660
+ .cn-facts-widget__lead-tile--info[data-v-2ca63011] {
28661
+ background: var(--color-primary-element-light);
28662
+ border-radius: 50%;
28663
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
28664
+ }
28665
+ .cn-facts-widget__lead-text[data-v-2ca63011] {
27770
28666
  display: flex;
27771
28667
  flex-direction: column;
27772
- gap: 12px;
28668
+ min-width: 0;
27773
28669
  }
27774
- .cn-audit-trail-form__hint[data-v-41073462] {
27775
- margin: 0;
27776
- font-size: 0.85em;
28670
+ .cn-facts-widget__lead-title[data-v-2ca63011] {
28671
+ font-size: 15px;
28672
+ }
28673
+ .cn-facts-widget__lead-subtitle[data-v-2ca63011] {
27777
28674
  color: var(--color-text-maxcontrast);
28675
+ font-size: 13px;
28676
+ }
28677
+ .cn-facts-widget__action[data-v-2ca63011] {
28678
+ align-self: flex-start;
28679
+ background: var(--color-primary-element-light);
28680
+ border: 0;
28681
+ border-radius: 16px;
28682
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
28683
+ font-size: 13px;
28684
+ font-weight: 700;
28685
+ gap: 6px;
28686
+ min-height: 32px;
28687
+ padding: 0 14px;
28688
+ }
28689
+ .cn-facts-widget__action[data-v-2ca63011]:hover,
28690
+ .cn-facts-widget__action[data-v-2ca63011]:focus-visible {
28691
+ background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
28692
+ }
28693
+ .cn-facts-widget__link[data-v-2ca63011] {
28694
+ font-size: 14px;
28695
+ font-weight: 600;
28696
+ color: var(--color-primary-element);
28697
+ text-decoration: underline;
27778
28698
  }
27779
28699
 
27780
28700
 
27781
- .cn-kb-search-widget[data-v-e34f66e2] {
28701
+ .cn-field-list-widget[data-v-0f29a833] {
27782
28702
  display: flex;
27783
28703
  flex-direction: column;
27784
- gap: 10px;
27785
- width: 100%;
27786
- }
27787
- .cn-kb-search-widget__bound[data-v-e34f66e2],
27788
- .cn-kb-search-widget__status[data-v-e34f66e2],
27789
- .cn-kb-search-widget__empty[data-v-e34f66e2],
27790
- .cn-kb-search-widget__hint[data-v-e34f66e2] {
27791
- color: var(--color-text-maxcontrast);
27792
- font-size: 0.9em;
27793
- margin: 0;
27794
- }
27795
- .cn-kb-search-widget__bound[data-v-e34f66e2] {
27796
- font-style: italic;
28704
+ gap: 12px;
28705
+ min-width: 0;
27797
28706
  }
27798
- .cn-kb-search-widget__results[data-v-e34f66e2] {
28707
+ .cn-field-list-widget__rows[data-v-0f29a833] {
27799
28708
  list-style: none;
27800
- padding: 0;
27801
28709
  margin: 0;
28710
+ padding: 0;
27802
28711
  display: flex;
27803
28712
  flex-direction: column;
27804
- gap: 8px;
27805
- }
27806
- .cn-kb-search-widget__result[data-v-e34f66e2] {
27807
- border: 1px solid var(--color-border);
27808
- border-radius: var(--border-radius);
27809
- padding: 8px 10px;
27810
- background: var(--color-main-background);
27811
28713
  }
27812
- .cn-kb-search-widget__result-title[data-v-e34f66e2] {
27813
- font-weight: 600;
27814
- color: var(--color-main-text);
27815
- text-decoration: none;
28714
+ .cn-field-list-widget__row[data-v-0f29a833] {
28715
+ padding: 10px 0;
28716
+ border-top: 1px solid var(--color-border);
27816
28717
  }
27817
- .cn-kb-search-widget__result-title[data-v-e34f66e2]:hover {
27818
- color: var(--color-primary-element);
28718
+ .cn-field-list-widget__row[data-v-0f29a833]:first-child {
28719
+ border-top: none;
28720
+ padding-top: 0;
27819
28721
  }
27820
- .cn-kb-search-widget__result-snippet[data-v-e34f66e2] {
27821
- font-size: 0.9em;
27822
- color: var(--color-text-maxcontrast);
27823
- margin-top: 4px;
28722
+ .cn-field-list-widget__line[data-v-0f29a833] {
28723
+ display: flex;
28724
+ align-items: center;
28725
+ gap: 12px;
28726
+ min-width: 0;
27824
28727
  }
27825
-
28728
+ .cn-field-list-widget__avatar[data-v-0f29a833] {
28729
+ flex: 0 0 auto;
28730
+ display: inline-flex;
28731
+ align-items: center;
28732
+ justify-content: center;
28733
+ width: 32px;
28734
+ height: 32px;
28735
+ border-radius: 50%;
28736
+ background: var(--color-primary-element-light);
28737
+ color: var(--color-primary-element-light-text, var(--color-main-text));
28738
+ font-size: 12px;
28739
+ font-weight: 700;
28740
+ }
28741
+ .cn-field-list-widget__main[data-v-0f29a833] {
28742
+ display: flex;
28743
+ flex-direction: column;
28744
+ flex: 1 1 auto;
28745
+ min-width: 0;
28746
+ }
28747
+ .cn-field-list-widget__title[data-v-0f29a833] {
28748
+ font-weight: 600;
28749
+ overflow-wrap: anywhere;
28750
+ }
28751
+ .cn-field-list-widget__meta[data-v-0f29a833],
28752
+ .cn-field-list-widget__aside[data-v-0f29a833],
28753
+ .cn-field-list-widget__detail[data-v-0f29a833],
28754
+ .cn-field-list-widget__hint[data-v-0f29a833],
28755
+ .cn-field-list-widget__empty[data-v-0f29a833] {
28756
+ color: var(--color-text-maxcontrast);
28757
+ }
28758
+ .cn-field-list-widget__meta[data-v-0f29a833],
28759
+ .cn-field-list-widget__aside[data-v-0f29a833],
28760
+ .cn-field-list-widget__detail[data-v-0f29a833] {
28761
+ font-size: 13px;
28762
+ }
28763
+ .cn-field-list-widget__aside[data-v-0f29a833] {
28764
+ white-space: nowrap;
28765
+ }
28766
+ .cn-field-list-widget__detail[data-v-0f29a833],
28767
+ .cn-field-list-widget__hint[data-v-0f29a833],
28768
+ .cn-field-list-widget__empty[data-v-0f29a833] {
28769
+ margin: 4px 0 0;
28770
+ overflow-wrap: anywhere;
28771
+ }
28772
+ .cn-field-list-widget__add[data-v-0f29a833] {
28773
+ display: flex;
28774
+ flex-wrap: wrap;
28775
+ align-items: flex-end;
28776
+ gap: 8px 12px;
28777
+ }
28778
+ .cn-field-list-widget__add[data-v-0f29a833] > * {
28779
+ flex: 1 1 180px;
28780
+ }
28781
+ .cn-field-list-widget__add > button[data-v-0f29a833] {
28782
+ flex: 0 0 auto;
28783
+ }
28784
+ .cn-field-list-widget__toolbar[data-v-0f29a833] {
28785
+ display: flex;
28786
+ justify-content: flex-end;
28787
+ }
28788
+ .cn-field-list-widget__table-wrap[data-v-0f29a833] {
28789
+ display: flex;
28790
+ flex-direction: column;
28791
+ gap: 12px;
28792
+ overflow-x: auto;
28793
+ }
28794
+ .cn-field-list-widget__table[data-v-0f29a833] {
28795
+ width: 100%;
28796
+ border-collapse: collapse;
28797
+ }
28798
+ .cn-field-list-widget__th[data-v-0f29a833] {
28799
+ padding: 8px 12px;
28800
+ text-align: start;
28801
+ font-size: 13px;
28802
+ font-weight: 600;
28803
+ white-space: nowrap;
28804
+ color: var(--color-text-maxcontrast);
28805
+ background: var(--color-background-hover);
28806
+ }
28807
+ .cn-field-list-widget__th--menu[data-v-0f29a833],
28808
+ .cn-field-list-widget__td--menu[data-v-0f29a833] {
28809
+ width: 1%;
28810
+ text-align: end;
28811
+ }
28812
+ .cn-field-list-widget__tr[data-v-0f29a833] {
28813
+ border-top: 1px solid var(--cn-board-hairline, var(--color-border));
28814
+ }
28815
+ .cn-field-list-widget__td[data-v-0f29a833] {
28816
+ padding: 10px 12px;
28817
+ vertical-align: middle;
28818
+ overflow-wrap: anywhere;
28819
+ }
28820
+ .cn-field-list-widget__sr[data-v-0f29a833] {
28821
+ position: absolute;
28822
+ width: 1px;
28823
+ height: 1px;
28824
+ overflow: hidden;
28825
+ clip-path: inset(50%);
28826
+ }
28827
+ .cn-field-list-widget__band[data-v-0f29a833] {
28828
+ display: flex;
28829
+ flex-wrap: wrap;
28830
+ align-items: center;
28831
+ justify-content: space-between;
28832
+ gap: 8px 12px;
28833
+ padding: 12px 14px;
28834
+ border: 1px solid var(--color-warning);
28835
+ border-radius: 10px;
28836
+ background: color-mix(in srgb, var(--color-warning) 14%, var(--color-main-background));
28837
+ font-size: 14px;
28838
+ }
28839
+
28840
+
28841
+ .cn-settings-form[data-v-731c450f] {
28842
+ display: flex;
28843
+ flex-direction: column;
28844
+ gap: 14px;
28845
+ min-width: 0;
28846
+ }
28847
+ .cn-settings-form__grid[data-v-731c450f] {
28848
+ display: grid;
28849
+ gap: 14px 16px;
28850
+ grid-template-columns: minmax(0, 1fr);
28851
+ }
28852
+ .cn-settings-form__grid--2[data-v-731c450f] {
28853
+ grid-template-columns: repeat(2, minmax(0, 1fr));
28854
+ }
28855
+ .cn-settings-form__field[data-v-731c450f] {
28856
+ display: flex;
28857
+ flex-direction: column;
28858
+ gap: 4px;
28859
+ min-width: 0;
28860
+ }
28861
+ .cn-settings-form__field--wide[data-v-731c450f] {
28862
+ grid-column: 1 / -1;
28863
+ }
28864
+ .cn-settings-form__label[data-v-731c450f] {
28865
+ font-size: 13px;
28866
+ font-weight: 600;
28867
+ color: var(--color-main-text);
28868
+ }
28869
+ .cn-settings-form__control[data-v-731c450f] {
28870
+ width: 100%;
28871
+ box-sizing: border-box;
28872
+ height: var(--cn-board-control-height, 40px);
28873
+ padding: 0 12px;
28874
+ border: 1px solid var(--color-border-maxcontrast);
28875
+ border-radius: var(--cn-board-control-radius, 8px);
28876
+ background: var(--color-main-background);
28877
+ color: var(--color-main-text);
28878
+ font: inherit;
28879
+ }
28880
+ .cn-settings-form__file[data-v-731c450f] {
28881
+ display: flex;
28882
+ flex-wrap: wrap;
28883
+ align-items: center;
28884
+ gap: 8px;
28885
+ }
28886
+ .cn-settings-form__control--file[data-v-731c450f] {
28887
+ display: inline-flex;
28888
+ align-items: center;
28889
+ width: auto;
28890
+ min-width: 120px;
28891
+ flex: 0 1 auto;
28892
+ overflow-wrap: anywhere;
28893
+ }
28894
+ .cn-settings-form__control--placeholder[data-v-731c450f] {
28895
+ color: var(--color-text-maxcontrast);
28896
+ }
28897
+ .cn-settings-form__control--area[data-v-731c450f] {
28898
+ height: auto;
28899
+ padding: 10px 12px;
28900
+ resize: vertical;
28901
+ }
28902
+ .cn-settings-form__control[data-v-731c450f]:focus-visible {
28903
+ outline: 2px solid var(--color-primary-element);
28904
+ outline-offset: 1px;
28905
+ }
28906
+ .cn-settings-form__hint[data-v-731c450f],
28907
+ .cn-settings-form__error[data-v-731c450f] {
28908
+ margin: 0;
28909
+ font-size: 12px;
28910
+ color: var(--color-text-maxcontrast);
28911
+ }
28912
+ .cn-settings-form__error[data-v-731c450f] {
28913
+ color: var(--color-error-text);
28914
+ }
28915
+ .cn-settings-form__actions[data-v-731c450f] {
28916
+ display: flex;
28917
+ justify-content: flex-start;
28918
+ }
28919
+ @media (max-width: 640px) {
28920
+ .cn-settings-form__grid--2[data-v-731c450f] {
28921
+ grid-template-columns: minmax(0, 1fr);
28922
+ }
28923
+ }
28924
+
28925
+
28926
+ .cn-switch-rows[data-v-9dd5b4e2] {
28927
+ display: flex;
28928
+ flex-direction: column;
28929
+ gap: 8px;
28930
+ min-width: 0;
28931
+ }
28932
+ .cn-switch-rows__list[data-v-9dd5b4e2] {
28933
+ list-style: none;
28934
+ margin: 0;
28935
+ padding: 0;
28936
+ display: flex;
28937
+ flex-direction: column;
28938
+ }
28939
+ .cn-switch-rows__row[data-v-9dd5b4e2] {
28940
+ padding: 10px 0;
28941
+ border-top: 1px solid var(--cn-board-hairline, var(--color-border));
28942
+ }
28943
+ .cn-switch-rows__row[data-v-9dd5b4e2]:first-child {
28944
+ border-top: none;
28945
+ padding-top: 0;
28946
+ }
28947
+ .cn-switch-rows__label[data-v-9dd5b4e2] {
28948
+ display: block;
28949
+ font-weight: 600;
28950
+ }
28951
+ .cn-switch-rows__hint[data-v-9dd5b4e2] {
28952
+ display: block;
28953
+ font-size: 12px;
28954
+ font-weight: 400;
28955
+ color: var(--color-text-maxcontrast);
28956
+ }
28957
+
28958
+
28959
+ .cn-radio-cards[data-v-8aefa4a2] {
28960
+ display: flex;
28961
+ flex-direction: column;
28962
+ gap: 8px;
28963
+ min-width: 0;
28964
+ margin: 0;
28965
+ padding: 0;
28966
+ border: 0;
28967
+ }
28968
+ .cn-radio-cards__legend[data-v-8aefa4a2] {
28969
+ padding: 0;
28970
+ margin-bottom: 6px;
28971
+ font-weight: 600;
28972
+ }
28973
+ .cn-radio-cards__grid[data-v-8aefa4a2] {
28974
+ display: grid;
28975
+ gap: 10px;
28976
+ grid-template-columns: minmax(0, 1fr);
28977
+ }
28978
+ .cn-radio-cards__grid--2[data-v-8aefa4a2] {
28979
+ grid-template-columns: repeat(2, minmax(0, 1fr));
28980
+ }
28981
+ .cn-radio-cards__grid--3[data-v-8aefa4a2] {
28982
+ grid-template-columns: repeat(3, minmax(0, 1fr));
28983
+ }
28984
+ .cn-radio-cards__card[data-v-8aefa4a2] {
28985
+ position: relative;
28986
+ display: flex;
28987
+ align-items: flex-start;
28988
+ gap: 10px;
28989
+ padding: 12px 14px;
28990
+ border: 1px solid var(--color-border-maxcontrast);
28991
+ border-radius: var(--cn-board-control-radius, 8px);
28992
+ background: var(--color-main-background);
28993
+ cursor: pointer;
28994
+ }
28995
+ .cn-radio-cards__card--selected[data-v-8aefa4a2] {
28996
+ border-color: var(--color-primary-element);
28997
+ background: var(--color-primary-element-light);
28998
+ box-shadow: 0 0 0 1px var(--color-primary-element);
28999
+ }
29000
+ .cn-radio-cards__card[data-v-8aefa4a2]:focus-within {
29001
+ outline: 2px solid var(--color-primary-element);
29002
+ outline-offset: 2px;
29003
+ }
29004
+
29005
+ /* The real input stays in the DOM and in the accessibility tree; the dot is its picture. */
29006
+ .cn-radio-cards__input[data-v-8aefa4a2] {
29007
+ position: absolute;
29008
+ opacity: 0;
29009
+ inset: 0;
29010
+ margin: 0;
29011
+ cursor: pointer;
29012
+ }
29013
+ .cn-radio-cards__dot[data-v-8aefa4a2] {
29014
+ flex: 0 0 auto;
29015
+ width: 14px;
29016
+ height: 14px;
29017
+ margin-top: 3px;
29018
+ box-sizing: border-box;
29019
+ border: 1px solid var(--color-border-maxcontrast);
29020
+ border-radius: 50%;
29021
+ background: var(--color-main-background);
29022
+ }
29023
+ .cn-radio-cards__card--selected .cn-radio-cards__dot[data-v-8aefa4a2] {
29024
+ border: 4px solid var(--color-primary-element);
29025
+ }
29026
+ .cn-radio-cards__text[data-v-8aefa4a2] {
29027
+ display: flex;
29028
+ flex-direction: column;
29029
+ gap: 2px;
29030
+ min-width: 0;
29031
+ }
29032
+ .cn-radio-cards__title[data-v-8aefa4a2] {
29033
+ font-weight: 600;
29034
+ }
29035
+ .cn-radio-cards__description[data-v-8aefa4a2] {
29036
+ font-size: 12px;
29037
+ color: var(--color-text-maxcontrast);
29038
+ }
29039
+ @media (max-width: 640px) {
29040
+ .cn-radio-cards__grid--2[data-v-8aefa4a2],
29041
+ .cn-radio-cards__grid--3[data-v-8aefa4a2] {
29042
+ grid-template-columns: minmax(0, 1fr);
29043
+ }
29044
+ }
29045
+
29046
+
29047
+ .cn-chips-field[data-v-43e5bfcf] {
29048
+ display: flex;
29049
+ flex-direction: column;
29050
+ gap: 6px;
29051
+ min-width: 0;
29052
+ }
29053
+ .cn-chips-field__label[data-v-43e5bfcf] {
29054
+ margin: 0;
29055
+ font-size: 13px;
29056
+ font-weight: 600;
29057
+ }
29058
+ .cn-chips-field__chips[data-v-43e5bfcf] {
29059
+ list-style: none;
29060
+ margin: 0;
29061
+ padding: 0;
29062
+ display: flex;
29063
+ flex-wrap: wrap;
29064
+ align-items: center;
29065
+ gap: 8px;
29066
+ }
29067
+ .cn-chips-field__chip[data-v-43e5bfcf] {
29068
+ display: inline-flex;
29069
+ align-items: center;
29070
+ gap: 6px;
29071
+ padding: 4px 6px 4px 12px;
29072
+ border-radius: 999px;
29073
+ background: var(--color-primary-element-light);
29074
+ color: var(--color-primary-element-light-text, var(--color-main-text));
29075
+ font-weight: 600;
29076
+ overflow-wrap: anywhere;
29077
+ }
29078
+ .cn-chips-field__remove[data-v-43e5bfcf] {
29079
+ display: inline-flex;
29080
+ align-items: center;
29081
+ justify-content: center;
29082
+ width: 20px;
29083
+ height: 20px;
29084
+ padding: 0;
29085
+ border: 0;
29086
+ border-radius: 50%;
29087
+ background: transparent;
29088
+ color: inherit;
29089
+ font-size: 16px;
29090
+ line-height: 1;
29091
+ cursor: pointer;
29092
+ }
29093
+ .cn-chips-field__remove[data-v-43e5bfcf]:hover:not(:disabled),
29094
+ .cn-chips-field__remove[data-v-43e5bfcf]:focus-visible {
29095
+ background: var(--color-primary-element-light-hover, var(--color-background-hover));
29096
+ }
29097
+ .cn-chips-field__add[data-v-43e5bfcf] {
29098
+ padding: 4px 12px;
29099
+ border: 1px dashed var(--color-border-maxcontrast);
29100
+ border-radius: 999px;
29101
+ background: transparent;
29102
+ color: var(--color-main-text);
29103
+ font-weight: 600;
29104
+ cursor: pointer;
29105
+ }
29106
+ .cn-chips-field__add[data-v-43e5bfcf]:hover:not(:disabled) {
29107
+ background: var(--color-background-hover);
29108
+ }
29109
+ .cn-chips-field__form[data-v-43e5bfcf] {
29110
+ display: flex;
29111
+ align-items: center;
29112
+ gap: 8px;
29113
+ }
29114
+ .cn-chips-field__input[data-v-43e5bfcf] {
29115
+ height: var(--cn-board-control-height, 40px);
29116
+ box-sizing: border-box;
29117
+ padding: 0 12px;
29118
+ border: 1px solid var(--color-border-maxcontrast);
29119
+ border-radius: var(--cn-board-control-radius, 8px);
29120
+ background: var(--color-main-background);
29121
+ color: var(--color-main-text);
29122
+ font: inherit;
29123
+ }
29124
+ .cn-chips-field__hint[data-v-43e5bfcf],
29125
+ .cn-chips-field__error[data-v-43e5bfcf] {
29126
+ margin: 0;
29127
+ font-size: 12px;
29128
+ color: var(--color-text-maxcontrast);
29129
+ }
29130
+ .cn-chips-field__error[data-v-43e5bfcf] {
29131
+ color: var(--color-error-text);
29132
+ }
29133
+
29134
+
29135
+ .cn-toggle-table[data-v-53a57112] {
29136
+ display: flex;
29137
+ flex-direction: column;
29138
+ gap: 8px;
29139
+ min-width: 0;
29140
+ }
29141
+ .cn-toggle-table__table[data-v-53a57112] {
29142
+ width: 100%;
29143
+ border-collapse: collapse;
29144
+ }
29145
+ .cn-toggle-table__head[data-v-53a57112] {
29146
+ padding: 8px 12px;
29147
+ text-align: start;
29148
+ font-size: 13px;
29149
+ font-weight: 600;
29150
+ color: var(--color-text-maxcontrast);
29151
+ background: var(--color-background-hover);
29152
+ }
29153
+ .cn-toggle-table__head--toggle[data-v-53a57112],
29154
+ .cn-toggle-table__cell--toggle[data-v-53a57112] {
29155
+ width: 1%;
29156
+ white-space: nowrap;
29157
+ text-align: end;
29158
+ }
29159
+ .cn-toggle-table__row[data-v-53a57112] {
29160
+ border-top: 1px solid var(--cn-board-hairline, var(--color-border));
29161
+ }
29162
+ .cn-toggle-table__cell[data-v-53a57112] {
29163
+ padding: 10px 12px;
29164
+ vertical-align: middle;
29165
+ overflow-wrap: anywhere;
29166
+ }
29167
+ .cn-toggle-table__title[data-v-53a57112] {
29168
+ display: block;
29169
+ font-weight: 600;
29170
+ }
29171
+ .cn-toggle-table__hint[data-v-53a57112] {
29172
+ display: block;
29173
+ font-size: 12px;
29174
+ color: var(--color-text-maxcontrast);
29175
+ }
29176
+ .cn-toggle-table__empty[data-v-53a57112] {
29177
+ margin: 0;
29178
+ color: var(--color-text-maxcontrast);
29179
+ }
29180
+
29181
+
29182
+ .cn-choice-picker[data-v-7075cbe2] {
29183
+ display: flex;
29184
+ flex-direction: column;
29185
+ gap: 12px;
29186
+ min-width: 0;
29187
+ }
29188
+ .cn-choice-picker__cards[data-v-7075cbe2] {
29189
+ display: flex;
29190
+ flex-wrap: wrap;
29191
+ gap: 10px;
29192
+ margin: 0;
29193
+ padding: 0;
29194
+ border: 0;
29195
+ }
29196
+ .cn-choice-picker__legend[data-v-7075cbe2] {
29197
+ position: absolute;
29198
+ width: 1px;
29199
+ height: 1px;
29200
+ overflow: hidden;
29201
+ clip-path: inset(50%);
29202
+ }
29203
+ .cn-choice-picker__card[data-v-7075cbe2] {
29204
+ position: relative;
29205
+ display: flex;
29206
+ flex: 1 1 220px;
29207
+ align-items: center;
29208
+ gap: 12px;
29209
+ padding: 10px 12px;
29210
+ border: 1px solid var(--cn-board-hairline, var(--color-border));
29211
+ border-radius: 10px;
29212
+ background: var(--color-main-background);
29213
+ cursor: pointer;
29214
+ }
29215
+ .cn-choice-picker__card--selected[data-v-7075cbe2] {
29216
+ padding: 9px 11px;
29217
+ border: 2px solid var(--color-primary-element);
29218
+ }
29219
+ .cn-choice-picker__card--refused[data-v-7075cbe2] {
29220
+ cursor: not-allowed;
29221
+ opacity: 0.7;
29222
+ }
29223
+ .cn-choice-picker__card[data-v-7075cbe2]:focus-within {
29224
+ outline: 2px solid var(--color-primary-element);
29225
+ outline-offset: 2px;
29226
+ }
29227
+ .cn-choice-picker__input[data-v-7075cbe2] {
29228
+ flex: 0 0 auto;
29229
+ width: 18px;
29230
+ height: 18px;
29231
+ margin: 0;
29232
+ accent-color: var(--color-primary-element);
29233
+ }
29234
+ .cn-choice-picker__swatches[data-v-7075cbe2] {
29235
+ display: flex;
29236
+ gap: 4px;
29237
+ }
29238
+ .cn-choice-picker__swatch[data-v-7075cbe2] {
29239
+ width: 18px;
29240
+ height: 18px;
29241
+ box-sizing: border-box;
29242
+ border: 1px solid var(--color-border);
29243
+ border-radius: 4px;
29244
+ }
29245
+ .cn-choice-picker__text[data-v-7075cbe2] {
29246
+ display: flex;
29247
+ flex: 1 1 auto;
29248
+ flex-direction: column;
29249
+ gap: 2px;
29250
+ min-width: 0;
29251
+ }
29252
+ .cn-choice-picker__title[data-v-7075cbe2] {
29253
+ font-size: 15px;
29254
+ }
29255
+ .cn-choice-picker__refusal[data-v-7075cbe2],
29256
+ .cn-choice-picker__hint[data-v-7075cbe2],
29257
+ .cn-choice-picker__note[data-v-7075cbe2] {
29258
+ margin: 0;
29259
+ font-size: 13px;
29260
+ color: var(--color-text-maxcontrast);
29261
+ }
29262
+ .cn-choice-picker__warning-intro[data-v-7075cbe2] {
29263
+ margin: 0 0 4px;
29264
+ }
29265
+ .cn-choice-picker__warning-list[data-v-7075cbe2] {
29266
+ margin: 0;
29267
+ padding-inline-start: 18px;
29268
+ }
29269
+ .cn-choice-picker__actions[data-v-7075cbe2] {
29270
+ display: flex;
29271
+ flex-wrap: wrap;
29272
+ gap: 8px;
29273
+ }
29274
+
29275
+
29276
+ .cn-record-list__list[data-v-7073b362] {
29277
+ list-style: none;
29278
+ margin: 0;
29279
+ padding: 0;
29280
+ }
29281
+ .cn-record-list__empty[data-v-7073b362],
29282
+ .cn-record-list__error[data-v-7073b362] {
29283
+ color: var(--color-text-maxcontrast);
29284
+ margin: 0;
29285
+ }
29286
+ .cn-record-list__loading[data-v-7073b362] {
29287
+ display: flex;
29288
+ justify-content: center;
29289
+ padding: 8px 0;
29290
+ }
29291
+
29292
+ /* rows */
29293
+ .cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-7073b362] {
29294
+ border-top: 1px solid var(--color-border);
29295
+ }
29296
+ .cn-record-list__row[data-v-7073b362] {
29297
+ align-items: center;
29298
+ color: var(--color-main-text);
29299
+ display: flex;
29300
+ gap: 16px;
29301
+ padding: 12px 0;
29302
+ text-decoration: none;
29303
+ }
29304
+ .cn-record-list__row--link:hover .cn-record-list__title[data-v-7073b362],
29305
+ .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-7073b362] {
29306
+ text-decoration: underline;
29307
+ }
29308
+ .cn-record-list__avatar[data-v-7073b362] {
29309
+ align-items: center;
29310
+ background: var(--color-background-hover);
29311
+ border-radius: 50%;
29312
+ color: var(--color-main-text);
29313
+ display: flex;
29314
+ flex: none;
29315
+ font-size: 12px;
29316
+ font-weight: 700;
29317
+ height: 36px;
29318
+ justify-content: center;
29319
+ width: 36px;
29320
+ }
29321
+ .cn-record-list__main[data-v-7073b362] {
29322
+ display: flex;
29323
+ flex: 1 1 auto;
29324
+ flex-direction: column;
29325
+ gap: 2px;
29326
+ min-width: 0;
29327
+ }
29328
+ .cn-record-list__title[data-v-7073b362] {
29329
+ font-size: 15px;
29330
+ font-weight: 700;
29331
+ }
29332
+ .cn-record-list__meta[data-v-7073b362] {
29333
+ color: var(--color-text-maxcontrast);
29334
+ font-size: 13px;
29335
+ }
29336
+ .cn-record-list__aside[data-v-7073b362] {
29337
+ align-items: center;
29338
+ display: flex;
29339
+ flex: none;
29340
+ gap: 16px;
29341
+ }
29342
+ .cn-record-list__trailing[data-v-7073b362] {
29343
+ font-size: 14px;
29344
+ white-space: nowrap;
29345
+ }
29346
+ .cn-record-list__chevron[data-v-7073b362] {
29347
+ color: var(--color-text-maxcontrast);
29348
+ flex: none;
29349
+ }
29350
+
29351
+ /* feed */
29352
+ .cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-7073b362] {
29353
+ border-top: 1px solid var(--color-border);
29354
+ }
29355
+ .cn-record-list__feed-row[data-v-7073b362] {
29356
+ align-items: flex-start;
29357
+ display: flex;
29358
+ gap: 14px;
29359
+ padding: 12px 0;
29360
+ }
29361
+ .cn-record-list__feed-icon[data-v-7073b362] {
29362
+ align-items: center;
29363
+ background: var(--color-primary-element-light);
29364
+ border-radius: 50%;
29365
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
29366
+ display: flex;
29367
+ flex: none;
29368
+ height: 36px;
29369
+ justify-content: center;
29370
+ width: 36px;
29371
+ }
29372
+ .cn-record-list__text[data-v-7073b362] {
29373
+ font-size: 15px;
29374
+ }
29375
+ .cn-record-list--feed .cn-record-list__main[data-v-7073b362] {
29376
+ color: var(--color-main-text);
29377
+ text-decoration: none;
29378
+ }
29379
+
29380
+ /* inline */
29381
+ .cn-record-list__inline-row[data-v-7073b362] {
29382
+ padding: 4px 0;
29383
+ }
29384
+ .cn-record-list__label[data-v-7073b362] {
29385
+ margin-inline-end: 4px;
29386
+ }
29387
+ .cn-record-list__inline-title[data-v-7073b362] {
29388
+ color: var(--color-main-text);
29389
+ }
29390
+ a.cn-record-list__inline-title[data-v-7073b362] {
29391
+ color: var(--color-primary-element);
29392
+ text-decoration: underline;
29393
+ }
29394
+
29395
+
29396
+ /* In a narrow side column a row stacks: title, meta, then pill and date. */
29397
+ .cn-detail-page__side .cn-record-list__row {
29398
+ align-items: flex-start;
29399
+ flex-direction: column;
29400
+ gap: 6px;
29401
+ }
29402
+ .cn-detail-page__side .cn-record-list__row .cn-record-list__title {
29403
+ color: var(--color-primary-element);
29404
+ text-decoration: underline;
29405
+ }
29406
+ .cn-detail-page__side .cn-record-list__chevron {
29407
+ display: none;
29408
+ }
29409
+
29410
+ /* A row is a touch target of at least 44px on a phone. */
29411
+ @media (max-width: 640px) {
29412
+ .cn-record-list__row {
29413
+ min-height: 44px;
29414
+ }
29415
+ }
29416
+
29417
+
29418
+ .cn-saved-views-widget__list[data-v-8ca66162] {
29419
+ display: flex;
29420
+ flex-direction: column;
29421
+ gap: 10px;
29422
+ list-style: none;
29423
+ margin: 0;
29424
+ padding: 0;
29425
+ }
29426
+ .cn-saved-views-widget__link[data-v-8ca66162] {
29427
+ color: var(--color-primary-element);
29428
+ display: inline-block;
29429
+ font-size: 14px;
29430
+ font-weight: 600;
29431
+ min-height: 24px;
29432
+ text-decoration: none;
29433
+ }
29434
+ .cn-saved-views-widget__link[data-v-8ca66162]:hover,
29435
+ .cn-saved-views-widget__link[data-v-8ca66162]:focus-visible {
29436
+ text-decoration: underline;
29437
+ }
29438
+ .cn-saved-views-widget__note[data-v-8ca66162] {
29439
+ color: var(--color-text-maxcontrast);
29440
+ margin: 0;
29441
+ }
29442
+ .cn-saved-views-widget__loading[data-v-8ca66162] {
29443
+ display: flex;
29444
+ justify-content: center;
29445
+ padding: 8px 0;
29446
+ }
29447
+
29448
+ /* A phone: each link is a 44px touch target. */
29449
+ @media (max-width: 640px) {
29450
+ .cn-saved-views-widget__link[data-v-8ca66162] {
29451
+ align-items: center;
29452
+ display: inline-flex;
29453
+ min-height: 44px;
29454
+ }
29455
+ }
29456
+
29457
+
29458
+ .cn-notepad-widget-form[data-v-c752df66] {
29459
+ display: flex;
29460
+ flex-direction: column;
29461
+ gap: 12px;
29462
+ }
29463
+
29464
+
29465
+ .cn-notepad-widget {
29466
+ display: flex;
29467
+ flex-direction: column;
29468
+ gap: 4px;
29469
+ height: 100%;
29470
+ min-height: var(--cn-notepad-min-height, 120px);
29471
+ }
29472
+ .cn-notepad-widget__textarea {
29473
+ flex: 1 1 auto;
29474
+ width: 100%;
29475
+ min-height: 80px;
29476
+ resize: none;
29477
+ border: none;
29478
+ background: transparent;
29479
+ color: var(--color-main-text);
29480
+ font: inherit;
29481
+ }
29482
+ .cn-notepad-widget__rendered {
29483
+ flex: 1 1 auto;
29484
+ overflow: auto;
29485
+ cursor: text;
29486
+ color: var(--color-main-text);
29487
+ }
29488
+ .cn-notepad-widget__status {
29489
+ margin: 0;
29490
+ min-height: 1.2em;
29491
+ color: var(--color-text-maxcontrast);
29492
+ font-size: 0.85em;
29493
+ }
29494
+ .cn-notepad-widget__status--failed {
29495
+ color: var(--color-error-text, var(--color-error));
29496
+ }
29497
+
29498
+
29499
+ .cn-data-form[data-v-10b5a40f] {
29500
+ display: flex;
29501
+ flex-direction: column;
29502
+ gap: 12px;
29503
+ }
29504
+ .cn-data-form__section[data-v-10b5a40f] {
29505
+ margin: 8px 0 0;
29506
+ font-size: 0.8em;
29507
+ text-transform: uppercase;
29508
+ letter-spacing: 0.03em;
29509
+ color: var(--color-text-maxcontrast);
29510
+ }
29511
+ .cn-data-form__hint[data-v-10b5a40f] {
29512
+ color: var(--color-text-maxcontrast);
29513
+ font-size: 0.9em;
29514
+ }
29515
+ .cn-data-form__row2[data-v-10b5a40f] {
29516
+ display: flex;
29517
+ gap: 12px;
29518
+ align-items: flex-end;
29519
+ }
29520
+ .cn-data-form__row2[data-v-10b5a40f] > * {
29521
+ flex: 1;
29522
+ min-width: 0;
29523
+ }
29524
+ .cn-data-form__layout[data-v-10b5a40f] {
29525
+ display: flex;
29526
+ align-items: flex-end;
29527
+ gap: 12px;
29528
+ flex-wrap: wrap;
29529
+ }
29530
+ .cn-data-form__layout-label[data-v-10b5a40f] {
29531
+ align-self: center;
29532
+ font-weight: 600;
29533
+ }
29534
+ .cn-data-form__presets[data-v-10b5a40f] {
29535
+ display: inline-flex;
29536
+ border: 1px solid var(--color-border);
29537
+ border-radius: var(--border-radius-large, 8px);
29538
+ overflow: hidden;
29539
+ }
29540
+ .cn-data-form__preset[data-v-10b5a40f] {
29541
+ border: none;
29542
+ background: var(--color-main-background);
29543
+ color: var(--color-main-text);
29544
+ padding: 6px 12px;
29545
+ cursor: pointer;
29546
+ border-inline-start: 1px solid var(--color-border);
29547
+ }
29548
+ .cn-data-form__preset[data-v-10b5a40f]:first-child {
29549
+ border-inline-start: none;
29550
+ }
29551
+ .cn-data-form__preset--active[data-v-10b5a40f] {
29552
+ background: var(--color-primary-element);
29553
+ color: var(--color-primary-element-text);
29554
+ font-weight: 600;
29555
+ }
29556
+ .cn-data-form__columns[data-v-10b5a40f] {
29557
+ width: 90px;
29558
+ flex: 0 0 auto;
29559
+ }
29560
+ .cn-data-form__prop[data-v-10b5a40f] {
29561
+ border: 1px solid var(--color-border);
29562
+ border-radius: var(--border-radius-large, 8px);
29563
+ padding: 8px 10px;
29564
+ }
29565
+ .cn-data-form__prop--hidden[data-v-10b5a40f] {
29566
+ opacity: 0.6;
29567
+ }
29568
+ .cn-data-form__prop--dragging[data-v-10b5a40f] {
29569
+ opacity: 0.4;
29570
+ border-style: dashed;
29571
+ }
29572
+ .cn-data-form__prop-head[data-v-10b5a40f] {
29573
+ display: flex;
29574
+ align-items: center;
29575
+ gap: 6px;
29576
+ }
29577
+ .cn-data-form__grip[data-v-10b5a40f] {
29578
+ cursor: grab;
29579
+ color: var(--color-text-maxcontrast);
29580
+ letter-spacing: -2px;
29581
+ user-select: none;
29582
+ }
29583
+ .cn-data-form__prop-name[data-v-10b5a40f] {
29584
+ font-weight: 600;
29585
+ }
29586
+ .cn-data-form__prop-body[data-v-10b5a40f] {
29587
+ display: grid;
29588
+ grid-template-columns: 2fr 1fr 1fr 1.5fr;
29589
+ gap: 10px;
29590
+ align-items: center;
29591
+ margin-top: 8px;
29592
+ }
29593
+
29594
+
29595
+ .cn-object-geo-form[data-v-42affc2f] {
29596
+ display: flex;
29597
+ flex-direction: column;
29598
+ gap: 12px;
29599
+ }
29600
+ .cn-object-geo-form__section[data-v-42affc2f] {
29601
+ margin: 8px 0 0;
29602
+ font-size: 0.8em;
29603
+ text-transform: uppercase;
29604
+ letter-spacing: 0.03em;
29605
+ color: var(--color-text-maxcontrast);
29606
+ }
29607
+ .cn-object-geo-form__hint[data-v-42affc2f] {
29608
+ color: var(--color-text-maxcontrast);
29609
+ font-size: 0.9em;
29610
+ margin: 0;
29611
+ }
29612
+
29613
+
29614
+ .cn-audit-trail-form[data-v-41073462] {
29615
+ display: flex;
29616
+ flex-direction: column;
29617
+ gap: 12px;
29618
+ }
29619
+ .cn-audit-trail-form__hint[data-v-41073462] {
29620
+ margin: 0;
29621
+ font-size: 0.85em;
29622
+ color: var(--color-text-maxcontrast);
29623
+ }
29624
+
29625
+
29626
+ .cn-kb-search-widget[data-v-e34f66e2] {
29627
+ display: flex;
29628
+ flex-direction: column;
29629
+ gap: 10px;
29630
+ width: 100%;
29631
+ }
29632
+ .cn-kb-search-widget__bound[data-v-e34f66e2],
29633
+ .cn-kb-search-widget__status[data-v-e34f66e2],
29634
+ .cn-kb-search-widget__empty[data-v-e34f66e2],
29635
+ .cn-kb-search-widget__hint[data-v-e34f66e2] {
29636
+ color: var(--color-text-maxcontrast);
29637
+ font-size: 0.9em;
29638
+ margin: 0;
29639
+ }
29640
+ .cn-kb-search-widget__bound[data-v-e34f66e2] {
29641
+ font-style: italic;
29642
+ }
29643
+ .cn-kb-search-widget__results[data-v-e34f66e2] {
29644
+ list-style: none;
29645
+ padding: 0;
29646
+ margin: 0;
29647
+ display: flex;
29648
+ flex-direction: column;
29649
+ gap: 8px;
29650
+ }
29651
+ .cn-kb-search-widget__result[data-v-e34f66e2] {
29652
+ border: 1px solid var(--color-border);
29653
+ border-radius: var(--border-radius);
29654
+ padding: 8px 10px;
29655
+ background: var(--color-main-background);
29656
+ }
29657
+ .cn-kb-search-widget__result-title[data-v-e34f66e2] {
29658
+ font-weight: 600;
29659
+ color: var(--color-main-text);
29660
+ text-decoration: none;
29661
+ }
29662
+ .cn-kb-search-widget__result-title[data-v-e34f66e2]:hover {
29663
+ color: var(--color-primary-element);
29664
+ }
29665
+ .cn-kb-search-widget__result-snippet[data-v-e34f66e2] {
29666
+ font-size: 0.9em;
29667
+ color: var(--color-text-maxcontrast);
29668
+ margin-top: 4px;
29669
+ }
29670
+
27826
29671
  /* ========================================
27827
29672
  @conduction/nextcloud-vue — Form widgets
27828
29673
  ======================================== */
@@ -27920,6 +29765,76 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
27920
29765
  flex-direction: column;
27921
29766
  gap: 2px;
27922
29767
  }
29768
+
29769
+ /* The chips: the compact segmented group, left, in the card the grid draws. */
29770
+ .cn-workspace-filter-widget--chips[data-v-f0d5c1c6] {
29771
+ flex-direction: row;
29772
+ flex-wrap: wrap;
29773
+ align-items: center;
29774
+ }
29775
+
29776
+ /* A bar: its controls in one row, an `align: "end"` control pushed right. */
29777
+ .cn-workspace-filter-widget--bar[data-v-f0d5c1c6] {
29778
+ flex-direction: row;
29779
+ flex-wrap: wrap;
29780
+ align-items: center;
29781
+ gap: 12px 16px;
29782
+ }
29783
+
29784
+ /* An inline control sits in a bar: label left of the control, width to its content. */
29785
+ .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] {
29786
+ flex-direction: row;
29787
+ align-items: center;
29788
+ gap: 8px;
29789
+ width: auto;
29790
+ }
29791
+ .cn-workspace-filter-widget--inline .cn-workspace-filter-widget__label[data-v-f0d5c1c6] {
29792
+ font-weight: 400;
29793
+ color: var(--color-text-maxcontrast);
29794
+ }
29795
+ .cn-workspace-filter-widget--end[data-v-f0d5c1c6] {
29796
+ margin-inline-start: auto;
29797
+ }
29798
+ .cn-workspace-filter-widget--end ~ .cn-workspace-filter-widget--end[data-v-f0d5c1c6] {
29799
+ margin-inline-start: 0;
29800
+ }
29801
+ .cn-workspace-filter-widget__toggle[data-v-f0d5c1c6] {
29802
+ font-weight: 600;
29803
+ }
29804
+
29805
+ /* The start card: text left, control (and link) right, as PqDashboard's "Contact starten". */
29806
+ .cn-workspace-filter-widget--start[data-v-f0d5c1c6] {
29807
+ flex-direction: row;
29808
+ flex-wrap: wrap;
29809
+ align-items: center;
29810
+ gap: 16px 24px;
29811
+ }
29812
+ .cn-workspace-filter-widget__text[data-v-f0d5c1c6] {
29813
+ flex: 1 1 320px;
29814
+ min-width: 0;
29815
+ }
29816
+ .cn-workspace-filter-widget__title[data-v-f0d5c1c6] {
29817
+ margin: 0 0 4px;
29818
+ font-size: 17px;
29819
+ font-weight: 700;
29820
+ color: var(--color-main-text);
29821
+ }
29822
+ .cn-workspace-filter-widget__description[data-v-f0d5c1c6] {
29823
+ margin: 0;
29824
+ max-width: 420px;
29825
+ color: var(--color-text-maxcontrast);
29826
+ }
29827
+ .cn-workspace-filter-widget--start .cn-workspace-filter-widget__control[data-v-f0d5c1c6],
29828
+ .cn-workspace-filter-widget--start > .v-select[data-v-f0d5c1c6] {
29829
+ flex: 0 1 480px;
29830
+ min-width: 240px;
29831
+ }
29832
+ .cn-workspace-filter-widget__link[data-v-f0d5c1c6] {
29833
+ font-weight: 600;
29834
+ color: var(--color-primary-element);
29835
+ text-decoration: underline;
29836
+ white-space: nowrap;
29837
+ }
27923
29838
  .cn-workspace-filter-widget__count[data-v-f0d5c1c6] {
27924
29839
  margin-inline-start: 6px;
27925
29840
  padding: 0 6px;
@@ -27929,6 +29844,27 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
27929
29844
  font-size: 0.85em;
27930
29845
  }
27931
29846
 
29847
+ /* On a phone the bar's controls take a row each (the chips already wrap), and
29848
+ a switch and a select are 44px touch targets. */
29849
+ @media (max-width: 640px) {
29850
+ .cn-workspace-filter-widget--bar > .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] {
29851
+ flex: 1 1 100%;
29852
+ }
29853
+ .cn-workspace-filter-widget--bar > .cn-workspace-filter-widget--end[data-v-f0d5c1c6] {
29854
+ margin-inline-start: 0;
29855
+ }
29856
+ .cn-workspace-filter-widget--inline .cn-workspace-filter-widget__toggle[data-v-f0d5c1c6] {
29857
+ min-height: 44px;
29858
+ }
29859
+ .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] .v-select {
29860
+ flex: 1 1 auto;
29861
+ min-width: 0;
29862
+ }
29863
+ .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] .vs__dropdown-toggle {
29864
+ min-height: 44px;
29865
+ }
29866
+ }
29867
+
27932
29868
 
27933
29869
  .cn-data-matrix[data-v-6e3e1a0f] {
27934
29870
  display: flex;
@@ -32815,6 +34751,86 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
32815
34751
  }
32816
34752
 
32817
34753
 
34754
+ /*
34755
+ * Layout only — this component draws no KPI of its own; the tiles inside it do
34756
+ * (src/css/kpi-card.css). What it DOES owe the canonical look is the rhythm
34757
+ * around those tiles, so the gutter is the card's own `--cn-kpi-grid-gap`
34758
+ * rather than a number picked here. A grid whose gutter disagrees with the
34759
+ * card's padding reads as a different design even when every tile is
34760
+ * identical.
34761
+ */
34762
+ .cn-kpi-grid[data-v-e31696e2] {
34763
+ display: grid;
34764
+ gap: var(--cn-kpi-grid-gap, 16px);
34765
+ margin-bottom: 24px;
34766
+ }
34767
+
34768
+ /*
34769
+ * `minmax(0, 1fr)`, not `1fr`. A grid track's default minimum is `auto`, which
34770
+ * refuses to shrink below its content — and the canonical KPI value is
34771
+ * deliberately `white-space: nowrap`, so a long number (a formatted currency
34772
+ * amount, a six-figure count) pushes its track wider than its share and the
34773
+ * whole row overflows the page. With a 0 minimum the track holds its share and
34774
+ * the card's own `overflow: hidden` clips instead.
34775
+ */
34776
+ .cn-kpi-grid--cols-2[data-v-e31696e2] {
34777
+ grid-template-columns: repeat(2, minmax(0, 1fr));
34778
+ }
34779
+ .cn-kpi-grid--cols-3[data-v-e31696e2] {
34780
+ grid-template-columns: repeat(3, minmax(0, 1fr));
34781
+ }
34782
+ .cn-kpi-grid--cols-4[data-v-e31696e2] {
34783
+ grid-template-columns: repeat(4, minmax(0, 1fr));
34784
+ }
34785
+
34786
+ /* Auto: as many 200px columns as fit (screens-dashboard-parity). */
34787
+ .cn-kpi-grid--cols-auto[data-v-e31696e2] {
34788
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
34789
+ }
34790
+
34791
+ /* Responsive breakpoints */
34792
+ @media (max-width: 1200px) {
34793
+ .cn-kpi-grid--cols-4[data-v-e31696e2] {
34794
+ grid-template-columns: repeat(2, minmax(0, 1fr));
34795
+ }
34796
+ }
34797
+ @media (max-width: 900px) {
34798
+ .cn-kpi-grid--cols-3[data-v-e31696e2] {
34799
+ grid-template-columns: repeat(2, minmax(0, 1fr));
34800
+ }
34801
+ }
34802
+ @media (max-width: 600px) {
34803
+ .cn-kpi-grid--cols-2[data-v-e31696e2],
34804
+ .cn-kpi-grid--cols-3[data-v-e31696e2],
34805
+ .cn-kpi-grid--cols-4[data-v-e31696e2] {
34806
+ grid-template-columns: minmax(0, 1fr);
34807
+ }
34808
+ }
34809
+
34810
+
34811
+ .cn-index-page-widgets--stat-row[data-v-5ec0c5bc] {
34812
+ margin-bottom: var(--cn-board-section-gap, 20px);
34813
+ }
34814
+ .cn-index-page-widgets__cell[data-v-5ec0c5bc] {
34815
+ display: flex;
34816
+ min-width: 0;
34817
+ }
34818
+ .cn-index-page-widgets__cell[data-v-5ec0c5bc] > * {
34819
+ flex: 1 1 auto;
34820
+ min-width: 0;
34821
+ }
34822
+
34823
+ /* The side panel column (DqTeamwachtrij: 300px, 16px between cards). Its
34824
+ place beside the toolbar and the list is set by CnIndexPage
34825
+ (`cn-index-page--with-side-panel`, index-page.css). */
34826
+ .cn-index-page-widgets--side-panel[data-v-5ec0c5bc] {
34827
+ display: flex;
34828
+ flex-direction: column;
34829
+ gap: 16px;
34830
+ min-width: 0;
34831
+ }
34832
+
34833
+
32818
34834
  .cn-advanced-form-dialog__json-editor[data-v-733de04c] {
32819
34835
  display: flex;
32820
34836
  flex-direction: column;
@@ -34090,63 +36106,6 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
34090
36106
  }
34091
36107
 
34092
36108
 
34093
- /*
34094
- * Layout only — this component draws no KPI of its own; the tiles inside it do
34095
- * (src/css/kpi-card.css). What it DOES owe the canonical look is the rhythm
34096
- * around those tiles, so the gutter is the card's own `--cn-kpi-grid-gap`
34097
- * rather than a number picked here. A grid whose gutter disagrees with the
34098
- * card's padding reads as a different design even when every tile is
34099
- * identical.
34100
- */
34101
- .cn-kpi-grid[data-v-e31696e2] {
34102
- display: grid;
34103
- gap: var(--cn-kpi-grid-gap, 16px);
34104
- margin-bottom: 24px;
34105
- }
34106
-
34107
- /*
34108
- * `minmax(0, 1fr)`, not `1fr`. A grid track's default minimum is `auto`, which
34109
- * refuses to shrink below its content — and the canonical KPI value is
34110
- * deliberately `white-space: nowrap`, so a long number (a formatted currency
34111
- * amount, a six-figure count) pushes its track wider than its share and the
34112
- * whole row overflows the page. With a 0 minimum the track holds its share and
34113
- * the card's own `overflow: hidden` clips instead.
34114
- */
34115
- .cn-kpi-grid--cols-2[data-v-e31696e2] {
34116
- grid-template-columns: repeat(2, minmax(0, 1fr));
34117
- }
34118
- .cn-kpi-grid--cols-3[data-v-e31696e2] {
34119
- grid-template-columns: repeat(3, minmax(0, 1fr));
34120
- }
34121
- .cn-kpi-grid--cols-4[data-v-e31696e2] {
34122
- grid-template-columns: repeat(4, minmax(0, 1fr));
34123
- }
34124
-
34125
- /* Auto: as many 200px columns as fit (screens-dashboard-parity). */
34126
- .cn-kpi-grid--cols-auto[data-v-e31696e2] {
34127
- grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
34128
- }
34129
-
34130
- /* Responsive breakpoints */
34131
- @media (max-width: 1200px) {
34132
- .cn-kpi-grid--cols-4[data-v-e31696e2] {
34133
- grid-template-columns: repeat(2, minmax(0, 1fr));
34134
- }
34135
- }
34136
- @media (max-width: 900px) {
34137
- .cn-kpi-grid--cols-3[data-v-e31696e2] {
34138
- grid-template-columns: repeat(2, minmax(0, 1fr));
34139
- }
34140
- }
34141
- @media (max-width: 600px) {
34142
- .cn-kpi-grid--cols-2[data-v-e31696e2],
34143
- .cn-kpi-grid--cols-3[data-v-e31696e2],
34144
- .cn-kpi-grid--cols-4[data-v-e31696e2] {
34145
- grid-template-columns: minmax(0, 1fr);
34146
- }
34147
- }
34148
-
34149
-
34150
36109
  .cn-export-wizard__description[data-v-59983562] {
34151
36110
  color: var(--color-text-maxcontrast);
34152
36111
  margin-bottom: 12px;
@@ -35535,6 +37494,17 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
35535
37494
  .cn-dashboard-page__content-item[data-v-824052fe] {
35536
37495
  width: 100%;
35537
37496
  }
37497
+ /* On a phone (screens-dashboard-phone) the touch targets of a board dashboard
37498
+ are 44px: the widget Actions menu and the KPI tiles. */
37499
+ @media (max-width: 640px) {
37500
+ .cn-dashboard-page--board[data-v-824052fe] .cn-widget-wrapper__actions .action-item__menutoggle,
37501
+ .cn-dashboard-page--board[data-v-824052fe] .cn-widget-wrapper__actions .button-vue {
37502
+ min-height: 44px;
37503
+ }
37504
+ .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-824052fe] {
37505
+ min-height: 44px;
37506
+ }
37507
+ }
35538
37508
 
35539
37509
 
35540
37510
  /* Trigger: strip NcActions' default button chrome down to just the chip span. */