@conduction/nextcloud-vue 2.61.0 → 2.63.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 (186) hide show
  1. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue.js +10 -0
  2. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue.js.map +1 -0
  3. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue2.js +189 -0
  4. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue2.js.map +1 -0
  5. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue3.js +72 -0
  6. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue3.js.map +1 -0
  7. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +394 -27
  8. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
  9. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
  10. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +99 -9
  11. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  12. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +39 -18
  13. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  14. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +79 -2
  15. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
  16. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js +38 -25
  17. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
  18. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue2.js +21 -1
  19. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue2.js.map +1 -1
  20. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue3.js +4 -1
  21. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue3.js.map +1 -1
  22. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue2.js.map +1 -1
  23. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue3.js +53 -37
  24. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue3.js.map +1 -1
  25. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +30 -6
  26. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  27. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +2 -2
  28. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  29. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue.js +10 -0
  30. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue.js.map +1 -0
  31. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue2.js +293 -0
  32. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue2.js.map +1 -0
  33. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue3.js +189 -0
  34. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue3.js.map +1 -0
  35. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +256 -23
  36. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  37. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +119 -51
  38. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  39. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  40. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +2 -1
  41. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  42. package/dist/esm/components/CnFieldHelper/CnFieldHelper.vue2.js +3 -1
  43. package/dist/esm/components/CnFieldHelper/CnFieldHelper.vue2.js.map +1 -1
  44. package/dist/esm/components/CnFieldHelper/CnFieldHelper.vue3.js +1 -1
  45. package/dist/esm/components/CnFieldHelper/CnFieldHelper.vue3.js.map +1 -1
  46. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +234 -9
  47. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  48. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +96 -57
  49. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  50. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +51 -2
  51. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  52. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +5 -1
  53. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  54. package/dist/esm/components/CnIndexPage/selfModeActions.js +3 -3
  55. package/dist/esm/components/CnIndexPage/selfModeActions.js.map +1 -1
  56. package/dist/esm/components/CnLinkCardsPage/CnLinkCardsPage.vue2.js.map +1 -1
  57. package/dist/esm/components/CnLinkCardsPage/CnLinkCardsPage.vue3.js.map +1 -1
  58. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +36 -1
  59. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  60. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +4 -1
  61. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  62. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +53 -0
  63. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  64. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +22 -5
  65. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  66. package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js.map +1 -1
  67. package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js.map +1 -1
  68. package/dist/esm/components/CnResourceSelect/CnResourceSelect.vue2.js +121 -12
  69. package/dist/esm/components/CnResourceSelect/CnResourceSelect.vue2.js.map +1 -1
  70. package/dist/esm/components/CnResourceSelect/CnResourceSelect.vue3.js +3 -1
  71. package/dist/esm/components/CnResourceSelect/CnResourceSelect.vue3.js.map +1 -1
  72. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js +326 -1
  73. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js.map +1 -1
  74. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js +112 -26
  75. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js.map +1 -1
  76. package/dist/esm/components/CnStorePage/CnStorePage.vue2.js.map +1 -1
  77. package/dist/esm/components/CnStorePage/CnStorePage.vue3.js.map +1 -1
  78. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue.js +10 -0
  79. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue.js.map +1 -0
  80. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js +337 -0
  81. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js.map +1 -0
  82. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js +102 -0
  83. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js.map +1 -0
  84. package/dist/esm/components/CnTimelineWidget/dashboardRegistration.js +34 -0
  85. package/dist/esm/components/CnTimelineWidget/dashboardRegistration.js.map +1 -0
  86. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js +131 -8
  87. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js.map +1 -1
  88. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue3.js +40 -38
  89. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue3.js.map +1 -1
  90. package/dist/esm/components/CnWidgetGrid/builtInWidgets.js +8 -6
  91. package/dist/esm/components/CnWidgetGrid/builtInWidgets.js.map +1 -1
  92. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  93. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  94. package/dist/esm/components/CnWikiPage/CnWikiPage.vue2.js.map +1 -1
  95. package/dist/esm/components/CnWikiPage/CnWikiPage.vue3.js.map +1 -1
  96. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js +19 -0
  97. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js.map +1 -1
  98. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue3.js +1 -1
  99. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue3.js.map +1 -1
  100. package/dist/esm/composables/useDependencyCheck.js +65 -0
  101. package/dist/esm/composables/useDependencyCheck.js.map +1 -0
  102. package/dist/esm/composables/useWalkthrough.js +218 -6
  103. package/dist/esm/composables/useWalkthrough.js.map +1 -1
  104. package/dist/esm/index.js +2 -0
  105. package/dist/esm/index.js.map +1 -1
  106. package/dist/esm/l10n/en.json.js +48 -0
  107. package/dist/esm/l10n/en.json.js.map +1 -1
  108. package/dist/esm/l10n/nl.json.js +48 -0
  109. package/dist/esm/l10n/nl.json.js.map +1 -1
  110. package/dist/esm/nextcloud-vue.css +557 -9
  111. package/dist/esm/store/useObjectStore.js +8 -0
  112. package/dist/esm/store/useObjectStore.js.map +1 -1
  113. package/dist/esm/utils/columnFilters.js +311 -0
  114. package/dist/esm/utils/columnFilters.js.map +1 -0
  115. package/dist/esm/utils/groupAutocomplete.js +123 -0
  116. package/dist/esm/utils/groupAutocomplete.js.map +1 -0
  117. package/dist/esm/utils/libraryWidgetKeys.js +2 -0
  118. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  119. package/dist/esm/utils/pickerOptions.js +198 -0
  120. package/dist/esm/utils/pickerOptions.js.map +1 -0
  121. package/dist/esm/utils/schema.js +83 -7
  122. package/dist/esm/utils/schema.js.map +1 -1
  123. package/dist/esm/utils/timelineEvents.js +174 -0
  124. package/dist/esm/utils/timelineEvents.js.map +1 -0
  125. package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
  126. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  127. package/dist/esm/utils/walkthroughSignals.js +88 -0
  128. package/dist/esm/utils/walkthroughSignals.js.map +1 -0
  129. package/dist/nextcloud-vue.cjs.js +9779 -5236
  130. package/dist/nextcloud-vue.cjs.js.map +2 -2
  131. package/dist/nextcloud-vue.css +557 -9
  132. package/l10n/en.json +48 -0
  133. package/l10n/nl.json +48 -0
  134. package/package.json +3 -2
  135. package/scripts/manifest-schema-hash.js +41 -0
  136. package/scripts/record-manifest-schema-hash.js +52 -0
  137. package/src/components/CnAdminActionCard/CnAdminActionCard.vue +234 -0
  138. package/src/components/CnAdminActionCard/index.js +4 -0
  139. package/src/components/CnAppNav/CnAppNav.vue +394 -27
  140. package/src/components/CnAppRoot/CnAppRoot.vue +129 -15
  141. package/src/components/CnBannerWidget/CnBannerWidget.vue +113 -2
  142. package/src/components/CnBrandStripe/CnBrandStripe.md +16 -0
  143. package/src/components/CnBrandStripe/CnBrandStripe.vue +58 -5
  144. package/src/components/CnChoiceCards/CnChoiceCards.vue +56 -31
  145. package/src/components/CnDashboardPage/CnDashboardPage.vue +32 -8
  146. package/src/components/CnDataTable/CnColumnFilterPopover.vue +524 -0
  147. package/src/components/CnDataTable/CnDataTable.md +4 -1
  148. package/src/components/CnDataTable/CnDataTable.vue +302 -21
  149. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +2 -2
  150. package/src/components/CnFieldHelper/CnFieldHelper.vue +4 -2
  151. package/src/components/CnFormDialog/CnFormDialog.vue +290 -31
  152. package/src/components/CnIndexPage/CnIndexPage.vue +55 -2
  153. package/src/components/CnIndexPage/selfModeActions.js +3 -3
  154. package/src/components/CnLinkCardsPage/CnLinkCardsPage.vue +35 -2
  155. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +39 -1
  156. package/src/components/CnObjectSidebar/CnFilesTab.vue +65 -0
  157. package/src/components/CnReportsPage/CnReportsPage.vue +7 -0
  158. package/src/components/CnResourceSelect/CnResourceSelect.vue +123 -12
  159. package/src/components/CnSetupWizard/CnSetupWizard.vue +392 -3
  160. package/src/components/CnStorePage/CnStorePage.vue +7 -0
  161. package/src/components/CnTimelineWidget/CnTimelineWidget.vue +477 -0
  162. package/src/components/CnTimelineWidget/dashboardRegistration.js +32 -0
  163. package/src/components/CnTimelineWidget/index.js +4 -0
  164. package/src/components/CnWalkthrough/CnWalkthrough.vue +143 -10
  165. package/src/components/CnWidgetGrid/builtInWidgets.js +2 -0
  166. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  167. package/src/components/CnWikiPage/CnWikiPage.vue +7 -0
  168. package/src/components/CnWizardDialog/CnWizardDialog.vue +20 -1
  169. package/src/components/index.js +2 -0
  170. package/src/composables/useDependencyCheck.js +61 -0
  171. package/src/composables/useWalkthrough.js +217 -5
  172. package/src/css/dashboard.css +49 -0
  173. package/src/css/detail-page.css +19 -0
  174. package/src/css/table.css +82 -2
  175. package/src/index.js +2 -0
  176. package/src/public/index.js +5 -0
  177. package/src/schemas/app-manifest-v2.schema.json +23 -1
  178. package/src/store/useObjectStore.js +8 -0
  179. package/src/utils/columnFilters.js +324 -0
  180. package/src/utils/groupAutocomplete.js +119 -0
  181. package/src/utils/libraryWidgetKeys.js +2 -0
  182. package/src/utils/pickerOptions.js +194 -0
  183. package/src/utils/schema.js +83 -7
  184. package/src/utils/timelineEvents.js +171 -0
  185. package/src/utils/validateManifestV2.compiled.js +2 -2
  186. package/src/utils/walkthroughSignals.js +94 -0
