@conduction/nextcloud-vue 2.92.0 → 2.94.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 (199) hide show
  1. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js +1 -1
  2. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js.map +1 -1
  3. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js +2 -1
  4. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js.map +1 -1
  5. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
  6. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +28 -8
  7. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  8. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +37 -2
  9. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  10. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +57 -4
  11. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  12. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +44 -17
  13. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  14. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue.js +1 -1
  15. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue2.js +44 -2
  16. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue2.js.map +1 -1
  17. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue3.js +140 -59
  18. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue3.js.map +1 -1
  19. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue.js +1 -1
  20. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js +139 -3
  21. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js.map +1 -1
  22. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js +60 -12
  23. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js.map +1 -1
  24. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  25. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +111 -42
  26. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  27. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +117 -73
  28. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  29. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +34 -39
  30. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  31. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +7 -7
  32. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  33. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +5 -3
  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/CnFactsWidget/CnFactsWidget.vue.js +1 -1
  37. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +6 -4
  38. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  39. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  40. package/dist/esm/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue2.js +46 -0
  41. package/dist/esm/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue2.js.map +1 -1
  42. package/dist/esm/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue3.js +6 -2
  43. package/dist/esm/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue3.js.map +1 -1
  44. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue.js +1 -1
  45. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js +82 -9
  46. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
  47. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js +104 -90
  48. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
  49. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue.js +9 -0
  50. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue.js.map +1 -0
  51. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js +355 -0
  52. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js.map +1 -0
  53. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js +462 -0
  54. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js.map +1 -0
  55. package/dist/esm/components/CnFormDialog/CnFormDialog.vue.js +1 -1
  56. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +21 -0
  57. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  58. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +402 -391
  59. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  60. package/dist/esm/components/CnIcon/semanticIcons.js +2 -2
  61. package/dist/esm/components/CnIcon/semanticIcons.js.map +1 -1
  62. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +141 -7
  63. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  64. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +5 -2
  65. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  66. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue.js +1 -1
  67. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js +22 -1
  68. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js.map +1 -1
  69. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js +20 -14
  70. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js.map +1 -1
  71. package/dist/esm/components/CnNotificationPreferences/CnNotificationPreferences.vue.js +1 -1
  72. package/dist/esm/components/CnNotificationPreferences/CnNotificationPreferences.vue2.js +2 -0
  73. package/dist/esm/components/CnNotificationPreferences/CnNotificationPreferences.vue2.js.map +1 -1
  74. package/dist/esm/components/CnNotificationPreferences/CnNotificationPreferences.vue3.js +15 -5
  75. package/dist/esm/components/CnNotificationPreferences/CnNotificationPreferences.vue3.js.map +1 -1
  76. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue.js +8 -0
  77. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue.js.map +1 -0
  78. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue2.js +114 -0
  79. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue2.js.map +1 -0
  80. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue3.js +45 -0
  81. package/dist/esm/components/CnPageHeader/CnHeaderTrail.vue3.js.map +1 -0
  82. package/dist/esm/components/CnPageHeader/CnPageHeader.vue2.js +38 -2
  83. package/dist/esm/components/CnPageHeader/CnPageHeader.vue2.js.map +1 -1
  84. package/dist/esm/components/CnPageHeader/CnPageHeader.vue3.js +12 -2
  85. package/dist/esm/components/CnPageHeader/CnPageHeader.vue3.js.map +1 -1
  86. package/dist/esm/components/CnPagination/CnPagination.vue2.js.map +1 -1
  87. package/dist/esm/components/CnPagination/CnPagination.vue3.js +56 -51
  88. package/dist/esm/components/CnPagination/CnPagination.vue3.js.map +1 -1
  89. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  90. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +3 -3
  91. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  92. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  93. package/dist/esm/components/CnRoadmapTab/CnRoadmapTab.vue.js +1 -1
  94. package/dist/esm/components/CnRoadmapTab/CnRoadmapTab.vue2.js +8 -30
  95. package/dist/esm/components/CnRoadmapTab/CnRoadmapTab.vue2.js.map +1 -1
  96. package/dist/esm/components/CnRoadmapTab/CnRoadmapTab.vue3.js.map +1 -1
  97. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue.js +1 -1
  98. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +24 -0
  99. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
  100. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js +3 -1
  101. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
  102. package/dist/esm/components/CnTabs/CnTabs.vue.js +1 -1
  103. package/dist/esm/components/CnTabs/CnTabs.vue2.js +39 -2
  104. package/dist/esm/components/CnTabs/CnTabs.vue2.js.map +1 -1
  105. package/dist/esm/components/CnTabs/CnTabs.vue3.js.map +1 -1
  106. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  107. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +85 -8
  108. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  109. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +37 -9
  110. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  111. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue.js +9 -0
  112. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue.js.map +1 -0
  113. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js +164 -0
  114. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue2.js.map +1 -0
  115. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js +93 -0
  116. package/dist/esm/components/CnUserSettingsDialog/CnUserSettingsDialog.vue3.js.map +1 -0
  117. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue.js +1 -1
  118. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js.map +1 -1
  119. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js +4 -3
  120. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js.map +1 -1
  121. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue.js +1 -1
  122. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +32 -0
  123. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
  124. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js +31 -20
  125. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
  126. package/dist/esm/composables/indexSources.js +9 -0
  127. package/dist/esm/composables/indexSources.js.map +1 -1
  128. package/dist/esm/l10n/en.json.js +24 -1
  129. package/dist/esm/l10n/en.json.js.map +1 -1
  130. package/dist/esm/l10n/nl.json.js +24 -1
  131. package/dist/esm/l10n/nl.json.js.map +1 -1
  132. package/dist/esm/library-style.js +1 -1
  133. package/dist/esm/nextcloud-vue.css +1190 -410
  134. package/dist/esm/utils/dueText.js +49 -8
  135. package/dist/esm/utils/dueText.js.map +1 -1
  136. package/dist/esm/utils/featureCatalog.js +135 -0
  137. package/dist/esm/utils/featureCatalog.js.map +1 -0
  138. package/dist/esm/utils/fillTemplate.js +74 -3
  139. package/dist/esm/utils/fillTemplate.js.map +1 -1
  140. package/dist/esm/utils/headerMeta.js +62 -12
  141. package/dist/esm/utils/headerMeta.js.map +1 -1
  142. package/dist/esm/utils/roadmapIssues.js +86 -0
  143. package/dist/esm/utils/roadmapIssues.js.map +1 -0
  144. package/dist/esm/utils/userDisplayName.js +47 -0
  145. package/dist/esm/utils/userDisplayName.js.map +1 -0
  146. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  147. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  148. package/dist/nextcloud-vue.cjs.js +16229 -13423
  149. package/dist/nextcloud-vue.cjs.js.map +2 -2
  150. package/dist/nextcloud-vue.css +1190 -410
  151. package/l10n/en.json +24 -1
  152. package/l10n/nl.json +24 -1
  153. package/package.json +1 -1
  154. package/src/components/CnActionsMenu/CnActionsMenu.vue +3 -1
  155. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +39 -1
  156. package/src/components/CnAppRoot/CnAppRoot.md +2 -0
  157. package/src/components/CnAppRoot/CnAppRoot.vue +66 -5
  158. package/src/components/CnChoiceCards/CnChoiceCards.md +27 -0
  159. package/src/components/CnChoiceCards/CnChoiceCards.vue +168 -3
  160. package/src/components/CnCountdownWidget/CnCountdownWidget.vue +222 -6
  161. package/src/components/CnDashboardPage/CnDashboardPage.vue +141 -8
  162. package/src/components/CnDataTable/CnDataTable.md +1 -0
  163. package/src/components/CnDataTable/CnDataTable.vue +41 -46
  164. package/src/components/CnDetailPage/CnDetailPage.vue +5 -3
  165. package/src/components/CnFactsWidget/CnFactsWidget.vue +6 -4
  166. package/src/components/CnFeaturesAndRoadmapPage/CnFeaturesAndRoadmapPage.vue +51 -1
  167. package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +98 -13
  168. package/src/components/CnFeaturesBoard/CnFeaturesBoard.vue +1053 -0
  169. package/src/components/CnFormDialog/CnFormDialog.vue +606 -562
  170. package/src/components/CnIndexPage/CnIndexPage.vue +144 -7
  171. package/src/components/CnNcWidgetWidget/CnNcWidgetWidget.vue +23 -2
  172. package/src/components/CnNotificationPreferences/CnNotificationPreferences.vue +5 -0
  173. package/src/components/CnPageHeader/CnHeaderTrail.vue +140 -0
  174. package/src/components/CnPageHeader/CnPageHeader.md +11 -0
  175. package/src/components/CnPageHeader/CnPageHeader.vue +42 -0
  176. package/src/components/CnPagination/CnPagination.vue +10 -2
  177. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +3 -3
  178. package/src/components/CnRoadmapTab/CnRoadmapTab.vue +6 -28
  179. package/src/components/CnSettingsPage/CnSettingsPage.vue +26 -0
  180. package/src/components/CnTabs/CnTabs.vue +39 -2
  181. package/src/components/CnTabsWidget/CnTabsWidget.vue +106 -13
  182. package/src/components/CnUserSettingsDialog/CnUserSettingsDialog.vue +305 -0
  183. package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +4 -3
  184. package/src/components/CnWidgetWrapper/CnWidgetWrapper.md +8 -0
  185. package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +43 -2
  186. package/src/composables/indexSources.js +9 -0
  187. package/src/css/dialog.css +61 -0
  188. package/src/css/look-board-detail.css +8 -0
  189. package/src/css/look-board-index.css +27 -1
  190. package/src/css/look-board.css +60 -0
  191. package/src/css/page-header.css +16 -0
  192. package/src/schemas/app-manifest-v2.schema.json +30 -17
  193. package/src/utils/dueText.js +49 -8
  194. package/src/utils/featureCatalog.js +132 -0
  195. package/src/utils/fillTemplate.js +73 -2
  196. package/src/utils/headerMeta.js +62 -12
  197. package/src/utils/roadmapIssues.js +82 -0
  198. package/src/utils/userDisplayName.js +54 -0
  199. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -658,6 +658,66 @@
658
658
  max-width: none;
659
659
  }
660
660
 
661
+ /* A Nextcloud text field or text area in a board settings card has its label
662
+ above the control (14px/600), as the boards draw it (PqBeheer Leadbeheer,
663
+ PqBeheerKassa Btw), instead of floating inside the border. The label stays
664
+ the field's own `<label for>`; it moves out of the control and the field
665
+ makes room for it. With the label outside, the placeholder shows at rest.
666
+ @spec openspec/changes/settings-section-board-fields/specs/settings-board-look/spec.md#requirement-a-settings-card-labels-its-text-fields-above-the-control */
667
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *) .input-field:has(.input-field__label),
668
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *) .textarea:has(.textarea__label) {
669
+ margin-block-start: 26px;
670
+ }
671
+
672
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *) .input-field__input + .input-field__label,
673
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *) .textarea__input + .textarea__label {
674
+ inset-block-start: auto;
675
+ inset-block-end: calc(100% + 4px);
676
+ inset-inline: 0 auto;
677
+ max-width: 100%;
678
+ margin: 0;
679
+ padding: 0;
680
+ background: none;
681
+ color: var(--color-main-text);
682
+ font-size: 14px;
683
+ font-weight: 600;
684
+ line-height: 20px;
685
+ pointer-events: auto;
686
+ transition: none;
687
+ }
688
+
689
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *) .input-field:has(.input-field__label) .input-field__input:not(:focus)::placeholder,
690
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *) .textarea__input:not(:focus):not(.textarea__input--label-outside)::placeholder {
691
+ opacity: 1 !important;
692
+ }
693
+
694
+ /* The support card at the end of an admin page (`supportPosition: "end"`,
695
+ board PqBeheer): one row, the title then the lines, wrapping in a narrow
696
+ window, with less padding than a settings card.
697
+ @spec openspec/changes/admin-shell-support-end/specs/settings-board-look/spec.md#requirement-support-can-be-its-own-card-at-the-end */
698
+ .cn-look-board .settings-section.cn-admin-settings-shell__support:not(.cn-look-nextcloud *) {
699
+ flex-direction: row !important;
700
+ flex-wrap: wrap;
701
+ align-items: center;
702
+ gap: 10px 24px;
703
+ padding: 16px 24px;
704
+ }
705
+
706
+ .cn-look-board .cn-admin-settings-shell__support:not(.cn-look-nextcloud *) .settings-section__name {
707
+ font-size: 16px;
708
+ }
709
+
710
+ .cn-look-board .cn-admin-settings-shell__support:not(.cn-look-nextcloud *) .cn-settings-section__content {
711
+ display: flex;
712
+ flex-wrap: wrap;
713
+ gap: 10px 24px;
714
+ }
715
+
716
+ .cn-look-board .cn-admin-settings-shell__support:not(.cn-look-nextcloud *) .cn-admin-settings-shell__support-line {
717
+ margin: 0;
718
+ font-size: 14px;
719
+ }
720
+
661
721
  /* The section footer is the save row: the hairline replaces its own rule. */
662
722
  .cn-look-board .settings-section .cn-settings-section__footer {
663
723
  margin: 0;
@@ -1123,6 +1183,67 @@
1123
1183
  .cn-dialog__confirm-pending {
1124
1184
  opacity: 0.45;
1125
1185
  }
1186
+
1187
+ /* On a phone the board dialog is a bottom sheet (board PqMobiel): full width,
1188
+ anchored to the bottom, as tall as its content up to the screen less the
1189
+ header, a 16px top radius and a grab bar. The footer buttons share the row. */
1190
+ @media (max-width: 600px) {
1191
+ .modal-mask.cn-dialog-board .modal-wrapper .modal-container,
1192
+ .modal-mask.cn-dialog-board .modal-wrapper--normal > .modal-container {
1193
+ position: absolute;
1194
+ inset: auto 0 0;
1195
+ width: 100%;
1196
+ max-width: 100%;
1197
+ height: auto;
1198
+ max-height: calc(100% - var(--header-height, 50px));
1199
+ border-radius: 16px 16px 0 0;
1200
+ }
1201
+
1202
+ .modal-mask.cn-dialog-board .modal-container::before {
1203
+ content: '';
1204
+ display: block;
1205
+ flex: none;
1206
+ width: 40px;
1207
+ height: 4px;
1208
+ margin: 8px auto 0;
1209
+ border-radius: 2px;
1210
+ background: var(--color-border-dark);
1211
+ }
1212
+
1213
+ .modal-mask.cn-dialog-board .modal-container {
1214
+ flex-direction: column;
1215
+ }
1216
+
1217
+ .cn-dialog-board .dialog {
1218
+ height: auto;
1219
+ min-height: 0;
1220
+ }
1221
+
1222
+ .cn-dialog-board .dialog__content {
1223
+ flex: 0 1 auto;
1224
+ overflow-y: auto;
1225
+ }
1226
+
1227
+ .cn-dialog-board .dialog__actions > .button-vue,
1228
+ .cn-dialog-board .dialog__actions > * {
1229
+ flex: 1 1 0;
1230
+ min-height: 44px;
1231
+ }
1232
+ }
1233
+
1234
+ /* Above a phone the boards top-align a dialog (DqNieuweZaak, DqUwWachtrij,
1235
+ DqVolgendeStap: the top edge sits about 90px down at 1440 wide) instead of
1236
+ centring it. `--cn-dialog-top` moves it. */
1237
+ @media (min-width: 601px) {
1238
+ .modal-mask.cn-dialog-board .modal-wrapper {
1239
+ align-items: flex-start;
1240
+ }
1241
+
1242
+ .modal-mask.cn-dialog-board .modal-wrapper .modal-container {
1243
+ margin-top: var(--cn-dialog-top, 88px);
1244
+ max-height: calc(100% - var(--cn-dialog-top, 88px) - 24px);
1245
+ }
1246
+ }
1126
1247
  /*
1127
1248
  * The board form field (screens-form-parity, canon sections 5 and 6).
1128
1249
  *
@@ -2175,10 +2296,11 @@
2175
2296
  border-radius: 0;
2176
2297
  }
2177
2298
 
2299
+ /* The header row is near-white on the boards (#fafbfc), not the hover grey. */
2178
2300
  .cn-look-board .cn-table-container--board .cn-data-table th {
2179
2301
  padding: 12px 16px;
2180
2302
  border-bottom: 0;
2181
- background: var(--color-background-hover);
2303
+ background: var(--cn-board-table-head-bg, color-mix(in srgb, var(--color-background-hover) 40%, var(--color-main-background)));
2182
2304
  color: var(--color-text-maxcontrast);
2183
2305
  font-weight: 600;
2184
2306
  }
@@ -2236,6 +2358,15 @@
2236
2358
  max-width: calc(100% - 26px);
2237
2359
  }
2238
2360
 
2361
+ /* The board's funnel: a 22px button 4px after the sort chevron. */
2362
+ .cn-look-board .cn-table-container--board .cn-data-table th .cn-table-header__filter {
2363
+ width: 22px;
2364
+ min-width: 22px;
2365
+ height: 22px;
2366
+ min-height: 22px;
2367
+ margin-inline-start: 4px;
2368
+ }
2369
+
2239
2370
  /* The selection column: 18px checkboxes, 28px of content after 16px of padding.
2240
2371
  The box model is set with `!important` and the widths include the padding:
2241
2372
  Nextcloud's server.css sets `box-sizing: border-box` on everything under
@@ -2441,6 +2572,14 @@
2441
2572
  padding: 0 12px;
2442
2573
  }
2443
2574
 
2575
+ /* The inert Next of a single page: a faint outline, muted text. */
2576
+ .cn-look-board .cn-pagination--board .cn-pagination__board-link--disabled {
2577
+ display: inline-flex;
2578
+ align-items: center;
2579
+ color: var(--color-text-maxcontrast);
2580
+ cursor: default;
2581
+ }
2582
+
2444
2583
  .cn-look-board .cn-pagination--board .cn-pagination__board-link--current {
2445
2584
  border-color: var(--color-primary-element);
2446
2585
  background: var(--color-primary-element);
@@ -2722,6 +2861,14 @@
2722
2861
  padding: 0 12px;
2723
2862
  border-radius: 8px;
2724
2863
  }
2864
+
2865
+ /* The sidebar's own open toggle (NcAppSidebar's `.app-sidebar__toggle`, drawn
2866
+ when the sidebar is closed) sits over the content's top-right corner, which
2867
+ on an index page is the primary header button: a stray dark square on
2868
+ "New contact". The board draws none; the Filter button opens the sidebar. */
2869
+ .cn-look-board:has(.cn-index-page) > .app-sidebar__toggle {
2870
+ display: none;
2871
+ }
2725
2872
  /* ========================================
2726
2873
  @conduction/nextcloud-vue — Table Styles
2727
2874
  ======================================== */
@@ -4937,6 +5084,22 @@ a.cn-kpi-card--board * {
4937
5084
  white-space: nowrap;
4938
5085
  border: 0;
4939
5086
  }
5087
+
5088
+ /* The breadcrumb and meta line under the title (CnHeaderTrail). In the board
5089
+ look it takes the detail header row's styles; here it only lays the crumbs,
5090
+ the dot and the note out on one line. */
5091
+ .cn-header-trail {
5092
+ align-items: center;
5093
+ color: var(--color-text-maxcontrast);
5094
+ display: flex;
5095
+ flex-wrap: wrap;
5096
+ gap: var(--default-grid-baseline);
5097
+ margin-bottom: var(--default-grid-baseline);
5098
+ }
5099
+
5100
+ .cn-header-trail .cn-detail-page__breadcrumbs {
5101
+ margin-bottom: 0;
5102
+ }
4940
5103
  /* CnActionsBar — Reusable actions toolbar styles */
4941
5104
 
