@conduction/nextcloud-vue 2.82.0 → 2.84.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 (178) hide show
  1. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +2 -2
  2. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  3. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
  4. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +24 -0
  5. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  6. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +9 -4
  7. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  8. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
  9. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +1 -1
  10. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
  11. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
  12. package/dist/esm/components/CnBodySections/CnBodySections.vue.js +1 -1
  13. package/dist/esm/components/CnBodySections/CnBodySections.vue2.js +22 -1
  14. package/dist/esm/components/CnBodySections/CnBodySections.vue2.js.map +1 -1
  15. package/dist/esm/components/CnBodySections/CnBodySections.vue3.js.map +1 -1
  16. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue.js +1 -1
  17. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js +47 -4
  18. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js.map +1 -1
  19. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js.map +1 -1
  20. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue.js +1 -1
  21. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +125 -3
  22. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
  23. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js +3 -3
  24. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
  25. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  26. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +14 -0
  27. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  28. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  29. package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue.js +1 -1
  30. package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue2.js +1 -1
  31. package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue2.js.map +1 -1
  32. package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue3.js.map +1 -1
  33. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +203 -4
  34. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  35. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  36. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +1 -1
  37. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +38 -1
  38. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
  39. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +45 -5
  40. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
  41. package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue.js +1 -1
  42. package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue2.js +1 -1
  43. package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue2.js.map +1 -1
  44. package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue3.js.map +1 -1
  45. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +96 -12
  46. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  47. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +95 -50
  48. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  49. package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue2.js +29 -6
  50. package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue2.js.map +1 -1
  51. package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue3.js.map +1 -1
  52. package/dist/esm/components/CnMassActionBar/CnMassActionBar.vue2.js +2 -2
  53. package/dist/esm/components/CnMassActionBar/CnMassActionBar.vue2.js.map +1 -1
  54. package/dist/esm/components/CnMassImportDialog/CnMassImportDialog.vue2.js +2 -2
  55. package/dist/esm/components/CnMassImportDialog/CnMassImportDialog.vue2.js.map +1 -1
  56. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
  57. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +31 -2
  58. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  59. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  60. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js +1 -1
  61. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js +16 -2
  62. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js.map +1 -1
  63. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js +3 -3
  64. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js.map +1 -1
  65. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  66. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +37 -2
  67. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  68. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  69. package/dist/esm/components/CnReportsPage/CnReportsPage.vue.js +1 -1
  70. package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js +176 -0
  71. package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js.map +1 -1
  72. package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js +181 -52
  73. package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js.map +1 -1
  74. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js +1 -1
  75. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js +70 -5
  76. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js.map +1 -1
  77. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js +61 -35
  78. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js.map +1 -1
  79. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue.js +1 -1
  80. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +72 -5
  81. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
  82. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js +33 -8
  83. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
  84. package/dist/esm/components/CnStatWidget/CnStatWidget.vue.js +1 -1
  85. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +4 -2
  86. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  87. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  88. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue.js +1 -1
  89. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +72 -5
  90. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
  91. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +88 -71
  92. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
  93. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js +1 -1
  94. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js +18 -4
  95. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js.map +1 -1
  96. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js.map +1 -1
  97. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  98. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +33 -3
  99. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  100. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  101. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue.js +1 -1
  102. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js +16 -0
  103. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js.map +1 -1
  104. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue3.js.map +1 -1
  105. package/dist/esm/dialogs/CnTransitionInputDialog.vue.js +1 -1
  106. package/dist/esm/dialogs/CnTransitionInputDialog.vue2.js +68 -6
  107. package/dist/esm/dialogs/CnTransitionInputDialog.vue2.js.map +1 -1
  108. package/dist/esm/dialogs/CnTransitionInputDialog.vue3.js +133 -105
  109. package/dist/esm/dialogs/CnTransitionInputDialog.vue3.js.map +1 -1
  110. package/dist/esm/l10n/en.json.js +16 -1
  111. package/dist/esm/l10n/en.json.js.map +1 -1
  112. package/dist/esm/l10n/nl.json.js +41 -4
  113. package/dist/esm/l10n/nl.json.js.map +1 -1
  114. package/dist/esm/library-style.js +1 -1
  115. package/dist/esm/nextcloud-vue.css +900 -537
  116. package/dist/esm/utils/buildManifest.js +37 -3
  117. package/dist/esm/utils/buildManifest.js.map +1 -1
  118. package/dist/esm/utils/detailWidgetVisibility.js +149 -0
  119. package/dist/esm/utils/detailWidgetVisibility.js.map +1 -0
  120. package/dist/esm/utils/fetchAggregate.js +25 -2
  121. package/dist/esm/utils/fetchAggregate.js.map +1 -1
  122. package/dist/esm/utils/formatMetric.js +39 -3
  123. package/dist/esm/utils/formatMetric.js.map +1 -1
  124. package/dist/esm/utils/resolveManifestTokens.js +1 -0
  125. package/dist/esm/utils/resolveManifestTokens.js.map +1 -1
  126. package/dist/esm/utils/sentinelTokens.js +9 -0
  127. package/dist/esm/utils/sentinelTokens.js.map +1 -1
  128. package/dist/esm/utils/switchValues.js +62 -0
  129. package/dist/esm/utils/switchValues.js.map +1 -0
  130. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  131. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  132. package/dist/nextcloud-vue.cjs.js +36711 -34909
  133. package/dist/nextcloud-vue.cjs.js.map +2 -2
  134. package/dist/nextcloud-vue.css +900 -537
  135. package/l10n/en.json +16 -1
  136. package/l10n/nl.json +41 -4
  137. package/package.json +1 -1
  138. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +31 -2
  139. package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +1 -1
  140. package/src/components/CnBodySections/CnBodySections.vue +22 -1
  141. package/src/components/CnCountdownWidget/CnCountdownWidget.vue +47 -4
  142. package/src/components/CnDashboardGrid/CnDashboardGrid.vue +128 -6
  143. package/src/components/CnDashboardPage/CnDashboardPage.vue +14 -0
  144. package/src/components/CnDeltaWidget/CnDeltaWidget.vue +1 -1
  145. package/src/components/CnDetailPage/CnDetailPage.md +2 -0
  146. package/src/components/CnDetailPage/CnDetailPage.vue +203 -4
  147. package/src/components/CnFieldListWidget/CnFieldListWidget.vue +63 -1
  148. package/src/components/CnGaugeWidget/CnGaugeWidget.vue +1 -1
  149. package/src/components/CnIndexPage/CnIndexPage.vue +125 -15
  150. package/src/components/CnInteractionFormWidget/CnInteractionFormWidget.vue +29 -6
  151. package/src/components/CnObjectDataWidget/CnObjectDataWidget.md +1 -1
  152. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +31 -2
  153. package/src/components/CnRadioCardsWidget/CnRadioCardsWidget.vue +54 -3
  154. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +37 -2
  155. package/src/components/CnReportsPage/CnReportsPage.vue +263 -5
  156. package/src/components/CnSettingsFormWidget/CnSettingsFormWidget.vue +110 -18
  157. package/src/components/CnStagesWidget/CnStagesWidget.vue +103 -6
  158. package/src/components/CnStatWidget/CnStatWidget.vue +4 -2
  159. package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +125 -7
  160. package/src/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue +18 -4
  161. package/src/components/CnTabsWidget/CnTabsWidget.vue +33 -3
  162. package/src/components/CnWalkthrough/CnWalkthrough.vue +16 -0
  163. package/src/css/form-field.css +14 -0
  164. package/src/css/form-widget.css +11 -0
  165. package/src/css/index-page.css +11 -0
  166. package/src/css/index.css +1 -0
  167. package/src/css/look-board-reports.css +175 -0
  168. package/src/css/look-board.css +44 -1
  169. package/src/dialogs/CnTransitionInputDialog.vue +87 -7
  170. package/src/schemas/app-manifest-v2.schema.json +24 -3
  171. package/src/utils/buildManifest.js +36 -2
  172. package/src/utils/detailWidgetVisibility.js +145 -0
  173. package/src/utils/fetchAggregate.js +24 -1
  174. package/src/utils/formatMetric.js +38 -2
  175. package/src/utils/resolveManifestTokens.js +1 -0
  176. package/src/utils/sentinelTokens.js +9 -0
  177. package/src/utils/switchValues.js +59 -0
  178. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -503,9 +503,20 @@
503
503
  align-items: start;
504
504
  }
505
505
 
506
- /* The card: a section of the shell, or a CnSettingsCard of the page. */
506
+ /* An app component that wraps its sections in one element (decidiq's
507
+ Settings.vue) takes no box of its own: its sections are grid items and
508
+ cards, as if the shell held them directly. Only an element whose own
509
+ children are sections; anything else keeps spanning the grid. */
510
+ .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section),
511
+ .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) {
512
+ display: contents;
513
+ }
514
+
515
+ /* The card: a section of the shell (also one inside a wrapping element), or a CnSettingsCard of the page. */
507
516
  .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section,
508
517
  .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section,
518
+ .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section,
519
+ .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section,
509
520
  .cn-look-board .cn-settings-page__sections:not(.cn-look-nextcloud *) > .cn-settings-card {
510
521
  box-sizing: border-box;
511
522
  display: flex;
@@ -532,7 +543,12 @@
532
543
  display: none;
533
544
  }
534
545
 
546
+ /* NcSettingsSection draws its name `display: inline-flex; justify-content:
547
+ center`; in the card's flex column the name spans the card, so the title
548
+ sat centred. The board's card titles start at the left edge. */
535
549
  .cn-look-board .settings-section:not(.cn-look-nextcloud *) .settings-section__name {
550
+ justify-content: flex-start;
551
+ text-align: start;
536
552
  margin: 0;
537
553
  font-size: 19px;
538
554
  font-weight: 700;
@@ -667,6 +683,18 @@
667
683
  font-weight: 600;
668
684
  }
669
685
 
686
+ /* ---- Dashboard card titles --------------------------------------------- */
687
+ /* A card's title on a dashboard (and on the widgets under a reports page) is
688
+ the board's card h2: 17px weight 700 (boards PqMijnWerk, DcRapportages and
689
+ the app dashboards; `--cn-board-heading-size`, as on a detail page's cards).
690
+ The wrapper's own 14px weight 600 stays for the Nextcloud look, and the
691
+ native-dashboard chrome keeps its 20px. */
692
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--nc-dashboard) .cn-widget-wrapper__title {
693
+ font-size: var(--cn-board-heading-size, 17px);
694
+ font-weight: 700;
695
+ line-height: 1.3;
696
+ }
697
+
670
698
  /* ---- Record list on a dashboard card (PtDashboard) ---------------------- */
671
699
  /* The dashboard's card body is flush, so the rows carry their own inset: the
672
700
  board's card pads 24px at the sides and each row 14px, a soft hairline
@@ -734,6 +762,21 @@
734
762
  margin-inline-start: auto;
735
763
  }
736
764
 
765
+ /* The title and meta take the room the pill and the date leave, and a long
766
+ title wraps inside it: the pill and the date stay on the title line, as the
767
+ board draws them. They drop under the text only when the card is too narrow
768
+ to hold 240px of text beside them (PqMijnWerk). */
769
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__main {
770
+ flex: 1 1 240px;
771
+ }
772
+
773
+ /* ---- Saved views on a dashboard card (PqMijnWerk) ------------------------ */
774
+ /* The card body is flush, so the list and its empty line carry the card's
775
+ inset themselves, the same 24px at the sides as a record list. */
776
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-saved-views-widget {
777
+ padding: 4px 24px 20px;
778
+ }
779
+
737
780
  /* The board draws no chevron after the pill and date. */