@@ -325,8 +325,88 @@
325
325
  outline-offset: -2px;
326
326
  }
327
327
 
328
- /* Multi-column sort priority badge (1, 2, 3) — only rendered once more than
329
- one sort key is active; a single active sort shows the arrow alone. */
328
+ /* Header filter button (CnDataTable `filterable`). 24px hit area with the
329
+ 16px icon; the filled icon plus the primary colour marks an active filter,
330
+ so the state never rests on colour alone. */
331
+ .cn-table-header__filter {
332
+ display: inline-flex;
333
+ align-items: center;
334
+ justify-content: center;
335
+ width: 24px;
336
+ min-width: 24px;
337
+ height: 24px;
338
+ min-height: 24px;
339
+ margin: 0 0 0 4px;
340
+ padding: 0;
341
+ border: none;
342
+ border-radius: var(--border-radius, 4px);
343
+ background: transparent;
344
+ color: var(--color-text-maxcontrast);
345
+ vertical-align: middle;
346
+ cursor: pointer;
347
+ }
348
+
349
+ .cn-table-header__filter:hover {
350
+ background-color: var(--color-background-hover);
351
+ color: var(--color-main-text);
352
+ }
353
+
354
+ .cn-table-header__filter:focus-visible {
355
+ outline: 2px solid var(--color-main-text);
356
+ outline-offset: 0;
357
+ }
358
+
359
+ .cn-table-header__filter--active {
360
+ color: var(--color-primary-element);
361
+ }
362
+
363
+ /* Active header filters above the table, one removable chip each. */
364
+ .cn-data-table__filter-chips {
365
+ display: flex;
366
+ flex-wrap: wrap;
367
+ gap: 6px;
368
+ margin: 0 0 8px;
369
+ padding: 0;
370
+ list-style: none;
371
+ }
372
+
373
+ .cn-data-table__filter-chip {
374
+ display: inline-flex;
375
+ align-items: center;
376
+ gap: 4px;
377
+ padding: 2px 4px 2px 10px;
378
+ border: 1px solid var(--color-border-dark);
379
+ border-radius: var(--border-radius-pill, 16px);
380
+ background-color: var(--color-background-dark);
381
+ color: var(--color-main-text);
382
+ }
383
+
384
+ .cn-data-table__filter-chip-remove {
385
+ display: inline-flex;
386
+ align-items: center;
387
+ justify-content: center;
388
+ width: 24px;
389
+ min-width: 24px;
390
+ height: 24px;
391
+ min-height: 24px;
392
+ margin: 0;
393
+ padding: 0;
394
+ border: none;
395
+ border-radius: 50%;
396
+ background: transparent;
397
+ color: var(--color-main-text);
398
+ cursor: pointer;
399
+ }
400
+
401
+ .cn-data-table__filter-chip-remove:hover {
402
+ background-color: var(--color-background-hover);
403
+ }
404
+
405
+ .cn-data-table__filter-chip-remove:focus-visible {
406
+ outline: 2px solid var(--color-main-text);
407
+ }
408
+
409
+ /* Multi-column sort priority badge (1, 2, 3), rendered only when two or more rendered, sortable columns are sorted. */
330
410
  .cn-table-sort-badge {
331
411
  display: inline-flex;
332
412
  align-items: center;
@@ -2585,6 +2665,55 @@
2585
2665
  .cn-dashboard-list__item:hover {
2586
2666
  background: var(--color-background-hover);
2587
2667
  }
2668
+
2669
+ /* "Install <app>" placeholder in a widget whose app is missing.
2670
+ *
2671
+ * NcEmptyContent centres its content with `justify-content: center`. In a
2672
+ * two-row dashboard tile (about 150px inside an `overflow: hidden` wrapper)
2673
+ * the icon, name, description and button are taller than the tile, and plain
2674
+ * `center` overflows on BOTH sides, so the top ran out of the widget and the
2675
+ * name was cut off. `safe center` falls back to the start edge when the
2676
+ * content does not fit, the spacing is compact, and what still does not fit
2677
+ * scrolls instead of being clipped. Shared by CnDashboardPage and
2678
+ * CnDetailWidgetHost (`cn-requires-app`). The class is doubled to outrank
2679
+ * NcEmptyContent's own scoped rules (`.empty-content[data-v-…]`) whatever
2680
+ * order the stylesheets load in. */
2681
+ .cn-requires-app.cn-requires-app.empty-content,
2682
+ .cn-requires-app.cn-requires-app .empty-content {
2683
+ justify-content: safe center;
2684
+ min-height: 0;
2685
+ max-height: 100%;
2686
+ overflow: auto;
2687
+ margin: 0;
2688
+ padding: calc(2 * var(--default-grid-baseline, 4px));
2689
+ gap: var(--default-grid-baseline, 4px);
2690
+ box-sizing: border-box;
2691
+ }
2692
+
2693
+ .cn-requires-app.cn-requires-app .empty-content__icon {
2694
+ width: auto;
2695
+ height: auto;
2696
+ min-height: 0;
2697
+ margin: 0;
2698
+ opacity: 0.7;
2699
+ }
2700
+
2701
+ .cn-requires-app.cn-requires-app .empty-content__name {
2702
+ margin: 0;
2703
+ font-size: var(--default-font-size, 15px);
2704
+ font-weight: 600;
2705
+ text-align: center;
2706
+ }
2707
+
2708
+ .cn-requires-app.cn-requires-app .empty-content__description {
2709
+ margin: 0;
2710
+ text-align: center;
2711
+ font-size: 0.9em;
2712
+ }
2713
+
2714
+ .cn-requires-app.cn-requires-app .empty-content__action {
2715
+ margin-top: var(--default-grid-baseline, 4px);
2716
+ }
2588
2717
  /* ========================================
2589
2718
  @conduction/nextcloud-vue — CnDetailPage Styles
2590
2719
  ======================================== */
@@ -2693,6 +2822,25 @@
2693
2822
  flex-shrink: 0;
2694
2823
  }