4942
5105
  .cn-actions-bar {
@@ -7312,6 +7475,14 @@ a.cn-kpi-card--board * {
7312
7475
  .cn-look-board:has(.cn-detail-page) > .app-sidebar__toggle {
7313
7476
  display: none;
7314
7477
  }
7478
+
7479
+ /* Below 768px the header is a column (detail-page.css), where the 320px basis
7480
+ above would be a 320px HEIGHT: the title sat in a band of white on a phone. */
7481
+ @media (max-width: 768px) {
7482
+ .cn-look-board .cn-detail-page__header--board > :first-child {
7483
+ flex: none;
7484
+ }
7485
+ }
7315
7486
  /*
7316
7487
  * The reports page under the board look (screens-reports-page-board-look,
7317
7488
  * board DcRapportages): a 28px title over a muted lead, one section per
@@ -9407,10 +9578,54 @@ a.cn-kpi-card--board * {
9407
9578
  }
9408
9579
 
9409
9580
 
9410
- .cn-countdown-widget__value[data-v-d1b330c0] {
9581
+ .cn-countdown-widget__value[data-v-22ccd275] {
9411
9582
  white-space: nowrap;
9412
9583
  }
9413
- .cn-countdown-widget__sub[data-v-d1b330c0] {
9584
+ .cn-countdown-widget__progress[data-v-22ccd275] {
9585
+ background: var(--color-border);
9586
+ border-radius: 3px;
9587
+ display: block;
9588
+ height: 6px;
9589
+ margin-block-start: 10px;
9590
+ overflow: hidden;
9591
+ }
9592
+ .cn-countdown-widget__progress-fill[data-v-22ccd275] {
9593
+ background: var(--color-primary-element);
9594
+ display: block;
9595
+ height: 100%;
9596
+ }
9597
+ .cn-countdown-widget__action[data-v-22ccd275] {
9598
+ align-self: flex-start;
9599
+ background: var(--color-background-dark);
9600
+ border: 0;
9601
+ border-radius: var(--border-radius-pill, 17px);
9602
+ color: var(--color-main-text);
9603
+ font-weight: 600;
9604
+ margin-block-start: 10px;
9605
+ min-height: 34px;
9606
+ padding: 0 12px;
9607
+ }
9608
+ .cn-countdown-widget__action--primary[data-v-22ccd275] {
9609
+ background: var(--color-primary-element-light);
9610
+ color: var(--color-primary-element-light-text);
9611
+ }
9612
+ .cn-countdown-widget__facts[data-v-22ccd275] {
9613
+ display: grid;
9614
+ gap: 8px 16px;
9615
+ grid-template-columns: max-content 1fr;
9616
+ margin: 10px 0 0;
9617
+ }
9618
+ .cn-countdown-widget__facts dt[data-v-22ccd275] {
9619
+ color: var(--color-text-maxcontrast);
9620
+ }
9621
+ .cn-countdown-widget__facts dd[data-v-22ccd275] {
9622
+ margin: 0;
9623
+ }
9624
+ .cn-countdown-widget__action[data-v-22ccd275]:hover,
9625
+ .cn-countdown-widget__action[data-v-22ccd275]:focus-visible {
9626
+ background: var(--color-background-hover);
9627
+ }
9628
+ .cn-countdown-widget__sub[data-v-22ccd275] {
9414
9629
  color: var(--color-text-maxcontrast);
9415
9630
  font-size: 0.85em;
9416
9631
  }
@@ -20692,7 +20907,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20692
20907
 
20693
20908
 
20694
20909
  /* A select option breaks between words only, never inside one. */
20695
- .cn-form-dialog__option[data-v-b7ff10cc] {
20910
+ .cn-form-dialog__option[data-v-65a5754f] {
20696
20911
  display: block;
20697
20912
  min-width: 0;
20698
20913
  white-space: normal;
@@ -20700,7 +20915,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20700
20915
  word-break: normal;
20701
20916
  hyphens: manual;
20702
20917
  }
20703
- .cn-form-dialog__draft-actions[data-v-b7ff10cc] {
20918
+ .cn-form-dialog__draft-actions[data-v-65a5754f] {
20704
20919
  display: flex;
20705
20920
  gap: 8px;
20706
20921
  margin-top: 8px;
@@ -20708,22 +20923,22 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20708
20923
 
20709
20924
  /* The state is announced in WORDS, and the colour only repeats them. A
20710
20925
  reader who cannot see it still hears "Draft saved" (WCAG 2.2 SC 1.4.1). */
20711
- .cn-form-dialog__draft-state[data-v-b7ff10cc] {
20926
+ .cn-form-dialog__draft-state[data-v-65a5754f] {
20712
20927
  align-self: center;
20713
20928
  color: var(--color-text-maxcontrast);
20714
20929
  font-size: 0.9em;
20715
20930
  margin-inline-end: auto;
20716
20931
  }
20717
- .cn-form-dialog__switch-wrapper[data-v-b7ff10cc] {
20932
+ .cn-form-dialog__switch-wrapper[data-v-65a5754f] {
20718
20933
  display: flex;
20719
20934
  flex-direction: column;
20720
20935
  }
20721
- .cn-form-dialog__form[data-v-b7ff10cc] {
20936
+ .cn-form-dialog__form[data-v-65a5754f] {
20722
20937
  display: flex;
20723
20938
  flex-direction: column;
20724
20939
  gap: 4px;
20725
20940
  }
20726
- .cn-form-dialog__field[data-v-b7ff10cc] {
20941
+ .cn-form-dialog__field[data-v-65a5754f] {
20727
20942
  margin-bottom: 8px;
20728
20943
  }
20729
20944
 
@@ -20735,39 +20950,53 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20735
20950
  from pushing its column past its share: a grid item's default `auto`
20736
20951
  minimum is its content, so without it one long option label widens the
20737
20952
  whole column and the two stop being equal. */
20738
- .cn-form-dialog__form--two-column[data-v-b7ff10cc] {
20953
+ .cn-form-dialog__section[data-v-65a5754f] {
20954
+ margin: 12px 0 0;
20955
+ padding-top: 12px;
20956
+ border-top: 1px solid var(--color-border);
20957
+ font-size: 15px;
20958
+ font-weight: 700;
20959
+ }
20960
+
20961
+ /* The first heading opens the form: no rule above it. */
20962
+ .cn-form-dialog__form .cn-form-dialog__section[data-v-65a5754f]:first-of-type {
20963
+ margin-top: 0;
20964
+ padding-top: 0;
20965
+ border-top: 0;
20966
+ }
20967
+ .cn-form-dialog__form--two-column[data-v-65a5754f] {
20739
20968
  display: grid;
20740
20969
  grid-template-columns: 1fr 1fr;
20741
20970
  column-gap: 16px;
20742
20971
  align-items: start;
20743
20972
  }
20744
- .cn-form-dialog__form--two-column[data-v-b7ff10cc] > * {
20973
+ .cn-form-dialog__form--two-column[data-v-65a5754f] > * {
20745
20974
  min-width: 0;
20746
20975
  }
20747
20976
 
20748
20977
  /* Anything that is not a field (the form-level error note, the slots above
20749
20978
  and below the fields) spans the full width, so a note card never sits in
20750
20979
  a half-width column beside an input. */
20751
- .cn-form-dialog__form--two-column[data-v-b7ff10cc] > :not(.cn-form-dialog__field),
20752
- .cn-form-dialog__form--two-column > .cn-form-dialog__field--wide[data-v-b7ff10cc] {
20980
+ .cn-form-dialog__form--two-column[data-v-65a5754f] > :not(.cn-form-dialog__field),
20981
+ .cn-form-dialog__form--two-column > .cn-form-dialog__field--wide[data-v-65a5754f] {
20753
20982
  grid-column: 1 / -1;
20754
20983
  }
20755
20984
 
20756
20985
  /* A narrow viewport gets the single column back. Two columns of roughly
20757
20986
  150px each are worse than one readable one. */
20758
20987
  @media (max-width: 700px) {
20759
- .cn-form-dialog__form--two-column[data-v-b7ff10cc] {
20988
+ .cn-form-dialog__form--two-column[data-v-65a5754f] {
20760
20989
  display: block;
20761
20990
  }
20762
20991
  }
20763
- .cn-form-dialog__textarea-wrapper[data-v-b7ff10cc],
20764
- .cn-form-dialog__select-wrapper[data-v-b7ff10cc],
20765
- .cn-form-dialog__json-wrapper[data-v-b7ff10cc] {
20992
+ .cn-form-dialog__textarea-wrapper[data-v-65a5754f],
20993
+ .cn-form-dialog__select-wrapper[data-v-65a5754f],
20994
+ .cn-form-dialog__json-wrapper[data-v-65a5754f] {
20766
20995
  display: flex;
20767
20996
  flex-direction: column;
20768
20997
  gap: 4px;
20769
20998
  }
20770
- .cn-form-dialog__label[data-v-b7ff10cc] {
20999
+ .cn-form-dialog__label[data-v-65a5754f] {
20771
21000
  font-weight: 600;
20772
21001
  font-size: 0.9em;
20773
21002
  color: var(--color-main-text);
@@ -20775,10 +21004,10 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20775
21004
 
20776
21005
  /* Cross-app semantic reference (ADR-048) whose provider isn't installed —
20777
21006
  rendered disabled; the wrapper carries the mouse-over tooltip. */
20778
- .cn-form-dialog__semantic-unresolved[data-v-b7ff10cc] {
21007
+ .cn-form-dialog__semantic-unresolved[data-v-65a5754f] {
20779
21008
  cursor: not-allowed;
20780
21009
  }
20781
- .cn-form-dialog__textarea[data-v-b7ff10cc] {
21010
+ .cn-form-dialog__textarea[data-v-65a5754f] {
20782
21011
  width: 100%;
20783
21012
  min-height: 80px;
20784
21013
  padding: 8px;
@@ -20790,22 +21019,22 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20790
21019
  font-size: inherit;
20791
21020
  resize: vertical;
20792
21021
  }
20793
- .cn-form-dialog__textarea[data-v-b7ff10cc]:focus {
21022
+ .cn-form-dialog__textarea[data-v-65a5754f]:focus {
20794
21023
  border-color: var(--color-primary-element);
20795
21024
  outline: none;
20796
21025
  }
20797
- .cn-form-dialog__textarea[data-v-b7ff10cc]:disabled {
21026
+ .cn-form-dialog__textarea[data-v-65a5754f]:disabled {
20798
21027
  opacity: 0.5;
20799
21028
  cursor: not-allowed;
20800
21029
  }
20801
- .cn-form-dialog__helper[data-v-b7ff10cc] {
21030
+ .cn-form-dialog__helper[data-v-65a5754f] {
20802
21031
  font-size: 0.85em;
20803
21032
  color: var(--color-text-maxcontrast);
20804
21033
  }
20805
- .cn-form-dialog__helper--error[data-v-b7ff10cc] {
21034
+ .cn-form-dialog__helper--error[data-v-65a5754f] {
20806
21035
  color: var(--color-error);
20807
21036
  }
20808
- .cn-form-dialog__dynamic-loading[data-v-b7ff10cc] {
21037
+ .cn-form-dialog__dynamic-loading[data-v-65a5754f] {
20809
21038
  display: flex;
20810
21039
  align-items: center;
20811
21040
  gap: 8px;
@@ -21062,7 +21291,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21062
21291
  }
21063
21292
 
21064
21293
 
21065
- .cn-widget-wrapper[data-v-4f6c55f6] {
21294
+ .cn-widget-wrapper[data-v-cc60e4c8] {
21066
21295
  position: relative;
21067
21296
  height: 100%;
21068
21297
  display: flex;
@@ -21076,13 +21305,13 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21076
21305
  }
21077
21306
 
21078
21307
  /* Headerless date chip — floated over the top-right of a flush card. */
21079
- .cn-widget-wrapper__floating-meta[data-v-4f6c55f6] {
21308
+ .cn-widget-wrapper__floating-meta[data-v-cc60e4c8] {
21080
21309
  position: absolute;
21081
21310
  top: 8px;
21082
21311
  inset-inline-end: 10px;
21083
21312
  z-index: 2;
21084
21313
  }
21085
- .cn-widget-wrapper__content[data-v-4f6c55f6] {
21314
+ .cn-widget-wrapper__content[data-v-cc60e4c8] {
21086
21315
  flex: 1;
21087
21316
  overflow: auto;
21088
21317
  min-height: 0;
@@ -21098,24 +21327,24 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21098
21327
  So it is structural instead. `:has()` keys on the table component's own root
21099
21328
  class, which means a table is flush by construction and no caller can
21100
21329
  reintroduce the gap by forgetting a prop. */
21101
- .cn-widget-wrapper__content[data-v-4f6c55f6]:has(> .cn-table-container),
21102
- .cn-widget-wrapper__content[data-v-4f6c55f6]:has(> .cn-widget-object-table) {
21330
+ .cn-widget-wrapper__content[data-v-cc60e4c8]:has(> .cn-table-container),
21331
+ .cn-widget-wrapper__content[data-v-cc60e4c8]:has(> .cn-widget-object-table) {
21103
21332
  padding: 0;
21104
21333
  }
21105
21334
 
21106
21335
  /* Keyboard focus ring for the now-focusable scrollable content region. */
21107
- .cn-widget-wrapper__content[data-v-4f6c55f6]:focus-visible {
21336
+ .cn-widget-wrapper__content[data-v-cc60e4c8]:focus-visible {
21108
21337
  outline: 2px solid var(--color-primary-element);
21109
21338
  outline-offset: -2px;
21110
21339
  }
21111
- .cn-widget-wrapper--borderless[data-v-4f6c55f6] {
21340
+ .cn-widget-wrapper--borderless[data-v-cc60e4c8] {
21112
21341
  border: none;
21113
21342
  background: transparent;
21114
21343
  }
21115
- .cn-widget-wrapper--borderless .cn-widget-wrapper__content[data-v-4f6c55f6] {
21344
+ .cn-widget-wrapper--borderless .cn-widget-wrapper__content[data-v-cc60e4c8] {
21116
21345
  padding: 0;
21117
21346
  }
21118
- .cn-widget-wrapper--flush .cn-widget-wrapper__content[data-v-4f6c55f6] {
21347
+ .cn-widget-wrapper--flush .cn-widget-wrapper__content[data-v-cc60e4c8] {
21119
21348
  padding: 0;
21120
21349
  }
21121
21350
 
@@ -21123,8 +21352,8 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21123
21352
  above. A dashboard renders every widget `flush`, and without this their
21124
21353
  fields touch the card's edges. Borderless and chromeless cards, and the
21125
21354
  Nextcloud dashboard variant, keep their own padding. */
21126
- .cn-widget-wrapper--flush:not(.cn-widget-wrapper--borderless, .cn-widget-wrapper--nc-dashboard) > .cn-widget-wrapper__content[data-v-4f6c55f6]:has(> .cn-form-widget),
21127
- .cn-widget-wrapper--flush:not(.cn-widget-wrapper--borderless, .cn-widget-wrapper--nc-dashboard) > .cn-widget-wrapper__content[data-v-4f6c55f6]:has(> .cn-kb-search-widget) {
21355
+ .cn-widget-wrapper--flush:not(.cn-widget-wrapper--borderless, .cn-widget-wrapper--nc-dashboard) > .cn-widget-wrapper__content[data-v-cc60e4c8]:has(> .cn-form-widget),
21356
+ .cn-widget-wrapper--flush:not(.cn-widget-wrapper--borderless, .cn-widget-wrapper--nc-dashboard) > .cn-widget-wrapper__content[data-v-cc60e4c8]:has(> .cn-kb-search-widget) {
21128
21357
  padding: 16px;
21129
21358
  }
21130
21359
 
@@ -21135,7 +21364,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21135
21364
  a square panel, which is the last visible piece of a card that is supposed
21136
21365
  to be absent. `CnDetailCard.cn-detail-card--chromeless` zeroes the same
21137
21366
  thing for the same reason. */
21138
- .cn-widget-wrapper--chromeless[data-v-4f6c55f6] {
21367
+ .cn-widget-wrapper--chromeless[data-v-cc60e4c8] {
21139
21368
  border-radius: 0;
21140
21369
  }
21141
21370
 
@@ -21147,7 +21376,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21147
21376
  * so users can override any token. Combined selector raises specificity above
21148
21377
  * the base `.cn-widget-wrapper` rules it supersedes.
21149
21378
  */
21150
- .cn-widget-wrapper__header[data-v-4f6c55f6] {
21379
+ .cn-widget-wrapper__header[data-v-cc60e4c8] {
21151
21380
  display: flex;
21152
21381
  align-items: center;
21153
21382
  justify-content: space-between;
@@ -21163,7 +21392,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21163
21392
  /* Actions with no title beside them. `header-left` is not rendered at all in
21164
21393
  this mode, and the header is `space-between`, so a single child would sit
21165
21394
  flush LEFT where every other surface puts its actions on the right. */
21166
- .cn-widget-wrapper__header--actions-only[data-v-4f6c55f6] {
21395
+ .cn-widget-wrapper__header--actions-only[data-v-cc60e4c8] {
21167
21396
  justify-content: flex-end;
21168
21397
  }
21169
21398
 
@@ -21179,11 +21408,11 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21179
21408
  no-descending-specificity asks for. The cascade did not need it (this
21180
21409
  selector is more specific either way), a reader does: an override written
21181
21410
  above the thing it overrides has to be read twice. */
21182
- .cn-widget-wrapper--chromeless .cn-widget-wrapper__header[data-v-4f6c55f6] {
21411
+ .cn-widget-wrapper--chromeless .cn-widget-wrapper__header[data-v-cc60e4c8] {
21183
21412
  border-bottom: none;
21184
21413
  padding-inline: 0;
21185
21414
  }
21186
- .cn-widget-wrapper__header-left[data-v-4f6c55f6] {
21415
+ .cn-widget-wrapper__header-left[data-v-cc60e4c8] {
21187
21416
  display: flex;
21188
21417
  align-items: center;
21189
21418
  gap: 8px;
@@ -21192,19 +21421,24 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21192
21421
  of centering between icon and actions (header is space-between). */
21193
21422
  flex: 1 1 auto;
21194
21423
  }
21195
- .cn-widget-wrapper__icon[data-v-4f6c55f6] {
21424
+ .cn-widget-wrapper__icon[data-v-cc60e4c8] {
21196
21425
  width: 24px;
21197
21426
  height: 24px;
21198
21427
  flex-shrink: 0;
21199
21428
  color: var(--cn-widget-icon-color, var(--color-primary-element));
21200
21429
  }
21201
- .cn-widget-wrapper__title-stack[data-v-4f6c55f6] {
21430
+ .cn-widget-wrapper__title-stack[data-v-cc60e4c8] {
21202
21431
  display: flex;
21203
21432
  flex-direction: column;
21204
21433
  gap: 2px;
21205
21434
  min-width: 0;
21206
21435
  }
21207
- .cn-widget-wrapper__eyebrow[data-v-4f6c55f6] {
21436
+ .cn-widget-wrapper__subtitle[data-v-cc60e4c8] {
21437
+ font-size: 13px;
21438
+ line-height: 1.3;
21439
+ color: var(--color-text-maxcontrast);
21440
+ }
21441
+ .cn-widget-wrapper__eyebrow[data-v-cc60e4c8] {
21208
21442
  font-size: 13px;
21209
21443
  line-height: 1.3;
21210
21444
  color: var(--color-text-maxcontrast);
@@ -21212,7 +21446,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21212
21446
  overflow: hidden;
21213
21447
  text-overflow: ellipsis;
21214
21448
  }
21215
- .cn-widget-wrapper__title[data-v-4f6c55f6] {
21449
+ .cn-widget-wrapper__title[data-v-cc60e4c8] {
21216
21450
  font-weight: 600;
21217
21451
  font-size: 14px;
21218
21452
  margin: 0;
@@ -21220,34 +21454,34 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21220
21454
  overflow: hidden;
21221
21455
  text-overflow: ellipsis;
21222
21456
  }
21223
- .cn-widget-wrapper.cn-widget-wrapper--nc-dashboard[data-v-4f6c55f6] {
21457
+ .cn-widget-wrapper.cn-widget-wrapper--nc-dashboard[data-v-cc60e4c8] {
21224
21458
  background: var(--color-main-background-blur, var(--color-main-background));
21225
21459
  -webkit-backdrop-filter: var(--filter-background-blur, none);
21226
21460
  backdrop-filter: var(--filter-background-blur, none);
21227
21461
  border: none;
21228
21462
  border-radius: var(--border-radius-container-large, 16px);
21229
21463
  }
21230
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__header[data-v-4f6c55f6] {
21464
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__header[data-v-cc60e4c8] {
21231
21465
  padding: 16px;
21232
21466
  border-bottom: none;
21233
21467
  }
21234
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__header-left[data-v-4f6c55f6] {
21468
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__header-left[data-v-cc60e4c8] {
21235
21469
  gap: 16px;
21236
21470
  }
21237
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__icon[data-v-4f6c55f6] {
21471
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__icon[data-v-cc60e4c8] {
21238
21472
  width: 32px;
21239
21473
  height: 32px;
21240
21474
  background-size: 32px;
21241
21475
  }
21242
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__title[data-v-4f6c55f6] {
21476
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__title[data-v-cc60e4c8] {
21243
21477
  font-size: 20px;
21244
21478
  font-weight: 700;
21245
21479
  line-height: 24px;
21246
21480
  }
21247
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__content[data-v-4f6c55f6] {
21481
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__content[data-v-cc60e4c8] {
21248
21482
  padding: 0 16px 16px;
21249
21483
  }
21250
- .cn-widget-wrapper__title-meta[data-v-4f6c55f6] {
21484
+ .cn-widget-wrapper__title-meta[data-v-cc60e4c8] {
21251
21485
  display: flex;
21252
21486
  align-items: center;
21253
21487
  gap: 4px;
@@ -21256,7 +21490,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21256
21490
  white-space: nowrap;
21257
21491
  flex-shrink: 0;
21258
21492
  }
21259
- .cn-widget-wrapper__actions[data-v-4f6c55f6] {
21493
+ .cn-widget-wrapper__actions[data-v-cc60e4c8] {
21260
21494
  display: flex;
21261
21495
  gap: 4px;
21262
21496
  flex-shrink: 0;
@@ -21264,7 +21498,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21264
21498
 
21265
21499
  /* The header's text link (`headerLink`). Theme hooks: --cn-widget-header-link-size
21266
21500
  and --cn-widget-header-link-weight. */
21267
- .cn-widget-wrapper__header-link[data-v-4f6c55f6] {
21501
+ .cn-widget-wrapper__header-link[data-v-cc60e4c8] {
21268
21502
  align-self: center;
21269
21503
  padding: 0 calc(1 * var(--default-grid-baseline));
21270
21504
  color: var(--color-primary-element);
@@ -21273,11 +21507,11 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21273
21507
  text-decoration: none;
21274
21508
  white-space: nowrap;
21275
21509
  }
21276
- .cn-widget-wrapper__header-link[data-v-4f6c55f6]:hover,
21277
- .cn-widget-wrapper__header-link[data-v-4f6c55f6]:focus-visible {
21510
+ .cn-widget-wrapper__header-link[data-v-cc60e4c8]:hover,
21511
+ .cn-widget-wrapper__header-link[data-v-cc60e4c8]:focus-visible {
21278
21512
  text-decoration: underline;
21279
21513
  }
21280
- .cn-widget-wrapper__header-link[data-v-4f6c55f6]:focus-visible {
21514
+ .cn-widget-wrapper__header-link[data-v-cc60e4c8]:focus-visible {
21281
21515
  outline: 2px solid var(--color-primary-element);
21282
21516
  outline-offset: 2px;
21283
21517
  border-radius: var(--border-radius-small, 4px);
@@ -21288,7 +21522,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21288
21522
  wrapper is ever rendered without it. Material-design-icon components paint
21289
21523
  with `fill: currentColor`, so this reaches them; the :deep rule below makes
21290
21524
  it reach a raw <svg> in the slot too. */
21291
- .cn-widget-wrapper__title-icon[data-v-4f6c55f6] {
21525
+ .cn-widget-wrapper__title-icon[data-v-cc60e4c8] {
21292
21526
  display: flex;
21293
21527
  align-items: center;
21294
21528
  flex-shrink: 0;
@@ -21308,17 +21542,17 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21308
21542
 
21309
21543
  /* Right-positioned title icons sit AFTER the actions, so the margin belongs on
21310
21544
  the other side or it pushes the icon off the header's right edge. */
21311
- .cn-widget-wrapper__title-icon[data-v-4f6c55f6]:last-child {
21545
+ .cn-widget-wrapper__title-icon[data-v-cc60e4c8]:last-child {
21312
21546
  margin-inline-end: 0;
21313
21547
  margin-inline-start: 8px;
21314
21548
  }
21315
21549
 
21316
21550
  /* Material-design-icon components paint with `fill: currentColor`, so the
21317
21551
  colour above reaches them; this makes it reach a raw <svg> in the slot too. */
21318
- .cn-widget-wrapper__title-icon[data-v-4f6c55f6] svg {
21552
+ .cn-widget-wrapper__title-icon[data-v-cc60e4c8] svg {
21319
21553
  fill: currentcolor;
21320
21554
  }
21321
- .cn-widget-wrapper__footer[data-v-4f6c55f6] {
21555
+ .cn-widget-wrapper__footer[data-v-cc60e4c8] {
21322
21556
  display: flex;
21323
21557
  justify-content: flex-end;
21324
21558
  gap: 8px;
@@ -21326,12 +21560,12 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21326
21560
  border-top: 1px solid var(--color-border);
21327
21561
  flex-shrink: 0;
21328
21562
  }
21329
- .cn-widget-wrapper__footer-link[data-v-4f6c55f6] {
21563
+ .cn-widget-wrapper__footer-link[data-v-cc60e4c8] {
21330
21564
  font-size: 13px;
21331
21565
  color: var(--color-primary-element);
21332
21566
  text-decoration: none;
21333
21567
  }
21334
- .cn-widget-wrapper__footer-link[data-v-4f6c55f6]:hover {
21568
+ .cn-widget-wrapper__footer-link[data-v-cc60e4c8]:hover {
21335
21569
  text-decoration: underline;
21336
21570
  }
21337
21571
 
@@ -24947,6 +25181,19 @@ button.cn-stepper__step[data-v-776581d4] {
24947
25181
  }
24948
25182
 
24949
25183
 
25184
+ /* `separator`: a text separator in place of the chevron. The chevron's own
25185
+ element stays (it carries NcBreadcrumbs' spacing and its "no separator after
25186
+ the last crumb" rule); only its icon gives way to the text. */
25187
+ .cn-breadcrumbs--text-separator[data-v-54c3381a] .vue-crumb__separator svg {
25188
+ display: none;
25189
+ }
25190
+ .cn-breadcrumbs--text-separator[data-v-54c3381a] .vue-crumb__separator::before {
25191
+ content: var(--cn-breadcrumbs-separator);
25192
+ padding-inline: var(--cn-breadcrumbs-separator-gap, 0);
25193
+ color: var(--color-text-maxcontrast);
25194
+ }
25195
+
25196
+
24950
25197
  .cn-form-page__honeypot {
24951
25198
  position: absolute;
24952
25199
  left: -10000px;
@@ -25127,7 +25374,7 @@ button.cn-stepper__step[data-v-776581d4] {
25127
25374
  line rather than above a line that stops where the last tab does. With no
25128
25375
  nav-end content the nav is the bar's only child and the result is pixel
25129
25376
  identical to the rule living on the nav itself. */
25130
- .cn-tabs__bar[data-v-019bacbf] {
25377
+ .cn-tabs__bar[data-v-4d96de3d] {
25131
25378
  /* Top-aligned so the `#nav-end` control sits on the tab row, not below it,
25132
25379
  should the two sides ever differ in height. */
25133
25380
  align-items: flex-start;
@@ -25137,12 +25384,12 @@ button.cn-stepper__step[data-v-776581d4] {
25137
25384
  }
25138
25385
 
25139
25386
  /* The strip holds the scrolling nav and the edge affordances drawn over it. */
25140
- .cn-tabs__strip[data-v-019bacbf] {
25387
+ .cn-tabs__strip[data-v-4d96de3d] {
25141
25388
  flex: 1 1 auto;
25142
25389
  min-width: 0;
25143
25390
  position: relative;
25144
25391
  }
25145
- .cn-tabs__nav[data-v-019bacbf] {
25392
+ .cn-tabs__nav[data-v-4d96de3d] {
25146
25393
  display: flex;
25147
25394
  gap: 4px;
25148
25395
  /* One row that scrolls, never a wrap: in a narrow sidebar a nine-tab strip
@@ -25159,11 +25406,11 @@ button.cn-stepper__step[data-v-776581d4] {
25159
25406
  the panel's colour, covers it and the tab joins its panel. */
25160
25407
  margin-bottom: -1px;
25161
25408
  }
25162
- .cn-tabs__nav[data-v-019bacbf]::-webkit-scrollbar {
25409
+ .cn-tabs__nav[data-v-4d96de3d]::-webkit-scrollbar {
25163
25410
  display: none;
25164
25411
  }
25165
25412
  @media (prefers-reduced-motion: reduce) {
25166
- .cn-tabs__nav[data-v-019bacbf] {
25413
+ .cn-tabs__nav[data-v-4d96de3d] {
25167
25414
  scroll-behavior: auto;
25168
25415
  }
25169
25416
  }
@@ -25174,8 +25421,8 @@ button.cn-stepper__step[data-v-776581d4] {
25174
25421
  z-index 2 so the fades outrank a lifted tab: CnTabsWidget puts the open tab
25175
25422
  at 1, and a tie goes to DOM order, which would draw that tab over the start
25176
25423
  fade (it precedes the tabs) while the end fade still covered it. */
25177
- .cn-tabs__strip[data-v-019bacbf]::before,
25178
- .cn-tabs__strip[data-v-019bacbf]::after {
25424
+ .cn-tabs__strip[data-v-4d96de3d]::before,
25425
+ .cn-tabs__strip[data-v-4d96de3d]::after {
25179
25426
  content: '';
25180
25427
  display: none;
25181
25428
  inset-block: 0 1px;
@@ -25184,23 +25431,23 @@ button.cn-stepper__step[data-v-776581d4] {
25184
25431
  width: 56px;
25185
25432
  z-index: 2;
25186
25433
  }
25187
- .cn-tabs__strip[data-v-019bacbf]::before {
25434
+ .cn-tabs__strip[data-v-4d96de3d]::before {
25188
25435
  background: linear-gradient(to right, var(--color-main-background) 30%, transparent);
25189
25436
  inset-inline-start: 0;
25190
25437
  }
25191
- .cn-tabs__strip[data-v-019bacbf]::after {
25438
+ .cn-tabs__strip[data-v-4d96de3d]::after {
25192
25439
  background: linear-gradient(to left, var(--color-main-background) 30%, transparent);
25193
25440
  inset-inline-end: 0;
25194
25441
  }
25195
- .cn-tabs__strip--more-start[data-v-019bacbf]::before,
25196
- .cn-tabs__strip--more-end[data-v-019bacbf]::after {
25442
+ .cn-tabs__strip--more-start[data-v-4d96de3d]::before,
25443
+ .cn-tabs__strip--more-end[data-v-4d96de3d]::after {
25197
25444
  display: block;
25198
25445
  }
25199
25446
 
25200
25447
  /* Doubled selector for the same reason as `.cn-tabs__nav .cn-tabs__nav-item`:
25201
25448
  Nextcloud's own `button` rule would otherwise give this a border, a fill
25202
25449
  and a margin. */
25203
- .cn-tabs__strip .cn-tabs__scroll[data-v-019bacbf] {
25450
+ .cn-tabs__strip .cn-tabs__scroll[data-v-4d96de3d] {
25204
25451
  align-items: center;
25205
25452
  background: none;
25206
25453
  border: 0;
@@ -25220,20 +25467,20 @@ button.cn-stepper__step[data-v-776581d4] {
25220
25467
  }
25221
25468
 
25222
25469
  /* Nextcloud's `button:hover` rule would otherwise fill the chevron. */
25223
- .cn-tabs__strip .cn-tabs__scroll[data-v-019bacbf]:hover,
25224
- .cn-tabs__strip .cn-tabs__scroll[data-v-019bacbf]:focus {
25470
+ .cn-tabs__strip .cn-tabs__scroll[data-v-4d96de3d]:hover,
25471
+ .cn-tabs__strip .cn-tabs__scroll[data-v-4d96de3d]:focus {
25225
25472
  background: none;
25226
25473
  }
25227
- .cn-tabs__scroll--start[data-v-019bacbf] {
25474
+ .cn-tabs__scroll--start[data-v-4d96de3d] {
25228
25475
  inset-inline-start: 0;
25229
25476
  }
25230
- .cn-tabs__scroll--end[data-v-019bacbf] {
25477
+ .cn-tabs__scroll--end[data-v-4d96de3d] {
25231
25478
  inset-inline-end: 0;
25232
25479
  }
25233
25480
 
25234
25481
  /* The count behind a tab's title. Full-contrast text on the page background,
25235
25482
  so it reads on the idle tab's darker fill and on the open tab alike. */
25236
- .cn-tabs__count[data-v-019bacbf] {
25483
+ .cn-tabs__count[data-v-4d96de3d] {
25237
25484
  background-color: var(--color-main-background);
25238
25485
  border: 1px solid var(--color-border-dark);
25239
25486
  border-radius: var(--border-radius-pill, 100px);
@@ -25246,18 +25493,18 @@ button.cn-stepper__step[data-v-776581d4] {
25246
25493
  padding: 0 6px;
25247
25494
  text-align: center;
25248
25495
  }
25249
- .cn-tabs__more[data-v-019bacbf] {
25496
+ .cn-tabs__more[data-v-4d96de3d] {
25250
25497
  align-items: center;
25251
25498
  display: flex;
25252
25499
  flex: 0 0 auto;
25253
25500
  }
25254
25501
 
25255
25502
  /* Keeps a "More" entry's text on the menu's text column without drawing an icon. */
25256
- .cn-tabs__more-spacer[data-v-019bacbf] {
25503
+ .cn-tabs__more-spacer[data-v-4d96de3d] {
25257
25504
  display: inline-block;
25258
25505
  width: 20px;
25259
25506
  }
25260
- .cn-tabs__nav-end[data-v-019bacbf] {
25507
+ .cn-tabs__nav-end[data-v-4d96de3d] {
25261
25508
  align-items: center;
25262
25509
  display: flex;
25263
25510
  flex: 0 0 auto;
@@ -25279,7 +25526,7 @@ button.cn-stepper__step[data-v-776581d4] {
25279
25526
  strip legible as a control at a glance, and the active tab, sharing the
25280
25527
  panel's background and punching a hole in the bar's rule, reads as the sheet
25281
25528
  in front. */
25282
- .cn-tabs__nav-item[data-v-019bacbf] {
25529
+ .cn-tabs__nav-item[data-v-4d96de3d] {
25283
25530
  background-color: var(--color-background-dark);
25284
25531
  /* `--color-border-dark`, not `--color-border`: the latter is the same
25285
25532
  #ededed as `--color-background-dark` in the stock light theme, so a tab
@@ -25314,27 +25561,27 @@ button.cn-stepper__step[data-v-776581d4] {
25314
25561
  with a selector that outscores the scoped rule above, which floated the tabs
25315
25562
  above the bar's rule inside a real page. The parent class wins on
25316
25563
  specificity rather than on `!important` or source order. */
25317
- .cn-tabs__nav .cn-tabs__nav-item[data-v-019bacbf] {
25564
+ .cn-tabs__nav .cn-tabs__nav-item[data-v-4d96de3d] {
25318
25565
  margin-block-end: 0;
25319
25566
  }
25320
- .cn-tabs__nav--justified .cn-tabs__nav-item[data-v-019bacbf] {
25567
+ .cn-tabs__nav--justified .cn-tabs__nav-item[data-v-4d96de3d] {
25321
25568
  flex: 1 1 0;
25322
25569
  }
25323
- .cn-tabs__nav-item[data-v-019bacbf]:hover,
25324
- .cn-tabs__nav-item[data-v-019bacbf]:focus-visible {
25570
+ .cn-tabs__nav-item[data-v-4d96de3d]:hover,
25571
+ .cn-tabs__nav-item[data-v-4d96de3d]:focus-visible {
25325
25572
  background-color: var(--color-background-hover);
25326
25573
  color: var(--color-main-text);
25327
25574
  }
25328
25575
 
25329
25576
  /* Inside the box: the scrolling strip clips anything drawn outside a tab. */
25330
- .cn-tabs__nav-item[data-v-019bacbf]:focus-visible {
25577
+ .cn-tabs__nav-item[data-v-4d96de3d]:focus-visible {
25331
25578
  outline-offset: -2px;
25332
25579
  }
25333
- .cn-tabs__nav-item[disabled][data-v-019bacbf] {
25580
+ .cn-tabs__nav-item[disabled][data-v-4d96de3d] {
25334
25581
  cursor: default;
25335
25582
  opacity: 0.5;
25336
25583
  }
25337
- .cn-tabs__nav-item[disabled][data-v-019bacbf]:hover {
25584
+ .cn-tabs__nav-item[disabled][data-v-4d96de3d]:hover {
25338
25585
  background-color: var(--color-background-dark);
25339
25586
  color: var(--color-main-text);
25340
25587
  }
@@ -25344,7 +25591,7 @@ button.cn-stepper__step[data-v-776581d4] {
25344
25591
  joins the sheet below it. The primary-coloured top edge is what carries the
25345
25592
  selection at a glance, and it survives forced-colours mode, which drops
25346
25593
  background colours but keeps borders. */
25347
- .cn-tabs__nav-item--active[data-v-019bacbf] {
25594
+ .cn-tabs__nav-item--active[data-v-4d96de3d] {
25348
25595
  background-color: var(--color-main-background);
25349
25596
  border-bottom: 1px solid var(--color-main-background);
25350
25597
  border-top: 2px solid var(--color-primary-element);
@@ -25354,10 +25601,10 @@ button.cn-stepper__step[data-v-776581d4] {
25354
25601
  thicker top border, so the strip does not jog when the selection moves. */
25355
25602
  padding-top: 7px;
25356
25603
  }
25357
- .cn-tabs__content[data-v-019bacbf] {
25604
+ .cn-tabs__content[data-v-4d96de3d] {
25358
25605
  padding-top: 12px;
25359
25606
  }
25360
- .cn-tabs--card .cn-tabs__content[data-v-019bacbf] {
25607
+ .cn-tabs--card .cn-tabs__content[data-v-4d96de3d] {
25361
25608
  border: 1px solid var(--color-border);
25362
25609
  border-top: none;
25363
25610
  padding: 12px;
@@ -25365,33 +25612,33 @@ button.cn-stepper__step[data-v-776581d4] {
25365
25612
 
25366
25613
  /* Segmented variant: the strip is a pill switch that stands on its own, so
25367
25614
  the bar's rule and the tab-joins-panel treatment are both dropped. */
25368
- .cn-tabs--segmented .cn-tabs__bar[data-v-019bacbf] {
25615
+ .cn-tabs--segmented .cn-tabs__bar[data-v-4d96de3d] {
25369
25616
  border-bottom: none;
25370
25617
  }
25371
- .cn-tabs--segmented .cn-tabs__strip[data-v-019bacbf] {
25618
+ .cn-tabs--segmented .cn-tabs__strip[data-v-4d96de3d] {
25372
25619
  flex: 0 1 auto;
25373
25620
  }
25374
- .cn-tabs--segmented .cn-tabs__nav[data-v-019bacbf] {
25621
+ .cn-tabs--segmented .cn-tabs__nav[data-v-4d96de3d] {
25375
25622
  gap: 4px;
25376
25623
  margin-bottom: 0;
25377
25624
  padding: 4px;
25378
25625
  border-radius: var(--border-radius-container, var(--border-radius-large, 10px));
25379
25626
  background-color: var(--color-background-dark);
25380
25627
  }
25381
- .cn-tabs--segmented .cn-tabs__nav-item[data-v-019bacbf] {
25628
+ .cn-tabs--segmented .cn-tabs__nav-item[data-v-4d96de3d] {
25382
25629
  border: 1px solid transparent;
25383
25630
  border-radius: var(--border-radius-element, var(--border-radius-large, 8px));
25384
25631
  background-color: transparent;
25385
25632
  font-weight: 600;
25386
25633
  padding: 6px 16px;
25387
25634
  }
25388
- .cn-tabs--segmented .cn-tabs__nav-item[data-v-019bacbf]:hover {
25635
+ .cn-tabs--segmented .cn-tabs__nav-item[data-v-4d96de3d]:hover {
25389
25636
  background-color: var(--color-background-hover);
25390
25637
  }
25391
25638
 
25392
25639
  /* The open segment is the raised one. Its border survives forced-colours
25393
25640
  mode, which drops the background and the shadow. */
25394
- .cn-tabs--segmented .cn-tabs__nav-item--active[data-v-019bacbf] {
25641
+ .cn-tabs--segmented .cn-tabs__nav-item--active[data-v-4d96de3d] {
25395
25642
  border: 1px solid var(--color-border-dark);
25396
25643
  background-color: var(--color-main-background);
25397
25644
  box-shadow: 0 1px 2px var(--color-box-shadow);
@@ -25402,11 +25649,11 @@ button.cn-stepper__step[data-v-776581d4] {
25402
25649
  /* Underline variant (board LpBeheerAlgemeen): plain labels on the bar's rule,
25403
25650
  the open one carried by a 3px primary underline that sits on that rule. The
25404
25651
  strip wraps onto a second row rather than scrolling. */
25405
- .cn-tabs--underline .cn-tabs__nav[data-v-019bacbf] {
25652
+ .cn-tabs--underline .cn-tabs__nav[data-v-4d96de3d] {
25406
25653
  flex-wrap: wrap;
25407
25654
  overflow: visible;
25408
25655
  }
25409
- .cn-tabs--underline .cn-tabs__nav-item[data-v-019bacbf] {
25656
+ .cn-tabs--underline .cn-tabs__nav-item[data-v-4d96de3d] {
25410
25657
  background-color: transparent;
25411
25658
  border: 0;
25412
25659
  border-bottom: 3px solid transparent;
@@ -25418,34 +25665,34 @@ button.cn-stepper__step[data-v-776581d4] {
25418
25665
  min-height: 44px;
25419
25666
  padding: 0 9px;
25420
25667
  }
25421
- .cn-tabs--underline .cn-tabs__nav-item[data-v-019bacbf]:hover,
25422
- .cn-tabs--underline .cn-tabs__nav-item[data-v-019bacbf]:focus-visible {
25668
+ .cn-tabs--underline .cn-tabs__nav-item[data-v-4d96de3d]:hover,
25669
+ .cn-tabs--underline .cn-tabs__nav-item[data-v-4d96de3d]:focus-visible {
25423
25670
  background-color: transparent;
25424
25671
  border-bottom-color: var(--color-border-dark);
25425
25672
  color: var(--color-main-text);
25426
25673
  }
25427
- .cn-tabs--underline .cn-tabs__nav-item[disabled][data-v-019bacbf]:hover {
25674
+ .cn-tabs--underline .cn-tabs__nav-item[disabled][data-v-4d96de3d]:hover {
25428
25675
  background-color: transparent;
25429
25676
  border-bottom-color: transparent;
25430
25677
  }
25431
- .cn-tabs--underline .cn-tabs__nav-item--active[data-v-019bacbf],
25432
- .cn-tabs--underline .cn-tabs__nav-item--active[data-v-019bacbf]:hover,
25433
- .cn-tabs--underline .cn-tabs__nav-item--active[data-v-019bacbf]:focus-visible {
25678
+ .cn-tabs--underline .cn-tabs__nav-item--active[data-v-4d96de3d],
25679
+ .cn-tabs--underline .cn-tabs__nav-item--active[data-v-4d96de3d]:hover,
25680
+ .cn-tabs--underline .cn-tabs__nav-item--active[data-v-4d96de3d]:focus-visible {
25434
25681
  border-bottom: 3px solid var(--color-primary-element);
25435
25682
  color: var(--color-main-text);
25436
25683
  font-weight: 700;
25437
25684
  padding-top: 0;
25438
25685
  }
25439
- .cn-tabs--underline .cn-tabs__count[data-v-019bacbf] {
25686
+ .cn-tabs--underline .cn-tabs__count[data-v-4d96de3d] {
25440
25687
  margin-inline-start: 0;
25441
25688
  }
25442
- .cn-tabs--underline .cn-tabs__content[data-v-019bacbf] {
25689
+ .cn-tabs--underline .cn-tabs__content[data-v-4d96de3d] {
25443
25690
  padding-top: 20px;
25444
25691
  }
25445
25692
 
25446
25693
 
25447
25694
  /* A stack (`widgetIds`): the panel's widget, then cards 20px apart. */
25448
- .cn-tabs-widget__stack[data-v-febbfc68] {
25695
+ .cn-tabs-widget__stack[data-v-dbbc6ecc] {
25449
25696
  display: flex;
25450
25697
  flex-direction: column;
25451
25698
  gap: 20px;
@@ -25454,19 +25701,19 @@ button.cn-stepper__step[data-v-776581d4] {
25454
25701
  /* A gridded stack (`columns` / `layout` on the tab): 12 columns, widgets wrap
25455
25702
  onto the next row, a row's cards as tall as the tallest. Narrow, it is the
25456
25703
  plain stack again. */
25457
- .cn-tabs-widget__stack--grid[data-v-febbfc68] {
25704
+ .cn-tabs-widget__stack--grid[data-v-dbbc6ecc] {
25458
25705
  display: grid;
25459
25706
  grid-template-columns: repeat(12, minmax(0, 1fr));
25460
25707
  align-items: stretch;
25461
25708
  }
25462
- .cn-tabs-widget__stack--grid[data-v-febbfc68] > * {
25709
+ .cn-tabs-widget__stack--grid[data-v-dbbc6ecc] > * {
25463
25710
  min-width: 0;
25464
25711
  }
25465
25712
  @media (max-width: 700px) {
25466
- .cn-tabs-widget__stack--grid[data-v-febbfc68] {
25713
+ .cn-tabs-widget__stack--grid[data-v-dbbc6ecc] {
25467
25714
  grid-template-columns: minmax(0, 1fr);
25468
25715
  }
25469
- .cn-tabs-widget__stack--grid[data-v-febbfc68] > * {
25716
+ .cn-tabs-widget__stack--grid[data-v-dbbc6ecc] > * {
25470
25717
  grid-column: auto !important;
25471
25718
  }
25472
25719
  }
@@ -25500,7 +25747,7 @@ button.cn-stepper__step[data-v-776581d4] {
25500
25747
  `!important` or on load order this library does not control. The same
25501
25748
  technique, for the same reason, is used on `.cn-tabs__nav .cn-tabs__nav-item`
25502
25749
  in CnTabs to beat Nextcloud's own button margin. */
25503
- .cn-tabs-widget.cn-tabs-widget[data-v-febbfc68] {
25750
+ .cn-tabs-widget.cn-tabs-widget[data-v-dbbc6ecc] {
25504
25751
  background-color: transparent;
25505
25752
  border: 0;
25506
25753
  border-radius: 0;
@@ -25524,12 +25771,12 @@ button.cn-stepper__step[data-v-776581d4] {
25524
25771
  below it: the rule ran straight on to the widget's edge and read as a
25525
25772
  border sticking out past a rounded corner (Ruben, 2026-09-13). Ending it
25526
25773
  where the curve begins makes the rule and the curve one continuous edge. */
25527
- .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__bar {
25774
+ .cn-tabs-widget__tabs[data-v-dbbc6ecc] .cn-tabs__bar {
25528
25775
  border-bottom: none;
25529
25776
  padding: 0;
25530
25777
  position: relative;
25531
25778
  }
25532
- .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__bar::after {
25779
+ .cn-tabs-widget__tabs[data-v-dbbc6ecc] .cn-tabs__bar::after {
25533
25780
  border-bottom: 1px solid var(--color-border);
25534
25781
  content: '';
25535
25782
  inset-block-end: 0;
@@ -25542,11 +25789,11 @@ button.cn-stepper__step[data-v-776581d4] {
25542
25789
  own background-coloured bottom edge, which only works if it paints ABOVE the
25543
25790
  pseudo-element: a positioned pseudo-element otherwise paints over every
25544
25791
  in-flow sibling, rule included. */
25545
- .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__nav-item--active {
25792
+ .cn-tabs-widget__tabs[data-v-dbbc6ecc] .cn-tabs__nav-item--active {
25546
25793
  position: relative;
25547
25794
  z-index: 1;
25548
25795
  }
25549
- .cn-tabs-widget__tabs[data-v-febbfc68] {
25796
+ .cn-tabs-widget__tabs[data-v-dbbc6ecc] {
25550
25797
  display: flex;
25551
25798
  flex-direction: column;
25552
25799
  /* Grow to the widget's height, so the panel fills the grid cell the
@@ -25564,7 +25811,7 @@ button.cn-stepper__step[data-v-776581d4] {
25564
25811
  the open tab, but padding sits inside the painted box — only a margin would
25565
25812
  have opened that gap, and a zero top put every panel's content against the
25566
25813
  strip. */
25567
- .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__content {
25814
+ .cn-tabs-widget__tabs[data-v-dbbc6ecc] .cn-tabs__content {
25568
25815
  background-color: var(--color-main-background);
25569
25816
  /* Three sides only: the bar's rule (redrawn above, stopping at the corner)
25570
25817
  is this sheet's top edge, and the open tab erases the slice of it
@@ -25584,7 +25831,7 @@ button.cn-stepper__step[data-v-776581d4] {
25584
25831
  overflow: auto;
25585
25832
  padding: 12px;
25586
25833
  }
25587
- .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tab {
25834
+ .cn-tabs-widget__tabs[data-v-dbbc6ecc] .cn-tab {
25588
25835
  height: 100%;
25589
25836
  }
25590
25837
 
@@ -25592,13 +25839,13 @@ button.cn-stepper__step[data-v-776581d4] {
25592
25839
  (margin 0 -16px -16px). The panel of a tab pads 12px, so on a tab that
25593
25840
  holds the list directly the footer stuck out 4px on the right and at the
25594
25841
  bottom and made the panel scroll. It bleeds exactly the panel's padding. */
25595
- .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
25842
+ .cn-tabs-widget__tabs[data-v-dbbc6ecc] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
25596
25843
  margin: auto -12px -12px;
25597
25844
  }
25598
25845
 
25599
25846
  /* The open panel's header link, beside the strip. Same look and theme hooks
25600
25847
  as a card header link (CnWidgetWrapper). */
25601
- .cn-tabs-widget__header-link[data-v-febbfc68] {
25848
+ .cn-tabs-widget__header-link[data-v-dbbc6ecc] {
25602
25849
  align-self: center;
25603
25850
  padding: 0 calc(1 * var(--default-grid-baseline));
25604
25851
  color: var(--color-primary-element);
@@ -25607,21 +25854,21 @@ button.cn-stepper__step[data-v-776581d4] {
25607
25854
  text-decoration: none;
25608
25855
  white-space: nowrap;
25609
25856
  }
25610
- .cn-tabs-widget__header-link[data-v-febbfc68]:hover,
25611
- .cn-tabs-widget__header-link[data-v-febbfc68]:focus-visible {
25857
+ .cn-tabs-widget__header-link[data-v-dbbc6ecc]:hover,
25858
+ .cn-tabs-widget__header-link[data-v-dbbc6ecc]:focus-visible {
25612
25859
  text-decoration: underline;
25613
25860
  }
25614
- .cn-tabs-widget__header-link[data-v-febbfc68]:focus-visible {
25861
+ .cn-tabs-widget__header-link[data-v-dbbc6ecc]:focus-visible {
25615
25862
  outline: 2px solid var(--color-primary-element);
25616
25863
  outline-offset: 2px;
25617
25864
  border-radius: var(--border-radius-small, 4px);
25618
25865
  }
25619
- .cn-tabs-widget__title[data-v-febbfc68] {
25866
+ .cn-tabs-widget__title[data-v-dbbc6ecc] {
25620
25867
  align-items: center;
25621
25868
  display: inline-flex;
25622
25869
  gap: 6px;
25623
25870
  }
25624
- .cn-tabs-widget__title-icon[data-v-febbfc68] {
25871
+ .cn-tabs-widget__title-icon[data-v-dbbc6ecc] {
25625
25872
  flex: 0 0 auto;
25626
25873
  }
25627
25874
 
@@ -28648,7 +28895,7 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28648
28895
  }
28649
28896
 
28650
28897
 
28651
- .cn-nc-widget-widget[data-v-04be70f3] {
28898
+ .cn-nc-widget-widget[data-v-f553a198] {
28652
28899
  display: flex;
28653
28900
  flex-direction: column;
28654
28901
  width: 100%;
@@ -28664,19 +28911,19 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28664
28911
  * bottom, flush to the header on top). Same design tokens as core; overridable
28665
28912
  * via the host's CnWidgetWrapper styleConfig / nldesign.
28666
28913
  */
28667
- .cn-nc-widget-widget__header[data-v-04be70f3] {
28914
+ .cn-nc-widget-widget__header[data-v-f553a198] {
28668
28915
  display: flex;
28669
28916
  align-items: center;
28670
28917
  gap: 16px;
28671
28918
  padding: 16px;
28672
28919
  font-weight: 700;
28673
28920
  }
28674
- .cn-nc-widget-widget__header-icon[data-v-04be70f3] {
28921
+ .cn-nc-widget-widget__header-icon[data-v-f553a198] {
28675
28922
  width: 32px;
28676
28923
  height: 32px;
28677
28924
  flex: 0 0 auto;
28678
28925
  }
28679
- .cn-nc-widget-widget__header-title[data-v-04be70f3] {
28926
+ .cn-nc-widget-widget__header-title[data-v-f553a198] {
28680
28927
  flex: 1;
28681
28928
  font-size: 20px;
28682
28929
  font-weight: 700;
@@ -28685,18 +28932,18 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28685
28932
  text-overflow: ellipsis;
28686
28933
  white-space: nowrap;
28687
28934
  }
28688
- .cn-nc-widget-widget__show-all[data-v-04be70f3] {
28935
+ .cn-nc-widget-widget__show-all[data-v-f553a198] {
28689
28936
  align-self: flex-start;
28690
28937
  padding: 8px 0 0;
28691
28938
  color: var(--color-primary-element);
28692
28939
  font-weight: 600;
28693
28940
  text-decoration: none;
28694
28941
  }
28695
- .cn-nc-widget-widget__show-all[data-v-04be70f3]:hover,
28696
- .cn-nc-widget-widget__show-all[data-v-04be70f3]:focus-visible {
28942
+ .cn-nc-widget-widget__show-all[data-v-f553a198]:hover,
28943
+ .cn-nc-widget-widget__show-all[data-v-f553a198]:focus-visible {
28697
28944
  text-decoration: underline;
28698
28945
  }
28699
- .cn-nc-widget-widget__native[data-v-04be70f3] {
28946
+ .cn-nc-widget-widget__native[data-v-f553a198] {
28700
28947
  flex: 1;
28701
28948
  overflow: auto;
28702
28949
  padding: 0 16px 16px;
@@ -28730,7 +28977,7 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28730
28977
  * still claims that much room regardless of the grid track size, so the
28731
28978
  * track itself must not go below it.
28732
28979
  */
28733
- .cn-nc-widget-widget--horizontal[data-v-04be70f3] .dashboard-widget > ul {
28980
+ .cn-nc-widget-widget--horizontal[data-v-f553a198] .dashboard-widget > ul {
28734
28981
  display: grid;
28735
28982
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
28736
28983
  gap: 8px;
@@ -28738,33 +28985,33 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28738
28985
  margin: 0;
28739
28986
  padding: 0;
28740
28987
  }
28741
- .cn-nc-widget-widget--horizontal[data-v-04be70f3] .dashboard-widget > ul > li {
28988
+ .cn-nc-widget-widget--horizontal[data-v-f553a198] .dashboard-widget > ul > li {
28742
28989
  width: auto;
28743
28990
  min-width: 0;
28744
28991
  }
28745
- .cn-nc-widget-widget--horizontal[data-v-04be70f3] .item-list__entry {
28992
+ .cn-nc-widget-widget--horizontal[data-v-f553a198] .item-list__entry {
28746
28993
  height: 100%;
28747
28994
  margin: 0;
28748
28995
  border: 1px solid var(--color-border);
28749
28996
  border-radius: var(--border-radius-large);
28750
28997
  }
28751
- .cn-nc-widget-widget__body[data-v-04be70f3] {
28998
+ .cn-nc-widget-widget__body[data-v-f553a198] {
28752
28999
  flex: 1;
28753
29000
  overflow: auto;
28754
29001
  padding: 0 16px 16px;
28755
29002
  }
28756
- .cn-nc-widget-widget__body--vertical[data-v-04be70f3] {
29003
+ .cn-nc-widget-widget__body--vertical[data-v-f553a198] {
28757
29004
  display: flex;
28758
29005
  flex-direction: column;
28759
29006
  gap: 8px;
28760
29007
  }
28761
- .cn-nc-widget-widget__body--horizontal[data-v-04be70f3] {
29008
+ .cn-nc-widget-widget__body--horizontal[data-v-f553a198] {
28762
29009
  display: flex;
28763
29010
  flex-direction: row;
28764
29011
  flex-wrap: wrap;
28765
29012
  gap: 12px;
28766
29013
  }
28767
- .cn-nc-widget-widget__state[data-v-04be70f3] {
29014
+ .cn-nc-widget-widget__state[data-v-f553a198] {
28768
29015
  display: flex;
28769
29016
  align-items: center;
28770
29017
  justify-content: center;
@@ -28773,59 +29020,59 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28773
29020
  color: var(--color-text-maxcontrast);
28774
29021
  font-style: italic;
28775
29022
  }
28776
- .cn-nc-widget-widget__item[data-v-04be70f3] {
29023
+ .cn-nc-widget-widget__item[data-v-f553a198] {
28777
29024
  display: flex;
28778
29025
  text-decoration: none;
28779
29026
  color: var(--color-main-text);
28780
29027
  border-radius: var(--border-radius);
28781
29028
  padding: 4px;
28782
29029
  }
28783
- .cn-nc-widget-widget__item[data-v-04be70f3]:hover {
29030
+ .cn-nc-widget-widget__item[data-v-f553a198]:hover {
28784
29031
  background-color: var(--color-background-hover);
28785
29032
  }
28786
- .cn-nc-widget-widget__item--vertical[data-v-04be70f3] {
29033
+ .cn-nc-widget-widget__item--vertical[data-v-f553a198] {
28787
29034
  flex-direction: row;
28788
29035
  align-items: center;
28789
29036
  gap: 8px;
28790
29037
  }
28791
- .cn-nc-widget-widget__item--horizontal[data-v-04be70f3] {
29038
+ .cn-nc-widget-widget__item--horizontal[data-v-f553a198] {
28792
29039
  flex-direction: column;
28793
29040
  align-items: center;
28794
29041
  width: 120px;
28795
29042
  text-align: center;
28796
29043
  }
28797
- .cn-nc-widget-widget__item-icon-wrap[data-v-04be70f3] {
29044
+ .cn-nc-widget-widget__item-icon-wrap[data-v-f553a198] {
28798
29045
  width: 32px;
28799
29046
  height: 32px;
28800
29047
  flex: 0 0 32px;
28801
29048
  position: relative;
28802
29049
  }
28803
- .cn-nc-widget-widget__item-icon[data-v-04be70f3] {
29050
+ .cn-nc-widget-widget__item-icon[data-v-f553a198] {
28804
29051
  width: 32px;
28805
29052
  height: 32px;
28806
29053
  object-fit: cover;
28807
29054
  border-radius: 50%;
28808
29055
  }
28809
- .cn-nc-widget-widget__item-overlay[data-v-04be70f3] {
29056
+ .cn-nc-widget-widget__item-overlay[data-v-f553a198] {
28810
29057
  position: absolute;
28811
29058
  right: -2px;
28812
29059
  bottom: -2px;
28813
29060
  width: 14px;
28814
29061
  height: 14px;
28815
29062
  }
28816
- .cn-nc-widget-widget__item-text[data-v-04be70f3] {
29063
+ .cn-nc-widget-widget__item-text[data-v-f553a198] {
28817
29064
  display: flex;
28818
29065
  flex-direction: column;
28819
29066
  min-width: 0;
28820
29067
  flex: 1;
28821
29068
  }
28822
- .cn-nc-widget-widget__item-title[data-v-04be70f3] {
29069
+ .cn-nc-widget-widget__item-title[data-v-f553a198] {
28823
29070
  font-weight: 600;
28824
29071
  overflow: hidden;
28825
29072
  text-overflow: ellipsis;
28826
29073
  white-space: nowrap;
28827
29074
  }
28828
- .cn-nc-widget-widget__item-subtitle[data-v-04be70f3] {
29075
+ .cn-nc-widget-widget__item-subtitle[data-v-f553a198] {
28829
29076
  font-size: 0.85em;
28830
29077
  color: var(--color-text-maxcontrast);
28831
29078
  overflow: hidden;
@@ -29522,13 +29769,13 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29522
29769
  }
29523
29770
 
29524
29771
 
29525
- .cn-facts-widget[data-v-8146cb58] {
29772
+ .cn-facts-widget[data-v-e1992d24] {
29526
29773
  display: flex;
29527
29774
  flex-direction: column;
29528
29775
  gap: 10px;
29529
29776
  min-width: 0;
29530
29777
  }
29531
- .cn-facts-widget__rows[data-v-8146cb58] {
29778
+ .cn-facts-widget__rows[data-v-e1992d24] {
29532
29779
  display: grid;
29533
29780
  grid-template-columns: max-content 1fr;
29534
29781
  gap: 8px 16px;
@@ -29537,7 +29784,7 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29537
29784
  }
29538
29785
 
29539
29786
  /* Each row is a grid of its own children: the wrapper takes no box. */
29540
- .cn-facts-widget__row[data-v-8146cb58] {
29787
+ .cn-facts-widget__row[data-v-e1992d24] {
29541
29788
  display: contents;
29542
29789
  }
29543
29790
 
@@ -29545,13 +29792,13 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29545
29792
  pushed the label to the right of its column and added 12px around both. The
29546
29793
  class is doubled so these resets outrank that rule, and a dossiq-style
29547
29794
  `:deep()` override in an app is not needed. */
29548
- .cn-facts-widget__label.cn-facts-widget__label[data-v-8146cb58] {
29795
+ .cn-facts-widget__label.cn-facts-widget__label[data-v-e1992d24] {
29549
29796
  margin: 0;
29550
29797
  padding: 0;
29551
29798
  text-align: start;
29552
29799
  color: var(--color-text-maxcontrast);
29553
29800
  }
29554
- .cn-facts-widget__value.cn-facts-widget__value[data-v-8146cb58] {
29801
+ .cn-facts-widget__value.cn-facts-widget__value[data-v-e1992d24] {
29555
29802
  margin: 0;
29556
29803
  padding: 0;
29557
29804
  text-align: start;
@@ -29559,20 +29806,20 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29559
29806
  min-width: 0;
29560
29807
  overflow-wrap: anywhere;
29561
29808
  }
29562
- .cn-facts-widget__title[data-v-8146cb58] {
29809
+ .cn-facts-widget__title[data-v-e1992d24] {
29563
29810
  font-size: 15px;
29564
29811
  font-weight: 600;
29565
29812
  color: var(--color-main-text);
29566
29813
  }
29567
- .cn-facts-widget__line[data-v-8146cb58] {
29814
+ .cn-facts-widget__line[data-v-e1992d24] {
29568
29815
  font-size: 13px;
29569
29816
  color: var(--color-text-maxcontrast);
29570
29817
  }
29571
- .cn-facts-widget__muted[data-v-8146cb58] {
29818
+ .cn-facts-widget__muted[data-v-e1992d24] {
29572
29819
  margin: 0;
29573
29820
  color: var(--color-text-maxcontrast);
29574
29821
  }
29575
- .cn-facts-widget__label .hidden-visually[data-v-8146cb58] {
29822
+ .cn-facts-widget__label .hidden-visually[data-v-e1992d24] {
29576
29823
  clip-path: inset(50%);
29577
29824
  height: 1px;
29578
29825
  overflow: hidden;
@@ -29580,23 +29827,23 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29580
29827
  white-space: nowrap;
29581
29828
  width: 1px;
29582
29829
  }
29583
- .cn-facts-widget__label--icon[data-v-8146cb58] {
29830
+ .cn-facts-widget__label--icon[data-v-e1992d24] {
29584
29831
  align-items: center;
29585
29832
  display: flex;
29586
29833
  }
29587
- .cn-facts-widget__value-link[data-v-8146cb58] {
29834
+ .cn-facts-widget__value-link[data-v-e1992d24] {
29588
29835
  color: var(--color-primary-element);
29589
29836
  text-decoration: underline;
29590
29837
  }
29591
- .cn-facts-widget__inline-button[data-v-8146cb58],
29592
- .cn-facts-widget__icon-button[data-v-8146cb58],
29593
- .cn-facts-widget__action[data-v-8146cb58] {
29838
+ .cn-facts-widget__inline-button[data-v-e1992d24],
29839
+ .cn-facts-widget__icon-button[data-v-e1992d24],
29840
+ .cn-facts-widget__action[data-v-e1992d24] {
29594
29841
  align-items: center;
29595
29842
  cursor: pointer;
29596
29843
  display: inline-flex;
29597
29844
  font: inherit;
29598
29845
  }
29599
- .cn-facts-widget__inline-button[data-v-8146cb58] {
29846
+ .cn-facts-widget__inline-button[data-v-e1992d24] {
29600
29847
  background: var(--color-main-background);
29601
29848
  border: 1px solid var(--color-border-dark);
29602
29849
  border-radius: 16px;
@@ -29607,7 +29854,7 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29607
29854
  min-height: 28px;
29608
29855
  padding: 0 10px;
29609
29856
  }
29610
- .cn-facts-widget__icon-button[data-v-8146cb58] {
29857
+ .cn-facts-widget__icon-button[data-v-e1992d24] {
29611
29858
  background: transparent;
29612
29859
  border: 0;
29613
29860
  border-radius: 6px;
@@ -29616,23 +29863,23 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29616
29863
  padding: 2px;
29617
29864
  vertical-align: middle;
29618
29865
  }
29619
- .cn-facts-widget__icon-button[data-v-8146cb58]:hover,
29620
- .cn-facts-widget__icon-button[data-v-8146cb58]:focus-visible {
29866
+ .cn-facts-widget__icon-button[data-v-e1992d24]:hover,
29867
+ .cn-facts-widget__icon-button[data-v-e1992d24]:focus-visible {
29621
29868
  background: var(--color-background-hover);
29622
29869
  color: var(--color-main-text);
29623
29870
  }
29624
- .cn-facts-widget__text[data-v-8146cb58] {
29871
+ .cn-facts-widget__text[data-v-e1992d24] {
29625
29872
  color: var(--color-main-text);
29626
29873
  font-size: 15px;
29627
29874
  }
29628
29875
 
29629
29876
  /* A lead: an icon tile or initials beside a bold title and a muted subtitle. */
29630
- .cn-facts-widget__lead[data-v-8146cb58] {
29877
+ .cn-facts-widget__lead[data-v-e1992d24] {
29631
29878
  align-items: center;
29632
29879
  display: flex;
29633
29880
  gap: 12px;
29634
29881
  }
29635
- .cn-facts-widget__lead-tile[data-v-8146cb58] {
29882
+ .cn-facts-widget__lead-tile[data-v-e1992d24] {
29636
29883
  align-items: center;
29637
29884
  background: var(--color-background-dark);
29638
29885
  border-radius: 8px;
@@ -29645,29 +29892,29 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29645
29892
  justify-content: center;
29646
29893
  width: 40px;
29647
29894
  }
29648
- .cn-facts-widget__lead-tile--success[data-v-8146cb58] {
29895
+ .cn-facts-widget__lead-tile--success[data-v-e1992d24] {
29649
29896
  background: color-mix(in srgb, var(--color-success) 14%, var(--color-main-background));
29650
29897
  border-radius: 50%;
29651
29898
  color: var(--color-success-text, var(--color-success));
29652
29899
  }
29653
- .cn-facts-widget__lead-tile--info[data-v-8146cb58] {
29900
+ .cn-facts-widget__lead-tile--info[data-v-e1992d24] {
29654
29901
  background: var(--color-primary-element-light);
29655
29902
  border-radius: 50%;
29656
29903
  color: var(--color-primary-element-light-text, var(--color-primary-element));
29657
29904
  }
29658
- .cn-facts-widget__lead-text[data-v-8146cb58] {
29905
+ .cn-facts-widget__lead-text[data-v-e1992d24] {
29659
29906
  display: flex;
29660
29907
  flex-direction: column;
29661
29908
  min-width: 0;
29662
29909
  }
29663
- .cn-facts-widget__lead-title[data-v-8146cb58] {
29910
+ .cn-facts-widget__lead-title[data-v-e1992d24] {
29664
29911
  font-size: 15px;
29665
29912
  }
29666
- .cn-facts-widget__lead-subtitle[data-v-8146cb58] {
29913
+ .cn-facts-widget__lead-subtitle[data-v-e1992d24] {
29667
29914
  color: var(--color-text-maxcontrast);
29668
29915
  font-size: 13px;
29669
29916
  }
29670
- .cn-facts-widget__action[data-v-8146cb58] {
29917
+ .cn-facts-widget__action[data-v-e1992d24] {
29671
29918
  align-self: flex-start;
29672
29919
  background: var(--color-primary-element-light);
29673
29920
  border: 0;
@@ -29679,11 +29926,11 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29679
29926
  min-height: 32px;
29680
29927
  padding: 0 14px;
29681
29928
  }
29682
- .cn-facts-widget__action[data-v-8146cb58]:hover,
29683
- .cn-facts-widget__action[data-v-8146cb58]:focus-visible {
29929
+ .cn-facts-widget__action[data-v-e1992d24]:hover,
29930
+ .cn-facts-widget__action[data-v-e1992d24]:focus-visible {
29684
29931
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
29685
29932
  }
29686
- .cn-facts-widget__link[data-v-8146cb58] {
29933
+ .cn-facts-widget__link[data-v-e1992d24] {
29687
29934
  font-size: 14px;
29688
29935
  font-weight: 600;
29689
29936
  color: var(--color-primary-element);
@@ -30309,27 +30556,27 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
30309
30556
  }
30310
30557
 
30311
30558
 
30312
- .cn-record-list__list[data-v-d793cb0e] {
30559
+ .cn-record-list__list[data-v-695c835e] {
30313
30560
  list-style: none;
30314
30561
  margin: 0;
30315
30562
  padding: 0;
30316
30563
  }
30317
- .cn-record-list__empty[data-v-d793cb0e],
30318
- .cn-record-list__error[data-v-d793cb0e] {
30564
+ .cn-record-list__empty[data-v-695c835e],
30565
+ .cn-record-list__error[data-v-695c835e] {
30319
30566
  color: var(--color-text-maxcontrast);
30320
30567
  margin: 0;
30321
30568
  }
30322
- .cn-record-list__loading[data-v-d793cb0e] {
30569
+ .cn-record-list__loading[data-v-695c835e] {
30323
30570
  display: flex;
30324
30571
  justify-content: center;
30325
30572
  padding: 8px 0;
30326
30573
  }
30327
30574
 
30328
30575
  /* rows */
30329
- .cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-d793cb0e] {
30576
+ .cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-695c835e] {
30330
30577
  border-top: 1px solid var(--color-border);
30331
30578
  }
30332
- .cn-record-list__row[data-v-d793cb0e] {
30579
+ .cn-record-list__row[data-v-695c835e] {
30333
30580
  align-items: center;
30334
30581
  color: var(--color-main-text);
30335
30582
  display: flex;
@@ -30337,11 +30584,11 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
30337
30584
  padding: 12px 0;
30338
30585
  text-decoration: none;
30339
30586
  }
30340
- .cn-record-list__row--link:hover .cn-record-list__title[data-v-d793cb0e],
30341
- .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-d793cb0e] {
30587
+ .cn-record-list__row--link:hover .cn-record-list__title[data-v-695c835e],
30588
+ .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-695c835e] {
30342
30589
  text-decoration: underline;
30343
30590
  }
30344
- .cn-record-list__avatar[data-v-d793cb0e] {
30591
+ .cn-record-list__avatar[data-v-695c835e] {
30345
30592
  align-items: center;
30346
30593
  background: var(--color-background-hover);
30347
30594
  border-radius: 50%;
@@ -30354,67 +30601,67 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
30354
30601
  justify-content: center;
30355
30602
  width: 36px;
30356
30603
  }
30357
- .cn-record-list__main[data-v-d793cb0e] {
30604
+ .cn-record-list__main[data-v-695c835e] {
30358
30605
  display: flex;
30359
30606
  flex: 1 1 auto;
30360
30607
  flex-direction: column;
30361
30608
  gap: 2px;
30362
30609
  min-width: 0;
30363
30610
  }
30364
- .cn-record-list__title[data-v-d793cb0e] {
30611
+ .cn-record-list__title[data-v-695c835e] {
30365
30612
  font-size: 15px;
30366
30613
  font-weight: 700;
30367
30614
  }
30368
- .cn-record-list__meta[data-v-d793cb0e] {
30615
+ .cn-record-list__meta[data-v-695c835e] {
30369
30616
  color: var(--color-text-maxcontrast);
30370
30617
  font-size: 13px;
30371
30618
  }
30372
- .cn-record-list__aside[data-v-d793cb0e] {
30619
+ .cn-record-list__aside[data-v-695c835e] {
30373
30620
  align-items: center;
30374
30621
  display: flex;
30375
30622
  flex: none;
30376
30623
  gap: 16px;
30377
30624
  }
30378
- .cn-record-list__trailing[data-v-d793cb0e] {
30625
+ .cn-record-list__trailing[data-v-695c835e] {
30379
30626
  font-size: 14px;
30380
30627
  white-space: nowrap;
30381
30628
  }
30382
- .cn-record-list__due[data-v-d793cb0e] {
30629
+ .cn-record-list__due[data-v-695c835e] {
30383
30630
  font-size: 14px;
30384
30631
  white-space: nowrap;
30385
30632
  }
30386
- .cn-record-list__due--danger[data-v-d793cb0e] {
30633
+ .cn-record-list__due--danger[data-v-695c835e] {
30387
30634
  color: var(--color-text-error, var(--color-error-text));
30388
30635
  font-weight: 600;
30389
30636
  }
30390
- .cn-record-list__due--empty[data-v-d793cb0e] {
30637
+ .cn-record-list__due--empty[data-v-695c835e] {
30391
30638
  color: var(--color-text-maxcontrast);
30392
30639
  }
30393
- .cn-record-list__row--action[data-v-d793cb0e] {
30640
+ .cn-record-list__row--action[data-v-695c835e] {
30394
30641
  flex-wrap: wrap;
30395
30642
  gap: 8px 16px;
30396
30643
  padding: 14px 0;
30397
30644
  }
30398
- .cn-record-list__row--action .cn-record-list__main[data-v-d793cb0e] {
30645
+ .cn-record-list__row--action .cn-record-list__main[data-v-695c835e] {
30399
30646
  flex: 1 1 280px;
30400
30647
  gap: 3px;
30401
30648
  }
30402
- .cn-record-list__title--link[data-v-d793cb0e] {
30649
+ .cn-record-list__title--link[data-v-695c835e] {
30403
30650
  color: var(--color-main-text);
30404
30651
  text-decoration: underline;
30405
30652
  }
30406
- .cn-record-list__pills[data-v-d793cb0e] {
30653
+ .cn-record-list__pills[data-v-695c835e] {
30407
30654
  display: flex;
30408
30655
  flex: 0 0 120px;
30409
30656
  gap: 6px;
30410
30657
  justify-content: flex-end;
30411
30658
  }
30412
- .cn-record-list__due--column[data-v-d793cb0e] {
30659
+ .cn-record-list__due--column[data-v-695c835e] {
30413
30660
  flex: 0 0 96px;
30414
30661
  font-size: 13px;
30415
30662
  text-align: end;
30416
30663
  }
30417
- .cn-record-list__action[data-v-d793cb0e] {
30664
+ .cn-record-list__action[data-v-695c835e] {
30418
30665
  align-items: center;
30419
30666
  background: var(--color-primary-element-light);
30420
30667
  border: 0;
@@ -30431,23 +30678,23 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
30431
30678
  padding: 0 14px;
30432
30679
  text-decoration: none;
30433
30680
  }
30434
- .cn-record-list__action[data-v-d793cb0e]:hover,
30435
- .cn-record-list__action[data-v-d793cb0e]:focus-visible {
30681
+ .cn-record-list__action[data-v-695c835e]:hover,
30682
+ .cn-record-list__action[data-v-695c835e]:focus-visible {
30436
30683
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
30437
30684
  }
30438
- .cn-record-list__chevron[data-v-d793cb0e] {
30685
+ .cn-record-list__chevron[data-v-695c835e] {
30439
30686
  color: var(--color-text-maxcontrast);
30440
30687
  flex: none;
30441
30688
  }
30442
30689
 
30443
30690
  /* cards (board ShBank): a grid of framed cards, 240px at the least. */
30444
- .cn-record-list--cards .cn-record-list__list[data-v-d793cb0e] {
30691
+ .cn-record-list--cards .cn-record-list__list[data-v-695c835e] {
30445
30692
  align-items: start;
30446
30693
  display: grid;
30447
30694
  gap: 16px;
30448
30695
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
30449
30696
  }
30450
- .cn-record-list__card[data-v-d793cb0e] {
30697
+ .cn-record-list__card[data-v-695c835e] {
30451
30698
  background: var(--color-main-background);
30452
30699
  border: 1px solid var(--color-border);
30453
30700
  border-radius: 12px;
@@ -30459,51 +30706,51 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
30459
30706
  padding: 16px 18px;
30460
30707
  text-decoration: none;
30461
30708
  }
30462
- .cn-record-list__card--link[data-v-d793cb0e]:hover,
30463
- .cn-record-list__card--link[data-v-d793cb0e]:focus-visible {
30709
+ .cn-record-list__card--link[data-v-695c835e]:hover,
30710
+ .cn-record-list__card--link[data-v-695c835e]:focus-visible {
30464
30711
  border-color: var(--color-border-dark, var(--color-border));
30465
30712
  }
30466
- .cn-record-list__card--link:hover .cn-record-list__title[data-v-d793cb0e],
30467
- .cn-record-list__card--link:focus-visible .cn-record-list__title[data-v-d793cb0e] {
30713
+ .cn-record-list__card--link:hover .cn-record-list__title[data-v-695c835e],
30714
+ .cn-record-list__card--link:focus-visible .cn-record-list__title[data-v-695c835e] {
30468
30715
  text-decoration: underline;
30469
30716
  }
30470
- .cn-record-list__card-head[data-v-d793cb0e] {
30717
+ .cn-record-list__card-head[data-v-695c835e] {
30471
30718
  align-items: center;
30472
30719
  display: flex;
30473
30720
  gap: 8px;
30474
30721
  justify-content: space-between;
30475
30722
  }
30476
- .cn-record-list__card-title[data-v-d793cb0e] {
30723
+ .cn-record-list__card-title[data-v-695c835e] {
30477
30724
  align-items: center;
30478
30725
  display: flex;
30479
30726
  gap: 8px;
30480
30727
  min-width: 0;
30481
30728
  }
30482
- .cn-record-list__card-icon[data-v-d793cb0e] {
30729
+ .cn-record-list__card-icon[data-v-695c835e] {
30483
30730
  color: var(--color-primary-element);
30484
30731
  flex: none;
30485
30732
  }
30486
- .cn-record-list__card-pills[data-v-d793cb0e] {
30733
+ .cn-record-list__card-pills[data-v-695c835e] {
30487
30734
  display: flex;
30488
30735
  flex: none;
30489
30736
  gap: 6px;
30490
30737
  }
30491
- .cn-record-list__card-value[data-v-d793cb0e] {
30738
+ .cn-record-list__card-value[data-v-695c835e] {
30492
30739
  font-size: 24px;
30493
30740
  font-weight: 700;
30494
30741
  }
30495
30742
 
30496
30743
  /* feed */
30497
- .cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-d793cb0e] {
30744
+ .cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-695c835e] {
30498
30745
  border-top: 1px solid var(--color-border);
30499
30746
  }
30500
- .cn-record-list__feed-row[data-v-d793cb0e] {
30747
+ .cn-record-list__feed-row[data-v-695c835e] {
30501
30748
  align-items: flex-start;
30502
30749
  display: flex;
30503
30750
  gap: 14px;
30504
30751
  padding: 12px 0;
30505
30752
  }
30506
- .cn-record-list__feed-icon[data-v-d793cb0e] {
30753
+ .cn-record-list__feed-icon[data-v-695c835e] {
30507
30754
  align-items: center;
30508
30755
  background: var(--color-primary-element-light);
30509
30756
  border-radius: 50%;
@@ -30514,25 +30761,25 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
30514
30761
  justify-content: center;
30515
30762
  width: 36px;
30516
30763
  }
30517
- .cn-record-list__text[data-v-d793cb0e] {
30764
+ .cn-record-list__text[data-v-695c835e] {
30518
30765
  font-size: 15px;
30519
30766
  }
30520
- .cn-record-list--feed .cn-record-list__main[data-v-d793cb0e] {
30767
+ .cn-record-list--feed .cn-record-list__main[data-v-695c835e] {
30521
30768
  color: var(--color-main-text);
30522
30769
  text-decoration: none;
30523
30770
  }
30524
30771
 
30525
30772
  /* inline */
30526
- .cn-record-list__inline-row[data-v-d793cb0e] {
30773
+ .cn-record-list__inline-row[data-v-695c835e] {
30527
30774
  padding: 4px 0;
30528
30775
  }
30529
- .cn-record-list__label[data-v-d793cb0e] {
30776
+ .cn-record-list__label[data-v-695c835e] {
30530
30777
  margin-inline-end: 4px;
30531
30778
  }
30532
- .cn-record-list__inline-title[data-v-d793cb0e] {
30779
+ .cn-record-list__inline-title[data-v-695c835e] {
30533
30780
  color: var(--color-main-text);
30534
30781
  }
30535
- a.cn-record-list__inline-title[data-v-d793cb0e] {
30782
+ a.cn-record-list__inline-title[data-v-695c835e] {
30536
30783
  color: var(--color-primary-element);
30537
30784
  text-decoration: underline;
30538
30785
  }
@@ -31479,40 +31726,40 @@ a.cn-record-list__inline-title[data-v-d793cb0e] {
31479
31726
  }
31480
31727
 
31481
31728
 
31482
- .cn-version-info__card[data-v-52e4d484] {
31729
+ .cn-version-info__card[data-v-95a2bdce] {
31483
31730
  background: var(--color-background-hover);
31484
31731
  border: 1px solid var(--color-border);
31485
31732
  border-radius: var(--border-radius-large);
31486
31733
  padding: 20px;
31487
31734
  margin-bottom: 20px;
31488
31735
  }
31489
- .cn-version-info__card h4[data-v-52e4d484] {
31736
+ .cn-version-info__card h4[data-v-95a2bdce] {
31490
31737
  margin: 0 0 16px 0;
31491
31738
  font-size: 16px;
31492
31739
  font-weight: 600;
31493
31740
  color: var(--color-main-text);
31494
31741
  }
31495
- .cn-version-info__details[data-v-52e4d484] {
31742
+ .cn-version-info__details[data-v-95a2bdce] {
31496
31743
  display: flex;
31497
31744
  flex-direction: column;
31498
31745
  gap: 12px;
31499
31746
  }
31500
- .cn-version-info__item[data-v-52e4d484] {
31747
+ .cn-version-info__item[data-v-95a2bdce] {
31501
31748
  display: flex;
31502
31749
  justify-content: space-between;
31503
31750
  align-items: center;
31504
31751
  padding: 8px 0;
31505
31752
  border-bottom: 1px solid var(--color-border);
31506
31753
  }
31507
- .cn-version-info__item[data-v-52e4d484]:last-child {
31754
+ .cn-version-info__item[data-v-95a2bdce]:last-child {
31508
31755
  border-bottom: none;
31509
31756
  }
31510
- .cn-version-info__label[data-v-52e4d484] {
31757
+ .cn-version-info__label[data-v-95a2bdce] {
31511
31758
  font-weight: 500;
31512
31759
  color: var(--color-text-maxcontrast);
31513
31760
  font-size: 14px;
31514
31761
  }
31515
- .cn-version-info__value[data-v-52e4d484] {
31762
+ .cn-version-info__value[data-v-95a2bdce] {
31516
31763
  font-family: 'Courier New', Courier, monospace;
31517
31764
  font-weight: 600;
31518
31765
  color: var(--color-main-text);
@@ -31520,28 +31767,28 @@ a.cn-record-list__inline-title[data-v-d793cb0e] {
31520
31767
  }
31521
31768
 
31522
31769
  /* Status classes for values */
31523
- .cn-version-info__status--ok[data-v-52e4d484] {
31770
+ .cn-version-info__status--ok[data-v-95a2bdce] {
31524
31771
  color: var(--color-success);
31525
31772
  font-weight: 600;
31526
31773
  }
31527
- .cn-version-info__status--warning[data-v-52e4d484] {
31774
+ .cn-version-info__status--warning[data-v-95a2bdce] {
31528
31775
  color: var(--color-warning);
31529
31776
  font-weight: 600;
31530
31777
  }
31531
- .cn-version-info__status--error[data-v-52e4d484] {
31778
+ .cn-version-info__status--error[data-v-95a2bdce] {
31532
31779
  color: var(--color-error);
31533
31780
  font-weight: 600;
31534
31781
  }
31535
31782
  @media (max-width: 768px) {
31536
- .cn-version-info__item[data-v-52e4d484] {
31783
+ .cn-version-info__item[data-v-95a2bdce] {
31537
31784
  flex-direction: column;
31538
31785
  align-items: flex-start;
31539
31786
  gap: 4px;
31540
31787
  }
31541
- .cn-version-info__label[data-v-52e4d484] {
31788
+ .cn-version-info__label[data-v-95a2bdce] {
31542
31789
  font-weight: 600;
31543
31790
  }
31544
- .cn-version-info__value[data-v-52e4d484] {
31791
+ .cn-version-info__value[data-v-95a2bdce] {
31545
31792
  word-break: break-all;
31546
31793
  }
31547
31794
  }
@@ -34640,26 +34887,26 @@ to {
34640
34887
  text-decoration: underline;
34641
34888
  }
34642
34889
  @charset "UTF-8";
34643
- .cn-choice-cards[data-v-c551354c] {
34890
+ .cn-choice-cards[data-v-8d2b4ff4] {
34644
34891
  border: none;
34645
34892
  padding: 0;
34646
34893
  margin: 0;
34647
34894
  min-inline-size: 0;
34648
34895
  }
34649
34896
 
34650
- .cn-choice-cards__legend[data-v-c551354c] {
34897
+ .cn-choice-cards__legend[data-v-8d2b4ff4] {
34651
34898
  padding: 0;
34652
34899
  margin-block-end: 8px;
34653
34900
  font-weight: bold;
34654
34901
  }
34655
34902
 
34656
- .cn-choice-cards__loading[data-v-c551354c] {
34903
+ .cn-choice-cards__loading[data-v-8d2b4ff4] {
34657
34904
  display: flex;
34658
34905
  justify-content: center;
34659
34906
  padding: 24px 0;
34660
34907
  }
34661
34908
 
34662
- .cn-choice-cards__grid[data-v-c551354c] {
34909
+ .cn-choice-cards__grid[data-v-8d2b4ff4] {
34663
34910
  display: grid;
34664
34911
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
34665
34912
  gap: 12px;
@@ -34671,26 +34918,26 @@ to {
34671
34918
  padding: 12px;
34672
34919
  }
34673
34920
 
34674
- .cn-choice-cards__cell[data-v-c551354c] {
34921
+ .cn-choice-cards__cell[data-v-8d2b4ff4] {
34675
34922
  display: flex;
34676
34923
  flex-direction: column;
34677
34924
  gap: 8px;
34678
34925
  min-inline-size: 0;
34679
34926
  }
34680
34927
 
34681
- .cn-choice-cards__actions[data-v-c551354c] {
34928
+ .cn-choice-cards__actions[data-v-8d2b4ff4] {
34682
34929
  display: flex;
34683
34930
  flex-direction: column;
34684
34931
  gap: 4px;
34685
34932
  }
34686
34933
 
34687
- .cn-choice-cards__option[data-v-c551354c] {
34934
+ .cn-choice-cards__option[data-v-8d2b4ff4] {
34688
34935
  position: relative;
34689
34936
  display: block;
34690
34937
  cursor: pointer;
34691
34938
  }
34692
34939
 
34693
- .cn-choice-cards__input[data-v-c551354c] {
34940
+ .cn-choice-cards__input[data-v-8d2b4ff4] {
34694
34941
  position: absolute;
34695
34942
  inset-block-start: 16px;
34696
34943
  inset-inline-end: 14px;
@@ -34700,7 +34947,7 @@ to {
34700
34947
  }
34701
34948
 
34702
34949
  /* Room for the input, so a long title never runs underneath it. */
34703
- .cn-choice-cards__option[data-v-c551354c] .cn-card {
34950
+ .cn-choice-cards__option[data-v-8d2b4ff4] .cn-card {
34704
34951
  padding-inline-end: 44px;
34705
34952
  transition: box-shadow 0.2s ease, border-color 0.2s ease;
34706
34953
  }
@@ -34711,25 +34958,103 @@ to {
34711
34958
  touches a card, and the grid twitches. The border colour below already
34712
34959
  carries hover, so the scale is dropped: at (0,3,0) this beats the global
34713
34960
  `.cn-card:hover` at (0,2,0). */
34714
- .cn-choice-cards__option[data-v-c551354c]:hover .cn-card {
34961
+ .cn-choice-cards__option[data-v-8d2b4ff4]:hover .cn-card {
34715
34962
  border-color: var(--color-primary-element);
34716
34963
  transform: none;
34717
34964
  }
34718
34965
 
34719
34966
  /* The focus ring belongs on the card, not on the small input inside it. */
34720
- .cn-choice-cards__input[data-v-c551354c]:focus-visible + .cn-card {
34967
+ .cn-choice-cards__input[data-v-8d2b4ff4]:focus-visible + .cn-card {
34721
34968
  outline: 2px solid var(--color-primary-element);
34722
34969
  outline-offset: 2px;
34723
34970
  }
34724
34971
 
34725
- .cn-choice-cards__input[data-v-c551354c]:disabled {
34972
+ .cn-choice-cards__input[data-v-8d2b4ff4]:disabled {
34726
34973
  cursor: default;
34727
34974
  }
34728
34975
 
34729
- .cn-choice-cards__input[data-v-c551354c]:disabled + .cn-card {
34976
+ .cn-choice-cards__input[data-v-8d2b4ff4]:disabled + .cn-card {
34977
+ opacity: 0.6;
34978
+ }
34979
+
34980
+ .cn-choice-cards__rows[data-v-8d2b4ff4] {
34981
+ display: flex;
34982
+ flex-direction: column;
34983
+ gap: 8px;
34984
+ }
34985
+
34986
+ .cn-choice-cards__row[data-v-8d2b4ff4] {
34987
+ display: flex;
34988
+ align-items: flex-start;
34989
+ gap: 12px;
34990
+ padding: 14px 16px;
34991
+ border: 1px solid var(--color-border);
34992
+ border-radius: var(--border-radius-large, 8px);
34993
+ background: var(--color-main-background);
34994
+ cursor: pointer;
34995
+ }
34996
+
34997
+ .cn-choice-cards__row[data-v-8d2b4ff4]:hover {
34998
+ border-color: var(--color-border-dark);
34999
+ }
35000
+
35001
+ .cn-choice-cards__row--selected[data-v-8d2b4ff4],
35002
+ .cn-choice-cards__row--selected[data-v-8d2b4ff4]:hover {
35003
+ border-color: var(--color-primary-element);
35004
+ /* The second pixel of the 2px selected border, without moving the content. */
35005
+ box-shadow: inset 0 0 0 1px var(--color-primary-element);
35006
+ background: var(--color-primary-element-light);
35007
+ }
35008
+
35009
+ .cn-choice-cards__row--disabled[data-v-8d2b4ff4] {
35010
+ cursor: default;
34730
35011
  opacity: 0.6;
34731
35012
  }
34732
35013
 
35014
+ .cn-choice-cards__row[data-v-8d2b4ff4]:has(.cn-choice-cards__row-input:focus-visible) {
35015
+ outline: 2px solid var(--color-primary-element);
35016
+ outline-offset: 2px;
35017
+ }
35018
+
35019
+ .cn-choice-cards__row-input[data-v-8d2b4ff4] {
35020
+ flex: none;
35021
+ margin: 2px 0 0;
35022
+ accent-color: var(--color-primary-element);
35023
+ cursor: inherit;
35024
+ }
35025
+
35026
+ .cn-choice-cards__row-icon[data-v-8d2b4ff4] {
35027
+ flex: none;
35028
+ }
35029
+
35030
+ .cn-choice-cards__row-text[data-v-8d2b4ff4] {
35031
+ display: flex;
35032
+ flex-direction: column;
35033
+ gap: 2px;
35034
+ min-width: 0;
35035
+ }
35036
+
35037
+ .cn-choice-cards__row-title[data-v-8d2b4ff4] {
35038
+ font-size: 15px;
35039
+ font-weight: 600;
35040
+ }
35041
+
35042
+ .cn-choice-cards__row-description[data-v-8d2b4ff4] {
35043
+ font-size: 13px;
35044
+ color: var(--color-text-maxcontrast);
35045
+ }
35046
+
35047
+ .cn-choice-cards__reason[data-v-8d2b4ff4] {
35048
+ font-size: 13px;
35049
+ color: var(--color-text-maxcontrast);
35050
+ font-style: italic;
35051
+ }
35052
+
35053
+ .cn-choice-cards__reason--card[data-v-8d2b4ff4] {
35054
+ display: block;
35055
+ margin-block-start: 4px;
35056
+ }
35057
+
34733
35058
  .cn-wizard-dialog__step-body[data-v-4a9bf6d1] {
34734
35059
  min-height: 200px;
34735
35060
  }
@@ -34809,28 +35134,28 @@ to {
34809
35134
  }
34810
35135
 
34811
35136
 
34812
- .cn-admin-settings-shell[data-v-038f200a] {
35137
+ .cn-admin-settings-shell[data-v-29bf49ca] {
34813
35138
  max-width: 900px;
34814
35139
  }
34815
35140
 
34816
35141
  /* The board look lifts the width and lays the header and cards on a grid (look-board.css). */
34817
- .cn-support-info[data-v-038f200a] {
35142
+ .cn-support-info[data-v-29bf49ca] {
34818
35143
  margin-top: 16px;
34819
35144
  padding-top: 16px;
34820
35145
  border-top: 1px solid var(--color-border);
34821
35146
  }
34822
- .cn-support-info h4[data-v-038f200a] {
35147
+ .cn-support-info h4[data-v-29bf49ca] {
34823
35148
  margin: 0 0 8px 0;
34824
35149
  font-size: 14px;
34825
35150
  font-weight: 600;
34826
35151
  color: var(--color-main-text);
34827
35152
  }
34828
- .cn-support-info p[data-v-038f200a] {
35153
+ .cn-support-info p[data-v-29bf49ca] {
34829
35154
  margin: 4px 0;
34830
35155
  color: var(--color-text-maxcontrast);
34831
35156
  font-size: 14px;
34832
35157
  }
34833
- .cn-support-info a[data-v-038f200a] {
35158
+ .cn-support-info a[data-v-29bf49ca] {
34834
35159
  color: var(--color-primary-element);
34835
35160
  }
34836
35161
 
@@ -38025,19 +38350,6 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38025
38350
  }
38026
38351
 
38027
38352
 
38028
- /* `separator`: a text separator in place of the chevron. The chevron's own
38029
- element stays (it carries NcBreadcrumbs' spacing and its "no separator after
38030
- the last crumb" rule); only its icon gives way to the text. */
38031
- .cn-breadcrumbs--text-separator[data-v-54c3381a] .vue-crumb__separator svg {
38032
- display: none;
38033
- }
38034
- .cn-breadcrumbs--text-separator[data-v-54c3381a] .vue-crumb__separator::before {
38035
- content: var(--cn-breadcrumbs-separator);
38036
- padding-inline: var(--cn-breadcrumbs-separator-gap, 0);
38037
- color: var(--color-text-maxcontrast);
38038
- }
38039
-
38040
-
38041
38353
  .cn-relation-link[data-v-6559b00a] {
38042
38354
  padding: 20px;
38043
38355
  display: flex;
@@ -38471,7 +38783,7 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38471
38783
  }
38472
38784
 
38473
38785
 
38474
- .cn-dashboard-page[data-v-42bc14a4] {
38786
+ .cn-dashboard-page[data-v-4f9a30ca] {
38475
38787
  padding: 20px;
38476
38788
  max-width: 1800px;
38477
38789
  /* Centre the leftover space once the cap engages, so a wide screen shows
@@ -38485,7 +38797,7 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38485
38797
  overflow-y: auto;
38486
38798
  box-sizing: border-box;
38487
38799
  }
38488
- .cn-dashboard-page__header[data-v-42bc14a4] {
38800
+ .cn-dashboard-page__header[data-v-4f9a30ca] {
38489
38801
  display: flex;
38490
38802
  justify-content: space-between;
38491
38803
  align-items: flex-start;
@@ -38497,21 +38809,21 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38497
38809
  room. Only the HEADER shifts right — body widgets keep full width. */
38498
38810
  padding-inline-start: 56px;
38499
38811
  }
38500
- .cn-dashboard-page__header-left[data-v-42bc14a4] {
38812
+ .cn-dashboard-page__header-left[data-v-4f9a30ca] {
38501
38813
  min-width: 0;
38502
38814
  }
38503
- .cn-dashboard-page__title-row[data-v-42bc14a4] {
38815
+ .cn-dashboard-page__title-row[data-v-4f9a30ca] {
38504
38816
  display: flex;
38505
38817
  align-items: center;
38506
38818
  flex-wrap: wrap;
38507
38819
  gap: 12px;
38508
38820
  }
38509
- .cn-dashboard-page__title[data-v-42bc14a4] {
38821
+ .cn-dashboard-page__title[data-v-4f9a30ca] {
38510
38822
  margin: 0;
38511
38823
  font-size: 20px;
38512
38824
  font-weight: 700;
38513
38825
  }
38514
- .cn-dashboard-page__description[data-v-42bc14a4] {
38826
+ .cn-dashboard-page__description[data-v-4f9a30ca] {
38515
38827
  margin: 4px 0 0;
38516
38828
  font-size: 14px;
38517
38829
  color: var(--color-text-maxcontrast);
@@ -38519,19 +38831,19 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38519
38831
 
38520
38832
  /* Board look (screens-dashboard-parity): h1 28/700, a 15px grey subtitle 6px
38521
38833
  under it, and 40px buttons with a 10px gap. */
38522
- .cn-dashboard-page--board .cn-dashboard-page__title[data-v-42bc14a4] {
38834
+ .cn-dashboard-page--board .cn-dashboard-page__title[data-v-4f9a30ca] {
38523
38835
  font-size: 28px;
38524
38836
  font-weight: 700;
38525
38837
  line-height: 1.2;
38526
38838
  }
38527
- .cn-dashboard-page--board .cn-dashboard-page__description[data-v-42bc14a4] {
38839
+ .cn-dashboard-page--board .cn-dashboard-page__description[data-v-4f9a30ca] {
38528
38840
  margin: 6px 0 0;
38529
38841
  font-size: 15px;
38530
38842
  }
38531
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-42bc14a4] {
38843
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4f9a30ca] {
38532
38844
  gap: 10px;
38533
38845
  }
38534
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-42bc14a4] .button-vue {
38846
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4f9a30ca] .button-vue {
38535
38847
  min-height: var(--cn-board-control-height, 40px);
38536
38848
  height: var(--cn-board-control-height, 40px);
38537
38849
  }
@@ -38539,17 +38851,17 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38539
38851
  /* The switch row under the header (screens-dashboard-greeting-header): the
38540
38852
  view switch left, the `viewLinks` pills right (DqMijnWerk: pills 34px high,
38541
38853
  radius 17, 13px/600, a 14px icon, primary light on primary deep). */
38542
- .cn-dashboard-page__switch-row[data-v-42bc14a4] {
38854
+ .cn-dashboard-page__switch-row[data-v-4f9a30ca] {
38543
38855
  display: flex;
38544
38856
  flex-wrap: wrap;
38545
38857
  align-items: center;
38546
38858
  gap: 10px;
38547
38859
  margin-bottom: var(--cn-board-section-gap, 20px);
38548
38860
  }
38549
- .cn-dashboard-page__switch-row-spacer[data-v-42bc14a4] {
38861
+ .cn-dashboard-page__switch-row-spacer[data-v-4f9a30ca] {
38550
38862
  flex: 1 1 auto;
38551
38863
  }
38552
- .cn-dashboard-page__view-link[data-v-42bc14a4] {
38864
+ .cn-dashboard-page__view-link[data-v-4f9a30ca] {
38553
38865
  display: inline-flex;
38554
38866
  align-items: center;
38555
38867
  gap: 6px;
@@ -38563,36 +38875,53 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38563
38875
  white-space: nowrap;
38564
38876
  text-decoration: none !important;
38565
38877
  }
38566
- .cn-dashboard-page__view-link[data-v-42bc14a4]:hover {
38878
+ .cn-dashboard-page__view-link[data-v-4f9a30ca]:hover {
38567
38879
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
38568
38880
  }
38569
- .cn-dashboard-page__view-link[data-v-42bc14a4]:focus-visible {
38881
+ .cn-dashboard-page__view-link[data-v-4f9a30ca]:focus-visible {
38570
38882
  outline: 2px solid var(--color-main-text);
38571
38883
  outline-offset: 2px;
38572
38884
  }
38573
- .cn-dashboard-page__view-link-icon[data-v-42bc14a4] {
38885
+ .cn-dashboard-page__view-link-icon[data-v-4f9a30ca] {
38574
38886
  display: inline-flex;
38575
38887
  }
38576
38888
 
38577
38889
  /* The period group, in a row of its own between the header and the KPI row. */
38578
- .cn-dashboard-page__date-range--segmented[data-v-42bc14a4] {
38890
+ .cn-dashboard-page__date-range--segmented[data-v-4f9a30ca] {
38579
38891
  margin-bottom: 16px;
38580
38892
  }
38581
- .cn-dashboard-page__date-segmented[data-v-42bc14a4] {
38893
+
38894
+ /* The period group at the end of the description line. */
38895
+ .cn-dashboard-page__description--with-period[data-v-4f9a30ca] {
38896
+ align-items: center;
38897
+ display: flex;
38898
+ flex-wrap: wrap;
38899
+ gap: 8px;
38900
+ }
38901
+ .cn-dashboard-page__date-segmented[data-v-4f9a30ca] {
38582
38902
  display: flex;
38583
38903
  align-items: center;
38584
38904
  gap: 8px;
38585
38905
  }
38586
38906
 
38587
38907
  /* The KPI row above the grid: tiles are cells of the auto-fit grid. */
38588
- .cn-dashboard-page__kpi-row[data-v-42bc14a4] {
38908
+ .cn-dashboard-page__kpi-row[data-v-4f9a30ca] {
38589
38909
  margin-bottom: var(--cn-board-section-gap, 16px);
38590
38910
  }
38591
- .cn-dashboard-page__kpi-cell[data-v-42bc14a4] {
38911
+
38912
+ /* Board look: GridStack insets every card by the grid margin on each side, so
38913
+ the cards started a margin to the right of the KPI row and the header. The
38914
+ grid reaches out by that margin, so the card edges line up with the page's
38915
+ (dashboard-grid-flush). */
38916
+ .cn-dashboard-page--board[data-v-4f9a30ca] .cn-dashboard-grid {
38917
+ width: auto;
38918
+ margin-inline: calc(-1 * var(--cn-dashboard-grid-margin, 12px));
38919
+ }
38920
+ .cn-dashboard-page__kpi-cell[data-v-4f9a30ca] {
38592
38921
  display: flex;
38593
38922
  min-width: 0;
38594
38923
  }
38595
- .cn-dashboard-page__kpi-cell[data-v-42bc14a4] > * {
38924
+ .cn-dashboard-page__kpi-cell[data-v-4f9a30ca] > * {
38596
38925
  flex: 1 1 auto;
38597
38926
  min-width: 0;
38598
38927
  }
@@ -38605,7 +38934,7 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38605
38934
  scoped chip rules then silently don't match and the chip collapses into
38606
38935
  NcActions' ~30px icon slot (text wraps to "Last / 30 / days"). The
38607
38936
  data-testid is stable across chunks, so those rules match regardless. */
38608
- .cn-dashboard-page__header-actions[data-v-42bc14a4] {
38937
+ .cn-dashboard-page__header-actions[data-v-4f9a30ca] {
38609
38938
  display: flex;
38610
38939
  align-items: center;
38611
38940
  gap: 8px;
@@ -38621,19 +38950,19 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38621
38950
 
38622
38951
  /* Date-range header band. Kept compact so it doesn't open a tall gap
38623
38952
  above the grid; the pills variant is a single tidy toggle row. */
38624
- .cn-dashboard-page__date-range[data-v-42bc14a4] {
38953
+ .cn-dashboard-page__date-range[data-v-4f9a30ca] {
38625
38954
  margin-bottom: 12px;
38626
38955
  }
38627
- .cn-dashboard-page__date-range--pills[data-v-42bc14a4] {
38956
+ .cn-dashboard-page__date-range--pills[data-v-4f9a30ca] {
38628
38957
  margin-bottom: 8px;
38629
38958
  }
38630
- .cn-dashboard-page__date-pills[data-v-42bc14a4] {
38959
+ .cn-dashboard-page__date-pills[data-v-4f9a30ca] {
38631
38960
  display: flex;
38632
38961
  align-items: center;
38633
38962
  flex-wrap: wrap;
38634
38963
  gap: 6px;
38635
38964
  }
38636
- .cn-dashboard-page__date-pill[data-v-42bc14a4] {
38965
+ .cn-dashboard-page__date-pill[data-v-4f9a30ca] {
38637
38966
  display: inline-flex;
38638
38967
  align-items: center;
38639
38968
  padding: 5px 14px;
@@ -38648,77 +38977,77 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38648
38977
  cursor: pointer;
38649
38978
  transition: background-color 100ms ease, border-color 100ms ease, color 100ms ease;
38650
38979
  }
38651
- .cn-dashboard-page__date-pill[data-v-42bc14a4]:hover {
38980
+ .cn-dashboard-page__date-pill[data-v-4f9a30ca]:hover {
38652
38981
  background: var(--color-background-hover);
38653
38982
  }
38654
- .cn-dashboard-page__date-pill[data-v-42bc14a4]:focus-visible {
38983
+ .cn-dashboard-page__date-pill[data-v-4f9a30ca]:focus-visible {
38655
38984
  outline: 2px solid var(--color-primary-element);
38656
38985
  outline-offset: 2px;
38657
38986
  }
38658
- .cn-dashboard-page__date-pill--active[data-v-42bc14a4] {
38987
+ .cn-dashboard-page__date-pill--active[data-v-4f9a30ca] {
38659
38988
  background: var(--color-primary-element);
38660
38989
  border-color: var(--color-primary-element);
38661
38990
  color: var(--color-primary-element-text);
38662
38991
  }
38663
- .cn-dashboard-page__date-pill--active[data-v-42bc14a4]:hover {
38992
+ .cn-dashboard-page__date-pill--active[data-v-4f9a30ca]:hover {
38664
38993
  background: var(--color-primary-element-hover, var(--color-primary-element));
38665
38994
  }
38666
38995
 
38667
38996
  /* The custom-range pill is de-emphasised — dashed outline, muted text —
38668
38997
  so it reads as an escape hatch rather than a primary option. */
38669
- .cn-dashboard-page__date-pill--custom[data-v-42bc14a4] {
38998
+ .cn-dashboard-page__date-pill--custom[data-v-4f9a30ca] {
38670
38999
  border-style: dashed;
38671
39000
  color: var(--color-text-maxcontrast);
38672
39001
  }
38673
- .cn-dashboard-page__date-pill-custom[data-v-42bc14a4] .action-item__menutoggle {
39002
+ .cn-dashboard-page__date-pill-custom[data-v-4f9a30ca] .action-item__menutoggle {
38674
39003
  min-width: 0;
38675
39004
  min-height: 0;
38676
39005
  padding: 0;
38677
39006
  background: transparent;
38678
39007
  border: none;
38679
39008
  }
38680
- .cn-dashboard-page__date-pill-custom[data-v-42bc14a4] .button-vue,
38681
- .cn-dashboard-page__date-pill-custom[data-v-42bc14a4] .button-vue__wrapper,
38682
- .cn-dashboard-page__date-pill-custom[data-v-42bc14a4] .button-vue__icon {
39009
+ .cn-dashboard-page__date-pill-custom[data-v-4f9a30ca] .button-vue,
39010
+ .cn-dashboard-page__date-pill-custom[data-v-4f9a30ca] .button-vue__wrapper,
39011
+ .cn-dashboard-page__date-pill-custom[data-v-4f9a30ca] .button-vue__icon {
38683
39012
  width: auto !important;
38684
39013
  min-width: 0 !important;
38685
39014
  overflow: visible !important;
38686
39015
  }
38687
- .cn-dashboard-page__empty[data-v-42bc14a4] {
39016
+ .cn-dashboard-page__empty[data-v-4f9a30ca] {
38688
39017
  padding: 60px 20px;
38689
39018
  }
38690
39019
 
38691
39020
  /* The page's view switch on a page without a header row: at the end of its
38692
39021
  own row, above the grids, where the header would have put it. */
38693
- .cn-dashboard-page__view-switch[data-v-42bc14a4] {
39022
+ .cn-dashboard-page__view-switch[data-v-4f9a30ca] {
38694
39023
  display: flex;
38695
39024
  justify-content: flex-end;
38696
39025
  margin-bottom: 12px;
38697
39026
  }
38698
39027
 
38699
39028
  /* A view the switch shows with nothing to draw. */
38700
- .cn-page-view-region--empty[data-v-42bc14a4] {
39029
+ .cn-page-view-region--empty[data-v-4f9a30ca] {
38701
39030
  padding: 40px 20px;
38702
39031
  }
38703
- .cn-dashboard-page__page-filters[data-v-42bc14a4] {
39032
+ .cn-dashboard-page__page-filters[data-v-4f9a30ca] {
38704
39033
  display: flex;
38705
39034
  flex-wrap: wrap;
38706
39035
  gap: 16px;
38707
39036
  align-items: flex-end;
38708
39037
  margin-bottom: 12px;
38709
39038
  }
38710
- .cn-dashboard-page__page-filter[data-v-42bc14a4] {
39039
+ .cn-dashboard-page__page-filter[data-v-4f9a30ca] {
38711
39040
  display: flex;
38712
39041
  flex-direction: column;
38713
39042
  gap: 4px;
38714
39043
  min-width: 200px;
38715
39044
  }
38716
- .cn-dashboard-page__page-filter-label[data-v-42bc14a4] {
39045
+ .cn-dashboard-page__page-filter-label[data-v-4f9a30ca] {
38717
39046
  font-size: 0.85em;
38718
39047
  font-weight: 600;
38719
39048
  color: var(--color-text-maxcontrast);
38720
39049
  }
38721
- .cn-dashboard-page__widget-edit[data-v-42bc14a4] {
39050
+ .cn-dashboard-page__widget-edit[data-v-4f9a30ca] {
38722
39051
  position: absolute;
38723
39052
  top: 4px;
38724
39053
  inset-inline-end: 4px;
@@ -38737,8 +39066,8 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38737
39066
  and centre the card. */
38738
39067
  /* `safe` centre so an overflowing tile does not spill out of the top, where
38739
39068
  flex overflow cannot be scrolled back to. Same as detail-page.css. */
38740
- .cn-dashboard-page__card-fit[data-v-42bc14a4] .cn-widget-wrapper__content,
38741
- .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-42bc14a4] .cn-widget-wrapper__content {
39069
+ .cn-dashboard-page__card-fit[data-v-4f9a30ca] .cn-widget-wrapper__content,
39070
+ .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-4f9a30ca] .cn-widget-wrapper__content {
38742
39071
  overflow: hidden;
38743
39072
  display: flex;
38744
39073
  flex-direction: column;
@@ -38754,7 +39083,7 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38754
39083
  shows up as a scrollbar the user has to drag to see the whole graph. Same
38755
39084
  shape as the card-fit rule above, minus the padding: chart tiles render
38756
39085
  `flush`, and apexcharts already draws its own margins. */
38757
- .cn-dashboard-page__chart-fit[data-v-42bc14a4] .cn-widget-wrapper__content {
39086
+ .cn-dashboard-page__chart-fit[data-v-4f9a30ca] .cn-widget-wrapper__content {
38758
39087
  overflow: hidden;
38759
39088
  display: flex;
38760
39089
  flex-direction: column;
@@ -38764,13 +39093,13 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38764
39093
  /* Card content (stat / gauge / delta) must fit the tile width: let the
38765
39094
  widget shrink and its value/label truncate instead of pushing past the
38766
39095
  tile edge (the horizontal clip on long currency values). */
38767
- .cn-dashboard-page__card-fit[data-v-42bc14a4] .cn-stat-widget,
38768
- .cn-dashboard-page__card-fit[data-v-42bc14a4] .cn-gauge-widget,
38769
- .cn-dashboard-page__card-fit[data-v-42bc14a4] .cn-delta-widget {
39096
+ .cn-dashboard-page__card-fit[data-v-4f9a30ca] .cn-stat-widget,
39097
+ .cn-dashboard-page__card-fit[data-v-4f9a30ca] .cn-gauge-widget,
39098
+ .cn-dashboard-page__card-fit[data-v-4f9a30ca] .cn-delta-widget {
38770
39099
  min-width: 0;
38771
39100
  max-width: 100%;
38772
39101
  }
38773
- .cn-dashboard-page__unknown[data-v-42bc14a4] {
39102
+ .cn-dashboard-page__unknown[data-v-4f9a30ca] {
38774
39103
  display: flex;
38775
39104
  align-items: center;
38776
39105
  justify-content: center;
@@ -38781,29 +39110,43 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38781
39110
  }
38782
39111
 
38783
39112
  /* widget-ref content items */
38784
- .cn-dashboard-page__content[data-v-42bc14a4] {
39113
+ .cn-dashboard-page__content[data-v-4f9a30ca] {
38785
39114
  display: flex;
38786
39115
  flex-direction: column;
38787
39116
  gap: 16px;
38788
39117
  }
38789
- .cn-dashboard-page__content-item[data-v-42bc14a4] {
39118
+ .cn-dashboard-page__content-item[data-v-4f9a30ca] {
38790
39119
  width: 100%;
38791
39120
  }
38792
39121
  /* On a phone (screens-dashboard-phone) the touch targets of a board dashboard
38793
39122
  are 44px: the widget Actions menu and the KPI tiles. */
38794
39123
  @media (max-width: 640px) {
38795
- .cn-dashboard-page--board[data-v-42bc14a4] .cn-widget-wrapper__actions .action-item__menutoggle,
38796
- .cn-dashboard-page--board[data-v-42bc14a4] .cn-widget-wrapper__actions .button-vue {
39124
+ .cn-dashboard-page--board[data-v-4f9a30ca] .cn-widget-wrapper__actions .action-item__menutoggle,
39125
+ .cn-dashboard-page--board[data-v-4f9a30ca] .cn-widget-wrapper__actions .button-vue {
38797
39126
  min-height: 44px;
38798
39127
  }
38799
- .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-42bc14a4] {
39128
+ .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-4f9a30ca] {
38800
39129
  min-height: 44px;
38801
39130
  }
39131
+
39132
+ /* The widget Actions menu shows its icon only, so the card title keeps
39133
+ the room; the name stays for assistive tech. */
39134
+ .cn-dashboard-page--board[data-v-4f9a30ca] .cn-widget-wrapper__actions .action-item__menutoggle {
39135
+ min-width: 44px;
39136
+ }
39137
+ .cn-dashboard-page--board[data-v-4f9a30ca] .cn-widget-wrapper__actions .action-item__menutoggle .button-vue__text {
39138
+ position: absolute;
39139
+ width: 1px;
39140
+ height: 1px;
39141
+ overflow: hidden;
39142
+ clip-path: inset(50%);
39143
+ white-space: nowrap;
39144
+ }
38802
39145
  }
38803
39146
 
38804
39147
  /* What a registry widget reports for its card header (`header` event): the
38805
39148
  note beside the link ("3 in total") and one action, as on a detail page. */
38806
- .cn-dashboard-page__widget-count[data-v-42bc14a4] {
39149
+ .cn-dashboard-page__widget-count[data-v-4f9a30ca] {
38807
39150
  align-self: center;
38808
39151
  padding: 1px 8px;
38809
39152
  border-radius: 10px;
@@ -38812,13 +39155,13 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38812
39155
  font-size: 13px;
38813
39156
  font-weight: 600;
38814
39157
  }
38815
- .cn-dashboard-page__widget-note[data-v-42bc14a4] {
39158
+ .cn-dashboard-page__widget-note[data-v-4f9a30ca] {
38816
39159
  align-self: center;
38817
39160
  color: var(--color-text-maxcontrast);
38818
39161
  font-size: 14px;
38819
39162
  white-space: nowrap;
38820
39163
  }
38821
- .cn-dashboard-page__widget-action[data-v-42bc14a4] {
39164
+ .cn-dashboard-page__widget-action[data-v-4f9a30ca] {
38822
39165
  display: inline-flex;
38823
39166
  align-items: center;
38824
39167
  align-self: center;
@@ -38834,7 +39177,7 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
38834
39177
  white-space: nowrap;
38835
39178
  cursor: pointer;
38836
39179
  }
38837
- .cn-dashboard-page__widget-action[data-v-42bc14a4]:focus-visible {
39180
+ .cn-dashboard-page__widget-action[data-v-4f9a30ca]:focus-visible {
38838
39181
  outline: 2px solid var(--color-primary-element);
38839
39182
  outline-offset: 2px;
38840
39183
  }
@@ -40886,21 +41229,21 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40886
41229
 
40887
41230
 
40888
41231
  /* The section wrapper draws no box; the board look makes it the card grid. */
40889
- .cn-settings-page__sections[data-v-04e49f77] {
41232
+ .cn-settings-page__sections[data-v-50865bde] {
40890
41233
  display: contents;
40891
41234
  }
40892
- .cn-settings-page__header-buttons[data-v-04e49f77] {
41235
+ .cn-settings-page__header-buttons[data-v-50865bde] {
40893
41236
  display: flex;
40894
41237
  align-items: center;
40895
41238
  gap: 10px;
40896
41239
  margin-inline-start: auto;
40897
41240
  }
40898
- .cn-settings-page[data-v-04e49f77] {
41241
+ .cn-settings-page[data-v-50865bde] {
40899
41242
  display: flex;
40900
41243
  flex-direction: column;
40901
41244
  gap: 16px;
40902
41245
  }
40903
- .cn-settings-page__actions[data-v-04e49f77] {
41246
+ .cn-settings-page__actions[data-v-50865bde] {
40904
41247
  display: flex;
40905
41248
  justify-content: flex-end;
40906
41249
  gap: 8px;
@@ -40911,7 +41254,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40911
41254
  * orchestration REQ-MSO-5). Uses Nextcloud CSS variables only — no
40912
41255
  * hex literals, no rgba overrides on the elements themselves.
40913
41256
  */
40914
- .cn-settings-page__tabs[data-v-04e49f77] {
41257
+ .cn-settings-page__tabs[data-v-50865bde] {
40915
41258
  display: flex;
40916
41259
  flex-wrap: wrap;
40917
41260
  gap: 4px;
@@ -40919,7 +41262,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40919
41262
  padding-bottom: 0;
40920
41263
  margin-bottom: 8px;
40921
41264
  }
40922
- .cn-settings-page__tab[data-v-04e49f77] {
41265
+ .cn-settings-page__tab[data-v-50865bde] {
40923
41266
  background: transparent;
40924
41267
  border: 0;
40925
41268
  border-bottom: 3px solid transparent;
@@ -40931,52 +41274,52 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40931
41274
  border-radius: var(--border-radius-large) var(--border-radius-large) 0 0;
40932
41275
  transition: background-color 0.1s ease-in-out, color 0.1s ease-in-out, border-color 0.1s ease-in-out;
40933
41276
  }
40934
- .cn-settings-page__tab[data-v-04e49f77]:hover,
40935
- .cn-settings-page__tab[data-v-04e49f77]:focus-visible {
41277
+ .cn-settings-page__tab[data-v-50865bde]:hover,
41278
+ .cn-settings-page__tab[data-v-50865bde]:focus-visible {
40936
41279
  background-color: var(--color-background-hover);
40937
41280
  color: var(--color-main-text);
40938
41281
  outline: none;
40939
41282
  }
40940
- .cn-settings-page__tab--active[data-v-04e49f77] {
41283
+ .cn-settings-page__tab--active[data-v-50865bde] {
40941
41284
  color: var(--color-primary-element);
40942
41285
  border-bottom-color: var(--color-primary-element);
40943
41286
  font-weight: bold;
40944
41287
  }
40945
41288
  @media (max-width: 768px) {
40946
- .cn-settings-page__tabs[data-v-04e49f77] {
41289
+ .cn-settings-page__tabs[data-v-50865bde] {
40947
41290
  flex-direction: column;
40948
41291
  gap: 0;
40949
41292
  border-bottom: 0;
40950
41293
  }
40951
- .cn-settings-page__tab[data-v-04e49f77] {
41294
+ .cn-settings-page__tab[data-v-50865bde] {
40952
41295
  border-bottom: 1px solid var(--color-border);
40953
41296
  border-radius: 0;
40954
41297
  text-align: left;
40955
41298
  }
40956
- .cn-settings-page__tab--active[data-v-04e49f77] {
41299
+ .cn-settings-page__tab--active[data-v-50865bde] {
40957
41300
  border-bottom-width: 1px;
40958
41301
  background-color: var(--color-background-hover);
40959
41302
  }
40960
41303
  }
40961
- .cn-settings-page__fields[data-v-04e49f77] {
41304
+ .cn-settings-page__fields[data-v-50865bde] {
40962
41305
  display: flex;
40963
41306
  flex-direction: column;
40964
41307
  gap: 12px;
40965
41308
  }
40966
- .cn-settings-page__field[data-v-04e49f77] {
41309
+ .cn-settings-page__field[data-v-50865bde] {
40967
41310
  display: flex;
40968
41311
  flex-direction: column;
40969
41312
  gap: 4px;
40970
41313
  }
40971
- .cn-settings-page__field-help[data-v-04e49f77] {
41314
+ .cn-settings-page__field-help[data-v-50865bde] {
40972
41315
  color: var(--color-text-maxcontrast);
40973
41316
  }
40974
- .cn-settings-page__save-bar[data-v-04e49f77] {
41317
+ .cn-settings-page__save-bar[data-v-50865bde] {
40975
41318
  display: flex;
40976
41319
  gap: 8px;
40977
41320
  margin-top: 16px;
40978
41321
  }
40979
- .cn-settings-page__error[data-v-04e49f77] {
41322
+ .cn-settings-page__error[data-v-50865bde] {
40980
41323
  color: var(--color-error);
40981
41324
  background: var(--color-error-light, var(--color-background-hover));
40982
41325
  padding: 8px 12px;
@@ -43241,23 +43584,23 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
43241
43584
  }
43242
43585
 
43243
43586
 
43244
- .cn-notif-prefs__intro[data-v-2a94b3e4] {
43587
+ .cn-notif-prefs__intro[data-v-c746b496] {
43245
43588
  margin-bottom: 12px;
43246
43589
  color: var(--color-text-maxcontrast);
43247
43590
  }
43248
- .cn-notif-prefs__group[data-v-2a94b3e4] {
43591
+ .cn-notif-prefs__group[data-v-c746b496] {
43249
43592
  margin-bottom: 20px;
43250
43593
  }
43251
- .cn-notif-prefs__group-title[data-v-2a94b3e4] {
43594
+ .cn-notif-prefs__group-title[data-v-c746b496] {
43252
43595
  margin: 8px 0 8px;
43253
43596
  font-weight: bold;
43254
43597
  }
43255
- .cn-notif-prefs__grid[data-v-2a94b3e4] {
43598
+ .cn-notif-prefs__grid[data-v-c746b496] {
43256
43599
  display: grid;
43257
43600
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
43258
43601
  gap: 8px;
43259
43602
  }
43260
- .cn-notif-prefs__card[data-v-2a94b3e4] {
43603
+ .cn-notif-prefs__card[data-v-c746b496] {
43261
43604
  display: flex;
43262
43605
  flex-direction: column;
43263
43606
  align-items: flex-start;
@@ -43384,6 +43727,80 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
43384
43727
  }
43385
43728
 
43386
43729
 
43730
+ .cn-user-settings-dialog__body[data-v-8ebfd3c8] {
43731
+ display: flex;
43732
+ flex-wrap: wrap;
43733
+ gap: 0 24px;
43734
+ }
43735
+ .cn-user-settings-dialog__nav[data-v-8ebfd3c8] {
43736
+ flex: 0 0 200px;
43737
+ width: 200px;
43738
+ padding-top: 18px;
43739
+ }
43740
+ .cn-user-settings-dialog__nav ul[data-v-8ebfd3c8] {
43741
+ display: flex;
43742
+ flex-direction: column;
43743
+ gap: 2px;
43744
+ margin: 0;
43745
+ padding: 0;
43746
+ list-style: none;
43747
+ }
43748
+ .cn-user-settings-dialog__nav-link[data-v-8ebfd3c8] {
43749
+ display: flex;
43750
+ align-items: center;
43751
+ gap: 10px;
43752
+ min-height: 40px;
43753
+ padding: 0 12px;
43754
+ border-radius: var(--border-radius-element, 8px);
43755
+ font-size: 15px;
43756
+ color: var(--color-main-text);
43757
+ text-decoration: none;
43758
+ }
43759
+ .cn-user-settings-dialog__nav-link[data-v-8ebfd3c8]:hover {
43760
+ background: var(--color-background-hover);
43761
+ }
43762
+ .cn-user-settings-dialog__nav-link[data-v-8ebfd3c8]:focus-visible {
43763
+ outline: 2px solid var(--color-primary-element);
43764
+ outline-offset: 2px;
43765
+ }
43766
+ .cn-user-settings-dialog__nav-link--active[data-v-8ebfd3c8],
43767
+ .cn-user-settings-dialog__nav-link--active[data-v-8ebfd3c8]:hover {
43768
+ background: var(--color-primary-element-light);
43769
+ color: var(--color-primary-element-light-text);
43770
+ font-weight: 600;
43771
+ }
43772
+ .cn-user-settings-dialog__nav-icon[data-v-8ebfd3c8] {
43773
+ display: inline-flex;
43774
+ flex: none;
43775
+ width: 18px;
43776
+ height: 18px;
43777
+ align-items: center;
43778
+ justify-content: center;
43779
+ }
43780
+ .cn-user-settings-dialog__sections[data-v-8ebfd3c8] {
43781
+ display: flex;
43782
+ flex: 1 1 380px;
43783
+ flex-direction: column;
43784
+ min-width: 0;
43785
+ }
43786
+ .cn-user-settings-dialog__sections[data-v-8ebfd3c8] .app-settings-section {
43787
+ margin: 0;
43788
+ padding: 18px 0;
43789
+ border-top: 1px solid var(--color-border);
43790
+ }
43791
+ .cn-user-settings-dialog__sections[data-v-8ebfd3c8] .app-settings-section__name {
43792
+ margin: 0 0 12px;
43793
+ font-size: 17px;
43794
+ font-weight: 700;
43795
+ }
43796
+ .cn-user-settings-dialog__note[data-v-8ebfd3c8] {
43797
+ flex: 1 1 auto;
43798
+ margin: 0;
43799
+ font-size: 14px;
43800
+ color: var(--color-text-maxcontrast);
43801
+ }
43802
+
43803
+
43387
43804
  /* The environment banner runs along the top of the shell and cannot scroll away; the shell makes room for it. */
43388
43805
  .cn-app-root--with-environment {
43389
43806
  position: relative;
@@ -43678,51 +44095,6 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
43678
44095
  }
43679
44096
 
43680
44097
 
43681
- .cn-features-tab__grid[data-v-f4a6fe92] {
43682
- display: grid;
43683
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
43684
- gap: 16px;
43685
- }
43686
- .cn-features-tab__card[data-v-f4a6fe92] {
43687
- display: flex;
43688
- flex-direction: column;
43689
- gap: 8px;
43690
- padding: 16px;
43691
- background: var(--color-main-background);
43692
- border: 1px solid var(--color-border);
43693
- border-radius: var(--border-radius-large, 12px);
43694
- transition: border-color 120ms ease, box-shadow 120ms ease;
43695
- }
43696
- .cn-features-tab__card[data-v-f4a6fe92]:hover {
43697
- border-color: var(--color-primary-element);
43698
- box-shadow: 0 2px 8px var(--color-box-shadow, rgba(0, 0, 0, 0.08));
43699
- }
43700
- .cn-features-tab__title[data-v-f4a6fe92] {
43701
- margin: 0;
43702
- font-size: 1.05em;
43703
- color: var(--color-main-text);
43704
- }
43705
- .cn-features-tab__summary[data-v-f4a6fe92] {
43706
- margin: 0;
43707
- color: var(--color-text-light);
43708
- font-size: 0.95em;
43709
- line-height: 1.4;
43710
- flex: 1;
43711
- }
43712
- .cn-features-tab__link[data-v-f4a6fe92] {
43713
- display: inline-flex;
43714
- align-items: center;
43715
- gap: 4px;
43716
- color: var(--color-primary-element);
43717
- text-decoration: none;
43718
- font-size: 0.9em;
43719
- margin-top: auto;
43720
- }
43721
- .cn-features-tab__link[data-v-f4a6fe92]:hover {
43722
- text-decoration: underline;
43723
- }
43724
-
43725
-
43726
44098
  .cn-roadmap-item[data-v-f352eb12] {
43727
44099
  display: flex;
43728
44100
  flex-direction: column;
@@ -43823,34 +44195,442 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
43823
44195
  }
43824
44196
 
43825
44197
 
43826
- .cn-roadmap-tab__grid[data-v-67050643] {
44198
+ .cn-roadmap-tab__grid[data-v-732ef80f] {
43827
44199
  display: grid;
43828
44200
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
43829
44201
  gap: 16px;
43830
44202
  }
43831
- .cn-roadmap-tab__card[data-v-67050643] {
44203
+ .cn-roadmap-tab__card[data-v-732ef80f] {
43832
44204
  background: var(--color-main-background);
43833
44205
  border: 1px solid var(--color-border);
43834
44206
  border-radius: var(--border-radius-large, 12px);
43835
44207
  transition: border-color 120ms ease, box-shadow 120ms ease;
43836
44208
  }
43837
- .cn-roadmap-tab__card[data-v-67050643]:hover {
44209
+ .cn-roadmap-tab__card[data-v-732ef80f]:hover {
43838
44210
  border-color: var(--color-primary-element);
43839
44211
  box-shadow: 0 2px 8px var(--color-box-shadow, rgba(0, 0, 0, 0.08));
43840
44212
  }
43841
- .cn-roadmap-tab__loading[data-v-67050643] {
44213
+ .cn-roadmap-tab__loading[data-v-732ef80f] {
43842
44214
  display: flex;
43843
44215
  justify-content: center;
43844
44216
  padding: 32px;
43845
44217
  }
43846
44218
 
43847
44219
 
43848
- .cn-features-and-roadmap-view[data-v-191ea8ba] {
44220
+ .cn-features-board[data-v-f306c9ee] {
44221
+ box-sizing: border-box;
44222
+ display: flex;
44223
+ flex-direction: column;
44224
+ gap: var(--cn-board-section-gap, 20px);
44225
+ padding: var(--cn-board-content-padding, 24px 28px);
44226
+ max-width: 1240px;
44227
+ width: 100%;
44228
+ }
44229
+ .cn-features-board__header[data-v-f306c9ee] {
44230
+ display: flex;
44231
+ flex-direction: column;
44232
+ gap: 6px;
44233
+ padding: 4px 0 8px;
44234
+ }
44235
+ .cn-features-board__title-row[data-v-f306c9ee] {
44236
+ display: flex;
44237
+ flex-wrap: wrap;
44238
+ justify-content: space-between;
44239
+ align-items: flex-start;
44240
+ gap: 12px 24px;
44241
+ }
44242
+ .cn-features-board__title[data-v-f306c9ee] {
44243
+ flex: 1 1 320px;
44244
+ min-width: 0;
44245
+ margin: 0;
44246
+ font-size: 28px;
44247
+ font-weight: 700;
44248
+ line-height: 1.2;
44249
+ }
44250
+ .cn-features-board__header-actions[data-v-f306c9ee] {
44251
+ flex: none;
44252
+ display: flex;
44253
+ flex-wrap: wrap;
44254
+ align-items: center;
44255
+ gap: 10px;
44256
+ }
44257
+ .cn-features-board__subtitle[data-v-f306c9ee] {
44258
+ margin: 0;
44259
+ font-size: 15px;
44260
+ color: var(--color-text-maxcontrast);
44261
+ }
44262
+ .cn-features-board__tab-row[data-v-f306c9ee] {
44263
+ display: flex;
44264
+ align-items: flex-end;
44265
+ gap: 8px;
44266
+ margin-bottom: calc(-1 * var(--cn-board-section-gap, 20px));
44267
+ }
44268
+ .cn-features-board__tabs[data-v-f306c9ee] {
44269
+ display: flex;
44270
+ flex-wrap: wrap;
44271
+ gap: 4px;
44272
+ flex: 1 1 auto;
44273
+ min-width: 0;
44274
+ }
44275
+ .cn-features-board__tab[data-v-f306c9ee] {
44276
+ display: inline-flex;
44277
+ align-items: center;
44278
+ box-sizing: border-box;
44279
+ min-height: 34px;
44280
+ margin: 0 0 -1px;
44281
+ padding: 8px 12px;
44282
+ border: 1px solid var(--cn-board-hairline, var(--color-border));
44283
+ border-bottom: none;
44284
+ border-radius: 8px 8px 0 0;
44285
+ background: var(--color-background-dark);
44286
+ color: var(--color-main-text);
44287
+ font-size: 14px;
44288
+ font-weight: 400;
44289
+ cursor: pointer;
44290
+ white-space: nowrap;
44291
+ }
44292
+ .cn-features-board__tab--active[data-v-f306c9ee] {
44293
+ position: relative;
44294
+ background: var(--color-main-background);
44295
+ border-bottom: 1px solid var(--color-main-background);
44296
+ font-weight: 700;
44297
+ }
44298
+ .cn-features-board__tab-actions[data-v-f306c9ee] {
44299
+ flex: none;
44300
+ align-self: flex-start;
44301
+ margin: 0 8px 8px 0;
44302
+ }
44303
+ .cn-features-board__panel[data-v-f306c9ee] {
44304
+ display: flex;
44305
+ flex-direction: column;
44306
+ gap: 22px;
44307
+ }
44308
+ .cn-features-board__panel--tabbed[data-v-f306c9ee] {
44309
+ padding: 22px;
44310
+ border: 1px solid var(--color-border);
44311
+ border-radius: 0 var(--cn-board-card-radius, 12px) var(--cn-board-card-radius, 12px) var(--cn-board-card-radius, 12px);
44312
+ background: var(--color-main-background);
44313
+ }
44314
+ .cn-features-board__filter[data-v-f306c9ee] {
44315
+ display: flex;
44316
+ flex-wrap: wrap;
44317
+ align-items: center;
44318
+ gap: 8px;
44319
+ }
44320
+ .cn-features-board__filter-option[data-v-f306c9ee] {
44321
+ display: inline-flex;
44322
+ align-items: center;
44323
+ gap: 8px;
44324
+ margin: 0;
44325
+ font-size: 14px;
44326
+ font-weight: 600;
44327
+ cursor: pointer;
44328
+ }
44329
+ .cn-features-board__filter--chips .cn-features-board__filter-option[data-v-f306c9ee] {
44330
+ height: 36px;
44331
+ padding: 0 14px;
44332
+ border: 1px solid var(--color-border-dark);
44333
+ border-radius: 18px;
44334
+ background: var(--color-main-background);
44335
+ color: var(--color-main-text);
44336
+ }
44337
+ .cn-features-board__filter--chips .cn-features-board__filter-option--active[data-v-f306c9ee] {
44338
+ border-color: var(--color-main-text);
44339
+ background: var(--color-main-text);
44340
+ color: var(--color-main-background);
44341
+ }
44342
+ .cn-features-board__filter-count[data-v-f306c9ee] {
44343
+ font-weight: 400;
44344
+ color: var(--color-text-maxcontrast);
44345
+ }
44346
+ .cn-features-board__filter--chips .cn-features-board__filter-option--active .cn-features-board__filter-count[data-v-f306c9ee] {
44347
+ color: var(--color-border-dark);
44348
+ }
44349
+ .cn-features-board__filter--segmented[data-v-f306c9ee] {
44350
+ display: inline-flex;
44351
+ align-self: flex-start;
44352
+ gap: 2px;
44353
+ padding: 3px;
44354
+ border-radius: 8px;
44355
+ background: var(--color-background-dark);
44356
+ }
44357
+ .cn-features-board__filter--segmented .cn-features-board__filter-option[data-v-f306c9ee] {
44358
+ height: 34px;
44359
+ padding: 0 14px;
44360
+ border: 0;
44361
+ border-radius: 6px;
44362
+ background: transparent;
44363
+ color: var(--color-main-text);
44364
+ }
44365
+ .cn-features-board__filter--segmented .cn-features-board__filter-option--active[data-v-f306c9ee] {
44366
+ background: var(--color-main-background);
44367
+ box-shadow: 0 1px 2px rgba(27, 28, 29, 0.12);
44368
+ }
44369
+ .cn-features-board__body[data-v-f306c9ee] {
44370
+ display: flex;
44371
+ flex-wrap: wrap;
44372
+ align-items: flex-start;
44373
+ gap: 24px;
44374
+ }
44375
+ .cn-features-board__groups[data-v-f306c9ee] {
44376
+ flex: 999 1 520px;
44377
+ min-width: 0;
44378
+ display: flex;
44379
+ flex-direction: column;
44380
+ gap: 26px;
44381
+ }
44382
+ .cn-features-board__groups--rows[data-v-f306c9ee] {
44383
+ display: grid;
44384
+ grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
44385
+ gap: 20px;
44386
+ }
44387
+ .cn-features-board__group[data-v-f306c9ee] {
44388
+ display: flex;
44389
+ flex-direction: column;
44390
+ gap: 12px;
44391
+ max-width: none;
44392
+ margin: 0;
44393
+ }
44394
+ .cn-features-board__groups--rows .cn-features-board__group[data-v-f306c9ee] {
44395
+ padding: var(--cn-board-card-padding, 20px 22px);
44396
+ border: 1px solid var(--color-border);
44397
+ border-radius: var(--cn-board-card-radius, 12px);
44398
+ background: var(--color-main-background);
44399
+ }
44400
+ .cn-features-board__group-head[data-v-f306c9ee] {
44401
+ display: flex;
44402
+ flex-wrap: wrap;
44403
+ align-items: baseline;
44404
+ gap: 10px;
44405
+ }
44406
+ .cn-features-board__group-title[data-v-f306c9ee] {
44407
+ margin: 0;
44408
+ font-size: 18px;
44409
+ font-weight: 700;
44410
+ }
44411
+ .cn-features-board__groups--rows .cn-features-board__group-title[data-v-f306c9ee] {
44412
+ font-size: 17px;
44413
+ }
44414
+ .cn-features-board__group-caption[data-v-f306c9ee] {
44415
+ font-size: 13px;
44416
+ color: var(--color-text-maxcontrast);
44417
+ }
44418
+ .cn-features-board__cards[data-v-f306c9ee] {
44419
+ display: grid;
44420
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
44421
+ gap: 16px;
44422
+ }
44423
+ .cn-features-board__card[data-v-f306c9ee] {
44424
+ display: flex;
44425
+ flex-direction: column;
44426
+ gap: 10px;
44427
+ padding: 18px;
44428
+ border: 1px solid var(--color-border);
44429
+ border-radius: var(--cn-board-card-radius, 12px);
44430
+ background: var(--color-main-background);
44431
+ }
44432
+ .cn-features-board__card-head[data-v-f306c9ee] {
44433
+ display: flex;
44434
+ flex-direction: column;
44435
+ align-items: flex-start;
44436
+ gap: 4px;
44437
+ }
44438
+ .cn-features-board__card-title[data-v-f306c9ee] {
44439
+ margin: 0;
44440
+ font-size: 17px;
44441
+ font-weight: 700;
44442
+ line-height: 1.3;
44443
+ }
44444
+ .cn-features-board__card-summary[data-v-f306c9ee] {
44445
+ margin: 0;
44446
+ font-size: 14px;
44447
+ color: var(--color-main-text);
44448
+ }
44449
+ .cn-features-board__card-footer[data-v-f306c9ee] {
44450
+ display: flex;
44451
+ justify-content: flex-end;
44452
+ align-items: center;
44453
+ min-height: 34px;
44454
+ margin-top: auto;
44455
+ padding-top: 10px;
44456
+ border-top: 1px solid var(--color-background-dark);
44457
+ }
44458
+ .cn-features-board__read-more[data-v-f306c9ee] {
44459
+ display: inline-flex;
44460
+ align-items: center;
44461
+ height: 34px;
44462
+ padding: 0 12px;
44463
+ border: 1px solid var(--color-border-dark);
44464
+ border-radius: 8px;
44465
+ background: var(--color-main-background);
44466
+ color: var(--color-main-text);
44467
+ font-size: 14px;
44468
+ font-weight: 600;
44469
+ text-decoration: none;
44470
+ }
44471
+ .cn-features-board__rows[data-v-f306c9ee] {
44472
+ display: flex;
44473
+ flex-direction: column;
44474
+ margin: 0;
44475
+ padding: 0;
44476
+ list-style: none;
44477
+ }
44478
+ .cn-features-board__row[data-v-f306c9ee] {
44479
+ display: flex;
44480
+ flex-wrap: wrap;
44481
+ align-items: center;
44482
+ gap: 6px 16px;
44483
+ padding: 10px 0;
44484
+ border-top: 1px solid var(--color-background-dark);
44485
+ }
44486
+ .cn-features-board__row-text[data-v-f306c9ee] {
44487
+ flex: 1 1 240px;
44488
+ min-width: 0;
44489
+ display: flex;
44490
+ flex-direction: column;
44491
+ gap: 2px;
44492
+ }
44493
+ .cn-features-board__row-title[data-v-f306c9ee] {
44494
+ font-size: 15px;
44495
+ font-weight: 500;
44496
+ }
44497
+ .cn-features-board__row-summary[data-v-f306c9ee] {
44498
+ font-size: 13px;
44499
+ color: var(--color-text-maxcontrast);
44500
+ }
44501
+ .cn-features-board__next[data-v-f306c9ee] {
44502
+ flex: 1 1 280px;
44503
+ min-width: 0;
44504
+ max-width: 340px;
44505
+ }
44506
+ .cn-features-board__next-card[data-v-f306c9ee] {
44507
+ display: flex;
44508
+ flex-direction: column;
44509
+ gap: 12px;
44510
+ padding: 18px;
44511
+ border: 1px solid var(--color-border);
44512
+ border-radius: var(--cn-board-card-radius, 12px);
44513
+ background: var(--color-background-hover);
44514
+ }
44515
+ .cn-features-board__next-head[data-v-f306c9ee] {
44516
+ display: flex;
44517
+ align-items: center;
44518
+ gap: 8px;
44519
+ }
44520
+ .cn-features-board__next-title[data-v-f306c9ee] {
44521
+ margin: 0;
44522
+ font-size: 18px;
44523
+ font-weight: 700;
44524
+ }
44525
+ .cn-features-board__next-lead[data-v-f306c9ee] {
44526
+ margin: 0;
44527
+ font-size: 14px;
44528
+ color: var(--color-text-maxcontrast);
44529
+ }
44530
+ .cn-features-board__next-list[data-v-f306c9ee] {
44531
+ display: flex;
44532
+ flex-direction: column;
44533
+ gap: 10px;
44534
+ margin: 0;
44535
+ padding: 0;
44536
+ list-style: none;
44537
+ }
44538
+ .cn-features-board__next-item[data-v-f306c9ee] {
44539
+ display: flex;
44540
+ flex-direction: column;
44541
+ gap: 6px;
44542
+ padding: 12px 14px;
44543
+ border: 1px solid var(--color-border);
44544
+ border-radius: 10px;
44545
+ background: var(--color-main-background);
44546
+ }
44547
+ .cn-features-board__next-link[data-v-f306c9ee] {
44548
+ font-size: 15px;
44549
+ font-weight: 600;
44550
+ line-height: 1.3;
44551
+ color: var(--color-main-text);
44552
+ text-decoration: none;
44553
+ }
44554
+ .cn-features-board__next-meta[data-v-f306c9ee] {
44555
+ display: flex;
44556
+ flex-wrap: wrap;
44557
+ align-items: center;
44558
+ gap: 8px;
44559
+ font-size: 13px;
44560
+ color: var(--color-text-maxcontrast);
44561
+ }
44562
+ .cn-features-board__next-opened[data-v-f306c9ee] {
44563
+ display: inline-flex;
44564
+ align-items: center;
44565
+ gap: 4px;
44566
+ }
44567
+ .cn-features-board__next-more[data-v-f306c9ee] {
44568
+ display: inline-flex;
44569
+ align-items: center;
44570
+ gap: 4px;
44571
+ font-size: 14px;
44572
+ font-weight: 600;
44573
+ }
44574
+ .cn-features-board__empty[data-v-f306c9ee] {
44575
+ margin: 0;
44576
+ color: var(--color-text-maxcontrast);
44577
+ }
44578
+ .cn-features-board__notice[data-v-f306c9ee] {
44579
+ margin: 0;
44580
+ }
44581
+
44582
+
44583
+ .cn-features-tab__grid[data-v-f4a6fe92] {
44584
+ display: grid;
44585
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
44586
+ gap: 16px;
44587
+ }
44588
+ .cn-features-tab__card[data-v-f4a6fe92] {
44589
+ display: flex;
44590
+ flex-direction: column;
44591
+ gap: 8px;
44592
+ padding: 16px;
44593
+ background: var(--color-main-background);
44594
+ border: 1px solid var(--color-border);
44595
+ border-radius: var(--border-radius-large, 12px);
44596
+ transition: border-color 120ms ease, box-shadow 120ms ease;
44597
+ }
44598
+ .cn-features-tab__card[data-v-f4a6fe92]:hover {
44599
+ border-color: var(--color-primary-element);
44600
+ box-shadow: 0 2px 8px var(--color-box-shadow, rgba(0, 0, 0, 0.08));
44601
+ }
44602
+ .cn-features-tab__title[data-v-f4a6fe92] {
44603
+ margin: 0;
44604
+ font-size: 1.05em;
44605
+ color: var(--color-main-text);
44606
+ }
44607
+ .cn-features-tab__summary[data-v-f4a6fe92] {
44608
+ margin: 0;
44609
+ color: var(--color-text-light);
44610
+ font-size: 0.95em;
44611
+ line-height: 1.4;
44612
+ flex: 1;
44613
+ }
44614
+ .cn-features-tab__link[data-v-f4a6fe92] {
44615
+ display: inline-flex;
44616
+ align-items: center;
44617
+ gap: 4px;
44618
+ color: var(--color-primary-element);
44619
+ text-decoration: none;
44620
+ font-size: 0.9em;
44621
+ margin-top: auto;
44622
+ }
44623
+ .cn-features-tab__link[data-v-f4a6fe92]:hover {
44624
+ text-decoration: underline;
44625
+ }
44626
+
44627
+
44628
+ .cn-features-and-roadmap-view[data-v-f19c0cb4] {
43849
44629
  max-width: 1200px;
43850
44630
  margin: 0 auto;
43851
44631
  padding: 24px 16px;
43852
44632
  }
43853
- .cn-features-and-roadmap-view__header[data-v-191ea8ba] {
44633
+ .cn-features-and-roadmap-view__header[data-v-f19c0cb4] {
43854
44634
  display: flex;
43855
44635
  align-items: center;
43856
44636
  justify-content: space-between;
@@ -43862,29 +44642,29 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
43862
44642
  room. Only the HEADER shifts right — the panel below keeps full width. */
43863
44643
  padding-inline-start: 56px;
43864
44644
  }
43865
- .cn-features-and-roadmap-view__title[data-v-191ea8ba] {
44645
+ .cn-features-and-roadmap-view__title[data-v-f19c0cb4] {
43866
44646
  font-size: 1.4em;
43867
44647
  margin: 0;
43868
44648
  color: var(--color-main-text);
43869
44649
  }
43870
- .cn-features-and-roadmap-view__actions[data-v-191ea8ba] {
44650
+ .cn-features-and-roadmap-view__actions[data-v-f19c0cb4] {
43871
44651
  display: flex;
43872
44652
  gap: 8px;
43873
44653
  align-items: center;
43874
44654
  flex-wrap: wrap;
43875
44655
  }
43876
- .cn-features-and-roadmap-view__panel[data-v-191ea8ba] {
44656
+ .cn-features-and-roadmap-view__panel[data-v-f19c0cb4] {
43877
44657
  min-height: 320px;
43878
44658
  }
43879
44659
 
43880
44660
  /* Underline the inline docs URL so it reads as a link inside the note
43881
44661
  body — NcNoteCard's default link styling drops the underline by
43882
44662
  inheriting from the host theme. */
43883
- .cn-features-and-roadmap-view__docs-note[data-v-191ea8ba] a {
44663
+ .cn-features-and-roadmap-view__docs-note[data-v-f19c0cb4] a {
43884
44664
  color: var(--color-primary-element);
43885
44665
  text-decoration: underline;
43886
44666
  }
43887
- .cn-features-and-roadmap-view__docs-note[data-v-191ea8ba] a:hover {
44667
+ .cn-features-and-roadmap-view__docs-note[data-v-f19c0cb4] a:hover {
43888
44668
  text-decoration: underline;
43889
44669
  opacity: 0.85;
43890
44670
  }