738
781
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__chevron {
739
782
  display: none;
@@ -1126,6 +1169,20 @@
1126
1169
  .cn-look-board .cn-form-page__footer .cn-form-page__primary {
1127
1170
  margin-inline-start: auto;
1128
1171
  }
1172
+
1173
+ /* A Nextcloud text area or text field with its label inside the field hides
1174
+ its placeholder until the field takes focus, so the label and the
1175
+ placeholder are never drawn over each other. A theme that forces every
1176
+ placeholder visible (thematiq's nldesign system sets
1177
+ `::placeholder { opacity: 1 !important }`) drew both: the dossiq DqTaak
1178
+ notes field read "Een notitie toevoegen" over "Wat heb je gevonden, wie heb
1179
+ je gebeld?". Under the board look the placeholder stays hidden at rest, as
1180
+ Nextcloud intends; a field with its label outside keeps its placeholder.
1181
+ @spec openspec/changes/board-field-label-over-placeholder/specs/form-field-board-look/spec.md#requirement-a-field-label-and-its-placeholder-are-never-drawn-over-each-other */
1182
+ .cn-look-board .textarea__input:not(:focus, .textarea__input--label-outside)::placeholder,
1183
+ .cn-look-board .input-field:not(.input-field--label-outside) .input-field__input:not(:focus)::placeholder {
1184
+ opacity: 0 !important;
1185
+ }
1129
1186
  /*
1130
1187
  * The board (screens-kanban-parity, canon section 8).
1131
1188
  *
@@ -4145,6 +4202,7 @@ a.cn-kpi-card--board * {
4145
4202
  }
4146
4203
 
4147
4204
  .cn-form-widget__textarea {
4205
+ box-sizing: border-box;
4148
4206
  width: 100%;
4149
4207
  min-height: 80px;
4150
4208
  padding: 8px;
@@ -4166,6 +4224,16 @@ a.cn-kpi-card--board * {
4166
4224
  color: var(--color-error);
4167
4225
  margin: 0;
4168
4226
  }
4227
+
4228
+ /* A select takes its field's width, however narrow the card. NcSelect is at
4229
+ least 260px wide on its own, so in pipelinq's 234px "Nieuw contactmoment"
4230
+ card at 1100 wide the channel and client selects ran 40px past the card's
4231
+ edge. The client picker (CnResourceSelect) is an NcSelect too.
4232
+ @spec openspec/changes/interaction-form-fits-and-reads-dutch/specs/interaction-form-widget/spec.md#requirement-the-interaction-form-fits-its-card-and-reads-in-the-readers-language */
4233
+ .cn-form-widget .v-select.select {
4234
+ min-width: 0;
4235
+ width: 100%;
4236
+ }
4169
4237
  /* ========================================
4170
4238
  @conduction/nextcloud-vue — Detail Grid & Layout Utility Styles
4171
4239
  ======================================== */
@@ -4992,6 +5060,17 @@ a.cn-kpi-card--board * {
4992
5060
  padding: calc(5 * var(--default-grid-baseline));
4993
5061
  }
4994
5062
 
5063
+ /* A group heading in the header's Actions menu (`{ heading }` in items), as
5064
+ the board's "Ga naar" and "Selectie": 12px bold capitals, muted. The menu
5065
+ is a popover outside the page, so the class is not under the look class. */
5066
+ .cn-index-header-menu__heading {
5067
+ font-size: 12px;
5068
+ font-weight: 700;
5069
+ letter-spacing: 0.04em;
5070
+ text-transform: uppercase;
5071
+ color: var(--color-text-maxcontrast);
5072
+ }
5073
+
4995
5074
  /* The board's header buttons (`headerButtons`) at the end of the title row,
4996
5075
  centred on the title and its count line. They wrap under the title on a
4997
5076
  narrow page. */
@@ -6927,6 +7006,181 @@ a.cn-kpi-card--board * {
6927
7006
  .cn-look-board:has(.cn-detail-page) > .app-sidebar__toggle {
6928
7007
  display: none;
6929
7008
  }
7009
+ /*
7010
+ * The reports page under the board look (screens-reports-page-board-look,
7011
+ * board DcRapportages): a 28px title over a muted lead, one section per
7012
+ * category headed at 18px, and two-up cards with an icon tile. Scoped under
7013
+ * `.cn-look-board` with the page guard, so an app without the look renders as
7014
+ * before.
7015
+ */
7016
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) {
7017
+ box-sizing: border-box;
7018
+ display: flex;
7019
+ flex-direction: column;
7020
+ gap: var(--cn-board-section-gap);
7021
+ padding: var(--cn-board-content-padding);
7022
+ max-width: var(--cn-board-content-max-width);
7023
+ }
7024
+
7025
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header {
7026
+ display: flex;
7027
+ flex-direction: column;
7028
+ gap: 14px;
7029
+ padding: 4px 0 8px;
7030
+ }
7031
+
7032
+ /* The 56px inset clears the navigation toggle only while the navigation is
7033
+ closed, as on the other board pages. */
7034
+ .cn-look-board:has(.app-navigation--closed) .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header {
7035
+ padding-inline-start: 56px;
7036
+ }
7037
+
7038
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__title {
7039
+ margin: 0;
7040
+ font-size: 28px;
7041
+ font-weight: 700;
7042
+ line-height: 1.2;
7043
+ }
7044
+
7045
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__description {
7046
+ margin: 0;
7047
+ font-size: 14px;
7048
+ color: var(--color-text-maxcontrast);
7049
+ }
7050
+
7051
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__section {
7052
+ display: flex;
7053
+ flex-direction: column;
7054
+ gap: 12px;
7055
+ /* A host's own `section` rule (a width cap, a margin) does not reach it. */
7056
+ max-width: none;
7057
+ margin: 0;
7058
+ }
7059
+
7060
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__section-title {
7061
+ margin: 0;
7062
+ font-size: 18px;
7063
+ font-weight: 700;
7064
+ }
7065
+
7066
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__grid {
7067
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
7068
+ gap: 14px;
7069
+ }
7070
+
7071
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card {
7072
+ box-sizing: border-box;
7073
+ flex-direction: row;
7074
+ align-items: flex-start;
7075
+ gap: 14px;
7076
+ padding: 18px 20px;
7077
+ border: 1px solid var(--color-border);
7078
+ border-radius: var(--cn-board-card-radius);
7079
+ background: var(--color-main-background);
7080
+ color: var(--color-main-text);
7081
+ }
7082
+
7083
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card:hover,
7084
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card:focus-visible {
7085
+ background: var(--color-background-hover);
7086
+ }
7087
+
7088
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card-icon {
7089
+ flex: none;
7090
+ display: flex;
7091
+ align-items: center;
7092
+ justify-content: center;
7093
+ width: 44px;
7094
+ height: 44px;
7095
+ border-radius: 10px;
7096
+ background: var(--color-primary-element-light);
7097
+ color: var(--color-primary-element-light-text);
7098
+ }
7099
+
7100
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card-text {
7101
+ display: flex;
7102
+ flex-direction: column;
7103
+ gap: 4px;
7104
+ }
7105
+
7106
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card-title {
7107
+ font-size: 17px;
7108
+ font-weight: 700;
7109
+ }
7110
+
7111
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card-description {
7112
+ font-size: 14px;
7113
+ line-height: 1.5;
7114
+ color: var(--color-text-maxcontrast);
7115
+ }
7116
+
7117
+ /* The widgets under the cards sit in the page's own padding: the dashboard
7118
+ inside draws no second frame. */
7119
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__widgets {
7120
+ margin-top: 0;
7121
+ }
7122
+
7123
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-dashboard-page {
7124
+ padding: 0;
7125
+ }
7126
+
7127
+ /* The widget area draws no panel of its own (board DcRapportages: the
7128
+ highlighted report's card sits straight on the page ground). A theme's
7129
+ catch-all for anything named like a widget (nldesign's element overrides:
7130
+ `[class*="widget"]:not([class*="widget__"]):not(#header *)`, an id
7131
+ specificity no class rule outranks) painted `__widgets` white, hence the
7132
+ `!important`. */
7133
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__widgets {
7134
+ background: transparent !important;
7135
+ }
7136
+
7137
+ /* The grid insets every card by its 12px margin (CnDashboardPage's default
7138
+ `gridMargin`); the page padding already places the area, so the card's
7139
+ edges line up with the report cards above it. */
7140
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__widgets .cn-dashboard-grid {
7141
+ width: calc(100% + 24px);
7142
+ margin: -12px;
7143
+ }
7144
+
7145
+ /* A report card is a link, but its title and description read as text, as on
7146
+ the board: no underline, whatever a theme does to links. */
7147
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card,
7148
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card * {
7149
+ text-decoration: none !important;
7150
+ }
7151
+
7152
+ /* The header buttons beside the title (screens-reports-header-buttons, board
7153
+ DcRapportages "Downloaden"): the board's 40px button with a grey border on
7154
+ the main background, the primary one in the primary fill, as on the index
7155
+ header. `!important` holds them under a theme that restyles every button
7156
+ (nldesign). The buildiq square keeps its own rule. */
7157
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header-buttons > .button-vue--secondary {
7158
+ height: var(--cn-board-control-height) !important;
7159
+ min-height: var(--cn-board-control-height) !important;
7160
+ padding: 0 14px !important;
7161
+ border: 1px solid var(--color-border-dark) !important;
7162
+ border-radius: var(--cn-board-control-radius) !important;
7163
+ background: var(--color-main-background) !important;
7164
+ color: var(--color-main-text) !important;
7165
+ }
7166
+
7167
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header-buttons > .button-vue--secondary:hover {
7168
+ background: var(--color-background-hover) !important;
7169
+ }
7170
+
7171
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header-buttons > .button-vue--primary {
7172
+ height: var(--cn-board-control-height) !important;
7173
+ min-height: var(--cn-board-control-height) !important;
7174
+ padding: 0 16px !important;
7175
+ border: 0 !important;
7176
+ border-radius: var(--cn-board-control-radius) !important;
7177
+ background: var(--color-primary-element) !important;
7178
+ color: var(--color-primary-element-text) !important;
7179
+ }
7180
+
7181
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header-buttons > .button-vue--primary:hover {
7182
+ background: var(--color-primary-element-hover) !important;
7183
+ }
6930
7184
  /* CnReferencePreview — a reference that shows what it points at. */
6931
7185
 
6932
7186
  .cn-reference-preview {
@@ -8847,10 +9101,10 @@ a.cn-kpi-card--board * {
8847
9101
  }
8848
9102
 
8849
9103
 
8850
- .cn-countdown-widget__value[data-v-17598258] {
9104
+ .cn-countdown-widget__value[data-v-5546e71c] {
8851
9105
  white-space: nowrap;
8852
9106
  }
8853
- .cn-countdown-widget__sub[data-v-17598258] {
9107
+ .cn-countdown-widget__sub[data-v-5546e71c] {
8854
9108
  color: var(--color-text-maxcontrast);
8855
9109
  font-size: 0.85em;
8856
9110
  }
@@ -12319,41 +12573,41 @@ a.cn-analytics-card__title[data-v-f3ca7b06]:hover {
12319
12573
  }
12320
12574
 
12321
12575
 
12322
- .cn-audit-card__list[data-v-b6134724] {
12576
+ .cn-audit-card__list[data-v-280a5ace] {
12323
12577
  list-style: none;
12324
12578
  margin: 0;
12325
12579
  padding: 0;
12326
12580
  }
12327
- .cn-audit-card__row[data-v-b6134724] {
12581
+ .cn-audit-card__row[data-v-280a5ace] {
12328
12582
  padding: 6px 0;
12329
12583
  border-bottom: 1px solid var(--color-border);
12330
12584
  }
12331
- .cn-audit-card__row[data-v-b6134724]:last-child {
12585
+ .cn-audit-card__row[data-v-280a5ace]:last-child {
12332
12586
  border-bottom: none;
12333
12587
  }
12334
- .cn-audit-card__row-head[data-v-b6134724] {
12588
+ .cn-audit-card__row-head[data-v-280a5ace] {
12335
12589
  display: flex;
12336
12590
  justify-content: space-between;
12337
12591
  gap: 8px;
12338
12592
  }
12339
- .cn-audit-card__action[data-v-b6134724] {
12593
+ .cn-audit-card__action[data-v-280a5ace] {
12340
12594
  color: var(--color-main-text);
12341
12595
  }
12342
- .cn-audit-card__when[data-v-b6134724] {
12596
+ .cn-audit-card__when[data-v-280a5ace] {
12343
12597
  color: var(--color-text-maxcontrast);
12344
12598
  font-size: 0.85em;
12345
12599
  white-space: nowrap;
12346
12600
  }
12347
- .cn-audit-card__row-body[data-v-b6134724] {
12601
+ .cn-audit-card__row-body[data-v-280a5ace] {
12348
12602
  color: var(--color-text-maxcontrast);
12349
12603
  font-size: 0.9em;
12350
12604
  }
12351
- .cn-audit-card__empty[data-v-b6134724] {
12605
+ .cn-audit-card__empty[data-v-280a5ace] {
12352
12606
  color: var(--color-text-maxcontrast);
12353
12607
  text-align: center;
12354
12608
  padding: 12px 0;
12355
12609
  }
12356
- .cn-audit-card__show-all[data-v-b6134724] {
12610
+ .cn-audit-card__show-all[data-v-280a5ace] {
12357
12611
  background: none;
12358
12612
  border: none;
12359
12613
  color: var(--color-primary-element);
@@ -12361,7 +12615,7 @@ a.cn-analytics-card__title[data-v-f3ca7b06]:hover {
12361
12615
  padding: 4px 0;
12362
12616
  font: inherit;
12363
12617
  }
12364
- .cn-audit-card__show-all[data-v-b6134724]:hover {
12618
+ .cn-audit-card__show-all[data-v-280a5ace]:hover {
12365
12619
  text-decoration: underline;
12366
12620
  }
12367
12621
 
@@ -21062,22 +21316,22 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21062
21316
  }
21063
21317
 
21064
21318
 
21065
- .cn-transition-input[data-v-ac83f832] {
21319
+ .cn-transition-input[data-v-457532e4] {
21066
21320
  display: flex;
21067
21321
  flex-direction: column;
21068
21322
  gap: 12px;
21069
21323
  padding: 4px 0;
21070
21324
  }
21071
- .cn-transition-input__error[data-v-ac83f832] {
21325
+ .cn-transition-input__error[data-v-457532e4] {
21072
21326
  margin: 0;
21073
21327
  color: var(--color-error-text, var(--color-error));
21074
21328
  }
21075
- .cn-transition-input__field-error[data-v-ac83f832] {
21329
+ .cn-transition-input__field-error[data-v-457532e4] {
21076
21330
  margin: 4px 0 0;
21077
21331
  font-size: 0.9em;
21078
21332
  color: var(--color-error-text, var(--color-error));
21079
21333
  }
21080
- .cn-transition-input__object[data-v-ac83f832] {
21334
+ .cn-transition-input__object[data-v-457532e4] {
21081
21335
  border: 1px solid var(--color-border);
21082
21336
  border-radius: var(--border-radius);
21083
21337
  padding: 8px 12px;
@@ -21085,11 +21339,11 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21085
21339
  flex-direction: column;
21086
21340
  gap: 8px;
21087
21341
  }
21088
- .cn-transition-input__label[data-v-ac83f832] {
21342
+ .cn-transition-input__label[data-v-457532e4] {
21089
21343
  display: block;
21090
21344
  margin-bottom: 4px;
21091
21345
  }
21092
- .cn-transition-input__field--refused[data-v-ac83f832] {
21346
+ .cn-transition-input__field--refused[data-v-457532e4] {
21093
21347
  border-inline-start: 2px solid var(--color-error);
21094
21348
  padding-inline-start: 8px;
21095
21349
  }
@@ -21431,7 +21685,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21431
21685
  }
21432
21686
 
21433
21687
 
21434
- .cn-stages-widget[data-v-a394760a] {
21688
+ .cn-stages-widget[data-v-3946def5] {
21435
21689
  display: flex;
21436
21690
  flex-direction: column;
21437
21691
  gap: 8px;
@@ -21441,12 +21695,19 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21441
21695
  tile rather than a strip of 32px circles. */
21442
21696
  padding: 4px;
21443
21697
  }
21444
- .cn-stages-widget__loading[data-v-a394760a] {
21698
+ .cn-stages-widget__loading[data-v-3946def5] {
21445
21699
  display: flex;
21446
21700
  justify-content: center;
21447
21701
  padding: 8px 0;
21448
21702
  }
21449
- .cn-stages-widget__notice[data-v-a394760a] {
21703
+
21704
+ /* The stage a running move leads to: a small spinner before its label. */
21705
+ .cn-stages-widget__moving[data-v-3946def5] {
21706
+ display: inline-flex;
21707
+ vertical-align: middle;
21708
+ margin-inline-end: 4px;
21709
+ }
21710
+ .cn-stages-widget__notice[data-v-3946def5] {
21450
21711
  margin: 0;
21451
21712
  color: var(--color-text-maxcontrast);
21452
21713
  }
@@ -21455,7 +21716,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21455
21716
  REFUSALS no longer come through here: they are a tooltip, a note card and a
21456
21717
  screen-reader node, which is why there is no colour variant of this rule.
21457
21718
  The rules for the two coloured states are NcNoteCard's own. */
21458
- .cn-stages-widget__reason[data-v-a394760a] {
21719
+ .cn-stages-widget__reason[data-v-3946def5] {
21459
21720
  display: block;
21460
21721
  margin-top: 2px;
21461
21722
  font-size: 0.8em;
@@ -21466,7 +21727,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21466
21727
  /* The bars variant: equal columns, a thin bar per step. Theme hooks:
21467
21728
  --cn-stages-bar-height, --cn-stages-bar-radius, --cn-stages-bar-done,
21468
21729
  --cn-stages-bar-current, --cn-stages-bar-todo. */
21469
- .cn-stages-widget__bars[data-v-a394760a] {
21730
+ .cn-stages-widget__bars[data-v-3946def5] {
21470
21731
  display: grid;
21471
21732
  grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
21472
21733
  grid-auto-flow: column;
@@ -21475,25 +21736,25 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21475
21736
  padding: 0;
21476
21737
  list-style: none;
21477
21738
  }
21478
- .cn-stages-widget__bar-step[data-v-a394760a] {
21739
+ .cn-stages-widget__bar-step[data-v-3946def5] {
21479
21740
  display: flex;
21480
21741
  flex-direction: column;
21481
21742
  gap: 8px;
21482
21743
  min-width: 0;
21483
21744
  }
21484
- .cn-stages-widget__bar[data-v-a394760a] {
21745
+ .cn-stages-widget__bar[data-v-3946def5] {
21485
21746
  display: block;
21486
21747
  height: var(--cn-stages-bar-height, 6px);
21487
21748
  border-radius: var(--cn-stages-bar-radius, 3px);
21488
21749
  background: var(--cn-stages-bar-todo, var(--color-border));
21489
21750
  }
21490
- .cn-stages-widget__bar-step--done .cn-stages-widget__bar[data-v-a394760a] {
21751
+ .cn-stages-widget__bar-step--done .cn-stages-widget__bar[data-v-3946def5] {
21491
21752
  background: var(--cn-stages-bar-done, var(--color-primary-element));
21492
21753
  }
21493
- .cn-stages-widget__bar-step--current .cn-stages-widget__bar[data-v-a394760a] {
21754
+ .cn-stages-widget__bar-step--current .cn-stages-widget__bar[data-v-3946def5] {
21494
21755
  background: var(--cn-stages-bar-current, var(--color-error));
21495
21756
  }
21496
- .cn-stages-widget__bar-label[data-v-a394760a] {
21757
+ .cn-stages-widget__bar-label[data-v-3946def5] {
21497
21758
  display: block;
21498
21759
  margin: 0;
21499
21760
  padding: 0;
@@ -21514,7 +21775,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21514
21775
  about 12px below the current one, which is a <span>. Zeroed here so all
21515
21776
  labels sit 8px under their bar, as the board draws them. The visually
21516
21777
  hidden "(current step)" is absolutely positioned and takes no space. */
21517
- button.cn-stages-widget__bar-label[data-v-a394760a] {
21778
+ button.cn-stages-widget__bar-label[data-v-3946def5] {
21518
21779
  min-height: 0;
21519
21780
  height: auto;
21520
21781
  line-height: inherit;
@@ -21530,7 +21791,7 @@ button.cn-stages-widget__bar-label[data-v-a394760a] {
21530
21791
  of ending in an ellipsis. Only !important beats !important; this selector is
21531
21792
  the more specific of the two. Without such a theme nothing changes: these
21532
21793
  are the values the base rule already sets. */
21533
- button.cn-stages-widget__bar-label.cn-stages-widget__bar-label[data-v-a394760a] {
21794
+ button.cn-stages-widget__bar-label.cn-stages-widget__bar-label[data-v-3946def5] {
21534
21795
  min-width: 0 !important;
21535
21796
  margin: 0 !important;
21536
21797
  padding: 0 !important;
@@ -21539,29 +21800,29 @@ button.cn-stages-widget__bar-label.cn-stages-widget__bar-label[data-v-a394760a]
21539
21800
  text-overflow: ellipsis !important;
21540
21801
  white-space: nowrap !important;
21541
21802
  }
21542
- button.cn-stages-widget__bar-label[aria-disabled="true"][data-v-a394760a] {
21803
+ button.cn-stages-widget__bar-label[aria-disabled="true"][data-v-3946def5] {
21543
21804
  cursor: not-allowed;
21544
21805
  }
21545
- button.cn-stages-widget__bar-label[data-v-a394760a]:focus-visible {
21806
+ button.cn-stages-widget__bar-label[data-v-3946def5]:focus-visible {
21546
21807
  outline: 2px solid var(--color-primary-element);
21547
21808
  outline-offset: 2px;
21548
21809
  border-radius: var(--border-radius-small, 4px);
21549
21810
  }
21550
- .cn-stages-widget__bar-step--done .cn-stages-widget__bar-label[data-v-a394760a] {
21811
+ .cn-stages-widget__bar-step--done .cn-stages-widget__bar-label[data-v-3946def5] {
21551
21812
  color: var(--color-main-text);
21552
21813
  font-weight: 600;
21553
21814
  }
21554
- .cn-stages-widget__bar-step--current .cn-stages-widget__bar-label[data-v-a394760a] {
21815
+ .cn-stages-widget__bar-step--current .cn-stages-widget__bar-label[data-v-3946def5] {
21555
21816
  color: var(--color-main-text);
21556
21817
  font-weight: 700;
21557
21818
  }
21558
- .cn-stages-widget__bar-date[data-v-a394760a] {
21819
+ .cn-stages-widget__bar-date[data-v-3946def5] {
21559
21820
  font-size: 12px;
21560
21821
  color: var(--color-text-maxcontrast);
21561
21822
  }
21562
21823
 
21563
21824
  /* Text for screen readers only. */
21564
- .cn-stages-widget__sr-only[data-v-a394760a] {
21825
+ .cn-stages-widget__sr-only[data-v-3946def5] {
21565
21826
  position: absolute;
21566
21827
  width: 1px;
21567
21828
  height: 1px;
@@ -22339,6 +22600,214 @@ a.cn-kpi-card--board * {
22339
22600
  .cn-stats-block__breakdown-value--published[data-v-770aba44] { color: var(--color-element-success);
22340
22601
  }
22341
22602
 
22603
+ /* ========================================
22604
+ @conduction/nextcloud-vue — Status Badge
22605
+ ======================================== */
22606
+
22607
+ /* The two board tones without a Nextcloud colour role (screens-cell-pill-parity).
22608
+ A theme may redefine them; the six role variants below use Nextcloud's own. */
22609
+ :root {
22610
+ --cn-status-purple-bg: #e8e6f6;
22611
+ --cn-status-purple-text: #4a3f8f;
22612
+ --cn-status-teal-bg: #e3f1f3;
22613
+ --cn-status-teal-text: #1d5e66;
22614
+ }
22615
+
22616
+ .cn-status-badge {
22617
+ display: inline-flex;
22618
+ align-items: center;
22619
+ gap: calc(0.5 * var(--default-grid-baseline));
22620
+ padding: calc(0.5 * var(--default-grid-baseline)) calc(2.5 * var(--default-grid-baseline));
22621
+ border-radius: var(--border-radius-pill);
22622
+ font-size: 0.85em;
22623
+ font-weight: 500;
22624
+ line-height: 1.4;
22625
+ white-space: nowrap;
22626
+ }
22627
+
22628
+ /* Size variants */
22629
+ .cn-status-badge--small {
22630
+ padding: calc(0.25 * var(--default-grid-baseline)) calc(2 * var(--default-grid-baseline));
22631
+ font-size: 0.75em;
22632
+ }
22633
+
22634
+ /* Color variants */
22635
+ .cn-status-badge--default {
22636
+ background-color: var(--color-background-dark);
22637
+ color: var(--color-main-text);
22638
+ }
22639
+
22640
+ .cn-status-badge--primary {
22641
+ background-color: var(--color-primary-element-light);
22642
+ color: var(--color-primary-element);
22643
+ }
22644
+
22645
+ .cn-status-badge--success {
22646
+ background-color: var(--color-success-light, rgba(70, 186, 97, 0.15));
22647
+ color: var(--color-success-text, var(--color-success));
22648
+ }
22649
+
22650
+ .cn-status-badge--warning {
22651
+ background-color: var(--color-warning-light, rgba(232, 163, 39, 0.15));
22652
+ color: var(--color-warning-text, var(--color-warning));
22653
+ }
22654
+
22655
+ .cn-status-badge--error {
22656
+ background-color: var(--color-error-light, rgba(224, 68, 68, 0.15));
22657
+ color: var(--color-error-text, var(--color-error));
22658
+ }
22659
+
22660
+ .cn-status-badge--info {
22661
+ background-color: var(--color-info-light, rgba(0, 130, 201, 0.15));
22662
+ color: var(--color-info-text, var(--color-info, #0082c9));
22663
+ }
22664
+
22665
+ /* Work in progress ("In behandeling"), a board tone. */
22666
+ .cn-status-badge--purple {
22667
+ background-color: var(--cn-status-purple-bg);
22668
+ color: var(--cn-status-purple-text);
22669
+ }
22670
+
22671
+ /* Handed on ("Omgezet naar een zaak"), a board tone. */
22672
+ .cn-status-badge--teal {
22673
+ background-color: var(--cn-status-teal-bg);
22674
+ color: var(--cn-status-teal-text);
22675
+ }
22676
+
22677
+ /* Solid variants — solid background with white text for use on colored backgrounds */
22678
+ .cn-status-badge--solid.cn-status-badge--default {
22679
+ background-color: var(--color-background-dark);
22680
+ color: var(--color-main-text);
22681
+ }
22682
+
22683
+ .cn-status-badge--solid.cn-status-badge--primary {
22684
+ background-color: var(--color-primary-element);
22685
+ color: white;
22686
+ }
22687
+
22688
+ .cn-status-badge--solid.cn-status-badge--success {
22689
+ background-color: var(--color-success);
22690
+ color: white;
22691
+ }
22692
+
22693
+ .cn-status-badge--solid.cn-status-badge--warning {
22694
+ background-color: var(--color-warning);
22695
+ color: var(--color-primary-text);
22696
+ }
22697
+
22698
+ .cn-status-badge--solid.cn-status-badge--error {
22699
+ background-color: var(--color-error);
22700
+ color: white;
22701
+ }
22702
+
22703
+ .cn-status-badge--solid.cn-status-badge--info {
22704
+ background-color: var(--color-info, #0082c9);
22705
+ color: white;
22706
+ }
22707
+
22708
+ .cn-status-badge--solid.cn-status-badge--purple {
22709
+ background-color: var(--cn-status-purple-text);
22710
+ color: white;
22711
+ }
22712
+
22713
+ .cn-status-badge--solid.cn-status-badge--teal {
22714
+ background-color: var(--cn-status-teal-text);
22715
+ color: white;
22716
+ }
22717
+
22718
+
22719
+ /*
22720
+ * The card itself — its box, body stack, icon circle, title and value
22721
+ * typography — is the CANONICAL KPI card in src/css/kpi-card.css, shared with
22722
+ * CnStatsBlock. What remains here is only what is specific to THIS widget: the
22723
+ * range select, the "/ limit" denominator, the trend chip and the error glyph.
22724
+ *
22725
+ * Every size below is expressed against the shared `--cn-kpi-*` scale rather
22726
+ * than as its own number, so the widget's extras re-scale with the card they
22727
+ * sit in. Resist adding card styling back, and resist restating a value the
22728
+ * scale already holds; that is what split the two KPI looks apart in the first
22729
+ * place.
22730
+ */
22731
+
22732
+ /* The title row carries an optional range select beside the label, which the
22733
+ canonical `__title` (a plain truncating heading) does not account for. */
22734
+ .cn-stat-widget__label[data-v-6f90b30c] {
22735
+ display: flex;
22736
+ align-items: center;
22737
+ justify-content: space-between;
22738
+ gap: 8px;
22739
+ width: 100%;
22740
+ }
22741
+
22742
+ /* Stacked tile: the label and its range select centre over the number rather
22743
+ than spreading to the card's edges. */
22744
+ .cn-kpi-card--vertical .cn-stat-widget__label[data-v-6f90b30c] {
22745
+ justify-content: center;
22746
+ width: auto;
22747
+ }
22748
+
22749
+ /* Sized down to sit inside the label row without pushing the tile taller —
22750
+ the tile's height is fixed by its grid cell (ADR-062). */
22751
+ .cn-stat-widget__range[data-v-6f90b30c] {
22752
+ flex: 0 0 auto;
22753
+ max-width: 50%;
22754
+ padding: 0 4px;
22755
+ border: none;
22756
+ border-radius: var(--border-radius);
22757
+ background: transparent;
22758
+ color: var(--cn-kpi-label-color, var(--color-text-maxcontrast));
22759
+ font-size: var(--cn-kpi-label-size, 13px);
22760
+ font-weight: normal;
22761
+ cursor: pointer;
22762
+ }
22763
+ .cn-stat-widget__range[data-v-6f90b30c]:hover,
22764
+ .cn-stat-widget__range[data-v-6f90b30c]:focus-visible {
22765
+ background: var(--color-background-hover);
22766
+ color: var(--color-main-text);
22767
+ }
22768
+
22769
+ /* Badge mode: the pill takes the value's place in the row. Sized to the
22770
+ card's label scale so it sits in the row without pushing the tile taller. */
22771
+ .cn-stat-widget__badge[data-v-6f90b30c] {
22772
+ flex: 0 1 auto;
22773
+ min-width: 0;
22774
+ max-width: 100%;
22775
+ overflow: hidden;
22776
+ text-overflow: ellipsis;
22777
+ font-size: var(--cn-kpi-label-size, 13px);
22778
+ }
22779
+
22780
+ /* The denominator of a "value / limit" pair. Deliberately quieter and smaller
22781
+ than the value: the tile's subject is what the number IS, not what it is
22782
+ allowed to reach. Shares the value's `nowrap` so the pair never breaks. */
22783
+ .cn-stat-widget__limit[data-v-6f90b30c] {
22784
+ flex: 0 0 auto;
22785
+ font-size: var(--cn-kpi-value-size-compact, 1.25rem);
22786
+ font-weight: var(--cn-kpi-title-weight, 600);
22787
+ line-height: var(--cn-kpi-value-line, 1.1);
22788
+ color: var(--cn-kpi-label-color, var(--color-text-maxcontrast));
22789
+ white-space: nowrap;
22790
+ }
22791
+ .cn-stat-widget__trend[data-v-6f90b30c] {
22792
+ display: inline-flex;
22793
+ align-items: center;
22794
+ gap: 2px;
22795
+ font-size: var(--cn-kpi-label-size, 13px);
22796
+ font-weight: var(--cn-kpi-title-weight, 600);
22797
+ }
22798
+
22799
+ /* The dash shown when the number could not be fetched. It stands where the
22800
+ value stands, so it takes the value's size and weight — CnStatsBlock's own
22801
+ error dash is literally a `cn-kpi-card__value`, and two components showing
22802
+ the same failure at two different sizes is the drift this consolidation
22803
+ exists to remove. Only the colour differs: a failure is not a number. */
22804
+ .cn-stat-widget__error[data-v-6f90b30c] {
22805
+ font-size: var(--cn-kpi-value-size, 2rem);
22806
+ font-weight: var(--cn-kpi-value-weight, 700);
22807
+ line-height: var(--cn-kpi-value-line, 1.1);
22808
+ color: var(--cn-kpi-label-color, var(--color-text-maxcontrast));
22809
+ }
22810
+
22342
22811
 
22343
22812
  /*
22344
22813
  * This widget draws no KPI of its own — every tile it shows is a CnStatsBlock,
@@ -22372,67 +22841,97 @@ a.cn-kpi-card--board * {
22372
22841
  * modes render this root, so both collapse. The bug was found on a
22373
22842
  * single-entry stats-block.
22374
22843
  */
22375
- .cn-stats-block-widget[data-v-75d3ad28] {
22844
+ .cn-stats-block-widget[data-v-4341e971] {
22376
22845
  flex: 1 1 auto;
22377
22846
  min-width: 0;
22378
22847
  width: 100%;
22379
22848
  }
22380
- .cn-stats-block-widget--multi[data-v-75d3ad28] {
22849
+ .cn-stats-block-widget--multi[data-v-4341e971] {
22381
22850
  display: flex;
22382
22851
  flex-direction: column;
22383
22852
  gap: var(--cn-kpi-stack-gap, 12px);
22384
22853
  }
22385
22854
 
22386
22855
  /* Rows layout: the board's "label left, number right" card body. */
22387
- .cn-stats-block-widget--rows[data-v-75d3ad28] {
22856
+ .cn-stats-block-widget--rows[data-v-4341e971] {
22388
22857
  display: flex;
22389
22858
  flex-direction: column;
22390
22859
  gap: 12px;
22391
22860
  box-sizing: border-box;
22392
22861
  padding: 20px 22px;
22393
22862
  }
22394
- .cn-stats-block-widget__rows-title[data-v-75d3ad28] {
22863
+ .cn-stats-block-widget__rows-title[data-v-4341e971] {
22395
22864
  margin: 0;
22396
22865
  font-size: 15px;
22397
22866
  font-weight: 600;
22398
22867
  color: var(--color-text-maxcontrast);
22399
22868
  }
22400
- .cn-stats-block-widget__rows[data-v-75d3ad28] {
22869
+
22870
+ /* `width: 100%` plus this padding overflowed the card by 48px: the last
22871
+ column ran past the card's right edge (visible once the tiles have a box). */
22872
+ .cn-stats-block-widget--grid[data-v-4341e971] {
22873
+ box-sizing: border-box;
22874
+ padding: 4px 24px 20px;
22875
+ }
22876
+ .cn-stats-block-widget__grid[data-v-4341e971] {
22877
+ display: grid;
22878
+ grid-template-columns: repeat(var(--cn-stats-block-columns, 2), minmax(0, 1fr));
22879
+ gap: 16px 20px;
22880
+ }
22881
+
22882
+ /* A tile in the grid is a part of the card, not a card: no box, no inset. */
22883
+ .cn-stats-block-widget__grid-stat[data-v-4341e971] {
22884
+ padding: 0;
22885
+ min-width: 0;
22886
+ }
22887
+
22888
+ /* `tiles: "box"`: each tile on a grey ground of its own (board DcRapportages,
22889
+ "Vergaderingen en efficiëntie"), 12px apart. */
22890
+ .cn-stats-block-widget--tiles-box .cn-stats-block-widget__grid[data-v-4341e971] {
22891
+ gap: 12px;
22892
+ }
22893
+ .cn-stats-block-widget--tiles-box .cn-stats-block-widget__grid-stat[data-v-4341e971] {
22894
+ box-sizing: border-box;
22895
+ padding: 14px 16px;
22896
+ border-radius: 10px;
22897
+ background: var(--color-background-hover);
22898
+ }
22899
+ .cn-stats-block-widget__rows[data-v-4341e971] {
22401
22900
  display: flex;
22402
22901
  flex-direction: column;
22403
22902
  gap: 8px;
22404
22903
  margin: 0;
22405
22904
  font-size: 14px;
22406
22905
  }
22407
- .cn-stats-block-widget__row[data-v-75d3ad28] {
22906
+ .cn-stats-block-widget__row[data-v-4341e971] {
22408
22907
  display: flex;
22409
22908
  align-items: baseline;
22410
22909
  justify-content: space-between;
22411
22910
  gap: 16px;
22412
22911
  }
22413
- .cn-stats-block-widget__row-label[data-v-75d3ad28] {
22912
+ .cn-stats-block-widget__row-label[data-v-4341e971] {
22414
22913
  min-width: 0;
22415
22914
  margin: 0;
22416
22915
  overflow: hidden;
22417
22916
  text-overflow: ellipsis;
22418
22917
  }
22419
- .cn-stats-block-widget__row-value[data-v-75d3ad28] {
22918
+ .cn-stats-block-widget__row-value[data-v-4341e971] {
22420
22919
  flex: none;
22421
22920
  margin: 0;
22422
22921
  font-size: 17px;
22423
22922
  font-weight: 700;
22424
22923
  text-align: right;
22425
22924
  }
22426
- .cn-stats-block-widget__row-value--success[data-v-75d3ad28] {
22925
+ .cn-stats-block-widget__row-value--success[data-v-4341e971] {
22427
22926
  color: var(--color-text-success, var(--color-success-text));
22428
22927
  }
22429
- .cn-stats-block-widget__row-value--warning[data-v-75d3ad28] {
22928
+ .cn-stats-block-widget__row-value--warning[data-v-4341e971] {
22430
22929
  color: var(--color-text-warning, var(--color-warning-text));
22431
22930
  }
22432
- .cn-stats-block-widget__row-value--error[data-v-75d3ad28] {
22931
+ .cn-stats-block-widget__row-value--error[data-v-4341e971] {
22433
22932
  color: var(--color-text-error, var(--color-error-text));
22434
22933
  }
22435
- .cn-stats-block-widget__row-value--primary[data-v-75d3ad28] {
22934
+ .cn-stats-block-widget__row-value--primary[data-v-4341e971] {
22436
22935
  color: var(--color-primary-element);
22437
22936
  }
22438
22937
 
@@ -22637,7 +23136,7 @@ a.cn-kpi-card--board * {
22637
23136
  }
22638
23137
 
22639
23138
 
22640
- .cn-object-data-widget__image[data-v-59ab12e6] {
23139
+ .cn-object-data-widget__image[data-v-76edf75d] {
22641
23140
  max-width: 100%;
22642
23141
  max-height: 160px;
22643
23142
  border-radius: 8px;
@@ -22645,33 +23144,33 @@ a.cn-kpi-card--board * {
22645
23144
  }
22646
23145
 
22647
23146
  /* Shimmering placeholder while a relation's display name resolves. */
22648
- .cn-object-data-widget__skeleton[data-v-59ab12e6] {
23147
+ .cn-object-data-widget__skeleton[data-v-76edf75d] {
22649
23148
  display: inline-block;
22650
23149
  width: 90px;
22651
23150
  height: 1em;
22652
23151
  border-radius: 4px;
22653
23152
  background: linear-gradient(90deg, var(--color-background-dark) 25%, var(--color-background-hover) 50%, var(--color-background-dark) 75%);
22654
23153
  background-size: 200% 100%;
22655
- animation: cn-odw-shimmer-59ab12e6 1.2s ease-in-out infinite;
23154
+ animation: cn-odw-shimmer-76edf75d 1.2s ease-in-out infinite;
22656
23155
  }
22657
- @keyframes cn-odw-shimmer-59ab12e6 {
23156
+ @keyframes cn-odw-shimmer-76edf75d {
22658
23157
  from { background-position: 200% 0;
22659
23158
  }
22660
23159
  to { background-position: -200% 0;
22661
23160
  }
22662
23161
  }
22663
23162
  @media (prefers-reduced-motion: reduce) {
22664
- .cn-object-data-widget__skeleton[data-v-59ab12e6] { animation: none;
23163
+ .cn-object-data-widget__skeleton[data-v-76edf75d] { animation: none;
22665
23164
  }
22666
23165
  }
22667
- .cn-object-data-widget__grid[data-v-59ab12e6] {
23166
+ .cn-object-data-widget__grid[data-v-76edf75d] {
22668
23167
  display: grid;
22669
23168
  gap: calc(2 * var(--default-grid-baseline, 4px)) calc(4 * var(--default-grid-baseline, 4px));
22670
23169
  }
22671
- .cn-object-data-widget__toggle[data-v-59ab12e6] {
23170
+ .cn-object-data-widget__toggle[data-v-76edf75d] {
22672
23171
  margin-top: 4px;
22673
23172
  }
22674
- .cn-object-data-widget__cell[data-v-59ab12e6] {
23173
+ .cn-object-data-widget__cell[data-v-76edf75d] {
22675
23174
  display: flex;
22676
23175
  flex-direction: column;
22677
23176
  gap: 2px;
@@ -22679,12 +23178,12 @@ to { background-position: -200% 0;
22679
23178
  border-bottom: 1px solid var(--color-border-dark);
22680
23179
  min-width: 0;
22681
23180
  }
22682
- .cn-object-data-widget__label[data-v-59ab12e6] {
23181
+ .cn-object-data-widget__label[data-v-76edf75d] {
22683
23182
  font-size: 0.85em;
22684
23183
  color: var(--color-text-maxcontrast);
22685
23184
  font-weight: 500;
22686
23185
  }
22687
- .cn-object-data-widget__value[data-v-59ab12e6] {
23186
+ .cn-object-data-widget__value[data-v-76edf75d] {
22688
23187
  font-size: 1em;
22689
23188
  color: var(--color-main-text);
22690
23189
  overflow-wrap: anywhere;
@@ -22698,24 +23197,24 @@ to { background-position: -200% 0;
22698
23197
  which drew a horizontal scrollbar under every data widget in a tab (dossiq's
22699
23198
  case page, Data tab). The end padding drops by the same 4px so the text and
22700
23199
  the edit icon sit where they sat. */
22701
- .cn-object-data-widget__value--editable[data-v-59ab12e6] {
23200
+ .cn-object-data-widget__value--editable[data-v-76edf75d] {
22702
23201
  cursor: pointer;
22703
23202
  border-radius: var(--border-radius);
22704
23203
  padding: 4px 20px 4px 4px;
22705
23204
  margin: -4px 0 -4px -4px;
22706
23205
  }
22707
- .cn-object-data-widget__value--editable[data-v-59ab12e6]:hover {
23206
+ .cn-object-data-widget__value--editable[data-v-76edf75d]:hover {
22708
23207
  background: var(--color-background-dark);
22709
23208
  }
22710
- .cn-object-data-widget__value--editable[data-v-59ab12e6]:focus-visible {
23209
+ .cn-object-data-widget__value--editable[data-v-76edf75d]:focus-visible {
22711
23210
  outline: 2px solid var(--color-primary-element);
22712
23211
  outline-offset: 2px;
22713
23212
  }
22714
- .cn-object-data-widget__value--empty[data-v-59ab12e6] {
23213
+ .cn-object-data-widget__value--empty[data-v-76edf75d] {
22715
23214
  color: var(--color-text-maxcontrast);
22716
23215
  font-style: italic;
22717
23216
  }
22718
- .cn-object-data-widget__edit-icon[data-v-59ab12e6] {
23217
+ .cn-object-data-widget__edit-icon[data-v-76edf75d] {
22719
23218
  position: absolute;
22720
23219
  right: 4px;
22721
23220
  top: 50%;
@@ -22724,21 +23223,21 @@ to { background-position: -200% 0;
22724
23223
  opacity: 0;
22725
23224
  transition: opacity 0.15s ease;
22726
23225
  }
22727
- .cn-object-data-widget__value--editable:hover .cn-object-data-widget__edit-icon[data-v-59ab12e6],
22728
- .cn-object-data-widget__value--editable:focus-visible .cn-object-data-widget__edit-icon[data-v-59ab12e6] {
23226
+ .cn-object-data-widget__value--editable:hover .cn-object-data-widget__edit-icon[data-v-76edf75d],
23227
+ .cn-object-data-widget__value--editable:focus-visible .cn-object-data-widget__edit-icon[data-v-76edf75d] {
22729
23228
  opacity: 1;
22730
23229
  }
22731
- .cn-object-data-widget__editor[data-v-59ab12e6] {
23230
+ .cn-object-data-widget__editor[data-v-76edf75d] {
22732
23231
  display: flex;
22733
23232
  flex-direction: column;
22734
23233
  gap: 4px;
22735
23234
  }
22736
- .cn-object-data-widget__editor-actions[data-v-59ab12e6] {
23235
+ .cn-object-data-widget__editor-actions[data-v-76edf75d] {
22737
23236
  display: flex;
22738
23237
  gap: 2px;
22739
23238
  justify-content: flex-end;
22740
23239
  }
22741
- .cn-object-data-widget__textarea[data-v-59ab12e6] {
23240
+ .cn-object-data-widget__textarea[data-v-76edf75d] {
22742
23241
  width: 100%;
22743
23242
  min-height: 80px;
22744
23243
  padding: 8px;
@@ -22750,11 +23249,11 @@ to { background-position: -200% 0;
22750
23249
  font-size: inherit;
22751
23250
  resize: vertical;
22752
23251
  }
22753
- .cn-object-data-widget__textarea[data-v-59ab12e6]:focus {
23252
+ .cn-object-data-widget__textarea[data-v-76edf75d]:focus {
22754
23253
  border-color: var(--color-primary-element);
22755
23254
  outline: none;
22756
23255
  }
22757
- .cn-object-data-widget__empty[data-v-59ab12e6] {
23256
+ .cn-object-data-widget__empty[data-v-76edf75d] {
22758
23257
  color: var(--color-text-maxcontrast);
22759
23258
  font-style: italic;
22760
23259
  padding: calc(2 * var(--default-grid-baseline, 4px));
@@ -22762,16 +23261,16 @@ to { background-position: -200% 0;
22762
23261
 
22763
23262
  /* Compact inline table for array-of-objects values. Dense + unstyled-simple;
22764
23263
  fits the card and participates in the whole-row overflow handling. */
22765
- .cn-object-data-widget__mini-table-wrap[data-v-59ab12e6] {
23264
+ .cn-object-data-widget__mini-table-wrap[data-v-76edf75d] {
22766
23265
  max-width: 100%;
22767
23266
  }
22768
- .cn-object-data-widget__mini-table[data-v-59ab12e6] {
23267
+ .cn-object-data-widget__mini-table[data-v-76edf75d] {
22769
23268
  width: 100%;
22770
23269
  border-collapse: collapse;
22771
23270
  font-size: 0.9em;
22772
23271
  }
22773
- .cn-object-data-widget__mini-table th[data-v-59ab12e6],
22774
- .cn-object-data-widget__mini-table td[data-v-59ab12e6] {
23272
+ .cn-object-data-widget__mini-table th[data-v-76edf75d],
23273
+ .cn-object-data-widget__mini-table td[data-v-76edf75d] {
22775
23274
  text-align: start;
22776
23275
  padding: 2px 8px 2px 0;
22777
23276
  border-bottom: 1px solid var(--color-border);
@@ -22782,23 +23281,23 @@ to { background-position: -200% 0;
22782
23281
  cell, and the card 8px wider than its cell (pipelinq's ticket page). */
22783
23282
  white-space: normal;
22784
23283
  }
22785
- .cn-object-data-widget__mini-table th[data-v-59ab12e6] {
23284
+ .cn-object-data-widget__mini-table th[data-v-76edf75d] {
22786
23285
  color: var(--color-text-maxcontrast);
22787
23286
  font-weight: 500;
22788
23287
  }
22789
- .cn-object-data-widget__more[data-v-59ab12e6] {
23288
+ .cn-object-data-widget__more[data-v-76edf75d] {
22790
23289
  margin-top: 2px;
22791
23290
  font-size: 0.85em;
22792
23291
  color: var(--color-text-maxcontrast);
22793
23292
  }
22794
23293
 
22795
23294
  /* Comma-less chip row for array-of-scalars values. */
22796
- .cn-object-data-widget__chips[data-v-59ab12e6] {
23295
+ .cn-object-data-widget__chips[data-v-76edf75d] {
22797
23296
  display: flex;
22798
23297
  flex-wrap: wrap;
22799
23298
  gap: 4px;
22800
23299
  }
22801
- .cn-object-data-widget__chip[data-v-59ab12e6] {
23300
+ .cn-object-data-widget__chip[data-v-76edf75d] {
22802
23301
  padding: 1px 8px;
22803
23302
  border-radius: 12px;
22804
23303
  background: var(--color-background-dark);
@@ -22806,27 +23305,27 @@ to { background-position: -200% 0;
22806
23305
  }
22807
23306
 
22808
23307
  /* Key: value definition list for a single plain-object value. */
22809
- .cn-object-data-widget__deflist[data-v-59ab12e6] {
23308
+ .cn-object-data-widget__deflist[data-v-76edf75d] {
22810
23309
  display: grid;
22811
23310
  grid-template-columns: auto 1fr;
22812
23311
  gap: 2px 8px;
22813
23312
  margin: 0;
22814
23313
  }
22815
- .cn-object-data-widget__deflist dt[data-v-59ab12e6] {
23314
+ .cn-object-data-widget__deflist dt[data-v-76edf75d] {
22816
23315
  color: var(--color-text-maxcontrast);
22817
23316
  font-size: 0.9em;
22818
23317
  }
22819
- .cn-object-data-widget__deflist dd[data-v-59ab12e6] {
23318
+ .cn-object-data-widget__deflist dd[data-v-76edf75d] {
22820
23319
  margin: 0;
22821
23320
  overflow-wrap: anywhere;
22822
23321
  }
22823
23322
 
22824
23323
  /* Responsive: collapse to single column on narrow widths */
22825
23324
  @media (max-width: 600px) {
22826
- .cn-object-data-widget__grid[data-v-59ab12e6] {
23325
+ .cn-object-data-widget__grid[data-v-76edf75d] {
22827
23326
  grid-template-columns: 1fr !important;
22828
23327
  }
22829
- .cn-object-data-widget__cell[data-v-59ab12e6] {
23328
+ .cn-object-data-widget__cell[data-v-76edf75d] {
22830
23329
  grid-column: span 1 !important;
22831
23330
  grid-row: span 1 !important;
22832
23331
  }
@@ -24538,7 +25037,7 @@ button.cn-stepper__step[data-v-776581d4] {
24538
25037
 
24539
25038
 
24540
25039
  /* A stack (`widgetIds`): the panel's widget, then cards 20px apart. */
24541
- .cn-tabs-widget__stack[data-v-9ccd8dee] {
25040
+ .cn-tabs-widget__stack[data-v-0ad78042] {
24542
25041
  display: flex;
24543
25042
  flex-direction: column;
24544
25043
  gap: 20px;
@@ -24547,19 +25046,19 @@ button.cn-stepper__step[data-v-776581d4] {
24547
25046
  /* A gridded stack (`columns` / `layout` on the tab): 12 columns, widgets wrap
24548
25047
  onto the next row, a row's cards as tall as the tallest. Narrow, it is the
24549
25048
  plain stack again. */
24550
- .cn-tabs-widget__stack--grid[data-v-9ccd8dee] {
25049
+ .cn-tabs-widget__stack--grid[data-v-0ad78042] {
24551
25050
  display: grid;
24552
25051
  grid-template-columns: repeat(12, minmax(0, 1fr));
24553
25052
  align-items: stretch;
24554
25053
  }
24555
- .cn-tabs-widget__stack--grid[data-v-9ccd8dee] > * {
25054
+ .cn-tabs-widget__stack--grid[data-v-0ad78042] > * {
24556
25055
  min-width: 0;
24557
25056
  }
24558
25057
  @media (max-width: 700px) {
24559
- .cn-tabs-widget__stack--grid[data-v-9ccd8dee] {
25058
+ .cn-tabs-widget__stack--grid[data-v-0ad78042] {
24560
25059
  grid-template-columns: minmax(0, 1fr);
24561
25060
  }
24562
- .cn-tabs-widget__stack--grid[data-v-9ccd8dee] > * {
25061
+ .cn-tabs-widget__stack--grid[data-v-0ad78042] > * {
24563
25062
  grid-column: auto !important;
24564
25063
  }
24565
25064
  }
@@ -24593,7 +25092,7 @@ button.cn-stepper__step[data-v-776581d4] {
24593
25092
  `!important` or on load order this library does not control. The same
24594
25093
  technique, for the same reason, is used on `.cn-tabs__nav .cn-tabs__nav-item`
24595
25094
  in CnTabs to beat Nextcloud's own button margin. */
24596
- .cn-tabs-widget.cn-tabs-widget[data-v-9ccd8dee] {
25095
+ .cn-tabs-widget.cn-tabs-widget[data-v-0ad78042] {
24597
25096
  background-color: transparent;
24598
25097
  border: 0;
24599
25098
  border-radius: 0;
@@ -24617,12 +25116,12 @@ button.cn-stepper__step[data-v-776581d4] {
24617
25116
  below it: the rule ran straight on to the widget's edge and read as a
24618
25117
  border sticking out past a rounded corner (Ruben, 2026-09-13). Ending it
24619
25118
  where the curve begins makes the rule and the curve one continuous edge. */
24620
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__bar {
25119
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__bar {
24621
25120
  border-bottom: none;
24622
25121
  padding: 0;
24623
25122
  position: relative;
24624
25123
  }
24625
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__bar::after {
25124
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__bar::after {
24626
25125
  border-bottom: 1px solid var(--color-border);
24627
25126
  content: '';
24628
25127
  inset-block-end: 0;
@@ -24635,11 +25134,11 @@ button.cn-stepper__step[data-v-776581d4] {
24635
25134
  own background-coloured bottom edge, which only works if it paints ABOVE the
24636
25135
  pseudo-element: a positioned pseudo-element otherwise paints over every
24637
25136
  in-flow sibling, rule included. */
24638
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__nav-item--active {
25137
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__nav-item--active {
24639
25138
  position: relative;
24640
25139
  z-index: 1;
24641
25140
  }
24642
- .cn-tabs-widget__tabs[data-v-9ccd8dee] {
25141
+ .cn-tabs-widget__tabs[data-v-0ad78042] {
24643
25142
  display: flex;
24644
25143
  flex-direction: column;
24645
25144
  /* Grow to the widget's height, so the panel fills the grid cell the
@@ -24657,7 +25156,7 @@ button.cn-stepper__step[data-v-776581d4] {
24657
25156
  the open tab, but padding sits inside the painted box — only a margin would
24658
25157
  have opened that gap, and a zero top put every panel's content against the
24659
25158
  strip. */
24660
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__content {
25159
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__content {
24661
25160
  background-color: var(--color-main-background);
24662
25161
  /* Three sides only: the bar's rule (redrawn above, stopping at the corner)
24663
25162
  is this sheet's top edge, and the open tab erases the slice of it
@@ -24677,7 +25176,7 @@ button.cn-stepper__step[data-v-776581d4] {
24677
25176
  overflow: auto;
24678
25177
  padding: 12px;
24679
25178
  }
24680
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tab {
25179
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tab {
24681
25180
  height: 100%;
24682
25181
  }
24683
25182
 
@@ -24685,15 +25184,15 @@ button.cn-stepper__step[data-v-776581d4] {
24685
25184
  (margin 0 -16px -16px). The panel of a tab pads 12px, so on a tab that
24686
25185
  holds the list directly the footer stuck out 4px on the right and at the
24687
25186
  bottom and made the panel scroll. It bleeds exactly the panel's padding. */
24688
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
25187
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
24689
25188
  margin: auto -12px -12px;
24690
25189
  }
24691
- .cn-tabs-widget__title[data-v-9ccd8dee] {
25190
+ .cn-tabs-widget__title[data-v-0ad78042] {
24692
25191
  align-items: center;
24693
25192
  display: inline-flex;
24694
25193
  gap: 6px;
24695
25194
  }
24696
- .cn-tabs-widget__title-icon[data-v-9ccd8dee] {
25195
+ .cn-tabs-widget__title-icon[data-v-0ad78042] {
24697
25196
  flex: 0 0 auto;
24698
25197
  }
24699
25198
 
@@ -28066,214 +28565,6 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28066
28565
  background: transparent;
28067
28566
  }
28068
28567
 
28069
- /* ========================================
28070
- @conduction/nextcloud-vue — Status Badge
28071
- ======================================== */
28072
-
28073
- /* The two board tones without a Nextcloud colour role (screens-cell-pill-parity).
28074
- A theme may redefine them; the six role variants below use Nextcloud's own. */
28075
- :root {
28076
- --cn-status-purple-bg: #e8e6f6;
28077
- --cn-status-purple-text: #4a3f8f;
28078
- --cn-status-teal-bg: #e3f1f3;
28079
- --cn-status-teal-text: #1d5e66;
28080
- }
28081
-
28082
- .cn-status-badge {
28083
- display: inline-flex;
28084
- align-items: center;
28085
- gap: calc(0.5 * var(--default-grid-baseline));
28086
- padding: calc(0.5 * var(--default-grid-baseline)) calc(2.5 * var(--default-grid-baseline));
28087
- border-radius: var(--border-radius-pill);
28088
- font-size: 0.85em;
28089
- font-weight: 500;
28090
- line-height: 1.4;
28091
- white-space: nowrap;
28092
- }
28093
-
28094
- /* Size variants */
28095
- .cn-status-badge--small {
28096
- padding: calc(0.25 * var(--default-grid-baseline)) calc(2 * var(--default-grid-baseline));
28097
- font-size: 0.75em;
28098
- }
28099
-
28100
- /* Color variants */
28101
- .cn-status-badge--default {
28102
- background-color: var(--color-background-dark);
28103
- color: var(--color-main-text);
28104
- }
28105
-
28106
- .cn-status-badge--primary {
28107
- background-color: var(--color-primary-element-light);
28108
- color: var(--color-primary-element);
28109
- }
28110
-
28111
- .cn-status-badge--success {
28112
- background-color: var(--color-success-light, rgba(70, 186, 97, 0.15));
28113
- color: var(--color-success-text, var(--color-success));
28114
- }
28115
-
28116
- .cn-status-badge--warning {
28117
- background-color: var(--color-warning-light, rgba(232, 163, 39, 0.15));
28118
- color: var(--color-warning-text, var(--color-warning));
28119
- }
28120
-
28121
- .cn-status-badge--error {
28122
- background-color: var(--color-error-light, rgba(224, 68, 68, 0.15));
28123
- color: var(--color-error-text, var(--color-error));
28124
- }
28125
-
28126
- .cn-status-badge--info {
28127
- background-color: var(--color-info-light, rgba(0, 130, 201, 0.15));
28128
- color: var(--color-info-text, var(--color-info, #0082c9));
28129
- }
28130
-
28131
- /* Work in progress ("In behandeling"), a board tone. */
28132
- .cn-status-badge--purple {
28133
- background-color: var(--cn-status-purple-bg);
28134
- color: var(--cn-status-purple-text);
28135
- }
28136
-
28137
- /* Handed on ("Omgezet naar een zaak"), a board tone. */
28138
- .cn-status-badge--teal {
28139
- background-color: var(--cn-status-teal-bg);
28140
- color: var(--cn-status-teal-text);
28141
- }
28142
-
28143
- /* Solid variants — solid background with white text for use on colored backgrounds */
28144
- .cn-status-badge--solid.cn-status-badge--default {
28145
- background-color: var(--color-background-dark);
28146
- color: var(--color-main-text);
28147
- }
28148
-
28149
- .cn-status-badge--solid.cn-status-badge--primary {
28150
- background-color: var(--color-primary-element);
28151
- color: white;
28152
- }
28153
-
28154
- .cn-status-badge--solid.cn-status-badge--success {
28155
- background-color: var(--color-success);
28156
- color: white;
28157
- }
28158
-
28159
- .cn-status-badge--solid.cn-status-badge--warning {
28160
- background-color: var(--color-warning);
28161
- color: var(--color-primary-text);
28162
- }
28163
-
28164
- .cn-status-badge--solid.cn-status-badge--error {
28165
- background-color: var(--color-error);
28166
- color: white;
28167
- }
28168
-
28169
- .cn-status-badge--solid.cn-status-badge--info {
28170
- background-color: var(--color-info, #0082c9);
28171
- color: white;
28172
- }
28173
-
28174
- .cn-status-badge--solid.cn-status-badge--purple {
28175
- background-color: var(--cn-status-purple-text);
28176
- color: white;
28177
- }
28178
-
28179
- .cn-status-badge--solid.cn-status-badge--teal {
28180
- background-color: var(--cn-status-teal-text);
28181
- color: white;
28182
- }
28183
-
28184
-
28185
- /*
28186
- * The card itself — its box, body stack, icon circle, title and value
28187
- * typography — is the CANONICAL KPI card in src/css/kpi-card.css, shared with
28188
- * CnStatsBlock. What remains here is only what is specific to THIS widget: the
28189
- * range select, the "/ limit" denominator, the trend chip and the error glyph.
28190
- *
28191
- * Every size below is expressed against the shared `--cn-kpi-*` scale rather
28192
- * than as its own number, so the widget's extras re-scale with the card they
28193
- * sit in. Resist adding card styling back, and resist restating a value the
28194
- * scale already holds; that is what split the two KPI looks apart in the first
28195
- * place.
28196
- */
28197
-
28198
- /* The title row carries an optional range select beside the label, which the
28199
- canonical `__title` (a plain truncating heading) does not account for. */
28200
- .cn-stat-widget__label[data-v-50eb91c3] {
28201
- display: flex;
28202
- align-items: center;
28203
- justify-content: space-between;
28204
- gap: 8px;
28205
- width: 100%;
28206
- }
28207
-
28208
- /* Stacked tile: the label and its range select centre over the number rather
28209
- than spreading to the card's edges. */
28210
- .cn-kpi-card--vertical .cn-stat-widget__label[data-v-50eb91c3] {
28211
- justify-content: center;
28212
- width: auto;
28213
- }
28214
-
28215
- /* Sized down to sit inside the label row without pushing the tile taller —
28216
- the tile's height is fixed by its grid cell (ADR-062). */
28217
- .cn-stat-widget__range[data-v-50eb91c3] {
28218
- flex: 0 0 auto;
28219
- max-width: 50%;
28220
- padding: 0 4px;
28221
- border: none;
28222
- border-radius: var(--border-radius);
28223
- background: transparent;
28224
- color: var(--cn-kpi-label-color, var(--color-text-maxcontrast));
28225
- font-size: var(--cn-kpi-label-size, 13px);
28226
- font-weight: normal;
28227
- cursor: pointer;
28228
- }
28229
- .cn-stat-widget__range[data-v-50eb91c3]:hover,
28230
- .cn-stat-widget__range[data-v-50eb91c3]:focus-visible {
28231
- background: var(--color-background-hover);
28232
- color: var(--color-main-text);
28233
- }
28234
-
28235
- /* Badge mode: the pill takes the value's place in the row. Sized to the
28236
- card's label scale so it sits in the row without pushing the tile taller. */
28237
- .cn-stat-widget__badge[data-v-50eb91c3] {
28238
- flex: 0 1 auto;
28239
- min-width: 0;
28240
- max-width: 100%;
28241
- overflow: hidden;
28242
- text-overflow: ellipsis;
28243
- font-size: var(--cn-kpi-label-size, 13px);
28244
- }
28245
-
28246
- /* The denominator of a "value / limit" pair. Deliberately quieter and smaller
28247
- than the value: the tile's subject is what the number IS, not what it is
28248
- allowed to reach. Shares the value's `nowrap` so the pair never breaks. */
28249
- .cn-stat-widget__limit[data-v-50eb91c3] {
28250
- flex: 0 0 auto;
28251
- font-size: var(--cn-kpi-value-size-compact, 1.25rem);
28252
- font-weight: var(--cn-kpi-title-weight, 600);
28253
- line-height: var(--cn-kpi-value-line, 1.1);
28254
- color: var(--cn-kpi-label-color, var(--color-text-maxcontrast));
28255
- white-space: nowrap;
28256
- }
28257
- .cn-stat-widget__trend[data-v-50eb91c3] {
28258
- display: inline-flex;
28259
- align-items: center;
28260
- gap: 2px;
28261
- font-size: var(--cn-kpi-label-size, 13px);
28262
- font-weight: var(--cn-kpi-title-weight, 600);
28263
- }
28264
-
28265
- /* The dash shown when the number could not be fetched. It stands where the
28266
- value stands, so it takes the value's size and weight — CnStatsBlock's own
28267
- error dash is literally a `cn-kpi-card__value`, and two components showing
28268
- the same failure at two different sizes is the drift this consolidation
28269
- exists to remove. Only the colour differs: a failure is not a number. */
28270
- .cn-stat-widget__error[data-v-50eb91c3] {
28271
- font-size: var(--cn-kpi-value-size, 2rem);
28272
- font-weight: var(--cn-kpi-value-weight, 700);
28273
- line-height: var(--cn-kpi-value-line, 1.1);
28274
- color: var(--cn-kpi-label-color, var(--color-text-maxcontrast));
28275
- }
28276
-
28277
28568
 
28278
28569
  .cn-delta-form[data-v-59878180] {
28279
28570
  display: flex;
@@ -28310,7 +28601,7 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28310
28601
 
28311
28602
  /* The percentage-change chip beside the value. Tinted good/bad at runtime from
28312
28603
  * `goodDirection`, so the colour is an inline style, not a class. */
28313
- .cn-delta-widget__delta[data-v-66680dc6] {
28604
+ .cn-delta-widget__delta[data-v-ee481872] {
28314
28605
  display: inline-flex;
28315
28606
  align-items: center;
28316
28607
  gap: 2px;
@@ -28321,7 +28612,7 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28321
28612
  /* The dash shown when the number could not be fetched. It stands where the
28322
28613
  * value stands, so it takes the value's size and weight — only the colour
28323
28614
  * differs, because a failure is not a number. */
28324
- .cn-delta-widget__error[data-v-66680dc6] {
28615
+ .cn-delta-widget__error[data-v-ee481872] {
28325
28616
  font-size: var(--cn-kpi-value-size, 2rem);
28326
28617
  font-weight: var(--cn-kpi-value-weight, 700);
28327
28618
  line-height: var(--cn-kpi-value-line, 1.1);
@@ -28352,7 +28643,7 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28352
28643
  }
28353
28644
 
28354
28645
 
28355
- .cn-gauge-widget[data-v-0ac8e0e8] {
28646
+ .cn-gauge-widget[data-v-006ab8f8] {
28356
28647
  display: flex;
28357
28648
  flex-direction: column;
28358
28649
  gap: 8px;
@@ -28360,58 +28651,58 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28360
28651
  }
28361
28652
 
28362
28653
  /* Whole-tile click target when the widget declares a `route`/`link`. */
28363
- .cn-gauge-widget--linked[data-v-0ac8e0e8] {
28654
+ .cn-gauge-widget--linked[data-v-006ab8f8] {
28364
28655
  cursor: pointer;
28365
28656
  text-decoration: none;
28366
28657
  color: inherit;
28367
28658
  border-radius: var(--border-radius-large, 8px);
28368
28659
  transition: background-color 0.1s ease-in-out;
28369
28660
  }
28370
- .cn-gauge-widget--linked[data-v-0ac8e0e8]:hover {
28661
+ .cn-gauge-widget--linked[data-v-006ab8f8]:hover {
28371
28662
  background-color: var(--color-background-hover);
28372
28663
  }
28373
- .cn-gauge-widget--linked[data-v-0ac8e0e8]:focus-visible {
28664
+ .cn-gauge-widget--linked[data-v-006ab8f8]:focus-visible {
28374
28665
  outline: 2px solid var(--color-primary-element);
28375
28666
  outline-offset: 2px;
28376
28667
  }
28377
- .cn-gauge-widget__head[data-v-0ac8e0e8] {
28668
+ .cn-gauge-widget__head[data-v-006ab8f8] {
28378
28669
  display: flex;
28379
28670
  align-items: baseline;
28380
28671
  justify-content: space-between;
28381
28672
  gap: 8px;
28382
28673
  }
28383
- .cn-gauge-widget__label[data-v-0ac8e0e8] {
28674
+ .cn-gauge-widget__label[data-v-006ab8f8] {
28384
28675
  font-size: 0.95em;
28385
28676
  font-weight: 600;
28386
28677
  color: var(--color-main-text);
28387
28678
  }
28388
- .cn-gauge-widget__pct[data-v-0ac8e0e8] {
28679
+ .cn-gauge-widget__pct[data-v-006ab8f8] {
28389
28680
  font-size: 1.2em;
28390
28681
  font-weight: 700;
28391
28682
  }
28392
- .cn-gauge-widget__track[data-v-0ac8e0e8] {
28683
+ .cn-gauge-widget__track[data-v-006ab8f8] {
28393
28684
  width: 100%;
28394
28685
  height: 10px;
28395
28686
  border-radius: 5px;
28396
28687
  background: var(--color-background-dark);
28397
28688
  overflow: hidden;
28398
28689
  }
28399
- .cn-gauge-widget__fill[data-v-0ac8e0e8] {
28690
+ .cn-gauge-widget__fill[data-v-006ab8f8] {
28400
28691
  height: 100%;
28401
28692
  border-radius: 5px;
28402
28693
  transition: width 0.3s ease;
28403
28694
  }
28404
- .cn-gauge-widget__foot[data-v-0ac8e0e8] {
28695
+ .cn-gauge-widget__foot[data-v-006ab8f8] {
28405
28696
  display: flex;
28406
28697
  align-items: baseline;
28407
28698
  gap: 6px;
28408
28699
  font-size: 0.9em;
28409
28700
  }
28410
- .cn-gauge-widget__value[data-v-0ac8e0e8] {
28701
+ .cn-gauge-widget__value[data-v-006ab8f8] {
28411
28702
  font-weight: 700;
28412
28703
  color: var(--color-main-text);
28413
28704
  }
28414
- .cn-gauge-widget__target[data-v-0ac8e0e8] {
28705
+ .cn-gauge-widget__target[data-v-006ab8f8] {
28415
28706
  color: var(--color-text-maxcontrast);
28416
28707
  }
28417
28708
 
@@ -28971,34 +29262,34 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
28971
29262
  }
28972
29263
 
28973
29264
 
28974
- .cn-field-list-widget[data-v-7d90316d] {
29265
+ .cn-field-list-widget[data-v-643f1dd6] {
28975
29266
  display: flex;
28976
29267
  flex-direction: column;
28977
29268
  gap: 12px;
28978
29269
  min-width: 0;
28979
29270
  }
28980
- .cn-field-list-widget__rows[data-v-7d90316d] {
29271
+ .cn-field-list-widget__rows[data-v-643f1dd6] {
28981
29272
  list-style: none;
28982
29273
  margin: 0;
28983
29274
  padding: 0;
28984
29275
  display: flex;
28985
29276
  flex-direction: column;
28986
29277
  }
28987
- .cn-field-list-widget__row[data-v-7d90316d] {
29278
+ .cn-field-list-widget__row[data-v-643f1dd6] {
28988
29279
  padding: 10px 0;
28989
29280
  border-top: 1px solid var(--color-border);
28990
29281
  }
28991
- .cn-field-list-widget__row[data-v-7d90316d]:first-child {
29282
+ .cn-field-list-widget__row[data-v-643f1dd6]:first-child {
28992
29283
  border-top: none;
28993
29284
  padding-top: 0;
28994
29285
  }
28995
- .cn-field-list-widget__line[data-v-7d90316d] {
29286
+ .cn-field-list-widget__line[data-v-643f1dd6] {
28996
29287
  display: flex;
28997
29288
  align-items: center;
28998
29289
  gap: 12px;
28999
29290
  min-width: 0;
29000
29291
  }
29001
- .cn-field-list-widget__avatar[data-v-7d90316d] {
29292
+ .cn-field-list-widget__avatar[data-v-643f1dd6] {
29002
29293
  flex: 0 0 auto;
29003
29294
  display: inline-flex;
29004
29295
  align-items: center;
@@ -29011,64 +29302,69 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29011
29302
  font-size: 12px;
29012
29303
  font-weight: 700;
29013
29304
  }
29014
- .cn-field-list-widget__main[data-v-7d90316d] {
29305
+ .cn-field-list-widget__main[data-v-643f1dd6] {
29015
29306
  display: flex;
29016
29307
  flex-direction: column;
29017
29308
  flex: 1 1 auto;
29018
29309
  min-width: 0;
29019
29310
  }
29020
- .cn-field-list-widget__title[data-v-7d90316d] {
29311
+ .cn-field-list-widget__title[data-v-643f1dd6] {
29021
29312
  font-weight: 600;
29022
29313
  overflow-wrap: anywhere;
29023
29314
  }
29024
- .cn-field-list-widget__meta[data-v-7d90316d],
29025
- .cn-field-list-widget__aside[data-v-7d90316d],
29026
- .cn-field-list-widget__detail[data-v-7d90316d],
29027
- .cn-field-list-widget__hint[data-v-7d90316d],
29028
- .cn-field-list-widget__empty[data-v-7d90316d] {
29315
+ .cn-field-list-widget__meta[data-v-643f1dd6],
29316
+ .cn-field-list-widget__aside[data-v-643f1dd6],
29317
+ .cn-field-list-widget__detail[data-v-643f1dd6],
29318
+ .cn-field-list-widget__hint[data-v-643f1dd6],
29319
+ .cn-field-list-widget__empty[data-v-643f1dd6] {
29029
29320
  color: var(--color-text-maxcontrast);
29030
29321
  }
29031
- .cn-field-list-widget__meta[data-v-7d90316d],
29032
- .cn-field-list-widget__aside[data-v-7d90316d],
29033
- .cn-field-list-widget__detail[data-v-7d90316d] {
29322
+ .cn-field-list-widget__meta[data-v-643f1dd6],
29323
+ .cn-field-list-widget__aside[data-v-643f1dd6],
29324
+ .cn-field-list-widget__copies[data-v-643f1dd6] {
29325
+ display: flex;
29326
+ flex-wrap: wrap;
29327
+ gap: 4px;
29328
+ }
29329
+ .cn-field-list-widget__detail[data-v-643f1dd6] {
29034
29330
  font-size: 13px;
29035
29331
  }
29036
- .cn-field-list-widget__aside[data-v-7d90316d] {
29332
+ .cn-field-list-widget__aside[data-v-643f1dd6] {
29037
29333
  white-space: nowrap;
29038
29334
  }
29039
- .cn-field-list-widget__detail[data-v-7d90316d],
29040
- .cn-field-list-widget__hint[data-v-7d90316d],
29041
- .cn-field-list-widget__empty[data-v-7d90316d] {
29335
+ .cn-field-list-widget__detail[data-v-643f1dd6],
29336
+ .cn-field-list-widget__hint[data-v-643f1dd6],
29337
+ .cn-field-list-widget__empty[data-v-643f1dd6] {
29042
29338
  margin: 4px 0 0;
29043
29339
  overflow-wrap: anywhere;
29044
29340
  }
29045
- .cn-field-list-widget__add[data-v-7d90316d] {
29341
+ .cn-field-list-widget__add[data-v-643f1dd6] {
29046
29342
  display: flex;
29047
29343
  flex-wrap: wrap;
29048
29344
  align-items: flex-end;
29049
29345
  gap: 8px 12px;
29050
29346
  }
29051
- .cn-field-list-widget__add[data-v-7d90316d] > * {
29347
+ .cn-field-list-widget__add[data-v-643f1dd6] > * {
29052
29348
  flex: 1 1 180px;
29053
29349
  }
29054
- .cn-field-list-widget__add > button[data-v-7d90316d] {
29350
+ .cn-field-list-widget__add > button[data-v-643f1dd6] {
29055
29351
  flex: 0 0 auto;
29056
29352
  }
29057
- .cn-field-list-widget__toolbar[data-v-7d90316d] {
29353
+ .cn-field-list-widget__toolbar[data-v-643f1dd6] {
29058
29354
  display: flex;
29059
29355
  justify-content: flex-end;
29060
29356
  }
29061
- .cn-field-list-widget__table-wrap[data-v-7d90316d] {
29357
+ .cn-field-list-widget__table-wrap[data-v-643f1dd6] {
29062
29358
  display: flex;
29063
29359
  flex-direction: column;
29064
29360
  gap: 12px;
29065
29361
  overflow-x: auto;
29066
29362
  }
29067
- .cn-field-list-widget__table[data-v-7d90316d] {
29363
+ .cn-field-list-widget__table[data-v-643f1dd6] {
29068
29364
  width: 100%;
29069
29365
  border-collapse: collapse;
29070
29366
  }
29071
- .cn-field-list-widget__th[data-v-7d90316d] {
29367
+ .cn-field-list-widget__th[data-v-643f1dd6] {
29072
29368
  padding: 8px 12px;
29073
29369
  text-align: start;
29074
29370
  font-size: 13px;
@@ -29077,27 +29373,27 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29077
29373
  color: var(--color-text-maxcontrast);
29078
29374
  background: var(--color-background-hover);
29079
29375
  }
29080
- .cn-field-list-widget__th--menu[data-v-7d90316d],
29081
- .cn-field-list-widget__td--menu[data-v-7d90316d] {
29376
+ .cn-field-list-widget__th--menu[data-v-643f1dd6],
29377
+ .cn-field-list-widget__td--menu[data-v-643f1dd6] {
29082
29378
  width: 1%;
29083
29379
  text-align: end;
29084
29380
  }
29085
- .cn-field-list-widget__tr[data-v-7d90316d] {
29381
+ .cn-field-list-widget__tr[data-v-643f1dd6] {
29086
29382
  border-top: 1px solid var(--cn-board-hairline, var(--color-border));
29087
29383
  }
29088
- .cn-field-list-widget__td[data-v-7d90316d] {
29384
+ .cn-field-list-widget__td[data-v-643f1dd6] {
29089
29385
  padding: 10px 12px;
29090
29386
  vertical-align: middle;
29091
29387
  overflow-wrap: anywhere;
29092
29388
  }
29093
- .cn-field-list-widget__sr[data-v-7d90316d] {
29389
+ .cn-field-list-widget__sr[data-v-643f1dd6] {
29094
29390
  position: absolute;
29095
29391
  width: 1px;
29096
29392
  height: 1px;
29097
29393
  overflow: hidden;
29098
29394
  clip-path: inset(50%);
29099
29395
  }
29100
- .cn-field-list-widget__band[data-v-7d90316d] {
29396
+ .cn-field-list-widget__band[data-v-643f1dd6] {
29101
29397
  display: flex;
29102
29398
  flex-wrap: wrap;
29103
29399
  align-items: center;
@@ -29199,35 +29495,44 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29199
29495
  }
29200
29496
 
29201
29497
 
29202
- .cn-settings-form[data-v-66086856] {
29498
+ .cn-settings-form[data-v-7325a0ee] {
29203
29499
  display: flex;
29204
29500
  flex-direction: column;
29205
29501
  gap: 14px;
29206
29502
  min-width: 0;
29207
29503
  }
29208
- .cn-settings-form__grid[data-v-66086856] {
29504
+ .cn-settings-form__grid[data-v-7325a0ee] {
29209
29505
  display: grid;
29210
29506
  gap: 14px 16px;
29211
29507
  grid-template-columns: minmax(0, 1fr);
29212
29508
  }
29213
- .cn-settings-form__grid--2[data-v-66086856] {
29509
+ .cn-settings-form__grid--2[data-v-7325a0ee] {
29214
29510
  grid-template-columns: repeat(2, minmax(0, 1fr));
29215
29511
  }
29216
- .cn-settings-form__field[data-v-66086856] {
29512
+ .cn-settings-form__field[data-v-7325a0ee] {
29217
29513
  display: flex;
29218
29514
  flex-direction: column;
29219
29515
  gap: 4px;
29220
29516
  min-width: 0;
29221
29517
  }
29222
- .cn-settings-form__field--wide[data-v-66086856] {
29518
+ .cn-settings-form__field--wide[data-v-7325a0ee] {
29223
29519
  grid-column: 1 / -1;
29224
29520
  }
29225
- .cn-settings-form__label[data-v-66086856] {
29521
+ .cn-settings-form__label[data-v-7325a0ee] {
29226
29522
  font-size: 13px;
29227
29523
  font-weight: 600;
29228
29524
  color: var(--color-main-text);
29229
29525
  }
29230
- .cn-settings-form__control[data-v-66086856] {
29526
+ .cn-settings-form__reference[data-v-7325a0ee] {
29527
+ display: flex;
29528
+ flex-direction: column;
29529
+ gap: 6px;
29530
+ }
29531
+ .cn-settings-form__sublabel[data-v-7325a0ee] {
29532
+ font-size: 12px;
29533
+ color: var(--color-text-maxcontrast);
29534
+ }
29535
+ .cn-settings-form__control[data-v-7325a0ee] {
29231
29536
  width: 100%;
29232
29537
  box-sizing: border-box;
29233
29538
  height: var(--cn-board-control-height, 40px);
@@ -29238,13 +29543,13 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29238
29543
  color: var(--color-main-text);
29239
29544
  font: inherit;
29240
29545
  }
29241
- .cn-settings-form__file[data-v-66086856] {
29546
+ .cn-settings-form__file[data-v-7325a0ee] {
29242
29547
  display: flex;
29243
29548
  flex-wrap: wrap;
29244
29549
  align-items: center;
29245
29550
  gap: 8px;
29246
29551
  }
29247
- .cn-settings-form__control--file[data-v-66086856] {
29552
+ .cn-settings-form__control--file[data-v-7325a0ee] {
29248
29553
  display: inline-flex;
29249
29554
  align-items: center;
29250
29555
  width: auto;
@@ -29252,64 +29557,64 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29252
29557
  flex: 0 1 auto;
29253
29558
  overflow-wrap: anywhere;
29254
29559
  }
29255
- .cn-settings-form__control--placeholder[data-v-66086856] {
29560
+ .cn-settings-form__control--placeholder[data-v-7325a0ee] {
29256
29561
  color: var(--color-text-maxcontrast);
29257
29562
  }
29258
- .cn-settings-form__control--area[data-v-66086856] {
29563
+ .cn-settings-form__control--area[data-v-7325a0ee] {
29259
29564
  height: auto;
29260
29565
  padding: 10px 12px;
29261
29566
  resize: vertical;
29262
29567
  }
29263
- .cn-settings-form__control[data-v-66086856]:focus-visible {
29568
+ .cn-settings-form__control[data-v-7325a0ee]:focus-visible {
29264
29569
  outline: 2px solid var(--color-primary-element);
29265
29570
  outline-offset: 1px;
29266
29571
  }
29267
- .cn-settings-form__hint[data-v-66086856],
29268
- .cn-settings-form__error[data-v-66086856] {
29572
+ .cn-settings-form__hint[data-v-7325a0ee],
29573
+ .cn-settings-form__error[data-v-7325a0ee] {
29269
29574
  margin: 0;
29270
29575
  font-size: 12px;
29271
29576
  color: var(--color-text-maxcontrast);
29272
29577
  }
29273
- .cn-settings-form__error[data-v-66086856] {
29578
+ .cn-settings-form__error[data-v-7325a0ee] {
29274
29579
  color: var(--color-error-text);
29275
29580
  }
29276
- .cn-settings-form__actions[data-v-66086856] {
29581
+ .cn-settings-form__actions[data-v-7325a0ee] {
29277
29582
  display: flex;
29278
29583
  justify-content: flex-start;
29279
29584
  }
29280
29585
  @media (max-width: 640px) {
29281
- .cn-settings-form__grid--2[data-v-66086856] {
29586
+ .cn-settings-form__grid--2[data-v-7325a0ee] {
29282
29587
  grid-template-columns: minmax(0, 1fr);
29283
29588
  }
29284
29589
  }
29285
29590
 
29286
29591
 
29287
- .cn-switch-rows[data-v-7a6ac51c] {
29592
+ .cn-switch-rows[data-v-21bccfa9] {
29288
29593
  display: flex;
29289
29594
  flex-direction: column;
29290
29595
  gap: 8px;
29291
29596
  min-width: 0;
29292
29597
  }
29293
- .cn-switch-rows__list[data-v-7a6ac51c] {
29598
+ .cn-switch-rows__list[data-v-21bccfa9] {
29294
29599
  list-style: none;
29295
29600
  margin: 0;
29296
29601
  padding: 0;
29297
29602
  display: flex;
29298
29603
  flex-direction: column;
29299
29604
  }
29300
- .cn-switch-rows__row[data-v-7a6ac51c] {
29605
+ .cn-switch-rows__row[data-v-21bccfa9] {
29301
29606
  padding: 10px 0;
29302
29607
  border-top: 1px solid var(--cn-board-hairline, var(--color-border));
29303
29608
  }
29304
- .cn-switch-rows__row[data-v-7a6ac51c]:first-child {
29609
+ .cn-switch-rows__row[data-v-21bccfa9]:first-child {
29305
29610
  border-top: none;
29306
29611
  padding-top: 0;
29307
29612
  }
29308
- .cn-switch-rows__label[data-v-7a6ac51c] {
29613
+ .cn-switch-rows__label[data-v-21bccfa9] {
29309
29614
  display: block;
29310
29615
  font-weight: 600;
29311
29616
  }
29312
- .cn-switch-rows__hint[data-v-7a6ac51c] {
29617
+ .cn-switch-rows__hint[data-v-21bccfa9] {
29313
29618
  display: block;
29314
29619
  font-size: 12px;
29315
29620
  font-weight: 400;
@@ -29317,7 +29622,7 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29317
29622
  }
29318
29623
 
29319
29624
 
29320
- .cn-radio-cards[data-v-3b685691] {
29625
+ .cn-radio-cards[data-v-8ac292d6] {
29321
29626
  display: flex;
29322
29627
  flex-direction: column;
29323
29628
  gap: 8px;
@@ -29326,23 +29631,23 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29326
29631
  padding: 0;
29327
29632
  border: 0;
29328
29633
  }
29329
- .cn-radio-cards__legend[data-v-3b685691] {
29634
+ .cn-radio-cards__legend[data-v-8ac292d6] {
29330
29635
  padding: 0;
29331
29636
  margin-bottom: 6px;
29332
29637
  font-weight: 600;
29333
29638
  }
29334
- .cn-radio-cards__grid[data-v-3b685691] {
29639
+ .cn-radio-cards__grid[data-v-8ac292d6] {
29335
29640
  display: grid;
29336
29641
  gap: 10px;
29337
29642
  grid-template-columns: minmax(0, 1fr);
29338
29643
  }
29339
- .cn-radio-cards__grid--2[data-v-3b685691] {
29644
+ .cn-radio-cards__grid--2[data-v-8ac292d6] {
29340
29645
  grid-template-columns: repeat(2, minmax(0, 1fr));
29341
29646
  }
29342
- .cn-radio-cards__grid--3[data-v-3b685691] {
29647
+ .cn-radio-cards__grid--3[data-v-8ac292d6] {
29343
29648
  grid-template-columns: repeat(3, minmax(0, 1fr));
29344
29649
  }
29345
- .cn-radio-cards__card[data-v-3b685691] {
29650
+ .cn-radio-cards__card[data-v-8ac292d6] {
29346
29651
  position: relative;
29347
29652
  display: flex;
29348
29653
  align-items: flex-start;
@@ -29353,25 +29658,25 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29353
29658
  background: var(--color-main-background);
29354
29659
  cursor: pointer;
29355
29660
  }
29356
- .cn-radio-cards__card--selected[data-v-3b685691] {
29661
+ .cn-radio-cards__card--selected[data-v-8ac292d6] {
29357
29662
  border-color: var(--color-primary-element);
29358
29663
  background: var(--color-primary-element-light);
29359
29664
  box-shadow: 0 0 0 1px var(--color-primary-element);
29360
29665
  }
29361
- .cn-radio-cards__card[data-v-3b685691]:focus-within {
29666
+ .cn-radio-cards__card[data-v-8ac292d6]:focus-within {
29362
29667
  outline: 2px solid var(--color-primary-element);
29363
29668
  outline-offset: 2px;
29364
29669
  }
29365
29670
 
29366
29671
  /* The real input stays in the DOM and in the accessibility tree; the dot is its picture. */
29367
- .cn-radio-cards__input[data-v-3b685691] {
29672
+ .cn-radio-cards__input[data-v-8ac292d6] {
29368
29673
  position: absolute;
29369
29674
  opacity: 0;
29370
29675
  inset: 0;
29371
29676
  margin: 0;
29372
29677
  cursor: pointer;
29373
29678
  }
29374
- .cn-radio-cards__dot[data-v-3b685691] {
29679
+ .cn-radio-cards__dot[data-v-8ac292d6] {
29375
29680
  flex: 0 0 auto;
29376
29681
  width: 14px;
29377
29682
  height: 14px;
@@ -29381,25 +29686,54 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29381
29686
  border-radius: 50%;
29382
29687
  background: var(--color-main-background);
29383
29688
  }
29384
- .cn-radio-cards__card--selected .cn-radio-cards__dot[data-v-3b685691] {
29689
+ .cn-radio-cards__card--selected .cn-radio-cards__dot[data-v-8ac292d6] {
29385
29690
  border: 4px solid var(--color-primary-element);
29386
29691
  }
29387
- .cn-radio-cards__text[data-v-3b685691] {
29692
+ .cn-radio-cards__text[data-v-8ac292d6] {
29388
29693
  display: flex;
29389
29694
  flex-direction: column;
29390
29695
  gap: 2px;
29391
29696
  min-width: 0;
29392
29697
  }
29393
- .cn-radio-cards__title[data-v-3b685691] {
29698
+ .cn-radio-cards__title[data-v-8ac292d6] {
29394
29699
  font-weight: 600;
29395
29700
  }
29396
- .cn-radio-cards__description[data-v-3b685691] {
29701
+ .cn-radio-cards__description[data-v-8ac292d6] {
29397
29702
  font-size: 12px;
29398
29703
  color: var(--color-text-maxcontrast);
29399
29704
  }
29705
+
29706
+ /* `variant: "list"`: one radio button per line, the description under the
29707
+ label, no card around each (board DcBeheer, "Soort organisatie"). */
29708
+ .cn-radio-cards--list .cn-radio-cards__grid[data-v-8ac292d6] {
29709
+ gap: 8px;
29710
+ }
29711
+ .cn-radio-cards--list .cn-radio-cards__card[data-v-8ac292d6],
29712
+ .cn-radio-cards--list .cn-radio-cards__card--selected[data-v-8ac292d6] {
29713
+ padding: 0;
29714
+ border: 0;
29715
+ border-radius: 0;
29716
+ background: transparent;
29717
+ box-shadow: none;
29718
+ font-size: 15px;
29719
+ }
29720
+ .cn-radio-cards--list .cn-radio-cards__dot[data-v-8ac292d6] {
29721
+ width: 18px;
29722
+ height: 18px;
29723
+ margin-top: 2px;
29724
+ }
29725
+ .cn-radio-cards--list .cn-radio-cards__card--selected .cn-radio-cards__dot[data-v-8ac292d6] {
29726
+ border-width: 5px;
29727
+ }
29728
+ .cn-radio-cards--list .cn-radio-cards__title[data-v-8ac292d6] {
29729
+ font-weight: 400;
29730
+ }
29731
+ .cn-radio-cards--list .cn-radio-cards__description[data-v-8ac292d6] {
29732
+ font-size: 13px;
29733
+ }
29400
29734
  @media (max-width: 640px) {
29401
- .cn-radio-cards__grid--2[data-v-3b685691],
29402
- .cn-radio-cards__grid--3[data-v-3b685691] {
29735
+ .cn-radio-cards__grid--2[data-v-8ac292d6],
29736
+ .cn-radio-cards__grid--3[data-v-8ac292d6] {
29403
29737
  grid-template-columns: minmax(0, 1fr);
29404
29738
  }
29405
29739
  }
@@ -29546,27 +29880,27 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29546
29880
  }
29547
29881
 
29548
29882
 
29549
- .cn-record-list__list[data-v-519e7f1c] {
29883
+ .cn-record-list__list[data-v-bc186ef8] {
29550
29884
  list-style: none;
29551
29885
  margin: 0;
29552
29886
  padding: 0;
29553
29887
  }
29554
- .cn-record-list__empty[data-v-519e7f1c],
29555
- .cn-record-list__error[data-v-519e7f1c] {
29888
+ .cn-record-list__empty[data-v-bc186ef8],
29889
+ .cn-record-list__error[data-v-bc186ef8] {
29556
29890
  color: var(--color-text-maxcontrast);
29557
29891
  margin: 0;
29558
29892
  }
29559
- .cn-record-list__loading[data-v-519e7f1c] {
29893
+ .cn-record-list__loading[data-v-bc186ef8] {
29560
29894
  display: flex;
29561
29895
  justify-content: center;
29562
29896
  padding: 8px 0;
29563
29897
  }
29564
29898
 
29565
29899
  /* rows */
29566
- .cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-519e7f1c] {
29900
+ .cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-bc186ef8] {
29567
29901
  border-top: 1px solid var(--color-border);
29568
29902
  }
29569
- .cn-record-list__row[data-v-519e7f1c] {
29903
+ .cn-record-list__row[data-v-bc186ef8] {
29570
29904
  align-items: center;
29571
29905
  color: var(--color-main-text);
29572
29906
  display: flex;
@@ -29574,11 +29908,11 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29574
29908
  padding: 12px 0;
29575
29909
  text-decoration: none;
29576
29910
  }
29577
- .cn-record-list__row--link:hover .cn-record-list__title[data-v-519e7f1c],
29578
- .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-519e7f1c] {
29911
+ .cn-record-list__row--link:hover .cn-record-list__title[data-v-bc186ef8],
29912
+ .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-bc186ef8] {
29579
29913
  text-decoration: underline;
29580
29914
  }
29581
- .cn-record-list__avatar[data-v-519e7f1c] {
29915
+ .cn-record-list__avatar[data-v-bc186ef8] {
29582
29916
  align-items: center;
29583
29917
  background: var(--color-background-hover);
29584
29918
  border-radius: 50%;
@@ -29591,67 +29925,67 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29591
29925
  justify-content: center;
29592
29926
  width: 36px;
29593
29927
  }
29594
- .cn-record-list__main[data-v-519e7f1c] {
29928
+ .cn-record-list__main[data-v-bc186ef8] {
29595
29929
  display: flex;
29596
29930
  flex: 1 1 auto;
29597
29931
  flex-direction: column;
29598
29932
  gap: 2px;
29599
29933
  min-width: 0;
29600
29934
  }
29601
- .cn-record-list__title[data-v-519e7f1c] {
29935
+ .cn-record-list__title[data-v-bc186ef8] {
29602
29936
  font-size: 15px;
29603
29937
  font-weight: 700;
29604
29938
  }
29605
- .cn-record-list__meta[data-v-519e7f1c] {
29939
+ .cn-record-list__meta[data-v-bc186ef8] {
29606
29940
  color: var(--color-text-maxcontrast);
29607
29941
  font-size: 13px;
29608
29942
  }
29609
- .cn-record-list__aside[data-v-519e7f1c] {
29943
+ .cn-record-list__aside[data-v-bc186ef8] {
29610
29944
  align-items: center;
29611
29945
  display: flex;
29612
29946
  flex: none;
29613
29947
  gap: 16px;
29614
29948
  }
29615
- .cn-record-list__trailing[data-v-519e7f1c] {
29949
+ .cn-record-list__trailing[data-v-bc186ef8] {
29616
29950
  font-size: 14px;
29617
29951
  white-space: nowrap;
29618
29952
  }
29619
- .cn-record-list__due[data-v-519e7f1c] {
29953
+ .cn-record-list__due[data-v-bc186ef8] {
29620
29954
  font-size: 14px;
29621
29955
  white-space: nowrap;
29622
29956
  }
29623
- .cn-record-list__due--danger[data-v-519e7f1c] {
29957
+ .cn-record-list__due--danger[data-v-bc186ef8] {
29624
29958
  color: var(--color-text-error, var(--color-error-text));
29625
29959
  font-weight: 600;
29626
29960
  }
29627
- .cn-record-list__due--empty[data-v-519e7f1c] {
29961
+ .cn-record-list__due--empty[data-v-bc186ef8] {
29628
29962
  color: var(--color-text-maxcontrast);
29629
29963
  }
29630
- .cn-record-list__row--action[data-v-519e7f1c] {
29964
+ .cn-record-list__row--action[data-v-bc186ef8] {
29631
29965
  flex-wrap: wrap;
29632
29966
  gap: 8px 16px;
29633
29967
  padding: 14px 0;
29634
29968
  }
29635
- .cn-record-list__row--action .cn-record-list__main[data-v-519e7f1c] {
29969
+ .cn-record-list__row--action .cn-record-list__main[data-v-bc186ef8] {
29636
29970
  flex: 1 1 280px;
29637
29971
  gap: 3px;
29638
29972
  }
29639
- .cn-record-list__title--link[data-v-519e7f1c] {
29973
+ .cn-record-list__title--link[data-v-bc186ef8] {
29640
29974
  color: var(--color-main-text);
29641
29975
  text-decoration: underline;
29642
29976
  }
29643
- .cn-record-list__pills[data-v-519e7f1c] {
29977
+ .cn-record-list__pills[data-v-bc186ef8] {
29644
29978
  display: flex;
29645
29979
  flex: 0 0 120px;
29646
29980
  gap: 6px;
29647
29981
  justify-content: flex-end;
29648
29982
  }
29649
- .cn-record-list__due--column[data-v-519e7f1c] {
29983
+ .cn-record-list__due--column[data-v-bc186ef8] {
29650
29984
  flex: 0 0 96px;
29651
29985
  font-size: 13px;
29652
29986
  text-align: end;
29653
29987
  }
29654
- .cn-record-list__action[data-v-519e7f1c] {
29988
+ .cn-record-list__action[data-v-bc186ef8] {
29655
29989
  align-items: center;
29656
29990
  background: var(--color-primary-element-light);
29657
29991
  border: 0;
@@ -29668,26 +30002,26 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29668
30002
  padding: 0 14px;
29669
30003
  text-decoration: none;
29670
30004
  }
29671
- .cn-record-list__action[data-v-519e7f1c]:hover,
29672
- .cn-record-list__action[data-v-519e7f1c]:focus-visible {
30005
+ .cn-record-list__action[data-v-bc186ef8]:hover,
30006
+ .cn-record-list__action[data-v-bc186ef8]:focus-visible {
29673
30007
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
29674
30008
  }
29675
- .cn-record-list__chevron[data-v-519e7f1c] {
30009
+ .cn-record-list__chevron[data-v-bc186ef8] {
29676
30010
  color: var(--color-text-maxcontrast);
29677
30011
  flex: none;
29678
30012
  }
29679
30013
 
29680
30014
  /* feed */
29681
- .cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-519e7f1c] {
30015
+ .cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-bc186ef8] {
29682
30016
  border-top: 1px solid var(--color-border);
29683
30017
  }
29684
- .cn-record-list__feed-row[data-v-519e7f1c] {
30018
+ .cn-record-list__feed-row[data-v-bc186ef8] {
29685
30019
  align-items: flex-start;
29686
30020
  display: flex;
29687
30021
  gap: 14px;
29688
30022
  padding: 12px 0;
29689
30023
  }
29690
- .cn-record-list__feed-icon[data-v-519e7f1c] {
30024
+ .cn-record-list__feed-icon[data-v-bc186ef8] {
29691
30025
  align-items: center;
29692
30026
  background: var(--color-primary-element-light);
29693
30027
  border-radius: 50%;
@@ -29698,25 +30032,25 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29698
30032
  justify-content: center;
29699
30033
  width: 36px;
29700
30034
  }
29701
- .cn-record-list__text[data-v-519e7f1c] {
30035
+ .cn-record-list__text[data-v-bc186ef8] {
29702
30036
  font-size: 15px;
29703
30037
  }
29704
- .cn-record-list--feed .cn-record-list__main[data-v-519e7f1c] {
30038
+ .cn-record-list--feed .cn-record-list__main[data-v-bc186ef8] {
29705
30039
  color: var(--color-main-text);
29706
30040
  text-decoration: none;
29707
30041
  }
29708
30042
 
29709
30043
  /* inline */
29710
- .cn-record-list__inline-row[data-v-519e7f1c] {
30044
+ .cn-record-list__inline-row[data-v-bc186ef8] {
29711
30045
  padding: 4px 0;
29712
30046
  }
29713
- .cn-record-list__label[data-v-519e7f1c] {
30047
+ .cn-record-list__label[data-v-bc186ef8] {
29714
30048
  margin-inline-end: 4px;
29715
30049
  }
29716
- .cn-record-list__inline-title[data-v-519e7f1c] {
30050
+ .cn-record-list__inline-title[data-v-bc186ef8] {
29717
30051
  color: var(--color-main-text);
29718
30052
  }
29719
- a.cn-record-list__inline-title[data-v-519e7f1c] {
30053
+ a.cn-record-list__inline-title[data-v-bc186ef8] {
29720
30054
  color: var(--color-primary-element);
29721
30055
  text-decoration: underline;
29722
30056
  }
@@ -30036,6 +30370,7 @@ a.cn-record-list__inline-title[data-v-519e7f1c] {
30036
30370
  }
30037
30371
 
30038
30372
  .cn-form-widget__textarea {
30373
+ box-sizing: border-box;
30039
30374
  width: 100%;
30040
30375
  min-height: 80px;
30041
30376
  padding: 8px;
@@ -30058,6 +30393,16 @@ a.cn-record-list__inline-title[data-v-519e7f1c] {
30058
30393
  margin: 0;
30059
30394
  }
30060
30395
 
30396
+ /* A select takes its field's width, however narrow the card. NcSelect is at
30397
+ least 260px wide on its own, so in pipelinq's 234px "Nieuw contactmoment"
30398
+ card at 1100 wide the channel and client selects ran 40px past the card's
30399
+ edge. The client picker (CnResourceSelect) is an NcSelect too.
30400
+ @spec openspec/changes/interaction-form-fits-and-reads-dutch/specs/interaction-form-widget/spec.md#requirement-the-interaction-form-fits-its-card-and-reads-in-the-readers-language */
30401
+ .cn-form-widget .v-select.select {
30402
+ min-width: 0;
30403
+ width: 100%;
30404
+ }
30405
+
30061
30406
 
30062
30407
  .cn-banner-form[data-v-0c839173] {
30063
30408
  display: flex;
@@ -33982,28 +34327,28 @@ to {
33982
34327
  }
33983
34328
 
33984
34329
 
33985
- .cn-admin-settings-shell[data-v-533044f8] {
34330
+ .cn-admin-settings-shell[data-v-2f22ff08] {
33986
34331
  max-width: 900px;
33987
34332
  }
33988
34333
 
33989
34334
  /* The board look lifts the width and lays the header and cards on a grid (look-board.css). */
33990
- .cn-support-info[data-v-533044f8] {
34335
+ .cn-support-info[data-v-2f22ff08] {
33991
34336
  margin-top: 16px;
33992
34337
  padding-top: 16px;
33993
34338
  border-top: 1px solid var(--color-border);
33994
34339
  }
33995
- .cn-support-info h4[data-v-533044f8] {
34340
+ .cn-support-info h4[data-v-2f22ff08] {
33996
34341
  margin: 0 0 8px 0;
33997
34342
  font-size: 14px;
33998
34343
  font-weight: 600;
33999
34344
  color: var(--color-main-text);
34000
34345
  }
34001
- .cn-support-info p[data-v-533044f8] {
34346
+ .cn-support-info p[data-v-2f22ff08] {
34002
34347
  margin: 4px 0;
34003
34348
  color: var(--color-text-maxcontrast);
34004
34349
  font-size: 14px;
34005
34350
  }
34006
- .cn-support-info a[data-v-533044f8] {
34351
+ .cn-support-info a[data-v-2f22ff08] {
34007
34352
  color: var(--color-primary-element);
34008
34353
  }
34009
34354
 
@@ -36473,24 +36818,24 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
36473
36818
  }
36474
36819
 
36475
36820
 
36476
- .cn-walkthrough[data-v-165ee49b] {
36821
+ .cn-walkthrough[data-v-34991bbf] {
36477
36822
  position: fixed;
36478
36823
  inset: 0;
36479
36824
  pointer-events: none;
36480
36825
  }
36481
- .cn-walkthrough__live[data-v-165ee49b] {
36826
+ .cn-walkthrough__live[data-v-34991bbf] {
36482
36827
  position: absolute;
36483
36828
  width: 1px;
36484
36829
  height: 1px;
36485
36830
  overflow: hidden;
36486
36831
  clip-path: inset(50%);
36487
36832
  }
36488
- .cn-walkthrough__dim[data-v-165ee49b] {
36833
+ .cn-walkthrough__dim[data-v-34991bbf] {
36489
36834
  position: fixed;
36490
36835
  background: var(--color-modal-background, rgba(0, 0, 0, 0.5));
36491
36836
  pointer-events: auto;
36492
36837
  }
36493
- .cn-walkthrough__dim--full[data-v-165ee49b] {
36838
+ .cn-walkthrough__dim--full[data-v-34991bbf] {
36494
36839
  inset: 0;
36495
36840
  }
36496
36841
 
@@ -36499,16 +36844,16 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
36499
36844
  underneath (see the template comment). */
36500
36845
  /* Lets the step's own task through — and therefore cannot be clicked to
36501
36846
  dismiss; ESC, the close button and Back/Finish remain (see the template). */
36502
- .cn-walkthrough__dim--passthrough[data-v-165ee49b] {
36847
+ .cn-walkthrough__dim--passthrough[data-v-34991bbf] {
36503
36848
  pointer-events: none;
36504
36849
  }
36505
- .cn-walkthrough__ring[data-v-165ee49b] {
36850
+ .cn-walkthrough__ring[data-v-34991bbf] {
36506
36851
  position: fixed;
36507
36852
  border-radius: var(--border-radius-large, 8px);
36508
36853
  box-shadow: 0 0 0 2px var(--color-primary-element, #0082c9);
36509
36854
  pointer-events: none;
36510
36855
  }
36511
- .cn-walkthrough__card[data-v-165ee49b] {
36856
+ .cn-walkthrough__card[data-v-34991bbf] {
36512
36857
  position: fixed;
36513
36858
  width: 320px;
36514
36859
  max-width: calc(100vw - 24px);
@@ -36519,11 +36864,11 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
36519
36864
  padding: 16px;
36520
36865
  pointer-events: auto;
36521
36866
  }
36522
- .cn-walkthrough__card--docked[data-v-165ee49b] {
36867
+ .cn-walkthrough__card--docked[data-v-34991bbf] {
36523
36868
  inset-block-end: 16px;
36524
36869
  inset-inline-start: 16px;
36525
36870
  }
36526
- .cn-walkthrough__close[data-v-165ee49b] {
36871
+ .cn-walkthrough__close[data-v-34991bbf] {
36527
36872
  /* !important beats NcButton's own `position: relative`, which would otherwise
36528
36873
  leave the close button in-flow at the card's top-left. */
36529
36874
  position: absolute !important;
@@ -36532,37 +36877,37 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
36532
36877
  inset-inline-start: auto;
36533
36878
  z-index: 1;
36534
36879
  }
36535
- .cn-walkthrough__counter[data-v-165ee49b] {
36880
+ .cn-walkthrough__counter[data-v-34991bbf] {
36536
36881
  font-size: 0.8125rem;
36537
36882
  color: var(--color-text-maxcontrast);
36538
36883
  margin-bottom: 4px;
36539
36884
  /* Keep the counter/title clear of the absolutely-positioned close button. */
36540
36885
  padding-inline-end: 32px;
36541
36886
  }
36542
- .cn-walkthrough__title[data-v-165ee49b] {
36887
+ .cn-walkthrough__title[data-v-34991bbf] {
36543
36888
  margin: 0 0 6px;
36544
36889
  font-size: 1.1rem;
36545
36890
  }
36546
- .cn-walkthrough__body[data-v-165ee49b] {
36891
+ .cn-walkthrough__body[data-v-34991bbf] {
36547
36892
  margin: 0 0 8px;
36548
36893
  }
36549
- .cn-walkthrough__task[data-v-165ee49b] {
36894
+ .cn-walkthrough__task[data-v-34991bbf] {
36550
36895
  margin: 0 0 8px;
36551
36896
  padding: 8px;
36552
36897
  background: var(--color-primary-element-light, var(--color-background-hover));
36553
36898
  border-radius: var(--border-radius, 4px);
36554
36899
  font-weight: 600;
36555
36900
  }
36556
- .cn-walkthrough__task-icon[data-v-165ee49b] {
36901
+ .cn-walkthrough__task-icon[data-v-34991bbf] {
36557
36902
  margin-inline-end: 4px;
36558
36903
  }
36559
- .cn-walkthrough__actions[data-v-165ee49b] {
36904
+ .cn-walkthrough__actions[data-v-34991bbf] {
36560
36905
  display: flex;
36561
36906
  align-items: center;
36562
36907
  gap: 8px;
36563
36908
  margin-top: 8px;
36564
36909
  }
36565
- .cn-walkthrough__spacer[data-v-165ee49b] {
36910
+ .cn-walkthrough__spacer[data-v-34991bbf] {
36566
36911
  flex: 1 1 auto;
36567
36912
  }
36568
36913
 
@@ -37144,41 +37489,41 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37144
37489
  }
37145
37490
 
37146
37491
 
37147
- .cn-body-sections[data-v-19a0caa4] {
37492
+ .cn-body-sections[data-v-44324dca] {
37148
37493
  display: flex;
37149
37494
  flex-direction: column;
37150
37495
  gap: 16px;
37151
37496
  width: 100%;
37152
37497
  }
37153
- .cn-body-sections--grid[data-v-19a0caa4] {
37498
+ .cn-body-sections--grid[data-v-44324dca] {
37154
37499
  display: grid;
37155
37500
  grid-template-columns: repeat(12, 1fr);
37156
37501
  gap: 16px;
37157
37502
  }
37158
- .cn-body-sections__section[data-v-19a0caa4] {
37503
+ .cn-body-sections__section[data-v-44324dca] {
37159
37504
  min-width: 0;
37160
37505
  }
37161
37506
 
37162
37507
  /* Same card as the grid's widgets, so a section reads as one of them. */
37163
- .cn-body-sections__section--card[data-v-19a0caa4] {
37508
+ .cn-body-sections__section--card[data-v-44324dca] {
37164
37509
  padding: 12px 16px 16px;
37165
37510
  background: var(--color-main-background);
37166
37511
  border: 1px solid var(--color-border);
37167
37512
  border-radius: var(--border-radius-large, 8px);
37168
37513
  }
37169
- .cn-body-sections__section--card > .cn-body-sections__title[data-v-19a0caa4] {
37514
+ .cn-body-sections__section--card > .cn-body-sections__title[data-v-44324dca] {
37170
37515
  margin: 0 -16px 12px;
37171
37516
  padding: 0 16px 12px;
37172
37517
  font-size: 14px;
37173
37518
  border-bottom: 1px solid var(--color-border);
37174
37519
  }
37175
- .cn-body-sections__title[data-v-19a0caa4] {
37520
+ .cn-body-sections__title[data-v-44324dca] {
37176
37521
  margin: 0 0 8px;
37177
37522
  font-size: 16px;
37178
37523
  font-weight: 600;
37179
37524
  color: var(--color-main-text);
37180
37525
  }
37181
- .cn-body-sections__error[data-v-19a0caa4] {
37526
+ .cn-body-sections__error[data-v-44324dca] {
37182
37527
  padding: 12px 16px;
37183
37528
  border: 1px solid var(--color-border);
37184
37529
  border-radius: var(--border-radius-large, 12px);
@@ -37188,17 +37533,17 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37188
37533
  }
37189
37534
 
37190
37535
 
37191
- .cn-dashboard-grid[data-v-29653a76] {
37536
+ .cn-dashboard-grid[data-v-ca2ae49c] {
37192
37537
  width: 100%;
37193
37538
  min-height: 200px;
37194
37539
  }
37195
- .grid-stack[data-v-29653a76] {
37540
+ .grid-stack[data-v-ca2ae49c] {
37196
37541
  background: transparent;
37197
37542
  }
37198
37543
 
37199
37544
  /* Screen-reader-only text: the keyboard key map and the live region. Kept in
37200
37545
  the layout (not `display: none`) so assistive tech still reads it. */
37201
- .cn-dashboard-grid__sr-only[data-v-29653a76] {
37546
+ .cn-dashboard-grid__sr-only[data-v-ca2ae49c] {
37202
37547
  position: absolute;
37203
37548
  width: 1px;
37204
37549
  height: 1px;
@@ -37213,7 +37558,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37213
37558
  /* Grid items become tab stops in edit mode — give them a visible focus ring
37214
37559
  that satisfies WCAG 2.1 SC 2.4.7 without relying on the widget's own
37215
37560
  styling. `outline-offset` keeps the ring outside the rounded card. */
37216
- .grid-stack-item[data-v-29653a76]:focus-visible {
37561
+ .grid-stack-item[data-v-ca2ae49c]:focus-visible {
37217
37562
  outline: 2px solid var(--color-primary-element, #0082c9);
37218
37563
  outline-offset: 2px;
37219
37564
  border-radius: var(--border-radius-container-large, 16px);
@@ -37225,19 +37570,19 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37225
37570
  cell never shrank: "Waiting for me" stayed a tall card around one row. In
37226
37571
  such a cell the child takes its own height. A cell without the key keeps
37227
37572
  the filling child. */
37228
- .cn-dashboard-grid__item--fit[data-v-29653a76] > .grid-stack-item-content > * {
37573
+ .cn-dashboard-grid__item--fit[data-v-ca2ae49c] > .grid-stack-item-content > * {
37229
37574
  height: auto;
37230
37575
  }
37231
- [data-v-29653a76] .grid-stack-item-content {
37576
+ [data-v-ca2ae49c] .grid-stack-item-content {
37232
37577
  background: var(--color-main-background);
37233
37578
  border: none;
37234
37579
  box-shadow: none;
37235
37580
  overflow: hidden;
37236
37581
  }
37237
- [data-v-29653a76] .grid-stack-item-content:has(.cn-widget-wrapper--borderless) {
37582
+ [data-v-ca2ae49c] .grid-stack-item-content:has(.cn-widget-wrapper--borderless) {
37238
37583
  background: transparent;
37239
37584
  }
37240
- [data-v-29653a76] .grid-stack-placeholder > .placeholder-content {
37585
+ [data-v-ca2ae49c] .grid-stack-placeholder > .placeholder-content {
37241
37586
  background: var(--color-primary-element-light);
37242
37587
  border: 2px dashed var(--color-primary-element);
37243
37588
  border-radius: var(--border-radius-large);
@@ -37505,7 +37850,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37505
37850
  }
37506
37851
 
37507
37852
 
37508
- .cn-dashboard-page[data-v-b753474e] {
37853
+ .cn-dashboard-page[data-v-4abdd0ae] {
37509
37854
  padding: 20px;
37510
37855
  max-width: 1800px;
37511
37856
  /* Centre the leftover space once the cap engages, so a wide screen shows
@@ -37519,7 +37864,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37519
37864
  overflow-y: auto;
37520
37865
  box-sizing: border-box;
37521
37866
  }
37522
- .cn-dashboard-page__header[data-v-b753474e] {
37867
+ .cn-dashboard-page__header[data-v-4abdd0ae] {
37523
37868
  display: flex;
37524
37869
  justify-content: space-between;
37525
37870
  align-items: flex-start;
@@ -37531,21 +37876,21 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37531
37876
  room. Only the HEADER shifts right — body widgets keep full width. */
37532
37877
  padding-inline-start: 56px;
37533
37878
  }
37534
- .cn-dashboard-page__header-left[data-v-b753474e] {
37879
+ .cn-dashboard-page__header-left[data-v-4abdd0ae] {
37535
37880
  min-width: 0;
37536
37881
  }
37537
- .cn-dashboard-page__title-row[data-v-b753474e] {
37882
+ .cn-dashboard-page__title-row[data-v-4abdd0ae] {
37538
37883
  display: flex;
37539
37884
  align-items: center;
37540
37885
  flex-wrap: wrap;
37541
37886
  gap: 12px;
37542
37887
  }
37543
- .cn-dashboard-page__title[data-v-b753474e] {
37888
+ .cn-dashboard-page__title[data-v-4abdd0ae] {
37544
37889
  margin: 0;
37545
37890
  font-size: 20px;
37546
37891
  font-weight: 700;
37547
37892
  }
37548
- .cn-dashboard-page__description[data-v-b753474e] {
37893
+ .cn-dashboard-page__description[data-v-4abdd0ae] {
37549
37894
  margin: 4px 0 0;
37550
37895
  font-size: 14px;
37551
37896
  color: var(--color-text-maxcontrast);
@@ -37553,19 +37898,19 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37553
37898
 
37554
37899
  /* Board look (screens-dashboard-parity): h1 28/700, a 15px grey subtitle 6px
37555
37900
  under it, and 40px buttons with a 10px gap. */
37556
- .cn-dashboard-page--board .cn-dashboard-page__title[data-v-b753474e] {
37901
+ .cn-dashboard-page--board .cn-dashboard-page__title[data-v-4abdd0ae] {
37557
37902
  font-size: 28px;
37558
37903
  font-weight: 700;
37559
37904
  line-height: 1.2;
37560
37905
  }
37561
- .cn-dashboard-page--board .cn-dashboard-page__description[data-v-b753474e] {
37906
+ .cn-dashboard-page--board .cn-dashboard-page__description[data-v-4abdd0ae] {
37562
37907
  margin: 6px 0 0;
37563
37908
  font-size: 15px;
37564
37909
  }
37565
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-b753474e] {
37910
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4abdd0ae] {
37566
37911
  gap: 10px;
37567
37912
  }
37568
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-b753474e] .button-vue {
37913
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4abdd0ae] .button-vue {
37569
37914
  min-height: var(--cn-board-control-height, 40px);
37570
37915
  height: var(--cn-board-control-height, 40px);
37571
37916
  }
@@ -37573,17 +37918,17 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37573
37918
  /* The switch row under the header (screens-dashboard-greeting-header): the
37574
37919
  view switch left, the `viewLinks` pills right (DqMijnWerk: pills 34px high,
37575
37920
  radius 17, 13px/600, a 14px icon, primary light on primary deep). */
37576
- .cn-dashboard-page__switch-row[data-v-b753474e] {
37921
+ .cn-dashboard-page__switch-row[data-v-4abdd0ae] {
37577
37922
  display: flex;
37578
37923
  flex-wrap: wrap;
37579
37924
  align-items: center;
37580
37925
  gap: 10px;
37581
37926
  margin-bottom: var(--cn-board-section-gap, 20px);
37582
37927
  }
37583
- .cn-dashboard-page__switch-row-spacer[data-v-b753474e] {
37928
+ .cn-dashboard-page__switch-row-spacer[data-v-4abdd0ae] {
37584
37929
  flex: 1 1 auto;
37585
37930
  }
37586
- .cn-dashboard-page__view-link[data-v-b753474e] {
37931
+ .cn-dashboard-page__view-link[data-v-4abdd0ae] {
37587
37932
  display: inline-flex;
37588
37933
  align-items: center;
37589
37934
  gap: 6px;
@@ -37597,36 +37942,36 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37597
37942
  white-space: nowrap;
37598
37943
  text-decoration: none !important;
37599
37944
  }
37600
- .cn-dashboard-page__view-link[data-v-b753474e]:hover {
37945
+ .cn-dashboard-page__view-link[data-v-4abdd0ae]:hover {
37601
37946
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
37602
37947
  }
37603
- .cn-dashboard-page__view-link[data-v-b753474e]:focus-visible {
37948
+ .cn-dashboard-page__view-link[data-v-4abdd0ae]:focus-visible {
37604
37949
  outline: 2px solid var(--color-main-text);
37605
37950
  outline-offset: 2px;
37606
37951
  }
37607
- .cn-dashboard-page__view-link-icon[data-v-b753474e] {
37952
+ .cn-dashboard-page__view-link-icon[data-v-4abdd0ae] {
37608
37953
  display: inline-flex;
37609
37954
  }
37610
37955
 
37611
37956
  /* The period group, in a row of its own between the header and the KPI row. */
37612
- .cn-dashboard-page__date-range--segmented[data-v-b753474e] {
37957
+ .cn-dashboard-page__date-range--segmented[data-v-4abdd0ae] {
37613
37958
  margin-bottom: 16px;
37614
37959
  }
37615
- .cn-dashboard-page__date-segmented[data-v-b753474e] {
37960
+ .cn-dashboard-page__date-segmented[data-v-4abdd0ae] {
37616
37961
  display: flex;
37617
37962
  align-items: center;
37618
37963
  gap: 8px;
37619
37964
  }
37620
37965
 
37621
37966
  /* The KPI row above the grid: tiles are cells of the auto-fit grid. */
37622
- .cn-dashboard-page__kpi-row[data-v-b753474e] {
37967
+ .cn-dashboard-page__kpi-row[data-v-4abdd0ae] {
37623
37968
  margin-bottom: var(--cn-board-section-gap, 16px);
37624
37969
  }
37625
- .cn-dashboard-page__kpi-cell[data-v-b753474e] {
37970
+ .cn-dashboard-page__kpi-cell[data-v-4abdd0ae] {
37626
37971
  display: flex;
37627
37972
  min-width: 0;
37628
37973
  }
37629
- .cn-dashboard-page__kpi-cell[data-v-b753474e] > * {
37974
+ .cn-dashboard-page__kpi-cell[data-v-4abdd0ae] > * {
37630
37975
  flex: 1 1 auto;
37631
37976
  min-width: 0;
37632
37977
  }
@@ -37639,7 +37984,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37639
37984
  scoped chip rules then silently don't match and the chip collapses into
37640
37985
  NcActions' ~30px icon slot (text wraps to "Last / 30 / days"). The
37641
37986
  data-testid is stable across chunks, so those rules match regardless. */
37642
- .cn-dashboard-page__header-actions[data-v-b753474e] {
37987
+ .cn-dashboard-page__header-actions[data-v-4abdd0ae] {
37643
37988
  display: flex;
37644
37989
  align-items: center;
37645
37990
  gap: 8px;
@@ -37655,19 +38000,19 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37655
38000
 
37656
38001
  /* Date-range header band. Kept compact so it doesn't open a tall gap
37657
38002
  above the grid; the pills variant is a single tidy toggle row. */
37658
- .cn-dashboard-page__date-range[data-v-b753474e] {
38003
+ .cn-dashboard-page__date-range[data-v-4abdd0ae] {
37659
38004
  margin-bottom: 12px;
37660
38005
  }
37661
- .cn-dashboard-page__date-range--pills[data-v-b753474e] {
38006
+ .cn-dashboard-page__date-range--pills[data-v-4abdd0ae] {
37662
38007
  margin-bottom: 8px;
37663
38008
  }
37664
- .cn-dashboard-page__date-pills[data-v-b753474e] {
38009
+ .cn-dashboard-page__date-pills[data-v-4abdd0ae] {
37665
38010
  display: flex;
37666
38011
  align-items: center;
37667
38012
  flex-wrap: wrap;
37668
38013
  gap: 6px;
37669
38014
  }
37670
- .cn-dashboard-page__date-pill[data-v-b753474e] {
38015
+ .cn-dashboard-page__date-pill[data-v-4abdd0ae] {
37671
38016
  display: inline-flex;
37672
38017
  align-items: center;
37673
38018
  padding: 5px 14px;
@@ -37682,77 +38027,77 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37682
38027
  cursor: pointer;
37683
38028
  transition: background-color 100ms ease, border-color 100ms ease, color 100ms ease;
37684
38029
  }
37685
- .cn-dashboard-page__date-pill[data-v-b753474e]:hover {
38030
+ .cn-dashboard-page__date-pill[data-v-4abdd0ae]:hover {
37686
38031
  background: var(--color-background-hover);
37687
38032
  }
37688
- .cn-dashboard-page__date-pill[data-v-b753474e]:focus-visible {
38033
+ .cn-dashboard-page__date-pill[data-v-4abdd0ae]:focus-visible {
37689
38034
  outline: 2px solid var(--color-primary-element);
37690
38035
  outline-offset: 2px;
37691
38036
  }
37692
- .cn-dashboard-page__date-pill--active[data-v-b753474e] {
38037
+ .cn-dashboard-page__date-pill--active[data-v-4abdd0ae] {
37693
38038
  background: var(--color-primary-element);
37694
38039
  border-color: var(--color-primary-element);
37695
38040
  color: var(--color-primary-element-text);
37696
38041
  }
37697
- .cn-dashboard-page__date-pill--active[data-v-b753474e]:hover {
38042
+ .cn-dashboard-page__date-pill--active[data-v-4abdd0ae]:hover {
37698
38043
  background: var(--color-primary-element-hover, var(--color-primary-element));
37699
38044
  }
37700
38045
 
37701
38046
  /* The custom-range pill is de-emphasised — dashed outline, muted text —
37702
38047
  so it reads as an escape hatch rather than a primary option. */
37703
- .cn-dashboard-page__date-pill--custom[data-v-b753474e] {
38048
+ .cn-dashboard-page__date-pill--custom[data-v-4abdd0ae] {
37704
38049
  border-style: dashed;
37705
38050
  color: var(--color-text-maxcontrast);
37706
38051
  }
37707
- .cn-dashboard-page__date-pill-custom[data-v-b753474e] .action-item__menutoggle {
38052
+ .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .action-item__menutoggle {
37708
38053
  min-width: 0;
37709
38054
  min-height: 0;
37710
38055
  padding: 0;
37711
38056
  background: transparent;
37712
38057
  border: none;
37713
38058
  }
37714
- .cn-dashboard-page__date-pill-custom[data-v-b753474e] .button-vue,
37715
- .cn-dashboard-page__date-pill-custom[data-v-b753474e] .button-vue__wrapper,
37716
- .cn-dashboard-page__date-pill-custom[data-v-b753474e] .button-vue__icon {
38059
+ .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .button-vue,
38060
+ .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .button-vue__wrapper,
38061
+ .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .button-vue__icon {
37717
38062
  width: auto !important;
37718
38063
  min-width: 0 !important;
37719
38064
  overflow: visible !important;
37720
38065
  }
37721
- .cn-dashboard-page__empty[data-v-b753474e] {
38066
+ .cn-dashboard-page__empty[data-v-4abdd0ae] {
37722
38067
  padding: 60px 20px;
37723
38068
  }
37724
38069
 
37725
38070
  /* The page's view switch on a page without a header row: at the end of its
37726
38071
  own row, above the grids, where the header would have put it. */
37727
- .cn-dashboard-page__view-switch[data-v-b753474e] {
38072
+ .cn-dashboard-page__view-switch[data-v-4abdd0ae] {
37728
38073
  display: flex;
37729
38074
  justify-content: flex-end;
37730
38075
  margin-bottom: 12px;
37731
38076
  }
37732
38077
 
37733
38078
  /* A view the switch shows with nothing to draw. */
37734
- .cn-page-view-region--empty[data-v-b753474e] {
38079
+ .cn-page-view-region--empty[data-v-4abdd0ae] {
37735
38080
  padding: 40px 20px;
37736
38081
  }
37737
- .cn-dashboard-page__page-filters[data-v-b753474e] {
38082
+ .cn-dashboard-page__page-filters[data-v-4abdd0ae] {
37738
38083
  display: flex;
37739
38084
  flex-wrap: wrap;
37740
38085
  gap: 16px;
37741
38086
  align-items: flex-end;
37742
38087
  margin-bottom: 12px;
37743
38088
  }
37744
- .cn-dashboard-page__page-filter[data-v-b753474e] {
38089
+ .cn-dashboard-page__page-filter[data-v-4abdd0ae] {
37745
38090
  display: flex;
37746
38091
  flex-direction: column;
37747
38092
  gap: 4px;
37748
38093
  min-width: 200px;
37749
38094
  }
37750
- .cn-dashboard-page__page-filter-label[data-v-b753474e] {
38095
+ .cn-dashboard-page__page-filter-label[data-v-4abdd0ae] {
37751
38096
  font-size: 0.85em;
37752
38097
  font-weight: 600;
37753
38098
  color: var(--color-text-maxcontrast);
37754
38099
  }
37755
- .cn-dashboard-page__widget-edit[data-v-b753474e] {
38100
+ .cn-dashboard-page__widget-edit[data-v-4abdd0ae] {
37756
38101
  position: absolute;
37757
38102
  top: 4px;
37758
38103
  inset-inline-end: 4px;
@@ -37771,8 +38116,8 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37771
38116
  and centre the card. */
37772
38117
  /* `safe` centre so an overflowing tile does not spill out of the top, where
37773
38118
  flex overflow cannot be scrolled back to. Same as detail-page.css. */
37774
- .cn-dashboard-page__card-fit[data-v-b753474e] .cn-widget-wrapper__content,
37775
- .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-b753474e] .cn-widget-wrapper__content {
38119
+ .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-widget-wrapper__content,
38120
+ .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-4abdd0ae] .cn-widget-wrapper__content {
37776
38121
  overflow: hidden;
37777
38122
  display: flex;
37778
38123
  flex-direction: column;
@@ -37788,7 +38133,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37788
38133
  shows up as a scrollbar the user has to drag to see the whole graph. Same
37789
38134
  shape as the card-fit rule above, minus the padding: chart tiles render
37790
38135
  `flush`, and apexcharts already draws its own margins. */
37791
- .cn-dashboard-page__chart-fit[data-v-b753474e] .cn-widget-wrapper__content {
38136
+ .cn-dashboard-page__chart-fit[data-v-4abdd0ae] .cn-widget-wrapper__content {
37792
38137
  overflow: hidden;
37793
38138
  display: flex;
37794
38139
  flex-direction: column;
@@ -37798,13 +38143,13 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37798
38143
  /* Card content (stat / gauge / delta) must fit the tile width: let the
37799
38144
  widget shrink and its value/label truncate instead of pushing past the
37800
38145
  tile edge (the horizontal clip on long currency values). */
37801
- .cn-dashboard-page__card-fit[data-v-b753474e] .cn-stat-widget,
37802
- .cn-dashboard-page__card-fit[data-v-b753474e] .cn-gauge-widget,
37803
- .cn-dashboard-page__card-fit[data-v-b753474e] .cn-delta-widget {
38146
+ .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-stat-widget,
38147
+ .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-gauge-widget,
38148
+ .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-delta-widget {
37804
38149
  min-width: 0;
37805
38150
  max-width: 100%;
37806
38151
  }
37807
- .cn-dashboard-page__unknown[data-v-b753474e] {
38152
+ .cn-dashboard-page__unknown[data-v-4abdd0ae] {
37808
38153
  display: flex;
37809
38154
  align-items: center;
37810
38155
  justify-content: center;
@@ -37815,29 +38160,29 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37815
38160
  }
37816
38161
 
37817
38162
  /* widget-ref content items */
37818
- .cn-dashboard-page__content[data-v-b753474e] {
38163
+ .cn-dashboard-page__content[data-v-4abdd0ae] {
37819
38164
  display: flex;
37820
38165
  flex-direction: column;
37821
38166
  gap: 16px;
37822
38167
  }
37823
- .cn-dashboard-page__content-item[data-v-b753474e] {
38168
+ .cn-dashboard-page__content-item[data-v-4abdd0ae] {
37824
38169
  width: 100%;
37825
38170
  }
37826
38171
  /* On a phone (screens-dashboard-phone) the touch targets of a board dashboard
37827
38172
  are 44px: the widget Actions menu and the KPI tiles. */
37828
38173
  @media (max-width: 640px) {
37829
- .cn-dashboard-page--board[data-v-b753474e] .cn-widget-wrapper__actions .action-item__menutoggle,
37830
- .cn-dashboard-page--board[data-v-b753474e] .cn-widget-wrapper__actions .button-vue {
38174
+ .cn-dashboard-page--board[data-v-4abdd0ae] .cn-widget-wrapper__actions .action-item__menutoggle,
38175
+ .cn-dashboard-page--board[data-v-4abdd0ae] .cn-widget-wrapper__actions .button-vue {
37831
38176
  min-height: 44px;
37832
38177
  }
37833
- .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-b753474e] {
38178
+ .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-4abdd0ae] {
37834
38179
  min-height: 44px;
37835
38180
  }
37836
38181
  }
37837
38182
 
37838
38183
  /* What a registry widget reports for its card header (`header` event): the
37839
38184
  note beside the link ("3 in total") and one action, as on a detail page. */
37840
- .cn-dashboard-page__widget-count[data-v-b753474e] {
38185
+ .cn-dashboard-page__widget-count[data-v-4abdd0ae] {
37841
38186
  align-self: center;
37842
38187
  padding: 1px 8px;
37843
38188
  border-radius: 10px;
@@ -37846,13 +38191,13 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37846
38191
  font-size: 13px;
37847
38192
  font-weight: 600;
37848
38193
  }
37849
- .cn-dashboard-page__widget-note[data-v-b753474e] {
38194
+ .cn-dashboard-page__widget-note[data-v-4abdd0ae] {
37850
38195
  align-self: center;
37851
38196
  color: var(--color-text-maxcontrast);
37852
38197
  font-size: 14px;
37853
38198
  white-space: nowrap;
37854
38199
  }
37855
- .cn-dashboard-page__widget-action[data-v-b753474e] {
38200
+ .cn-dashboard-page__widget-action[data-v-4abdd0ae] {
37856
38201
  display: inline-flex;
37857
38202
  align-items: center;
37858
38203
  align-self: center;
@@ -37868,7 +38213,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37868
38213
  white-space: nowrap;
37869
38214
  cursor: pointer;
37870
38215
  }
37871
- .cn-dashboard-page__widget-action[data-v-b753474e]:focus-visible {
38216
+ .cn-dashboard-page__widget-action[data-v-4abdd0ae]:focus-visible {
37872
38217
  outline: 2px solid var(--color-primary-element);
37873
38218
  outline-offset: 2px;
37874
38219
  }
@@ -40202,33 +40547,51 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40202
40547
  }
40203
40548
 
40204
40549
 
40205
- .cn-reports-page[data-v-7597ff10] {
40550
+ .cn-reports-page[data-v-327b60f8] {
40206
40551
  padding: 16px;
40207
40552
  }
40208
40553
 
40209
40554
  /* Clear the Nextcloud navigation toggle button (44px wide, absolutely
40210
40555
  positioned at the left edge of .app-content) plus 12px breathing room, as
40211
40556
  CnPageHeader does. Only the header shifts; the body keeps the full width. */
40212
- .cn-reports-page__header[data-v-7597ff10] {
40557
+ .cn-reports-page__header[data-v-327b60f8] {
40213
40558
  padding-inline-start: 56px;
40214
40559
  }
40215
- .cn-reports-page__title[data-v-7597ff10] {
40560
+ .cn-reports-page__title[data-v-327b60f8] {
40216
40561
  margin: 0 0 4px;
40217
40562
  }
40218
- .cn-reports-page__description[data-v-7597ff10] {
40563
+ .cn-reports-page__heading-row[data-v-327b60f8] {
40564
+ display: flex;
40565
+ flex-wrap: wrap;
40566
+ align-items: flex-start;
40567
+ justify-content: space-between;
40568
+ gap: 12px 24px;
40569
+ }
40570
+ .cn-reports-page__heading-row .cn-reports-page__title[data-v-327b60f8] {
40571
+ flex: 1 1 320px;
40572
+ min-width: 0;
40573
+ }
40574
+ .cn-reports-page__header-buttons[data-v-327b60f8] {
40575
+ display: flex;
40576
+ flex: none;
40577
+ flex-wrap: wrap;
40578
+ align-items: center;
40579
+ gap: 10px;
40580
+ }
40581
+ .cn-reports-page__description[data-v-327b60f8] {
40219
40582
  margin: 0 0 16px;
40220
40583
  color: var(--color-text-maxcontrast);
40221
40584
  }
40222
- .cn-reports-page__filter[data-v-7597ff10] {
40585
+ .cn-reports-page__filter[data-v-327b60f8] {
40223
40586
  display: flex;
40224
40587
  align-items: center;
40225
40588
  gap: 8px;
40226
40589
  margin-bottom: 16px;
40227
40590
  }
40228
- .cn-reports-page__filter-select[data-v-7597ff10] {
40591
+ .cn-reports-page__filter-select[data-v-327b60f8] {
40229
40592
  min-width: 220px;
40230
40593
  }
40231
- .cn-reports-page__grid[data-v-7597ff10] {
40594
+ .cn-reports-page__grid[data-v-327b60f8] {
40232
40595
  display: grid;
40233
40596
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
40234
40597
  gap: 12px;
@@ -40236,7 +40599,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40236
40599
  margin: 0;
40237
40600
  padding: 0;
40238
40601
  }
40239
- .cn-reports-page__card[data-v-7597ff10] {
40602
+ .cn-reports-page__card[data-v-327b60f8] {
40240
40603
  display: flex;
40241
40604
  flex-direction: column;
40242
40605
  gap: 4px;
@@ -40247,22 +40610,22 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40247
40610
  color: inherit;
40248
40611
  text-decoration: none;
40249
40612
  }
40250
- .cn-reports-page__card[data-v-7597ff10]:hover,
40251
- .cn-reports-page__card[data-v-7597ff10]:focus {
40613
+ .cn-reports-page__card[data-v-327b60f8]:hover,
40614
+ .cn-reports-page__card[data-v-327b60f8]:focus {
40252
40615
  background-color: var(--color-background-hover);
40253
40616
  }
40254
- .cn-reports-page__card-title[data-v-7597ff10] {
40617
+ .cn-reports-page__card-title[data-v-327b60f8] {
40255
40618
  font-weight: bold;
40256
40619
  }
40257
- .cn-reports-page__card-description[data-v-7597ff10],
40258
- .cn-reports-page__card-category[data-v-7597ff10] {
40620
+ .cn-reports-page__card-description[data-v-327b60f8],
40621
+ .cn-reports-page__card-category[data-v-327b60f8] {
40259
40622
  color: var(--color-text-maxcontrast);
40260
40623
  font-size: 0.9em;
40261
40624
  }
40262
- .cn-reports-page__empty[data-v-7597ff10] {
40625
+ .cn-reports-page__empty[data-v-327b60f8] {
40263
40626
  color: var(--color-text-maxcontrast);
40264
40627
  }
40265
- .cn-reports-page__widgets[data-v-7597ff10] {
40628
+ .cn-reports-page__widgets[data-v-327b60f8] {
40266
40629
  margin-top: 20px;
40267
40630
  }
40268
40631