2695
2824
 
2825
+ /* Every control in the header sits on one line at one height. The lifecycle
2826
+ bar carries `margin: 0 0 8px` for its place above a page body; in the
2827
+ header that margin pushed its buttons up and made the row 8px taller, so
2828
+ the Edit button beside it read as the bigger one. A consumer's actions
2829
+ component can bring its own margins too, so they are reset here as well. */
2830
+ .cn-detail-page .cn-detail-page__header-actions .cn-lifecycle-actions {
2831
+ margin: 0;
2832
+ flex-wrap: nowrap;
2833
+ }
2834
+
2835
+ .cn-detail-page .cn-detail-page__header-actions > * {
2836
+ margin-block: 0;
2837
+ }
2838
+
2839
+ .cn-detail-page .cn-detail-page__header-actions .button-vue {
2840
+ min-height: var(--default-clickable-area);
2841
+ block-size: var(--default-clickable-area);
2842
+ }
2843
+
2696
2844
  /* The sentence a refused lock acquire left behind, under the locked banner. */
2697
2845
  .cn-detail-page__lock-refusal {
2698
2846
  margin: 0 0 calc(3 * var(--default-grid-baseline));
@@ -5960,6 +6108,101 @@ svg.leaflet-image-layer.leaflet-interactive path {
5960
6108
  }
5961
6109
 
5962
6110
 
6111
+ .cn-column-filter[data-v-2cb54356] {
6112
+ z-index: 10000;
6113
+ display: flex;
6114
+ flex-direction: column;
6115
+ gap: 8px;
6116
+ box-sizing: border-box;
6117
+ max-height: 60vh;
6118
+ overflow-y: auto;
6119
+ padding: 12px;
6120
+ background: var(--color-main-background);
6121
+ color: var(--color-main-text);
6122
+ border: 1px solid var(--color-border-dark);
6123
+ border-radius: var(--border-radius-large, 8px);
6124
+ box-shadow: 0 2px 8px var(--color-box-shadow);
6125
+ font-weight: normal;
6126
+ text-align: start;
6127
+ }
6128
+ .cn-column-filter__heading[data-v-2cb54356] {
6129
+ margin: 0;
6130
+ font-weight: bold;
6131
+ }
6132
+ .cn-column-filter__options[data-v-2cb54356] {
6133
+ display: flex;
6134
+ flex-direction: column;
6135
+ gap: 4px;
6136
+ margin: 0;
6137
+ padding: 0;
6138
+ border: none;
6139
+ }
6140
+ .cn-column-filter__option[data-v-2cb54356] {
6141
+ display: flex;
6142
+ align-items: center;
6143
+ gap: 8px;
6144
+ min-height: 32px;
6145
+ cursor: pointer;
6146
+ }
6147
+ .cn-column-filter__range[data-v-2cb54356] {
6148
+ display: flex;
6149
+ gap: 8px;
6150
+ }
6151
+ .cn-column-filter__field[data-v-2cb54356] {
6152
+ display: flex;
6153
+ flex: 1 1 0;
6154
+ flex-direction: column;
6155
+ gap: 4px;
6156
+ min-width: 0;
6157
+ }
6158
+ .cn-column-filter__label[data-v-2cb54356] {
6159
+ font-size: var(--font-size-small, 13px);
6160
+ color: var(--color-text-maxcontrast);
6161
+ }
6162
+ .cn-column-filter__input[data-v-2cb54356] {
6163
+ width: 100%;
6164
+ box-sizing: border-box;
6165
+ margin: 0;
6166
+ }
6167
+ .cn-column-filter__hint[data-v-2cb54356] {
6168
+ margin: 0;
6169
+ color: var(--color-text-maxcontrast);
6170
+ }
6171
+ .cn-column-filter__actions[data-v-2cb54356] {
6172
+ display: flex;
6173
+ justify-content: flex-end;
6174
+ gap: 8px;
6175
+ }
6176
+ .cn-column-filter__button[data-v-2cb54356] {
6177
+ min-height: 34px;
6178
+ padding: 0 12px;
6179
+ border: 1px solid var(--color-border-dark);
6180
+ border-radius: var(--border-radius-element, 8px);
6181
+ background: var(--color-main-background);
6182
+ color: var(--color-main-text);
6183
+ cursor: pointer;
6184
+ }
6185
+ .cn-column-filter__button--primary[data-v-2cb54356] {
6186
+ border-color: var(--color-primary-element);
6187
+ background: var(--color-primary-element);
6188
+ color: var(--color-primary-element-text);
6189
+ }
6190
+ .cn-column-filter__button[data-v-2cb54356]:focus-visible,
6191
+ .cn-column-filter__input[data-v-2cb54356]:focus-visible,
6192
+ .cn-column-filter__option input[data-v-2cb54356]:focus-visible {
6193
+ outline: 2px solid var(--color-primary-element);
6194
+ outline-offset: 2px;
6195
+ }
6196
+ .cn-column-filter__sr-only[data-v-2cb54356] {
6197
+ position: absolute;
6198
+ width: 1px;
6199
+ height: 1px;
6200
+ overflow: hidden;
6201
+ clip-path: inset(50%);
6202
+ white-space: nowrap;
6203
+ }
6204
+
6205
+
5963
6206
  .cn-fk-resolve-cell[data-v-471db666] {
5964
6207
  white-space: nowrap;
5965
6208
  overflow: hidden;
@@ -6360,8 +6603,88 @@ svg.leaflet-image-layer.leaflet-interactive path {
6360
6603
  outline-offset: -2px;
6361
6604
  }
6362
6605
 
6363
- /* Multi-column sort priority badge (1, 2, 3) — only rendered once more than
6364
- one sort key is active; a single active sort shows the arrow alone. */
6606
+ /* Header filter button (CnDataTable `filterable`). 24px hit area with the
6607
+ 16px icon; the filled icon plus the primary colour marks an active filter,
6608
+ so the state never rests on colour alone. */
6609
+ .cn-table-header__filter {
6610
+ display: inline-flex;
6611
+ align-items: center;
6612
+ justify-content: center;
6613
+ width: 24px;
6614
+ min-width: 24px;
6615
+ height: 24px;
6616
+ min-height: 24px;
6617
+ margin: 0 0 0 4px;
6618
+ padding: 0;
6619
+ border: none;
6620
+ border-radius: var(--border-radius, 4px);
6621
+ background: transparent;
6622
+ color: var(--color-text-maxcontrast);
6623
+ vertical-align: middle;
6624
+ cursor: pointer;
6625
+ }
6626
+
6627
+ .cn-table-header__filter:hover {
6628
+ background-color: var(--color-background-hover);
6629
+ color: var(--color-main-text);
6630
+ }
6631
+
6632
+ .cn-table-header__filter:focus-visible {
6633
+ outline: 2px solid var(--color-main-text);
6634
+ outline-offset: 0;
6635
+ }
6636
+
6637
+ .cn-table-header__filter--active {
6638
+ color: var(--color-primary-element);
6639
+ }
6640
+
6641
+ /* Active header filters above the table, one removable chip each. */
6642
+ .cn-data-table__filter-chips {
6643
+ display: flex;
6644
+ flex-wrap: wrap;
6645
+ gap: 6px;
6646
+ margin: 0 0 8px;
6647
+ padding: 0;
6648
+ list-style: none;
6649
+ }
6650
+
6651
+ .cn-data-table__filter-chip {
6652
+ display: inline-flex;
6653
+ align-items: center;
6654
+ gap: 4px;
6655
+ padding: 2px 4px 2px 10px;
6656
+ border: 1px solid var(--color-border-dark);
6657
+ border-radius: var(--border-radius-pill, 16px);
6658
+ background-color: var(--color-background-dark);
6659
+ color: var(--color-main-text);
6660
+ }
6661
+
6662
+ .cn-data-table__filter-chip-remove {
6663
+ display: inline-flex;
6664
+ align-items: center;
6665
+ justify-content: center;
6666
+ width: 24px;
6667
+ min-width: 24px;
6668
+ height: 24px;
6669
+ min-height: 24px;
6670
+ margin: 0;
6671
+ padding: 0;
6672
+ border: none;
6673
+ border-radius: 50%;
6674
+ background: transparent;
6675
+ color: var(--color-main-text);
6676
+ cursor: pointer;
6677
+ }
6678
+
6679
+ .cn-data-table__filter-chip-remove:hover {
6680
+ background-color: var(--color-background-hover);
6681
+ }
6682
+
6683
+ .cn-data-table__filter-chip-remove:focus-visible {
6684
+ outline: 2px solid var(--color-main-text);
6685
+ }
6686
+
6687
+ /* Multi-column sort priority badge (1, 2, 3), rendered only when two or more rendered, sortable columns are sorted. */
6365
6688
  .cn-table-sort-badge {
6366
6689
  display: inline-flex;
6367
6690
  align-items: center;
@@ -15143,6 +15466,10 @@ a.cn-xwiki-card__title[data-v-54e85fe3]:hover {
15143
15466
  font-size: 0.9em;
15144
15467
  margin-inline-end: auto;
15145
15468
  }
15469
+ .cn-form-dialog__switch-wrapper[data-v-c3eeb0a2] {
15470
+ display: flex;
15471
+ flex-direction: column;
15472
+ }
15146
15473
  .cn-form-dialog__form[data-v-c3eeb0a2] {
15147
15474
  display: flex;
15148
15475
  flex-direction: column;
@@ -17513,6 +17840,30 @@ to { background-position: -200% 0;
17513
17840
  color: inherit;
17514
17841
  }
17515
17842
 
17843
+ /* The check failed. Muted text, no fill, no severity colour: it is a note
17844
+ that something is not known, not a warning. */
17845
+ .cn-banner-widget--unchecked[data-v-3531692f] {
17846
+ box-sizing: border-box;
17847
+ margin: 0;
17848
+ padding: 8px 12px;
17849
+ color: var(--color-text-maxcontrast);
17850
+ font-size: 0.9em;
17851
+ cursor: help;
17852
+ }
17853
+
17854
+ /* The reason, for assistive technology; sighted readers get the tooltip. */
17855
+ .cn-banner-widget__unchecked-reason[data-v-3531692f] {
17856
+ position: absolute;
17857
+ width: 1px;
17858
+ height: 1px;
17859
+ margin: -1px;
17860
+ padding: 0;
17861
+ overflow: hidden;
17862
+ clip-path: inset(50%);
17863
+ white-space: nowrap;
17864
+ border: 0;
17865
+ }
17866
+
17516
17867
  /* Attention card. The severity edge is an inset shadow, so it takes no width. */
17517
17868
  .cn-banner-widget--attention[data-v-3531692f] {
17518
17869
  --cn-banner-accent: var(--color-primary-element);
@@ -18010,6 +18361,83 @@ to { background-position: -200% 0;
18010
18361
  }
18011
18362
 
18012
18363
 
18364
+ .cn-timeline-widget[data-v-621fcccf] {
18365
+ display: flex;
18366
+ flex-direction: column;
18367
+ gap: 8px;
18368
+ }
18369
+ .cn-timeline-widget__title[data-v-621fcccf] {
18370
+ margin: 0;
18371
+ font-size: var(--font-size-large, 1.1em);
18372
+ }
18373
+ .cn-timeline-widget__loading[data-v-621fcccf] {
18374
+ display: flex;
18375
+ align-items: center;
18376
+ gap: 8px;
18377
+ color: var(--color-text-maxcontrast);
18378
+ }
18379
+ .cn-timeline-widget__empty[data-v-621fcccf] {
18380
+ margin: 0;
18381
+ color: var(--color-text-maxcontrast);
18382
+ }
18383
+ .cn-timeline-widget__list[data-v-621fcccf] {
18384
+ margin: 0;
18385
+ padding: 0;
18386
+ list-style: none;
18387
+ }
18388
+ .cn-timeline-widget__event[data-v-621fcccf] {
18389
+ position: relative;
18390
+ display: flex;
18391
+ gap: 12px;
18392
+ padding-block-end: 12px;
18393
+ }
18394
+
18395
+ /* The line between dots: drawn from each dot down to the next event. */
18396
+ .cn-timeline-widget__event[data-v-621fcccf]:not(:last-child)::before {
18397
+ content: '';
18398
+ position: absolute;
18399
+ inset-block: 14px 0;
18400
+ inset-inline-start: 5px;
18401
+ border-inline-start: 2px solid var(--color-border-dark);
18402
+ }
18403
+ .cn-timeline-widget__dot[data-v-621fcccf] {
18404
+ flex: 0 0 auto;
18405
+ width: 12px;
18406
+ height: 12px;
18407
+ margin-block-start: 4px;
18408
+ border-radius: 50%;
18409
+ background-color: var(--color-primary-element);
18410
+ }
18411
+
18412
+ /* Upcoming: a hollow dot, plus the word "Upcoming" beside the date. */
18413
+ .cn-timeline-widget__event--upcoming .cn-timeline-widget__dot[data-v-621fcccf] {
18414
+ box-sizing: border-box;
18415
+ border: 2px solid var(--color-primary-element);
18416
+ background-color: var(--color-main-background);
18417
+ }
18418
+ .cn-timeline-widget__body[data-v-621fcccf] {
18419
+ min-width: 0;
18420
+ }
18421
+ .cn-timeline-widget__when[data-v-621fcccf] {
18422
+ font-size: var(--font-size-small, 13px);
18423
+ color: var(--color-text-maxcontrast);
18424
+ }
18425
+ .cn-timeline-widget__badge[data-v-621fcccf] {
18426
+ margin-inline-start: 8px;
18427
+ font-size: var(--font-size-small, 13px);
18428
+ font-weight: bold;
18429
+ color: var(--color-main-text);
18430
+ }
18431
+ .cn-timeline-widget__label[data-v-621fcccf] {
18432
+ margin: 0;
18433
+ font-weight: bold;
18434
+ }
18435
+ .cn-timeline-widget__detail[data-v-621fcccf] {
18436
+ margin: 0;
18437
+ overflow-wrap: anywhere;
18438
+ }
18439
+
18440
+
18013
18441
  .cn-object-card[data-v-6f672c8f] {
18014
18442
  display: flex;
18015
18443
  gap: 12px;
@@ -23292,6 +23720,17 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
23292
23720
  }
23293
23721
 
23294
23722
 
23723
+ .cn-admin-action-card__description[data-v-57907ee5] {
23724
+ margin: 0 0 12px;
23725
+ color: var(--color-text-maxcontrast);
23726
+ }
23727
+ .cn-admin-action-card__footer[data-v-57907ee5] {
23728
+ display: flex;
23729
+ gap: 8px;
23730
+ margin-block: 8px;
23731
+ }
23732
+
23733
+
23295
23734
  .cn-version-info__card[data-v-3dc855b2] {
23296
23735
  background: var(--color-background-hover);
23297
23736
  border: 1px solid var(--color-border);
@@ -23676,6 +24115,19 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
23676
24115
  padding: 12px;
23677
24116
  }
23678
24117
 
24118
+ .cn-choice-cards__cell[data-v-93473002] {
24119
+ display: flex;
24120
+ flex-direction: column;
24121
+ gap: 8px;
24122
+ min-inline-size: 0;
24123
+ }
24124
+
24125
+ .cn-choice-cards__actions[data-v-93473002] {
24126
+ display: flex;
24127
+ flex-direction: column;
24128
+ gap: 4px;
24129
+ }
24130
+
23679
24131
  .cn-choice-cards__option[data-v-93473002] {
23680
24132
  position: relative;
23681
24133
  display: block;
@@ -23838,6 +24290,16 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
23838
24290
  padding: 24px 0;
23839
24291
  color: var(--color-text-maxcontrast);
23840
24292
  }
24293
+ .cn-setup-load-result[data-v-75b2078b] {
24294
+ margin: 0;
24295
+ font-size: var(--font-size-small, 13px);
24296
+ }
24297
+ .cn-setup-load-result--success[data-v-75b2078b] {
24298
+ color: var(--color-success-text, var(--color-success));
24299
+ }
24300
+ .cn-setup-load-result--error[data-v-75b2078b] {
24301
+ color: var(--color-error-text, var(--color-error));
24302
+ }
23841
24303
  .cn-setup-field[data-v-75b2078b] {
23842
24304
  display: flex;
23843
24305
  flex-direction: column;
@@ -28668,6 +29130,10 @@ to {
28668
29130
  padding: 16px;
28669
29131
  pointer-events: auto;
28670
29132
  }
29133
+ .cn-walkthrough__card--docked[data-v-5691d49a] {
29134
+ inset-block-end: 16px;
29135
+ inset-inline-start: 16px;
29136
+ }
28671
29137
  .cn-walkthrough__close[data-v-5691d49a] {
28672
29138
  /* !important beats NcButton's own `position: relative`, which would otherwise
28673
29139
  leave the close button in-flow at the card's top-left. */
@@ -31815,6 +32281,13 @@ a.cn-integration-card__title[data-v-f7e9bbfa]:hover {
31815
32281
  .cn-wiki-page__header[data-v-25a3d3cf] {
31816
32282
  margin-bottom: 16px;
31817
32283
  }
32284
+
32285
+ /* Without a sidebar the title starts at the left edge of the content, under
32286
+ the Nextcloud navigation toggle button (44px wide). Clear it as CnPageHeader
32287
+ does. With a sidebar the tree sits there instead and the title is clear. */
32288
+ .cn-wiki-page:not(.cn-wiki-page--has-sidebar) .cn-wiki-page__header[data-v-25a3d3cf] {
32289
+ padding-inline-start: 56px;
32290
+ }
31818
32291
  .cn-wiki-page__title[data-v-25a3d3cf] {
31819
32292
  font-size: 1.6em;
31820
32293
  margin: 0;
@@ -31874,6 +32347,13 @@ a.cn-integration-card__title[data-v-f7e9bbfa]:hover {
31874
32347
  .cn-reports-page[data-v-41525752] {
31875
32348
  padding: 16px;
31876
32349
  }
32350
+
32351
+ /* Clear the Nextcloud navigation toggle button (44px wide, absolutely
32352
+ positioned at the left edge of .app-content) plus 12px breathing room, as
32353
+ CnPageHeader does. Only the header shifts; the body keeps the full width. */
32354
+ .cn-reports-page__header[data-v-41525752] {
32355
+ padding-inline-start: 56px;
32356
+ }
31877
32357
  .cn-reports-page__title[data-v-41525752] {
31878
32358
  margin: 0 0 4px;
31879
32359
  }
@@ -31930,6 +32410,13 @@ a.cn-integration-card__title[data-v-f7e9bbfa]:hover {
31930
32410
  padding: 16px;
31931
32411
  max-width: 1200px;
31932
32412
  }
32413
+
32414
+ /* Clear the Nextcloud navigation toggle button (44px wide, absolutely
32415
+ positioned at the left edge of .app-content) plus 12px breathing room, as
32416
+ CnPageHeader does. Only the header shifts; the body keeps the full width. */
32417
+ .cn-store-page__header[data-v-25c8171b] {
32418
+ padding-inline-start: 56px;
32419
+ }
31933
32420
  .cn-store-page__heading[data-v-25c8171b] {
31934
32421
  display: flex;
31935
32422
  flex-wrap: wrap;
@@ -32019,6 +32506,13 @@ a.cn-integration-card__title[data-v-f7e9bbfa]:hover {
32019
32506
  gap: calc(6 * var(--default-grid-baseline));
32020
32507
  padding: calc(5 * var(--default-grid-baseline));
32021
32508
  }
32509
+
32510
+ /* Clear the Nextcloud navigation toggle button (44px wide, absolutely
32511
+ positioned at the left edge of .app-content) plus 12px breathing room, as
32512
+ CnPageHeader does. Only the header shifts; the cards keep the full width. */
32513
+ .cn-link-cards-page__header[data-v-2f9a546b] {
32514
+ padding-inline-start: 56px;
32515
+ }
32022
32516
  .cn-link-cards-page__title[data-v-2f9a546b] {
32023
32517
  margin: 0 0 var(--default-grid-baseline);
32024
32518
  }
@@ -32063,11 +32557,31 @@ a.cn-integration-card__title[data-v-f7e9bbfa]:hover {
32063
32557
  gap: calc(3 * var(--default-grid-baseline));
32064
32558
  min-width: 0;
32065
32559
  padding: calc(4 * var(--default-grid-baseline));
32066
- text-decoration: none;
32560
+ transition: background-color var(--animation-quick, 100ms) ease, border-color var(--animation-quick, 100ms) ease, box-shadow var(--animation-quick, 100ms) ease;
32561
+ }
32562
+
32563
+ /* A card is a link, and it must not look like a line of prose. A theme may
32564
+ underline every link with `!important` (thematiq: `a { text-decoration:
32565
+ underline !important }`, specificity 0,0,1). Among `!important` rules the
32566
+ higher specificity wins, so this class rule has to carry it too; without it
32567
+ the label and the description both rendered underlined on a live Nextcloud. */
32568
+ .cn-link-cards-page__card[data-v-2f9a546b],
32569
+ .cn-link-cards-page__card[data-v-2f9a546b]:hover,
32570
+ .cn-link-cards-page__card[data-v-2f9a546b]:focus,
32571
+ .cn-link-cards-page__card[data-v-2f9a546b]:active {
32572
+ text-decoration: none !important;
32067
32573
  }
32574
+
32575
+ /* Hover moves the whole card: border, background and a soft lift. */
32068
32576
  .cn-link-cards-page__card[data-v-2f9a546b]:hover {
32069
32577
  background: var(--color-background-hover);
32070
32578
  border-color: var(--color-primary-element);
32579
+ box-shadow: 0 2px 6px var(--color-box-shadow);
32580
+ }
32581
+ @media (prefers-reduced-motion: reduce) {
32582
+ .cn-link-cards-page__card[data-v-2f9a546b] {
32583
+ transition: none;
32584
+ }
32071
32585
  }
32072
32586
  .cn-link-cards-page__card[data-v-2f9a546b]:focus-visible {
32073
32587
  border-color: var(--color-primary-element);
@@ -32084,8 +32598,15 @@ a.cn-integration-card__title[data-v-f7e9bbfa]:hover {
32084
32598
  gap: var(--default-grid-baseline);
32085
32599
  min-width: 0;
32086
32600
  }
32601
+
32602
+ /* The label is the card's title. Its colour is set here, on the span, because
32603
+ a theme may force its link colour on the `a` itself; an inherited link
32604
+ colour made the title read as a hyperlink. */
32087
32605
  .cn-link-cards-page__label[data-v-2f9a546b] {
32088
- font-weight: 600;
32606
+ color: var(--color-main-text);
32607
+ font-size: 1.05em;
32608
+ font-weight: 700;
32609
+ line-height: 1.3;
32089
32610
  overflow-wrap: anywhere;
32090
32611
  }
32091
32612
  .cn-link-cards-page__card-description[data-v-2f9a546b] {
@@ -33636,6 +34157,11 @@ a.cn-integration-card__title[data-v-f7e9bbfa]:hover {
33636
34157
  margin-bottom: 12px;
33637
34158
  color: var(--color-text-maxcontrast);
33638
34159
  }
34160
+ .cn-app-root__walkthrough-actions {
34161
+ display: flex;
34162
+ flex-wrap: wrap;
34163
+ gap: 8px;
34164
+ }
33639
34165
  .cn-app-root__integrations-hint {
33640
34166
  margin-bottom: 12px;
33641
34167
  color: var(--color-text-maxcontrast);
@@ -34308,15 +34834,40 @@ a.cn-integration-card__title[data-v-f7e9bbfa]:hover {
34308
34834
 
34309
34835
 
34310
34836
  .cn-brand-stripe[data-v-6fdfa763] {
34837
+ --cn-brand-stripe-first: var(--cn-brand-stripe-ratio-1, 1);
34838
+ --cn-brand-stripe-second: var(--cn-brand-stripe-ratio-2, 1);
34839
+ --cn-brand-stripe-total: calc(
34840
+ var(--cn-brand-stripe-first) + var(--cn-brand-stripe-second) + var(--cn-brand-stripe-ratio-3, 1)
34841
+ );
34842
+ --cn-brand-stripe-stop-1: calc(var(--cn-brand-stripe-first) / var(--cn-brand-stripe-total) * 100%);
34843
+ --cn-brand-stripe-stop-2: calc(
34844
+ (var(--cn-brand-stripe-first) + var(--cn-brand-stripe-second)) / var(--cn-brand-stripe-total) * 100%
34845
+ );
34846
+ --cn-brand-stripe-direction: to right;
34847
+ --cn-brand-stripe-bands: linear-gradient(
34848
+ var(--cn-brand-stripe-direction),
34849
+ var(--cn-brand-stripe-color-1, var(--color-primary-element)) 0 var(--cn-brand-stripe-stop-1),
34850
+ var(--cn-brand-stripe-color-2, var(--color-primary-element)) var(--cn-brand-stripe-stop-1) var(--cn-brand-stripe-stop-2),
34851
+ var(--cn-brand-stripe-color-3, var(--color-primary-element)) var(--cn-brand-stripe-stop-2) 100%
34852
+ );
34311
34853
  display: flex;
34312
34854
  flex: none;
34313
34855
  width: 100%;
34314
34856
  height: var(--cn-brand-stripe-height, 4px);
34857
+ background-image: var(--cn-brand-stripe-image, var(--cn-brand-stripe-bands));
34858
+ background-repeat: repeat-x;
34859
+ background-size: auto 100%;
34860
+ }
34861
+ .cn-brand-stripe--inverse[data-v-6fdfa763] {
34862
+ background-image: var(--cn-brand-stripe-image-inverse, var(--cn-brand-stripe-image, var(--cn-brand-stripe-bands)));
34315
34863
  }
34316
34864
  .cn-brand-stripe--vertical[data-v-6fdfa763] {
34865
+ --cn-brand-stripe-direction: to bottom;
34317
34866
  flex-direction: column;
34318
34867
  width: var(--cn-brand-stripe-height, 4px);
34319
34868
  height: 100%;
34869
+ background-repeat: repeat-y;
34870
+ background-size: 100% auto;
34320
34871
  }
34321
34872
  .cn-brand-stripe__band[data-v-6fdfa763] {
34322
34873
  flex-basis: 0;
@@ -34324,15 +34875,12 @@ a.cn-integration-card__title[data-v-f7e9bbfa]:hover {
34324
34875
  }
34325
34876
  .cn-brand-stripe__band--1[data-v-6fdfa763] {
34326
34877
  flex-grow: var(--cn-brand-stripe-ratio-1, 1);
34327
- background-color: var(--cn-brand-stripe-color-1, var(--color-primary-element));
34328
34878
  }
34329
34879
  .cn-brand-stripe__band--2[data-v-6fdfa763] {
34330
34880
  flex-grow: var(--cn-brand-stripe-ratio-2, 1);
34331
- background-color: var(--cn-brand-stripe-color-2, var(--color-primary-element));
34332
34881
  }
34333
34882
  .cn-brand-stripe__band--3[data-v-6fdfa763] {
34334
34883
  flex-grow: var(--cn-brand-stripe-ratio-3, 1);
34335
- background-color: var(--cn-brand-stripe-color-3, var(--color-primary-element));
34336
34884
  }
34337
34885
  @media print {
34338
34886
  .cn-brand-stripe[data-v-6fdfa763] {