@conduction/nextcloud-vue 2.84.0 → 2.85.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 (166) hide show
  1. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
  2. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +131 -3
  3. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  4. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +54 -18
  5. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  6. package/dist/esm/components/CnBoardView/CnBoardView.vue.js +1 -1
  7. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +232 -4
  8. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
  9. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +95 -51
  10. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
  11. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue.js +1 -1
  12. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +114 -0
  13. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
  14. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js +2 -2
  15. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
  16. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  17. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +45 -0
  18. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  19. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +22 -12
  20. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  21. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +23 -4
  22. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  23. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  24. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  25. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +3 -1
  26. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  27. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  28. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
  29. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +18 -5
  30. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  31. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  32. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +548 -77
  33. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  34. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +191 -82
  35. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  36. package/dist/esm/components/CnIndexPage/useSelfFetchList.js +11 -2
  37. package/dist/esm/components/CnIndexPage/useSelfFetchList.js.map +1 -1
  38. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
  39. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +95 -0
  40. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  41. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +24 -2
  42. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  43. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  44. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +70 -2
  45. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  46. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  47. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue.js +1 -1
  48. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js +67 -5
  49. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js.map +1 -1
  50. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js +181 -124
  51. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js.map +1 -1
  52. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue.js +1 -1
  53. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +5 -1
  54. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
  55. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
  56. package/dist/esm/components/CnStatWidget/CnStatWidget.vue.js +1 -1
  57. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +134 -10
  58. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  59. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +6 -2
  60. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  61. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  62. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +6 -3
  63. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  64. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  65. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js +1 -1
  66. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +140 -7
  67. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -1
  68. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js.map +1 -1
  69. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue.js +1 -1
  70. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js +37 -9
  71. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js.map +1 -1
  72. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js +6 -5
  73. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js.map +1 -1
  74. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue.js +1 -1
  75. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js +2 -1
  76. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js.map +1 -1
  77. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js.map +1 -1
  78. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js +53 -1
  79. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js.map +1 -1
  80. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js +3 -2
  81. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js.map +1 -1
  82. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue.js +1 -1
  83. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +135 -0
  84. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  85. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  86. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue.js +1 -1
  87. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +19 -0
  88. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
  89. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js +37 -19
  90. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
  91. package/dist/esm/composables/useListView.js +21 -0
  92. package/dist/esm/composables/useListView.js.map +1 -1
  93. package/dist/esm/index.js +1 -0
  94. package/dist/esm/index.js.map +1 -1
  95. package/dist/esm/l10n/en.json.js +23 -1
  96. package/dist/esm/l10n/en.json.js.map +1 -1
  97. package/dist/esm/l10n/nl.json.js +41 -1
  98. package/dist/esm/l10n/nl.json.js.map +1 -1
  99. package/dist/esm/library-style.js +1 -1
  100. package/dist/esm/nextcloud-vue.css +742 -397
  101. package/dist/esm/store/useObjectStore.js +16 -2
  102. package/dist/esm/store/useObjectStore.js.map +1 -1
  103. package/dist/esm/utils/boardColumns.js +8 -1
  104. package/dist/esm/utils/boardColumns.js.map +1 -1
  105. package/dist/esm/utils/boardReferenceColumns.js +278 -0
  106. package/dist/esm/utils/boardReferenceColumns.js.map +1 -0
  107. package/dist/esm/utils/buildManifest.js +4 -1
  108. package/dist/esm/utils/buildManifest.js.map +1 -1
  109. package/dist/esm/utils/gridStack.js +40 -1
  110. package/dist/esm/utils/gridStack.js.map +1 -1
  111. package/dist/esm/utils/humaniseKey.js +41 -0
  112. package/dist/esm/utils/humaniseKey.js.map +1 -0
  113. package/dist/esm/utils/notificationRuleLabel.js +6 -23
  114. package/dist/esm/utils/notificationRuleLabel.js.map +1 -1
  115. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  116. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  117. package/dist/esm/utils/widgetDispatch.js +8 -2
  118. package/dist/esm/utils/widgetDispatch.js.map +1 -1
  119. package/dist/nextcloud-vue.cjs.js +15075 -12590
  120. package/dist/nextcloud-vue.cjs.js.map +2 -2
  121. package/dist/nextcloud-vue.css +742 -397
  122. package/l10n/en.json +23 -1
  123. package/l10n/nl.json +41 -1
  124. package/package.json +1 -1
  125. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +160 -8
  126. package/src/components/CnBoardView/CnBoardView.vue +262 -6
  127. package/src/components/CnDashboardGrid/CnDashboardGrid.vue +116 -2
  128. package/src/components/CnDashboardPage/CnDashboardPage.vue +57 -2
  129. package/src/components/CnDetailPage/CnDetailPage.md +1 -1
  130. package/src/components/CnDetailPage/CnDetailPage.vue +23 -4
  131. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +3 -1
  132. package/src/components/CnFactsWidget/CnFactsWidget.vue +18 -5
  133. package/src/components/CnIndexPage/CnIndexPage.vue +586 -25
  134. package/src/components/CnIndexPage/useSelfFetchList.js +10 -1
  135. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +123 -3
  136. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +70 -2
  137. package/src/components/CnRegisterMapping/CnRegisterMapping.md +5 -0
  138. package/src/components/CnRegisterMapping/CnRegisterMapping.vue +231 -96
  139. package/src/components/CnSettingsPage/CnSettingsPage.vue +5 -1
  140. package/src/components/CnStatWidget/CnStatWidget.vue +136 -11
  141. package/src/components/CnTabsWidget/CnTabsWidget.vue +6 -3
  142. package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +140 -7
  143. package/src/components/CnVersionInfoCard/CnVersionInfoCard.md +2 -1
  144. package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +42 -13
  145. package/src/components/CnWeekStripWidget/CnWeekStripWidget.vue +2 -1
  146. package/src/components/CnWidgetCardGrid/CnWidgetCardGrid.vue +55 -2
  147. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +135 -0
  148. package/src/components/CnWidgetWrapper/CnWidgetWrapper.md +10 -0
  149. package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +44 -1
  150. package/src/composables/useListView.js +21 -0
  151. package/src/css/board.css +65 -4
  152. package/src/css/dialog.css +4 -2
  153. package/src/css/index-page.css +49 -0
  154. package/src/css/kpi-card.css +13 -0
  155. package/src/css/look-board.css +96 -7
  156. package/src/index.js +2 -0
  157. package/src/schemas/app-manifest-v2.schema.json +115 -5
  158. package/src/store/useObjectStore.js +16 -2
  159. package/src/utils/boardColumns.js +8 -1
  160. package/src/utils/boardReferenceColumns.js +274 -0
  161. package/src/utils/buildManifest.js +4 -1
  162. package/src/utils/gridStack.js +39 -0
  163. package/src/utils/humaniseKey.js +38 -0
  164. package/src/utils/notificationRuleLabel.js +5 -23
  165. package/src/utils/validateManifestV2.compiled.js +3 -3
  166. package/src/utils/widgetDispatch.js +8 -2
@@ -489,6 +489,7 @@
489
489
  `.cn-look-board.cn-admin-settings-shell` is a shell told `look: "board"`
490
490
  itself, on an admin page no CnAppRoot wraps. */
491
491
  .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > .cn-admin-settings-shell__header,
492
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > :not(.settings-section):not(.cn-credentials),
492
493
  .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):not(.cn-credentials),
493
494
  .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):not(.cn-credentials) {
494
495
  grid-column: 1 / -1;
@@ -496,6 +497,7 @@
496
497
 
497
498
  .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *),
498
499
  .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *),
500
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *),
499
501
  .cn-look-board .cn-settings-page__sections:not(.cn-look-nextcloud *) {
500
502
  display: grid;
501
503
  grid-template-columns: repeat(auto-fit, minmax(420px, 1fr));
@@ -507,14 +509,17 @@
507
509
  Settings.vue) takes no box of its own: its sections are grid items and
508
510
  cards, as if the shell held them directly. Only an element whose own
509
511
  children are sections; anything else keeps spanning the grid. */
512
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section),
510
513
  .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section),
511
514
  .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) {
512
515
  display: contents;
513
516
  }
514
517
 
515
- /* The card: a section of the shell (also one inside a wrapping element), or a CnSettingsCard of the page. */
518
+ /* The card: a section of the shell or of one of its tab panels (also one inside a wrapping element), or a CnSettingsCard of the page. */
519
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > .settings-section,
516
520
  .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section,
517
521
  .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section,
522
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section,
518
523
  .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section,
519
524
  .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section,
520
525
  .cn-look-board .cn-settings-page__sections:not(.cn-look-nextcloud *) > .cn-settings-card {
@@ -550,7 +555,7 @@
550
555
  justify-content: flex-start;
551
556
  text-align: start;
552
557
  margin: 0;
553
- font-size: 19px;
558
+ font-size: 17px;
554
559
  font-weight: 700;
555
560
  line-height: 1.3;
556
561
  }
@@ -558,18 +563,83 @@
558
563
  .cn-look-board .settings-section:not(.cn-look-nextcloud *) .settings-section__desc {
559
564
  margin: 4px 0 0;
560
565
  font-size: 14px;
561
- line-height: 1.45;
566
+ line-height: 1.5;
562
567
  color: var(--color-text-maxcontrast);
563
568
  }
564
569
 
565
- /* Section actions sit at the end of the title row. */
570
+ /* Section actions sit at the end of the title row. The row is a grid, so a
571
+ long title wraps beside the buttons instead of running under them, and in a
572
+ narrow card the buttons drop under the title and description. */
573
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *):has(> .cn-settings-section__actions) {
574
+ /* `!important`: the card rules above set `display: flex` at higher specificity for a section in a wrapping element. */
575
+ display: grid !important;
576
+ grid-template-columns: minmax(0, 1fr) auto;
577
+ align-items: start;
578
+ column-gap: 16px;
579
+ container-type: inline-size;
580
+ }
581
+
582
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *):has(> .cn-settings-section__actions) > * {
583
+ grid-column: 1 / -1;
584
+ }
585
+
586
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *):has(> .cn-settings-section__actions) > .settings-section__name {
587
+ grid-row: 1;
588
+ grid-column: 1;
589
+ }
590
+
566
591
  .cn-look-board .settings-section:not(.cn-look-nextcloud *) > .cn-settings-section__actions {
567
- position: absolute;
568
- inset-block-start: 22px;
569
- inset-inline-end: 24px;
592
+ grid-row: 1;
593
+ grid-column: 2;
594
+ position: static;
595
+ flex-wrap: wrap;
596
+ justify-self: end;
570
597
  float: none;
571
598
  }
572
599
 
600
+ @container (max-width: 520px) {
601
+ .cn-look-board .settings-section:not(.cn-look-nextcloud *) > .cn-settings-section__actions {
602
+ grid-row: auto;
603
+ grid-column: 1 / -1;
604
+ justify-self: start;
605
+ justify-content: flex-start;
606
+ }
607
+ }
608
+
609
+ /* An admin settings card as the board draws it (PtBeheerinstellingen,
610
+ KqBeheerAlgemeen, HuInstellingen): 20px 22px padding, and the title and
611
+ description one group, 4px apart, spaced from the rest of the card by the
612
+ card's 14px gap. The description is a sibling of the title in that column,
613
+ so it pulls itself back up to 4px under the title. The gap spaces the
614
+ content, so a note card adds no margin of its own (NcNoteCard draws 16px
615
+ above and below). A CnSettingsPage card keeps 22px 24px. */
616
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > .settings-section,
617
+ .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section,
618
+ .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section,
619
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section,
620
+ .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section,
621
+ .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section {
622
+ padding: 20px 22px;
623
+ }
624
+
625
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > .settings-section > .settings-section__desc,
626
+ .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section > .settings-section__desc,
627
+ .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section > .settings-section__desc,
628
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section > .settings-section__desc,
629
+ .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section > .settings-section__desc,
630
+ .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section > .settings-section__desc {
631
+ margin-top: -10px;
632
+ }
633
+
634
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > .settings-section > .notecard,
635
+ .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section > .notecard,
636
+ .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > .settings-section > .notecard,
637
+ .cn-look-board .cn-admin-settings-shell__panel:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section > .notecard,
638
+ .cn-look-board .cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section > .notecard,
639
+ .cn-look-board.cn-admin-settings-shell:not(.cn-look-nextcloud *) > :not(.settings-section):has(> .settings-section) > .settings-section > .notecard {
640
+ margin-block: 0;
641
+ }
642
+
573
643
  .cn-look-board .settings-section.cn-settings-section--wide:not(.cn-look-nextcloud *),
574
644
  .cn-look-board .cn-settings-card:has(.cn-settings-section--wide):not(.cn-look-nextcloud *) {
575
645
  grid-column: 1 / -1;
@@ -781,6 +851,25 @@
781
851
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__chevron {
782
852
  display: none;
783
853
  }
854
+
855
+ /* ---- Week strip (DqMijnWerk "Termijnen deze week") ---------------------- */
856
+ /* The days wrap inside the card instead of scrolling sideways: a row holds
857
+ as many days of at least 120px as the card fits, and the rest go to the
858
+ next row (dossiq at 1100 wide held 680px of days in a 494px card and
859
+ scrolled; now three days and two). 120px keeps a case title's words whole;
860
+ five 88px days fitted one row but broke "Bezwaar" mid-word. A card wide
861
+ enough for the week draws it as before, one row of equal columns. The
862
+ day's head wraps its "today" badge under the label when the day is
863
+ narrow.
864
+ @spec openspec/changes/board-week-strip-fits/specs/week-strip-board-look/spec.md#requirement-a-board-week-strip-fits-its-card */
865
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__days {
866
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 120px), 1fr));
867
+ min-width: 0;
868
+ }
869
+
870
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__head {
871
+ flex-wrap: wrap;
872
+ }
784
873
  /*
785
874
  * The board dialog (screens-dialog-parity, canon section 5).
786
875
  *
@@ -818,8 +907,10 @@
818
907
  }
819
908
 
820
909
  /* The header is ours: NcModal's own close button and NcDialog's heading give
821
- way (the heading stays as the accessible name, visually hidden). */
822
- .cn-dialog-board .modal-container__close {
910
+ way (the heading stays as the accessible name, visually hidden). The mask
911
+ class raises the rule above NcButton's `.button-vue[data-v-…]`, whose
912
+ stylesheet a spawned dialog can load after this one. */
913
+ .modal-mask.cn-dialog-board .modal-container__close {
823
914
  display: none;
824
915
  }
825
916
 
@@ -1281,19 +1372,24 @@
1281
1372
  gap: 8px;
1282
1373
  }
1283
1374
 
1284
- .cn-board-view.cn-board-view--board .cn-board-view__card-title {
1375
+ /* The title is a link drawn as a heading (board DqWerkbord): main text, no
1376
+ underline. `!important` because a theme's `a { color; text-decoration }`
1377
+ carries it (thematiq), and a bare `a` with `!important` beats any class. */
1378
+ .cn-board-view.cn-board-view--board .cn-board-view__card-title,
1379
+ .cn-board-view.cn-board-view--board .cn-board-view__card-title:visited {
1285
1380
  flex: 1 1 auto;
1286
1381
  min-width: 0;
1287
1382
  font-size: 15px;
1288
1383
  font-weight: 700;
1289
1384
  line-height: 1.3;
1290
- color: var(--color-main-text);
1291
- text-decoration: none;
1385
+ color: var(--color-main-text) !important;
1386
+ text-decoration: none !important;
1292
1387
  overflow-wrap: anywhere;
1293
1388
  }
1294
1389
 
1295
1390
  .cn-board-view.cn-board-view--board .cn-board-view__card-title:hover {
1296
- text-decoration: underline;
1391
+ color: var(--color-main-text) !important;
1392
+ text-decoration: underline !important;
1297
1393
  }
1298
1394
 
1299
1395
  .cn-board-view.cn-board-view--board .cn-board-view__card-title:focus-visible {
@@ -1452,6 +1548,62 @@
1452
1548
  outline: 2px solid var(--color-primary-element);
1453
1549
  outline-offset: 2px;
1454
1550
  }
1551
+
1552
+ /*
1553
+ * screens-board-reference-columns: a wide board wraps its columns onto more
1554
+ * rows (`config.board.wrap`), as many to a row as fit at 240px, instead of
1555
+ * one row that scrolls sideways.
1556
+ */
1557
+ .cn-board-view.cn-board-view--wrap .cn-board-view__columns {
1558
+ display: grid;
1559
+ grid-auto-flow: row;
1560
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
1561
+ overflow-x: visible;
1562
+ }
1563
+
1564
+ .cn-board-view.cn-board-view--wrap:not(.cn-board-view--board) .cn-board-view__columns {
1565
+ gap: 12px;
1566
+ }
1567
+
1568
+ /* A column the dragged card cannot reach fades; the label stays readable. */
1569
+ .cn-board-view .cn-board-view__column--unreachable {
1570
+ opacity: 0.45;
1571
+ }
1572
+
1573
+ /* The selection checkbox: in the board look's card head, before the title. */
1574
+ .cn-board-view .cn-board-view__select {
1575
+ flex: none;
1576
+ width: 16px;
1577
+ height: 16px;
1578
+ margin: 2px 0 0;
1579
+ accent-color: var(--color-primary-element);
1580
+ cursor: pointer;
1581
+ }
1582
+
1583
+ /* Board look: the board draws no checkbox. It shows on a hovered card, on a
1584
+ card holding focus (so Tab still reaches it), once anything is selected, and
1585
+ always where there is no hover. Collapsed rather than hidden, so it stays in
1586
+ the tab order. */
1587
+ @media (hover: hover) {
1588
+ .cn-board-view.cn-board-view--board:not(.cn-board-view--selecting) .cn-board-view__card:not(:hover, :focus-within) .cn-board-view__select {
1589
+ width: 0;
1590
+ margin-inline-end: -8px;
1591
+ opacity: 0;
1592
+ }
1593
+ }
1594
+
1595
+ /* A menu target the card cannot reach: still listed, greyed, with its note. */
1596
+ .cn-board-view.cn-board-view--board .cn-board-view__menu-item.cn-board-view__menu-item--blocked {
1597
+ color: var(--color-text-maxcontrast);
1598
+ cursor: not-allowed;
1599
+ }
1600
+
1601
+ .cn-board-view .cn-board-view__menu-note {
1602
+ margin-inline-start: auto;
1603
+ padding-inline-start: 12px;
1604
+ font-size: 12px;
1605
+ color: var(--color-text-maxcontrast);
1606
+ }
1455
1607
  /*
1456
1608
  * The board look for the index list and its cards (screens-index-list-parity,
1457
1609
  * screens-card-parity).
@@ -3949,6 +4101,19 @@ a.cn-kpi-card--stacked:focus-visible {
3949
4101
  color: var(--color-main-text);
3950
4102
  }
3951
4103
 
4104
+ /* A board tile whose label wraps grows into its cell instead of clipping its
4105
+ own last line. dossiq's "Afgehandeld deze maand" at 1100 wide held 129px of
4106
+ content in a 114px tile and lost its caption's bottom. The tile still fills
4107
+ a cell it fits (`min-height: 100%`), so every tile that fits keeps its
4108
+ size; one that does not takes the height of its content, and the card-fit
4109
+ cell's `safe center` keeps its top in view.
4110
+ @spec openspec/changes/board-stat-tile-grows/specs/stat-tile-board-look/spec.md#requirement-a-board-stat-tile-shows-all-its-lines */
4111
+ .cn-kpi-card--board.cn-kpi-card--stacked {
4112
+ flex: 0 0 auto;
4113
+ height: auto;
4114
+ min-height: 100%;
4115
+ }
4116
+
3952
4117
  .cn-kpi-card--board.cn-kpi-card--stacked .cn-kpi-card__caption-line,
3953
4118
  .cn-kpi-card--board.cn-kpi-card--stacked .cn-stats-block__count-label {
3954
4119
  font-size: 13px;
@@ -5154,6 +5319,19 @@ a.cn-kpi-card--board * {
5154
5319
  margin-top: 0;
5155
5320
  }
5156
5321
 
5322
+ /* The board view's footer: how many rows it holds of how many match, and
5323
+ "Load more" while the list is not complete. */
5324
+ .cn-index-page__board-load {
5325
+ display: flex;
5326
+ flex-wrap: wrap;
5327
+ align-items: center;
5328
+ justify-content: space-between;
5329
+ gap: 8px 16px;
5330
+ padding: 12px 16px;
5331
+ color: var(--color-text-maxcontrast);
5332
+ font-size: 14px;
5333
+ }
5334
+
5157
5335
  /* Table view owns both scroll axes. With the page column scrolling instead, the
5158
5336
  table's horizontal scrollbar sat at the bottom of the (taller-than-viewport)
5159
5337
  table, so it only appeared after scrolling down, and the pagination was
@@ -5419,6 +5597,42 @@ a.cn-kpi-card--board * {
5419
5597
  outline: 2px solid var(--color-primary-element);
5420
5598
  outline-offset: 2px;
5421
5599
  }
5600
+
5601
+ /*
5602
+ * screens-board-reference-columns: the board view's controls after the
5603
+ * search (board DqWerkbord): "Case type:" and "Columns:" as a 600 label and a
5604
+ * 36px select, then the hint in the secondary text colour.
5605
+ */
5606
+ .cn-index-page__board-control {
5607
+ display: inline-flex;
5608
+ align-items: center;
5609
+ gap: 8px;
5610
+ font-size: 14px;
5611
+ font-weight: 600;
5612
+ color: var(--color-main-text);
5613
+ }
5614
+
5615
+ .cn-index-page__board-select {
5616
+ height: 36px;
5617
+ min-height: 36px;
5618
+ margin: 0;
5619
+ padding: 0 10px;
5620
+ border: 1px solid var(--color-border-maxcontrast);
5621
+ border-radius: 8px;
5622
+ background-color: var(--color-main-background);
5623
+ color: var(--color-main-text);
5624
+ font: inherit;
5625
+ font-weight: 400;
5626
+ }
5627
+
5628
+ .cn-index-page__board-select--strong {
5629
+ font-weight: 500;
5630
+ }
5631
+
5632
+ .cn-index-page__board-hint {
5633
+ font-size: 14px;
5634
+ color: var(--color-text-maxcontrast);
5635
+ }
5422
5636
  /* CnIndexSidebar — NcAppSidebar wrapper styles */
5423
5637
 
5424
5638
  /* Tab content: limit height to container so overflow shows a scrollbar */
@@ -20756,7 +20970,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20756
20970
  }
20757
20971
 
20758
20972
 
20759
- .cn-widget-wrapper[data-v-64db0f38] {
20973
+ .cn-widget-wrapper[data-v-b19b1aa6] {
20760
20974
  position: relative;
20761
20975
  height: 100%;
20762
20976
  display: flex;
@@ -20770,13 +20984,13 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20770
20984
  }
20771
20985
 
20772
20986
  /* Headerless date chip — floated over the top-right of a flush card. */
20773
- .cn-widget-wrapper__floating-meta[data-v-64db0f38] {
20987
+ .cn-widget-wrapper__floating-meta[data-v-b19b1aa6] {
20774
20988
  position: absolute;
20775
20989
  top: 8px;
20776
20990
  inset-inline-end: 10px;
20777
20991
  z-index: 2;
20778
20992
  }
20779
- .cn-widget-wrapper__content[data-v-64db0f38] {
20993
+ .cn-widget-wrapper__content[data-v-b19b1aa6] {
20780
20994
  flex: 1;
20781
20995
  overflow: auto;
20782
20996
  min-height: 0;
@@ -20792,24 +21006,24 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20792
21006
  So it is structural instead. `:has()` keys on the table component's own root
20793
21007
  class, which means a table is flush by construction and no caller can
20794
21008
  reintroduce the gap by forgetting a prop. */
20795
- .cn-widget-wrapper__content[data-v-64db0f38]:has(> .cn-table-container),
20796
- .cn-widget-wrapper__content[data-v-64db0f38]:has(> .cn-widget-object-table) {
21009
+ .cn-widget-wrapper__content[data-v-b19b1aa6]:has(> .cn-table-container),
21010
+ .cn-widget-wrapper__content[data-v-b19b1aa6]:has(> .cn-widget-object-table) {
20797
21011
  padding: 0;
20798
21012
  }
20799
21013
 
20800
21014
  /* Keyboard focus ring for the now-focusable scrollable content region. */
20801
- .cn-widget-wrapper__content[data-v-64db0f38]:focus-visible {
21015
+ .cn-widget-wrapper__content[data-v-b19b1aa6]:focus-visible {
20802
21016
  outline: 2px solid var(--color-primary-element);
20803
21017
  outline-offset: -2px;
20804
21018
  }
20805
- .cn-widget-wrapper--borderless[data-v-64db0f38] {
21019
+ .cn-widget-wrapper--borderless[data-v-b19b1aa6] {
20806
21020
  border: none;
20807
21021
  background: transparent;
20808
21022
  }
20809
- .cn-widget-wrapper--borderless .cn-widget-wrapper__content[data-v-64db0f38] {
21023
+ .cn-widget-wrapper--borderless .cn-widget-wrapper__content[data-v-b19b1aa6] {
20810
21024
  padding: 0;
20811
21025
  }
20812
- .cn-widget-wrapper--flush .cn-widget-wrapper__content[data-v-64db0f38] {
21026
+ .cn-widget-wrapper--flush .cn-widget-wrapper__content[data-v-b19b1aa6] {
20813
21027
  padding: 0;
20814
21028
  }
20815
21029
 
@@ -20817,8 +21031,8 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20817
21031
  above. A dashboard renders every widget `flush`, and without this their
20818
21032
  fields touch the card's edges. Borderless and chromeless cards, and the
20819
21033
  Nextcloud dashboard variant, keep their own padding. */
20820
- .cn-widget-wrapper--flush:not(.cn-widget-wrapper--borderless, .cn-widget-wrapper--nc-dashboard) > .cn-widget-wrapper__content[data-v-64db0f38]:has(> .cn-form-widget),
20821
- .cn-widget-wrapper--flush:not(.cn-widget-wrapper--borderless, .cn-widget-wrapper--nc-dashboard) > .cn-widget-wrapper__content[data-v-64db0f38]:has(> .cn-kb-search-widget) {
21034
+ .cn-widget-wrapper--flush:not(.cn-widget-wrapper--borderless, .cn-widget-wrapper--nc-dashboard) > .cn-widget-wrapper__content[data-v-b19b1aa6]:has(> .cn-form-widget),
21035
+ .cn-widget-wrapper--flush:not(.cn-widget-wrapper--borderless, .cn-widget-wrapper--nc-dashboard) > .cn-widget-wrapper__content[data-v-b19b1aa6]:has(> .cn-kb-search-widget) {
20822
21036
  padding: 16px;
20823
21037
  }
20824
21038
 
@@ -20829,7 +21043,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20829
21043
  a square panel, which is the last visible piece of a card that is supposed
20830
21044
  to be absent. `CnDetailCard.cn-detail-card--chromeless` zeroes the same
20831
21045
  thing for the same reason. */
20832
- .cn-widget-wrapper--chromeless[data-v-64db0f38] {
21046
+ .cn-widget-wrapper--chromeless[data-v-b19b1aa6] {
20833
21047
  border-radius: 0;
20834
21048
  }
20835
21049
 
@@ -20841,7 +21055,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20841
21055
  * so users can override any token. Combined selector raises specificity above
20842
21056
  * the base `.cn-widget-wrapper` rules it supersedes.
20843
21057
  */
20844
- .cn-widget-wrapper__header[data-v-64db0f38] {
21058
+ .cn-widget-wrapper__header[data-v-b19b1aa6] {
20845
21059
  display: flex;
20846
21060
  align-items: center;
20847
21061
  justify-content: space-between;
@@ -20857,7 +21071,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20857
21071
  /* Actions with no title beside them. `header-left` is not rendered at all in
20858
21072
  this mode, and the header is `space-between`, so a single child would sit
20859
21073
  flush LEFT where every other surface puts its actions on the right. */
20860
- .cn-widget-wrapper__header--actions-only[data-v-64db0f38] {
21074
+ .cn-widget-wrapper__header--actions-only[data-v-b19b1aa6] {
20861
21075
  justify-content: flex-end;
20862
21076
  }
20863
21077
 
@@ -20873,11 +21087,11 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20873
21087
  no-descending-specificity asks for. The cascade did not need it (this
20874
21088
  selector is more specific either way), a reader does: an override written
20875
21089
  above the thing it overrides has to be read twice. */
20876
- .cn-widget-wrapper--chromeless .cn-widget-wrapper__header[data-v-64db0f38] {
21090
+ .cn-widget-wrapper--chromeless .cn-widget-wrapper__header[data-v-b19b1aa6] {
20877
21091
  border-bottom: none;
20878
21092
  padding-inline: 0;
20879
21093
  }
20880
- .cn-widget-wrapper__header-left[data-v-64db0f38] {
21094
+ .cn-widget-wrapper__header-left[data-v-b19b1aa6] {
20881
21095
  display: flex;
20882
21096
  align-items: center;
20883
21097
  gap: 8px;
@@ -20886,13 +21100,27 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20886
21100
  of centering between icon and actions (header is space-between). */
20887
21101
  flex: 1 1 auto;
20888
21102
  }
20889
- .cn-widget-wrapper__icon[data-v-64db0f38] {
21103
+ .cn-widget-wrapper__icon[data-v-b19b1aa6] {
20890
21104
  width: 24px;
20891
21105
  height: 24px;
20892
21106
  flex-shrink: 0;
20893
21107
  color: var(--cn-widget-icon-color, var(--color-primary-element));
20894
21108
  }
20895
- .cn-widget-wrapper__title[data-v-64db0f38] {
21109
+ .cn-widget-wrapper__title-stack[data-v-b19b1aa6] {
21110
+ display: flex;
21111
+ flex-direction: column;
21112
+ gap: 2px;
21113
+ min-width: 0;
21114
+ }
21115
+ .cn-widget-wrapper__eyebrow[data-v-b19b1aa6] {
21116
+ font-size: 13px;
21117
+ line-height: 1.3;
21118
+ color: var(--color-text-maxcontrast);
21119
+ white-space: nowrap;
21120
+ overflow: hidden;
21121
+ text-overflow: ellipsis;
21122
+ }
21123
+ .cn-widget-wrapper__title[data-v-b19b1aa6] {
20896
21124
  font-weight: 600;
20897
21125
  font-size: 14px;
20898
21126
  margin: 0;
@@ -20900,34 +21128,34 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20900
21128
  overflow: hidden;
20901
21129
  text-overflow: ellipsis;
20902
21130
  }
20903
- .cn-widget-wrapper.cn-widget-wrapper--nc-dashboard[data-v-64db0f38] {
21131
+ .cn-widget-wrapper.cn-widget-wrapper--nc-dashboard[data-v-b19b1aa6] {
20904
21132
  background: var(--color-main-background-blur, var(--color-main-background));
20905
21133
  -webkit-backdrop-filter: var(--filter-background-blur, none);
20906
21134
  backdrop-filter: var(--filter-background-blur, none);
20907
21135
  border: none;
20908
21136
  border-radius: var(--border-radius-container-large, 16px);
20909
21137
  }
20910
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__header[data-v-64db0f38] {
21138
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__header[data-v-b19b1aa6] {
20911
21139
  padding: 16px;
20912
21140
  border-bottom: none;
20913
21141
  }
20914
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__header-left[data-v-64db0f38] {
21142
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__header-left[data-v-b19b1aa6] {
20915
21143
  gap: 16px;
20916
21144
  }
20917
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__icon[data-v-64db0f38] {
21145
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__icon[data-v-b19b1aa6] {
20918
21146
  width: 32px;
20919
21147
  height: 32px;
20920
21148
  background-size: 32px;
20921
21149
  }
20922
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__title[data-v-64db0f38] {
21150
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__title[data-v-b19b1aa6] {
20923
21151
  font-size: 20px;
20924
21152
  font-weight: 700;
20925
21153
  line-height: 24px;
20926
21154
  }
20927
- .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__content[data-v-64db0f38] {
21155
+ .cn-widget-wrapper--nc-dashboard .cn-widget-wrapper__content[data-v-b19b1aa6] {
20928
21156
  padding: 0 16px 16px;
20929
21157
  }
20930
- .cn-widget-wrapper__title-meta[data-v-64db0f38] {
21158
+ .cn-widget-wrapper__title-meta[data-v-b19b1aa6] {
20931
21159
  display: flex;
20932
21160
  align-items: center;
20933
21161
  gap: 4px;
@@ -20936,7 +21164,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20936
21164
  white-space: nowrap;
20937
21165
  flex-shrink: 0;
20938
21166
  }
20939
- .cn-widget-wrapper__actions[data-v-64db0f38] {
21167
+ .cn-widget-wrapper__actions[data-v-b19b1aa6] {
20940
21168
  display: flex;
20941
21169
  gap: 4px;
20942
21170
  flex-shrink: 0;
@@ -20944,7 +21172,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20944
21172
 
20945
21173
  /* The header's text link (`headerLink`). Theme hooks: --cn-widget-header-link-size
20946
21174
  and --cn-widget-header-link-weight. */
20947
- .cn-widget-wrapper__header-link[data-v-64db0f38] {
21175
+ .cn-widget-wrapper__header-link[data-v-b19b1aa6] {
20948
21176
  align-self: center;
20949
21177
  padding: 0 calc(1 * var(--default-grid-baseline));
20950
21178
  color: var(--color-primary-element);
@@ -20953,11 +21181,11 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20953
21181
  text-decoration: none;
20954
21182
  white-space: nowrap;
20955
21183
  }
20956
- .cn-widget-wrapper__header-link[data-v-64db0f38]:hover,
20957
- .cn-widget-wrapper__header-link[data-v-64db0f38]:focus-visible {
21184
+ .cn-widget-wrapper__header-link[data-v-b19b1aa6]:hover,
21185
+ .cn-widget-wrapper__header-link[data-v-b19b1aa6]:focus-visible {
20958
21186
  text-decoration: underline;
20959
21187
  }
20960
- .cn-widget-wrapper__header-link[data-v-64db0f38]:focus-visible {
21188
+ .cn-widget-wrapper__header-link[data-v-b19b1aa6]:focus-visible {
20961
21189
  outline: 2px solid var(--color-primary-element);
20962
21190
  outline-offset: 2px;
20963
21191
  border-radius: var(--border-radius-small, 4px);
@@ -20968,7 +21196,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20968
21196
  wrapper is ever rendered without it. Material-design-icon components paint
20969
21197
  with `fill: currentColor`, so this reaches them; the :deep rule below makes
20970
21198
  it reach a raw <svg> in the slot too. */
20971
- .cn-widget-wrapper__title-icon[data-v-64db0f38] {
21199
+ .cn-widget-wrapper__title-icon[data-v-b19b1aa6] {
20972
21200
  display: flex;
20973
21201
  align-items: center;
20974
21202
  flex-shrink: 0;
@@ -20988,17 +21216,17 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20988
21216
 
20989
21217
  /* Right-positioned title icons sit AFTER the actions, so the margin belongs on
20990
21218
  the other side or it pushes the icon off the header's right edge. */
20991
- .cn-widget-wrapper__title-icon[data-v-64db0f38]:last-child {
21219
+ .cn-widget-wrapper__title-icon[data-v-b19b1aa6]:last-child {
20992
21220
  margin-inline-end: 0;
20993
21221
  margin-inline-start: 8px;
20994
21222
  }
20995
21223
 
20996
21224
  /* Material-design-icon components paint with `fill: currentColor`, so the
20997
21225
  colour above reaches them; this makes it reach a raw <svg> in the slot too. */
20998
- .cn-widget-wrapper__title-icon[data-v-64db0f38] svg {
21226
+ .cn-widget-wrapper__title-icon[data-v-b19b1aa6] svg {
20999
21227
  fill: currentcolor;
21000
21228
  }
21001
- .cn-widget-wrapper__footer[data-v-64db0f38] {
21229
+ .cn-widget-wrapper__footer[data-v-b19b1aa6] {
21002
21230
  display: flex;
21003
21231
  justify-content: flex-end;
21004
21232
  gap: 8px;
@@ -21006,12 +21234,12 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21006
21234
  border-top: 1px solid var(--color-border);
21007
21235
  flex-shrink: 0;
21008
21236
  }
21009
- .cn-widget-wrapper__footer-link[data-v-64db0f38] {
21237
+ .cn-widget-wrapper__footer-link[data-v-b19b1aa6] {
21010
21238
  font-size: 13px;
21011
21239
  color: var(--color-primary-element);
21012
21240
  text-decoration: none;
21013
21241
  }
21014
- .cn-widget-wrapper__footer-link[data-v-64db0f38]:hover {
21242
+ .cn-widget-wrapper__footer-link[data-v-b19b1aa6]:hover {
21015
21243
  text-decoration: underline;
21016
21244
  }
21017
21245
 
@@ -22309,6 +22537,19 @@ a.cn-kpi-card--stacked:focus-visible {
22309
22537
  color: var(--color-main-text);
22310
22538
  }
22311
22539
 
22540
+ /* A board tile whose label wraps grows into its cell instead of clipping its
22541
+ own last line. dossiq's "Afgehandeld deze maand" at 1100 wide held 129px of
22542
+ content in a 114px tile and lost its caption's bottom. The tile still fills
22543
+ a cell it fits (`min-height: 100%`), so every tile that fits keeps its
22544
+ size; one that does not takes the height of its content, and the card-fit
22545
+ cell's `safe center` keeps its top in view.
22546
+ @spec openspec/changes/board-stat-tile-grows/specs/stat-tile-board-look/spec.md#requirement-a-board-stat-tile-shows-all-its-lines */
22547
+ .cn-kpi-card--board.cn-kpi-card--stacked {
22548
+ flex: 0 0 auto;
22549
+ height: auto;
22550
+ min-height: 100%;
22551
+ }
22552
+
22312
22553
  .cn-kpi-card--board.cn-kpi-card--stacked .cn-kpi-card__caption-line,
22313
22554
  .cn-kpi-card--board.cn-kpi-card--stacked .cn-stats-block__count-label {
22314
22555
  font-size: 13px;
@@ -22731,7 +22972,7 @@ a.cn-kpi-card--board * {
22731
22972
 
22732
22973
  /* The title row carries an optional range select beside the label, which the
22733
22974
  canonical `__title` (a plain truncating heading) does not account for. */
22734
- .cn-stat-widget__label[data-v-6f90b30c] {
22975
+ .cn-stat-widget__label[data-v-b388a5f8] {
22735
22976
  display: flex;
22736
22977
  align-items: center;
22737
22978
  justify-content: space-between;
@@ -22741,14 +22982,14 @@ a.cn-kpi-card--board * {
22741
22982
 
22742
22983
  /* Stacked tile: the label and its range select centre over the number rather
22743
22984
  than spreading to the card's edges. */
22744
- .cn-kpi-card--vertical .cn-stat-widget__label[data-v-6f90b30c] {
22985
+ .cn-kpi-card--vertical .cn-stat-widget__label[data-v-b388a5f8] {
22745
22986
  justify-content: center;
22746
22987
  width: auto;
22747
22988
  }
22748
22989
 
22749
22990
  /* Sized down to sit inside the label row without pushing the tile taller —
22750
22991
  the tile's height is fixed by its grid cell (ADR-062). */
22751
- .cn-stat-widget__range[data-v-6f90b30c] {
22992
+ .cn-stat-widget__range[data-v-b388a5f8] {
22752
22993
  flex: 0 0 auto;
22753
22994
  max-width: 50%;
22754
22995
  padding: 0 4px;
@@ -22760,15 +23001,15 @@ a.cn-kpi-card--board * {
22760
23001
  font-weight: normal;
22761
23002
  cursor: pointer;
22762
23003
  }
22763
- .cn-stat-widget__range[data-v-6f90b30c]:hover,
22764
- .cn-stat-widget__range[data-v-6f90b30c]:focus-visible {
23004
+ .cn-stat-widget__range[data-v-b388a5f8]:hover,
23005
+ .cn-stat-widget__range[data-v-b388a5f8]:focus-visible {
22765
23006
  background: var(--color-background-hover);
22766
23007
  color: var(--color-main-text);
22767
23008
  }
22768
23009
 
22769
23010
  /* Badge mode: the pill takes the value's place in the row. Sized to the
22770
23011
  card's label scale so it sits in the row without pushing the tile taller. */
22771
- .cn-stat-widget__badge[data-v-6f90b30c] {
23012
+ .cn-stat-widget__badge[data-v-b388a5f8] {
22772
23013
  flex: 0 1 auto;
22773
23014
  min-width: 0;
22774
23015
  max-width: 100%;
@@ -22780,7 +23021,7 @@ a.cn-kpi-card--board * {
22780
23021
  /* The denominator of a "value / limit" pair. Deliberately quieter and smaller
22781
23022
  than the value: the tile's subject is what the number IS, not what it is
22782
23023
  allowed to reach. Shares the value's `nowrap` so the pair never breaks. */
22783
- .cn-stat-widget__limit[data-v-6f90b30c] {
23024
+ .cn-stat-widget__limit[data-v-b388a5f8] {
22784
23025
  flex: 0 0 auto;
22785
23026
  font-size: var(--cn-kpi-value-size-compact, 1.25rem);
22786
23027
  font-weight: var(--cn-kpi-title-weight, 600);
@@ -22788,7 +23029,7 @@ a.cn-kpi-card--board * {
22788
23029
  color: var(--cn-kpi-label-color, var(--color-text-maxcontrast));
22789
23030
  white-space: nowrap;
22790
23031
  }
22791
- .cn-stat-widget__trend[data-v-6f90b30c] {
23032
+ .cn-stat-widget__trend[data-v-b388a5f8] {
22792
23033
  display: inline-flex;
22793
23034
  align-items: center;
22794
23035
  gap: 2px;
@@ -22801,7 +23042,7 @@ a.cn-kpi-card--board * {
22801
23042
  error dash is literally a `cn-kpi-card__value`, and two components showing
22802
23043
  the same failure at two different sizes is the drift this consolidation
22803
23044
  exists to remove. Only the colour differs: a failure is not a number. */
22804
- .cn-stat-widget__error[data-v-6f90b30c] {
23045
+ .cn-stat-widget__error[data-v-b388a5f8] {
22805
23046
  font-size: var(--cn-kpi-value-size, 2rem);
22806
23047
  font-weight: var(--cn-kpi-value-weight, 700);
22807
23048
  line-height: var(--cn-kpi-value-line, 1.1);
@@ -23136,7 +23377,7 @@ a.cn-kpi-card--board * {
23136
23377
  }
23137
23378
 
23138
23379
 
23139
- .cn-object-data-widget__image[data-v-76edf75d] {
23380
+ .cn-object-data-widget__image[data-v-324e1a00] {
23140
23381
  max-width: 100%;
23141
23382
  max-height: 160px;
23142
23383
  border-radius: 8px;
@@ -23144,33 +23385,33 @@ a.cn-kpi-card--board * {
23144
23385
  }
23145
23386
 
23146
23387
  /* Shimmering placeholder while a relation's display name resolves. */
23147
- .cn-object-data-widget__skeleton[data-v-76edf75d] {
23388
+ .cn-object-data-widget__skeleton[data-v-324e1a00] {
23148
23389
  display: inline-block;
23149
23390
  width: 90px;
23150
23391
  height: 1em;
23151
23392
  border-radius: 4px;
23152
23393
  background: linear-gradient(90deg, var(--color-background-dark) 25%, var(--color-background-hover) 50%, var(--color-background-dark) 75%);
23153
23394
  background-size: 200% 100%;
23154
- animation: cn-odw-shimmer-76edf75d 1.2s ease-in-out infinite;
23395
+ animation: cn-odw-shimmer-324e1a00 1.2s ease-in-out infinite;
23155
23396
  }
23156
- @keyframes cn-odw-shimmer-76edf75d {
23397
+ @keyframes cn-odw-shimmer-324e1a00 {
23157
23398
  from { background-position: 200% 0;
23158
23399
  }
23159
23400
  to { background-position: -200% 0;
23160
23401
  }
23161
23402
  }
23162
23403
  @media (prefers-reduced-motion: reduce) {
23163
- .cn-object-data-widget__skeleton[data-v-76edf75d] { animation: none;
23404
+ .cn-object-data-widget__skeleton[data-v-324e1a00] { animation: none;
23164
23405
  }
23165
23406
  }
23166
- .cn-object-data-widget__grid[data-v-76edf75d] {
23407
+ .cn-object-data-widget__grid[data-v-324e1a00] {
23167
23408
  display: grid;
23168
23409
  gap: calc(2 * var(--default-grid-baseline, 4px)) calc(4 * var(--default-grid-baseline, 4px));
23169
23410
  }
23170
- .cn-object-data-widget__toggle[data-v-76edf75d] {
23411
+ .cn-object-data-widget__toggle[data-v-324e1a00] {
23171
23412
  margin-top: 4px;
23172
23413
  }
23173
- .cn-object-data-widget__cell[data-v-76edf75d] {
23414
+ .cn-object-data-widget__cell[data-v-324e1a00] {
23174
23415
  display: flex;
23175
23416
  flex-direction: column;
23176
23417
  gap: 2px;
@@ -23178,12 +23419,12 @@ to { background-position: -200% 0;
23178
23419
  border-bottom: 1px solid var(--color-border-dark);
23179
23420
  min-width: 0;
23180
23421
  }
23181
- .cn-object-data-widget__label[data-v-76edf75d] {
23422
+ .cn-object-data-widget__label[data-v-324e1a00] {
23182
23423
  font-size: 0.85em;
23183
23424
  color: var(--color-text-maxcontrast);
23184
23425
  font-weight: 500;
23185
23426
  }
23186
- .cn-object-data-widget__value[data-v-76edf75d] {
23427
+ .cn-object-data-widget__value[data-v-324e1a00] {
23187
23428
  font-size: 1em;
23188
23429
  color: var(--color-main-text);
23189
23430
  overflow-wrap: anywhere;
@@ -23197,24 +23438,24 @@ to { background-position: -200% 0;
23197
23438
  which drew a horizontal scrollbar under every data widget in a tab (dossiq's
23198
23439
  case page, Data tab). The end padding drops by the same 4px so the text and
23199
23440
  the edit icon sit where they sat. */
23200
- .cn-object-data-widget__value--editable[data-v-76edf75d] {
23441
+ .cn-object-data-widget__value--editable[data-v-324e1a00] {
23201
23442
  cursor: pointer;
23202
23443
  border-radius: var(--border-radius);
23203
23444
  padding: 4px 20px 4px 4px;
23204
23445
  margin: -4px 0 -4px -4px;
23205
23446
  }
23206
- .cn-object-data-widget__value--editable[data-v-76edf75d]:hover {
23447
+ .cn-object-data-widget__value--editable[data-v-324e1a00]:hover {
23207
23448
  background: var(--color-background-dark);
23208
23449
  }
23209
- .cn-object-data-widget__value--editable[data-v-76edf75d]:focus-visible {
23450
+ .cn-object-data-widget__value--editable[data-v-324e1a00]:focus-visible {
23210
23451
  outline: 2px solid var(--color-primary-element);
23211
23452
  outline-offset: 2px;
23212
23453
  }
23213
- .cn-object-data-widget__value--empty[data-v-76edf75d] {
23454
+ .cn-object-data-widget__value--empty[data-v-324e1a00] {
23214
23455
  color: var(--color-text-maxcontrast);
23215
23456
  font-style: italic;
23216
23457
  }
23217
- .cn-object-data-widget__edit-icon[data-v-76edf75d] {
23458
+ .cn-object-data-widget__edit-icon[data-v-324e1a00] {
23218
23459
  position: absolute;
23219
23460
  right: 4px;
23220
23461
  top: 50%;
@@ -23223,21 +23464,21 @@ to { background-position: -200% 0;
23223
23464
  opacity: 0;
23224
23465
  transition: opacity 0.15s ease;
23225
23466
  }
23226
- .cn-object-data-widget__value--editable:hover .cn-object-data-widget__edit-icon[data-v-76edf75d],
23227
- .cn-object-data-widget__value--editable:focus-visible .cn-object-data-widget__edit-icon[data-v-76edf75d] {
23467
+ .cn-object-data-widget__value--editable:hover .cn-object-data-widget__edit-icon[data-v-324e1a00],
23468
+ .cn-object-data-widget__value--editable:focus-visible .cn-object-data-widget__edit-icon[data-v-324e1a00] {
23228
23469
  opacity: 1;
23229
23470
  }
23230
- .cn-object-data-widget__editor[data-v-76edf75d] {
23471
+ .cn-object-data-widget__editor[data-v-324e1a00] {
23231
23472
  display: flex;
23232
23473
  flex-direction: column;
23233
23474
  gap: 4px;
23234
23475
  }
23235
- .cn-object-data-widget__editor-actions[data-v-76edf75d] {
23476
+ .cn-object-data-widget__editor-actions[data-v-324e1a00] {
23236
23477
  display: flex;
23237
23478
  gap: 2px;
23238
23479
  justify-content: flex-end;
23239
23480
  }
23240
- .cn-object-data-widget__textarea[data-v-76edf75d] {
23481
+ .cn-object-data-widget__textarea[data-v-324e1a00] {
23241
23482
  width: 100%;
23242
23483
  min-height: 80px;
23243
23484
  padding: 8px;
@@ -23249,11 +23490,11 @@ to { background-position: -200% 0;
23249
23490
  font-size: inherit;
23250
23491
  resize: vertical;
23251
23492
  }
23252
- .cn-object-data-widget__textarea[data-v-76edf75d]:focus {
23493
+ .cn-object-data-widget__textarea[data-v-324e1a00]:focus {
23253
23494
  border-color: var(--color-primary-element);
23254
23495
  outline: none;
23255
23496
  }
23256
- .cn-object-data-widget__empty[data-v-76edf75d] {
23497
+ .cn-object-data-widget__empty[data-v-324e1a00] {
23257
23498
  color: var(--color-text-maxcontrast);
23258
23499
  font-style: italic;
23259
23500
  padding: calc(2 * var(--default-grid-baseline, 4px));
@@ -23261,16 +23502,16 @@ to { background-position: -200% 0;
23261
23502
 
23262
23503
  /* Compact inline table for array-of-objects values. Dense + unstyled-simple;
23263
23504
  fits the card and participates in the whole-row overflow handling. */
23264
- .cn-object-data-widget__mini-table-wrap[data-v-76edf75d] {
23505
+ .cn-object-data-widget__mini-table-wrap[data-v-324e1a00] {
23265
23506
  max-width: 100%;
23266
23507
  }
23267
- .cn-object-data-widget__mini-table[data-v-76edf75d] {
23508
+ .cn-object-data-widget__mini-table[data-v-324e1a00] {
23268
23509
  width: 100%;
23269
23510
  border-collapse: collapse;
23270
23511
  font-size: 0.9em;
23271
23512
  }
23272
- .cn-object-data-widget__mini-table th[data-v-76edf75d],
23273
- .cn-object-data-widget__mini-table td[data-v-76edf75d] {
23513
+ .cn-object-data-widget__mini-table th[data-v-324e1a00],
23514
+ .cn-object-data-widget__mini-table td[data-v-324e1a00] {
23274
23515
  text-align: start;
23275
23516
  padding: 2px 8px 2px 0;
23276
23517
  border-bottom: 1px solid var(--color-border);
@@ -23281,23 +23522,23 @@ to { background-position: -200% 0;
23281
23522
  cell, and the card 8px wider than its cell (pipelinq's ticket page). */
23282
23523
  white-space: normal;
23283
23524
  }
23284
- .cn-object-data-widget__mini-table th[data-v-76edf75d] {
23525
+ .cn-object-data-widget__mini-table th[data-v-324e1a00] {
23285
23526
  color: var(--color-text-maxcontrast);
23286
23527
  font-weight: 500;
23287
23528
  }
23288
- .cn-object-data-widget__more[data-v-76edf75d] {
23529
+ .cn-object-data-widget__more[data-v-324e1a00] {
23289
23530
  margin-top: 2px;
23290
23531
  font-size: 0.85em;
23291
23532
  color: var(--color-text-maxcontrast);
23292
23533
  }
23293
23534
 
23294
23535
  /* Comma-less chip row for array-of-scalars values. */
23295
- .cn-object-data-widget__chips[data-v-76edf75d] {
23536
+ .cn-object-data-widget__chips[data-v-324e1a00] {
23296
23537
  display: flex;
23297
23538
  flex-wrap: wrap;
23298
23539
  gap: 4px;
23299
23540
  }
23300
- .cn-object-data-widget__chip[data-v-76edf75d] {
23541
+ .cn-object-data-widget__chip[data-v-324e1a00] {
23301
23542
  padding: 1px 8px;
23302
23543
  border-radius: 12px;
23303
23544
  background: var(--color-background-dark);
@@ -23305,27 +23546,37 @@ to { background-position: -200% 0;
23305
23546
  }
23306
23547
 
23307
23548
  /* Key: value definition list for a single plain-object value. */
23308
- .cn-object-data-widget__deflist[data-v-76edf75d] {
23549
+ .cn-object-data-widget__deflist[data-v-324e1a00] {
23309
23550
  display: grid;
23310
23551
  grid-template-columns: auto 1fr;
23311
23552
  gap: 2px 8px;
23312
23553
  margin: 0;
23313
23554
  }
23314
- .cn-object-data-widget__deflist dt[data-v-76edf75d] {
23555
+ .cn-object-data-widget__deflist dt[data-v-324e1a00] {
23315
23556
  color: var(--color-text-maxcontrast);
23316
23557
  font-size: 0.9em;
23317
23558
  }
23318
- .cn-object-data-widget__deflist dd[data-v-76edf75d] {
23559
+ .cn-object-data-widget__deflist dd[data-v-324e1a00] {
23319
23560
  margin: 0;
23320
23561
  overflow-wrap: anywhere;
23321
23562
  }
23322
23563
 
23564
+ /* A long description keeps its own paragraphs. Set on an inline span with no
23565
+ surrounding template whitespace, so only the value's own line breaks show. */
23566
+ .cn-object-data-widget__deflist-text[data-v-324e1a00] {
23567
+ white-space: pre-wrap;
23568
+ }
23569
+ .cn-object-data-widget__deflist--nested[data-v-324e1a00] {
23570
+ padding-inline-start: 8px;
23571
+ border-inline-start: 2px solid var(--color-border);
23572
+ }
23573
+
23323
23574
  /* Responsive: collapse to single column on narrow widths */
23324
23575
  @media (max-width: 600px) {
23325
- .cn-object-data-widget__grid[data-v-76edf75d] {
23576
+ .cn-object-data-widget__grid[data-v-324e1a00] {
23326
23577
  grid-template-columns: 1fr !important;
23327
23578
  }
23328
- .cn-object-data-widget__cell[data-v-76edf75d] {
23579
+ .cn-object-data-widget__cell[data-v-324e1a00] {
23329
23580
  grid-column: span 1 !important;
23330
23581
  grid-row: span 1 !important;
23331
23582
  }
@@ -24710,23 +24961,23 @@ button.cn-stepper__step[data-v-776581d4] {
24710
24961
  }
24711
24962
 
24712
24963
 
24713
- .cn-widget-object-table[data-v-b6ed17ee] {
24964
+ .cn-widget-object-table[data-v-d8f8d15a] {
24714
24965
  width: 100%;
24715
24966
  }
24716
- .cn-widget-object-table__footer[data-v-b6ed17ee] {
24967
+ .cn-widget-object-table__footer[data-v-d8f8d15a] {
24717
24968
  display: flex;
24718
24969
  gap: 4px;
24719
24970
  padding: 4px 8px;
24720
24971
  border-top: 1px solid var(--color-border);
24721
24972
  }
24722
- .cn-widget-object-table__error[data-v-b6ed17ee] {
24973
+ .cn-widget-object-table__error[data-v-d8f8d15a] {
24723
24974
  color: var(--color-text-error, var(--color-error-text));
24724
24975
  font-size: 0.85em;
24725
24976
  margin: 4px 8px 0;
24726
24977
  }
24727
24978
 
24728
24979
 
24729
- .cn-detail-page__catalog-action[data-v-37d4fdce] {
24980
+ .cn-detail-page__catalog-action[data-v-cf939e1a] {
24730
24981
  align-items: center;
24731
24982
  background: var(--color-primary-element-light);
24732
24983
  border: 0;
@@ -24742,19 +24993,19 @@ button.cn-stepper__step[data-v-776581d4] {
24742
24993
  padding: 0 14px;
24743
24994
  white-space: nowrap;
24744
24995
  }
24745
- .cn-detail-page__catalog-note[data-v-37d4fdce] {
24996
+ .cn-detail-page__catalog-note[data-v-cf939e1a] {
24746
24997
  color: var(--color-text-maxcontrast);
24747
24998
  font-size: 14px;
24748
24999
  white-space: nowrap;
24749
25000
  }
24750
- .cn-detail-widget-host[data-v-37d4fdce],
24751
- .cn-detail-widget-host[data-v-37d4fdce] > * {
25001
+ .cn-detail-widget-host[data-v-cf939e1a],
25002
+ .cn-detail-widget-host[data-v-cf939e1a] > * {
24752
25003
  height: 100%;
24753
25004
  }
24754
25005
 
24755
25006
  /* A bare host is a tab panel's body: it fills the panel and lets the panel
24756
25007
  scroll, rather than growing a second scroll region of its own. */
24757
- .cn-detail-widget-host--bare[data-v-37d4fdce] {
25008
+ .cn-detail-widget-host--bare[data-v-cf939e1a] {
24758
25009
  min-height: 0;
24759
25010
  }
24760
25011
 
@@ -25037,7 +25288,7 @@ button.cn-stepper__step[data-v-776581d4] {
25037
25288
 
25038
25289
 
25039
25290
  /* A stack (`widgetIds`): the panel's widget, then cards 20px apart. */
25040
- .cn-tabs-widget__stack[data-v-0ad78042] {
25291
+ .cn-tabs-widget__stack[data-v-72f3975c] {
25041
25292
  display: flex;
25042
25293
  flex-direction: column;
25043
25294
  gap: 20px;
@@ -25046,19 +25297,19 @@ button.cn-stepper__step[data-v-776581d4] {
25046
25297
  /* A gridded stack (`columns` / `layout` on the tab): 12 columns, widgets wrap
25047
25298
  onto the next row, a row's cards as tall as the tallest. Narrow, it is the
25048
25299
  plain stack again. */
25049
- .cn-tabs-widget__stack--grid[data-v-0ad78042] {
25300
+ .cn-tabs-widget__stack--grid[data-v-72f3975c] {
25050
25301
  display: grid;
25051
25302
  grid-template-columns: repeat(12, minmax(0, 1fr));
25052
25303
  align-items: stretch;
25053
25304
  }
25054
- .cn-tabs-widget__stack--grid[data-v-0ad78042] > * {
25305
+ .cn-tabs-widget__stack--grid[data-v-72f3975c] > * {
25055
25306
  min-width: 0;
25056
25307
  }
25057
25308
  @media (max-width: 700px) {
25058
- .cn-tabs-widget__stack--grid[data-v-0ad78042] {
25309
+ .cn-tabs-widget__stack--grid[data-v-72f3975c] {
25059
25310
  grid-template-columns: minmax(0, 1fr);
25060
25311
  }
25061
- .cn-tabs-widget__stack--grid[data-v-0ad78042] > * {
25312
+ .cn-tabs-widget__stack--grid[data-v-72f3975c] > * {
25062
25313
  grid-column: auto !important;
25063
25314
  }
25064
25315
  }
@@ -25092,7 +25343,7 @@ button.cn-stepper__step[data-v-776581d4] {
25092
25343
  `!important` or on load order this library does not control. The same
25093
25344
  technique, for the same reason, is used on `.cn-tabs__nav .cn-tabs__nav-item`
25094
25345
  in CnTabs to beat Nextcloud's own button margin. */
25095
- .cn-tabs-widget.cn-tabs-widget[data-v-0ad78042] {
25346
+ .cn-tabs-widget.cn-tabs-widget[data-v-72f3975c] {
25096
25347
  background-color: transparent;
25097
25348
  border: 0;
25098
25349
  border-radius: 0;
@@ -25116,12 +25367,12 @@ button.cn-stepper__step[data-v-776581d4] {
25116
25367
  below it: the rule ran straight on to the widget's edge and read as a
25117
25368
  border sticking out past a rounded corner (Ruben, 2026-09-13). Ending it
25118
25369
  where the curve begins makes the rule and the curve one continuous edge. */
25119
- .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__bar {
25370
+ .cn-tabs-widget__tabs[data-v-72f3975c] .cn-tabs__bar {
25120
25371
  border-bottom: none;
25121
25372
  padding: 0;
25122
25373
  position: relative;
25123
25374
  }
25124
- .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__bar::after {
25375
+ .cn-tabs-widget__tabs[data-v-72f3975c] .cn-tabs__bar::after {
25125
25376
  border-bottom: 1px solid var(--color-border);
25126
25377
  content: '';
25127
25378
  inset-block-end: 0;
@@ -25134,11 +25385,11 @@ button.cn-stepper__step[data-v-776581d4] {
25134
25385
  own background-coloured bottom edge, which only works if it paints ABOVE the
25135
25386
  pseudo-element: a positioned pseudo-element otherwise paints over every
25136
25387
  in-flow sibling, rule included. */
25137
- .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__nav-item--active {
25388
+ .cn-tabs-widget__tabs[data-v-72f3975c] .cn-tabs__nav-item--active {
25138
25389
  position: relative;
25139
25390
  z-index: 1;
25140
25391
  }
25141
- .cn-tabs-widget__tabs[data-v-0ad78042] {
25392
+ .cn-tabs-widget__tabs[data-v-72f3975c] {
25142
25393
  display: flex;
25143
25394
  flex-direction: column;
25144
25395
  /* Grow to the widget's height, so the panel fills the grid cell the
@@ -25156,7 +25407,7 @@ button.cn-stepper__step[data-v-776581d4] {
25156
25407
  the open tab, but padding sits inside the painted box — only a margin would
25157
25408
  have opened that gap, and a zero top put every panel's content against the
25158
25409
  strip. */
25159
- .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__content {
25410
+ .cn-tabs-widget__tabs[data-v-72f3975c] .cn-tabs__content {
25160
25411
  background-color: var(--color-main-background);
25161
25412
  /* Three sides only: the bar's rule (redrawn above, stopping at the corner)
25162
25413
  is this sheet's top edge, and the open tab erases the slice of it
@@ -25176,7 +25427,7 @@ button.cn-stepper__step[data-v-776581d4] {
25176
25427
  overflow: auto;
25177
25428
  padding: 12px;
25178
25429
  }
25179
- .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tab {
25430
+ .cn-tabs-widget__tabs[data-v-72f3975c] .cn-tab {
25180
25431
  height: 100%;
25181
25432
  }
25182
25433
 
@@ -25184,15 +25435,15 @@ button.cn-stepper__step[data-v-776581d4] {
25184
25435
  (margin 0 -16px -16px). The panel of a tab pads 12px, so on a tab that
25185
25436
  holds the list directly the footer stuck out 4px on the right and at the
25186
25437
  bottom and made the panel scroll. It bleeds exactly the panel's padding. */
25187
- .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
25438
+ .cn-tabs-widget__tabs[data-v-72f3975c] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
25188
25439
  margin: auto -12px -12px;
25189
25440
  }
25190
- .cn-tabs-widget__title[data-v-0ad78042] {
25441
+ .cn-tabs-widget__title[data-v-72f3975c] {
25191
25442
  align-items: center;
25192
25443
  display: inline-flex;
25193
25444
  gap: 6px;
25194
25445
  }
25195
- .cn-tabs-widget__title-icon[data-v-0ad78042] {
25446
+ .cn-tabs-widget__title-icon[data-v-72f3975c] {
25196
25447
  flex: 0 0 auto;
25197
25448
  }
25198
25449
 
@@ -25216,18 +25467,18 @@ button.cn-stepper__step[data-v-776581d4] {
25216
25467
  }
25217
25468
 
25218
25469
 
25219
- .cn-week-strip[data-v-b6c5e274] {
25470
+ .cn-week-strip[data-v-27a717bd] {
25220
25471
  width: 100%;
25221
25472
  }
25222
25473
 
25223
25474
  /* `content.inset: true`: the board's inset inside the card (zuiddrecht-pixel-
25224
25475
  gaps-3). A dashboard renders its widgets flush, so without it the strip ran
25225
25476
  from card edge to card edge. Theme hook: --cn-widget-board-inset. */
25226
- .cn-week-strip--inset[data-v-b6c5e274] {
25477
+ .cn-week-strip--inset[data-v-27a717bd] {
25227
25478
  box-sizing: border-box;
25228
25479
  padding: var(--cn-widget-board-inset, 16px 24px 22px);
25229
25480
  }
25230
- .cn-week-strip__state[data-v-b6c5e274] {
25481
+ .cn-week-strip__state[data-v-27a717bd] {
25231
25482
  display: flex;
25232
25483
  align-items: center;
25233
25484
  gap: 8px;
@@ -25235,15 +25486,15 @@ button.cn-stepper__step[data-v-776581d4] {
25235
25486
  padding: 12px 4px;
25236
25487
  color: var(--color-text-maxcontrast);
25237
25488
  }
25238
- .cn-week-strip__scroll[data-v-b6c5e274] {
25489
+ .cn-week-strip__scroll[data-v-27a717bd] {
25239
25490
  overflow-x: auto;
25240
25491
  border-radius: var(--border-radius-large, 8px);
25241
25492
  }
25242
- .cn-week-strip__scroll[data-v-b6c5e274]:focus-visible {
25493
+ .cn-week-strip__scroll[data-v-27a717bd]:focus-visible {
25243
25494
  outline: 2px solid var(--color-primary-element);
25244
25495
  outline-offset: 2px;
25245
25496
  }
25246
- .cn-week-strip__days[data-v-b6c5e274] {
25497
+ .cn-week-strip__days[data-v-27a717bd] {
25247
25498
  display: grid;
25248
25499
  grid-template-columns: repeat(var(--cn-week-strip-columns, 5), minmax(128px, 1fr));
25249
25500
  gap: 10px;
@@ -25253,7 +25504,7 @@ button.cn-stepper__step[data-v-776581d4] {
25253
25504
  padding: 0;
25254
25505
  list-style: none;
25255
25506
  }
25256
- .cn-week-strip__day[data-v-b6c5e274] {
25507
+ .cn-week-strip__day[data-v-27a717bd] {
25257
25508
  display: flex;
25258
25509
  flex-direction: column;
25259
25510
  gap: 8px;
@@ -25263,11 +25514,11 @@ button.cn-stepper__step[data-v-776581d4] {
25263
25514
  border-radius: var(--border-radius-large, 8px);
25264
25515
  background: var(--color-background-hover);
25265
25516
  }
25266
- .cn-week-strip__day--today[data-v-b6c5e274] {
25517
+ .cn-week-strip__day--today[data-v-27a717bd] {
25267
25518
  border-color: var(--color-primary-element);
25268
25519
  background: var(--color-primary-element-light);
25269
25520
  }
25270
- .cn-week-strip__head[data-v-b6c5e274] {
25521
+ .cn-week-strip__head[data-v-27a717bd] {
25271
25522
  display: flex;
25272
25523
  align-items: center;
25273
25524
  justify-content: space-between;
@@ -25276,7 +25527,7 @@ button.cn-stepper__step[data-v-776581d4] {
25276
25527
  font-weight: 600;
25277
25528
  color: var(--color-main-text);
25278
25529
  }
25279
- .cn-week-strip__today[data-v-b6c5e274] {
25530
+ .cn-week-strip__today[data-v-27a717bd] {
25280
25531
  padding: 1px 8px;
25281
25532
  border-radius: var(--border-radius-pill, 10px);
25282
25533
  background: var(--color-primary-element);
@@ -25284,7 +25535,7 @@ button.cn-stepper__step[data-v-776581d4] {
25284
25535
  font-size: 0.85em;
25285
25536
  font-weight: 700;
25286
25537
  }
25287
- .cn-week-strip__items[data-v-b6c5e274] {
25538
+ .cn-week-strip__items[data-v-27a717bd] {
25288
25539
  display: flex;
25289
25540
  flex-direction: column;
25290
25541
  gap: 6px;
@@ -25292,7 +25543,7 @@ button.cn-stepper__step[data-v-776581d4] {
25292
25543
  padding: 0;
25293
25544
  list-style: none;
25294
25545
  }
25295
- .cn-week-strip__item[data-v-b6c5e274] {
25546
+ .cn-week-strip__item[data-v-27a717bd] {
25296
25547
  display: flex;
25297
25548
  flex-direction: column;
25298
25549
  gap: 4px;
@@ -25303,41 +25554,41 @@ button.cn-stepper__step[data-v-776581d4] {
25303
25554
  color: var(--color-main-text);
25304
25555
  text-decoration: none;
25305
25556
  }
25306
- .cn-week-strip__item--link[data-v-b6c5e274]:hover {
25557
+ .cn-week-strip__item--link[data-v-27a717bd]:hover {
25307
25558
  border-color: var(--color-primary-element);
25308
25559
  }
25309
- .cn-week-strip__item--link[data-v-b6c5e274]:focus-visible {
25560
+ .cn-week-strip__item--link[data-v-27a717bd]:focus-visible {
25310
25561
  outline: 2px solid var(--color-primary-element);
25311
25562
  outline-offset: 2px;
25312
25563
  }
25313
25564
 
25314
25565
  /* The edge is drawn inside the box, so a late item is as wide as the others. */
25315
- .cn-week-strip__item--late[data-v-b6c5e274] {
25566
+ .cn-week-strip__item--late[data-v-27a717bd] {
25316
25567
  border-color: var(--color-element-error, var(--color-error));
25317
25568
  box-shadow: inset 3px 0 0 0 var(--color-element-error, var(--color-error));
25318
25569
  }
25319
- .cn-week-strip__title[data-v-b6c5e274] {
25570
+ .cn-week-strip__title[data-v-27a717bd] {
25320
25571
  font-size: 0.95em;
25321
25572
  line-height: 1.3;
25322
25573
  overflow-wrap: anywhere;
25323
25574
  }
25324
- .cn-week-strip__meta[data-v-b6c5e274] {
25575
+ .cn-week-strip__meta[data-v-27a717bd] {
25325
25576
  font-size: 0.85em;
25326
25577
  color: var(--color-text-maxcontrast);
25327
25578
  overflow-wrap: anywhere;
25328
25579
  }
25329
- .cn-week-strip__late[data-v-b6c5e274] {
25580
+ .cn-week-strip__late[data-v-27a717bd] {
25330
25581
  font-size: 0.8em;
25331
25582
  font-weight: 600;
25332
25583
  color: var(--color-text-error, var(--color-error-text));
25333
25584
  }
25334
- .cn-week-strip__empty[data-v-b6c5e274] {
25585
+ .cn-week-strip__empty[data-v-27a717bd] {
25335
25586
  font-size: 0.9em;
25336
25587
  color: var(--color-text-maxcontrast);
25337
25588
  }
25338
25589
 
25339
25590
  /* "+N more" under a capped day: a quiet text control, 24px high to click. */
25340
- .cn-week-strip__more[data-v-b6c5e274] {
25591
+ .cn-week-strip__more[data-v-27a717bd] {
25341
25592
  align-self: flex-start;
25342
25593
  min-height: 24px;
25343
25594
  margin: 0;
@@ -25352,10 +25603,10 @@ button.cn-stepper__step[data-v-776581d4] {
25352
25603
  text-decoration: none;
25353
25604
  cursor: pointer;
25354
25605
  }
25355
- .cn-week-strip__more[data-v-b6c5e274]:hover {
25606
+ .cn-week-strip__more[data-v-27a717bd]:hover {
25356
25607
  text-decoration: underline;
25357
25608
  }
25358
- .cn-week-strip__more[data-v-b6c5e274]:focus-visible {
25609
+ .cn-week-strip__more[data-v-27a717bd]:focus-visible {
25359
25610
  outline: 2px solid var(--color-primary-element);
25360
25611
  outline-offset: 2px;
25361
25612
  }
@@ -29093,13 +29344,13 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29093
29344
  }
29094
29345
 
29095
29346
 
29096
- .cn-facts-widget[data-v-10daaa85] {
29347
+ .cn-facts-widget[data-v-8146cb58] {
29097
29348
  display: flex;
29098
29349
  flex-direction: column;
29099
29350
  gap: 10px;
29100
29351
  min-width: 0;
29101
29352
  }
29102
- .cn-facts-widget__rows[data-v-10daaa85] {
29353
+ .cn-facts-widget__rows[data-v-8146cb58] {
29103
29354
  display: grid;
29104
29355
  grid-template-columns: max-content 1fr;
29105
29356
  gap: 8px 16px;
@@ -29108,7 +29359,7 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29108
29359
  }
29109
29360
 
29110
29361
  /* Each row is a grid of its own children: the wrapper takes no box. */
29111
- .cn-facts-widget__row[data-v-10daaa85] {
29362
+ .cn-facts-widget__row[data-v-8146cb58] {
29112
29363
  display: contents;
29113
29364
  }
29114
29365
 
@@ -29116,13 +29367,13 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29116
29367
  pushed the label to the right of its column and added 12px around both. The
29117
29368
  class is doubled so these resets outrank that rule, and a dossiq-style
29118
29369
  `:deep()` override in an app is not needed. */
29119
- .cn-facts-widget__label.cn-facts-widget__label[data-v-10daaa85] {
29370
+ .cn-facts-widget__label.cn-facts-widget__label[data-v-8146cb58] {
29120
29371
  margin: 0;
29121
29372
  padding: 0;
29122
29373
  text-align: start;
29123
29374
  color: var(--color-text-maxcontrast);
29124
29375
  }
29125
- .cn-facts-widget__value.cn-facts-widget__value[data-v-10daaa85] {
29376
+ .cn-facts-widget__value.cn-facts-widget__value[data-v-8146cb58] {
29126
29377
  margin: 0;
29127
29378
  padding: 0;
29128
29379
  text-align: start;
@@ -29130,20 +29381,20 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29130
29381
  min-width: 0;
29131
29382
  overflow-wrap: anywhere;
29132
29383
  }
29133
- .cn-facts-widget__title[data-v-10daaa85] {
29384
+ .cn-facts-widget__title[data-v-8146cb58] {
29134
29385
  font-size: 15px;
29135
29386
  font-weight: 600;
29136
29387
  color: var(--color-main-text);
29137
29388
  }
29138
- .cn-facts-widget__line[data-v-10daaa85] {
29389
+ .cn-facts-widget__line[data-v-8146cb58] {
29139
29390
  font-size: 13px;
29140
29391
  color: var(--color-text-maxcontrast);
29141
29392
  }
29142
- .cn-facts-widget__muted[data-v-10daaa85] {
29393
+ .cn-facts-widget__muted[data-v-8146cb58] {
29143
29394
  margin: 0;
29144
29395
  color: var(--color-text-maxcontrast);
29145
29396
  }
29146
- .cn-facts-widget__label .hidden-visually[data-v-10daaa85] {
29397
+ .cn-facts-widget__label .hidden-visually[data-v-8146cb58] {
29147
29398
  clip-path: inset(50%);
29148
29399
  height: 1px;
29149
29400
  overflow: hidden;
@@ -29151,23 +29402,23 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29151
29402
  white-space: nowrap;
29152
29403
  width: 1px;
29153
29404
  }
29154
- .cn-facts-widget__label--icon[data-v-10daaa85] {
29405
+ .cn-facts-widget__label--icon[data-v-8146cb58] {
29155
29406
  align-items: center;
29156
29407
  display: flex;
29157
29408
  }
29158
- .cn-facts-widget__value-link[data-v-10daaa85] {
29409
+ .cn-facts-widget__value-link[data-v-8146cb58] {
29159
29410
  color: var(--color-primary-element);
29160
29411
  text-decoration: underline;
29161
29412
  }
29162
- .cn-facts-widget__inline-button[data-v-10daaa85],
29163
- .cn-facts-widget__icon-button[data-v-10daaa85],
29164
- .cn-facts-widget__action[data-v-10daaa85] {
29413
+ .cn-facts-widget__inline-button[data-v-8146cb58],
29414
+ .cn-facts-widget__icon-button[data-v-8146cb58],
29415
+ .cn-facts-widget__action[data-v-8146cb58] {
29165
29416
  align-items: center;
29166
29417
  cursor: pointer;
29167
29418
  display: inline-flex;
29168
29419
  font: inherit;
29169
29420
  }
29170
- .cn-facts-widget__inline-button[data-v-10daaa85] {
29421
+ .cn-facts-widget__inline-button[data-v-8146cb58] {
29171
29422
  background: var(--color-main-background);
29172
29423
  border: 1px solid var(--color-border-dark);
29173
29424
  border-radius: 16px;
@@ -29178,7 +29429,7 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29178
29429
  min-height: 28px;
29179
29430
  padding: 0 10px;
29180
29431
  }
29181
- .cn-facts-widget__icon-button[data-v-10daaa85] {
29432
+ .cn-facts-widget__icon-button[data-v-8146cb58] {
29182
29433
  background: transparent;
29183
29434
  border: 0;
29184
29435
  border-radius: 6px;
@@ -29187,23 +29438,23 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29187
29438
  padding: 2px;
29188
29439
  vertical-align: middle;
29189
29440
  }
29190
- .cn-facts-widget__icon-button[data-v-10daaa85]:hover,
29191
- .cn-facts-widget__icon-button[data-v-10daaa85]:focus-visible {
29441
+ .cn-facts-widget__icon-button[data-v-8146cb58]:hover,
29442
+ .cn-facts-widget__icon-button[data-v-8146cb58]:focus-visible {
29192
29443
  background: var(--color-background-hover);
29193
29444
  color: var(--color-main-text);
29194
29445
  }
29195
- .cn-facts-widget__text[data-v-10daaa85] {
29446
+ .cn-facts-widget__text[data-v-8146cb58] {
29196
29447
  color: var(--color-main-text);
29197
29448
  font-size: 15px;
29198
29449
  }
29199
29450
 
29200
29451
  /* A lead: an icon tile or initials beside a bold title and a muted subtitle. */
29201
- .cn-facts-widget__lead[data-v-10daaa85] {
29452
+ .cn-facts-widget__lead[data-v-8146cb58] {
29202
29453
  align-items: center;
29203
29454
  display: flex;
29204
29455
  gap: 12px;
29205
29456
  }
29206
- .cn-facts-widget__lead-tile[data-v-10daaa85] {
29457
+ .cn-facts-widget__lead-tile[data-v-8146cb58] {
29207
29458
  align-items: center;
29208
29459
  background: var(--color-background-dark);
29209
29460
  border-radius: 8px;
@@ -29216,29 +29467,29 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29216
29467
  justify-content: center;
29217
29468
  width: 40px;
29218
29469
  }
29219
- .cn-facts-widget__lead-tile--success[data-v-10daaa85] {
29470
+ .cn-facts-widget__lead-tile--success[data-v-8146cb58] {
29220
29471
  background: color-mix(in srgb, var(--color-success) 14%, var(--color-main-background));
29221
29472
  border-radius: 50%;
29222
29473
  color: var(--color-success-text, var(--color-success));
29223
29474
  }
29224
- .cn-facts-widget__lead-tile--info[data-v-10daaa85] {
29475
+ .cn-facts-widget__lead-tile--info[data-v-8146cb58] {
29225
29476
  background: var(--color-primary-element-light);
29226
29477
  border-radius: 50%;
29227
29478
  color: var(--color-primary-element-light-text, var(--color-primary-element));
29228
29479
  }
29229
- .cn-facts-widget__lead-text[data-v-10daaa85] {
29480
+ .cn-facts-widget__lead-text[data-v-8146cb58] {
29230
29481
  display: flex;
29231
29482
  flex-direction: column;
29232
29483
  min-width: 0;
29233
29484
  }
29234
- .cn-facts-widget__lead-title[data-v-10daaa85] {
29485
+ .cn-facts-widget__lead-title[data-v-8146cb58] {
29235
29486
  font-size: 15px;
29236
29487
  }
29237
- .cn-facts-widget__lead-subtitle[data-v-10daaa85] {
29488
+ .cn-facts-widget__lead-subtitle[data-v-8146cb58] {
29238
29489
  color: var(--color-text-maxcontrast);
29239
29490
  font-size: 13px;
29240
29491
  }
29241
- .cn-facts-widget__action[data-v-10daaa85] {
29492
+ .cn-facts-widget__action[data-v-8146cb58] {
29242
29493
  align-self: flex-start;
29243
29494
  background: var(--color-primary-element-light);
29244
29495
  border: 0;
@@ -29250,11 +29501,11 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29250
29501
  min-height: 32px;
29251
29502
  padding: 0 14px;
29252
29503
  }
29253
- .cn-facts-widget__action[data-v-10daaa85]:hover,
29254
- .cn-facts-widget__action[data-v-10daaa85]:focus-visible {
29504
+ .cn-facts-widget__action[data-v-8146cb58]:hover,
29505
+ .cn-facts-widget__action[data-v-8146cb58]:focus-visible {
29255
29506
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
29256
29507
  }
29257
- .cn-facts-widget__link[data-v-10daaa85] {
29508
+ .cn-facts-widget__link[data-v-8146cb58] {
29258
29509
  font-size: 14px;
29259
29510
  font-weight: 600;
29260
29511
  color: var(--color-primary-element);
@@ -29739,17 +29990,17 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29739
29990
  }
29740
29991
 
29741
29992
 
29742
- .cn-toggle-table[data-v-1bb40018] {
29993
+ .cn-toggle-table[data-v-24769640] {
29743
29994
  display: flex;
29744
29995
  flex-direction: column;
29745
29996
  gap: 8px;
29746
29997
  min-width: 0;
29747
29998
  }
29748
- .cn-toggle-table__table[data-v-1bb40018] {
29999
+ .cn-toggle-table__table[data-v-24769640] {
29749
30000
  width: 100%;
29750
30001
  border-collapse: collapse;
29751
30002
  }
29752
- .cn-toggle-table__head[data-v-1bb40018] {
30003
+ .cn-toggle-table__head[data-v-24769640] {
29753
30004
  padding: 8px 12px;
29754
30005
  text-align: start;
29755
30006
  font-size: 13px;
@@ -29757,30 +30008,30 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29757
30008
  color: var(--color-text-maxcontrast);
29758
30009
  background: var(--color-background-hover);
29759
30010
  }
29760
- .cn-toggle-table__head--toggle[data-v-1bb40018],
29761
- .cn-toggle-table__cell--toggle[data-v-1bb40018] {
30011
+ .cn-toggle-table__head--toggle[data-v-24769640],
30012
+ .cn-toggle-table__cell--toggle[data-v-24769640] {
29762
30013
  width: 1%;
29763
30014
  white-space: nowrap;
29764
30015
  text-align: end;
29765
30016
  }
29766
- .cn-toggle-table__row[data-v-1bb40018] {
30017
+ .cn-toggle-table__row[data-v-24769640] {
29767
30018
  border-top: 1px solid var(--cn-board-hairline, var(--color-border));
29768
30019
  }
29769
- .cn-toggle-table__cell[data-v-1bb40018] {
30020
+ .cn-toggle-table__cell[data-v-24769640] {
29770
30021
  padding: 10px 12px;
29771
30022
  vertical-align: middle;
29772
30023
  overflow-wrap: anywhere;
29773
30024
  }
29774
- .cn-toggle-table__title[data-v-1bb40018] {
30025
+ .cn-toggle-table__title[data-v-24769640] {
29775
30026
  display: block;
29776
30027
  font-weight: 600;
29777
30028
  }
29778
- .cn-toggle-table__hint[data-v-1bb40018] {
30029
+ .cn-toggle-table__hint[data-v-24769640] {
29779
30030
  display: block;
29780
30031
  font-size: 12px;
29781
30032
  color: var(--color-text-maxcontrast);
29782
30033
  }
29783
- .cn-toggle-table__empty[data-v-1bb40018] {
30034
+ .cn-toggle-table__empty[data-v-24769640] {
29784
30035
  margin: 0;
29785
30036
  color: var(--color-text-maxcontrast);
29786
30037
  }
@@ -29880,27 +30131,27 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29880
30131
  }
29881
30132
 
29882
30133
 
29883
- .cn-record-list__list[data-v-bc186ef8] {
30134
+ .cn-record-list__list[data-v-b2ef255e] {
29884
30135
  list-style: none;
29885
30136
  margin: 0;
29886
30137
  padding: 0;
29887
30138
  }
29888
- .cn-record-list__empty[data-v-bc186ef8],
29889
- .cn-record-list__error[data-v-bc186ef8] {
30139
+ .cn-record-list__empty[data-v-b2ef255e],
30140
+ .cn-record-list__error[data-v-b2ef255e] {
29890
30141
  color: var(--color-text-maxcontrast);
29891
30142
  margin: 0;
29892
30143
  }
29893
- .cn-record-list__loading[data-v-bc186ef8] {
30144
+ .cn-record-list__loading[data-v-b2ef255e] {
29894
30145
  display: flex;
29895
30146
  justify-content: center;
29896
30147
  padding: 8px 0;
29897
30148
  }
29898
30149
 
29899
30150
  /* rows */
29900
- .cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-bc186ef8] {
30151
+ .cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-b2ef255e] {
29901
30152
  border-top: 1px solid var(--color-border);
29902
30153
  }
29903
- .cn-record-list__row[data-v-bc186ef8] {
30154
+ .cn-record-list__row[data-v-b2ef255e] {
29904
30155
  align-items: center;
29905
30156
  color: var(--color-main-text);
29906
30157
  display: flex;
@@ -29908,11 +30159,11 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29908
30159
  padding: 12px 0;
29909
30160
  text-decoration: none;
29910
30161
  }
29911
- .cn-record-list__row--link:hover .cn-record-list__title[data-v-bc186ef8],
29912
- .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-bc186ef8] {
30162
+ .cn-record-list__row--link:hover .cn-record-list__title[data-v-b2ef255e],
30163
+ .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-b2ef255e] {
29913
30164
  text-decoration: underline;
29914
30165
  }
29915
- .cn-record-list__avatar[data-v-bc186ef8] {
30166
+ .cn-record-list__avatar[data-v-b2ef255e] {
29916
30167
  align-items: center;
29917
30168
  background: var(--color-background-hover);
29918
30169
  border-radius: 50%;
@@ -29925,67 +30176,67 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29925
30176
  justify-content: center;
29926
30177
  width: 36px;
29927
30178
  }
29928
- .cn-record-list__main[data-v-bc186ef8] {
30179
+ .cn-record-list__main[data-v-b2ef255e] {
29929
30180
  display: flex;
29930
30181
  flex: 1 1 auto;
29931
30182
  flex-direction: column;
29932
30183
  gap: 2px;
29933
30184
  min-width: 0;
29934
30185
  }
29935
- .cn-record-list__title[data-v-bc186ef8] {
30186
+ .cn-record-list__title[data-v-b2ef255e] {
29936
30187
  font-size: 15px;
29937
30188
  font-weight: 700;
29938
30189
  }
29939
- .cn-record-list__meta[data-v-bc186ef8] {
30190
+ .cn-record-list__meta[data-v-b2ef255e] {
29940
30191
  color: var(--color-text-maxcontrast);
29941
30192
  font-size: 13px;
29942
30193
  }
29943
- .cn-record-list__aside[data-v-bc186ef8] {
30194
+ .cn-record-list__aside[data-v-b2ef255e] {
29944
30195
  align-items: center;
29945
30196
  display: flex;
29946
30197
  flex: none;
29947
30198
  gap: 16px;
29948
30199
  }
29949
- .cn-record-list__trailing[data-v-bc186ef8] {
30200
+ .cn-record-list__trailing[data-v-b2ef255e] {
29950
30201
  font-size: 14px;
29951
30202
  white-space: nowrap;
29952
30203
  }
29953
- .cn-record-list__due[data-v-bc186ef8] {
30204
+ .cn-record-list__due[data-v-b2ef255e] {
29954
30205
  font-size: 14px;
29955
30206
  white-space: nowrap;
29956
30207
  }
29957
- .cn-record-list__due--danger[data-v-bc186ef8] {
30208
+ .cn-record-list__due--danger[data-v-b2ef255e] {
29958
30209
  color: var(--color-text-error, var(--color-error-text));
29959
30210
  font-weight: 600;
29960
30211
  }
29961
- .cn-record-list__due--empty[data-v-bc186ef8] {
30212
+ .cn-record-list__due--empty[data-v-b2ef255e] {
29962
30213
  color: var(--color-text-maxcontrast);
29963
30214
  }
29964
- .cn-record-list__row--action[data-v-bc186ef8] {
30215
+ .cn-record-list__row--action[data-v-b2ef255e] {
29965
30216
  flex-wrap: wrap;
29966
30217
  gap: 8px 16px;
29967
30218
  padding: 14px 0;
29968
30219
  }
29969
- .cn-record-list__row--action .cn-record-list__main[data-v-bc186ef8] {
30220
+ .cn-record-list__row--action .cn-record-list__main[data-v-b2ef255e] {
29970
30221
  flex: 1 1 280px;
29971
30222
  gap: 3px;
29972
30223
  }
29973
- .cn-record-list__title--link[data-v-bc186ef8] {
30224
+ .cn-record-list__title--link[data-v-b2ef255e] {
29974
30225
  color: var(--color-main-text);
29975
30226
  text-decoration: underline;
29976
30227
  }
29977
- .cn-record-list__pills[data-v-bc186ef8] {
30228
+ .cn-record-list__pills[data-v-b2ef255e] {
29978
30229
  display: flex;
29979
30230
  flex: 0 0 120px;
29980
30231
  gap: 6px;
29981
30232
  justify-content: flex-end;
29982
30233
  }
29983
- .cn-record-list__due--column[data-v-bc186ef8] {
30234
+ .cn-record-list__due--column[data-v-b2ef255e] {
29984
30235
  flex: 0 0 96px;
29985
30236
  font-size: 13px;
29986
30237
  text-align: end;
29987
30238
  }
29988
- .cn-record-list__action[data-v-bc186ef8] {
30239
+ .cn-record-list__action[data-v-b2ef255e] {
29989
30240
  align-items: center;
29990
30241
  background: var(--color-primary-element-light);
29991
30242
  border: 0;
@@ -30002,26 +30253,26 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
30002
30253
  padding: 0 14px;
30003
30254
  text-decoration: none;
30004
30255
  }
30005
- .cn-record-list__action[data-v-bc186ef8]:hover,
30006
- .cn-record-list__action[data-v-bc186ef8]:focus-visible {
30256
+ .cn-record-list__action[data-v-b2ef255e]:hover,
30257
+ .cn-record-list__action[data-v-b2ef255e]:focus-visible {
30007
30258
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
30008
30259
  }
30009
- .cn-record-list__chevron[data-v-bc186ef8] {
30260
+ .cn-record-list__chevron[data-v-b2ef255e] {
30010
30261
  color: var(--color-text-maxcontrast);
30011
30262
  flex: none;
30012
30263
  }
30013
30264
 
30014
30265
  /* feed */
30015
- .cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-bc186ef8] {
30266
+ .cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-b2ef255e] {
30016
30267
  border-top: 1px solid var(--color-border);
30017
30268
  }
30018
- .cn-record-list__feed-row[data-v-bc186ef8] {
30269
+ .cn-record-list__feed-row[data-v-b2ef255e] {
30019
30270
  align-items: flex-start;
30020
30271
  display: flex;
30021
30272
  gap: 14px;
30022
30273
  padding: 12px 0;
30023
30274
  }
30024
- .cn-record-list__feed-icon[data-v-bc186ef8] {
30275
+ .cn-record-list__feed-icon[data-v-b2ef255e] {
30025
30276
  align-items: center;
30026
30277
  background: var(--color-primary-element-light);
30027
30278
  border-radius: 50%;
@@ -30032,25 +30283,25 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
30032
30283
  justify-content: center;
30033
30284
  width: 36px;
30034
30285
  }
30035
- .cn-record-list__text[data-v-bc186ef8] {
30286
+ .cn-record-list__text[data-v-b2ef255e] {
30036
30287
  font-size: 15px;
30037
30288
  }
30038
- .cn-record-list--feed .cn-record-list__main[data-v-bc186ef8] {
30289
+ .cn-record-list--feed .cn-record-list__main[data-v-b2ef255e] {
30039
30290
  color: var(--color-main-text);
30040
30291
  text-decoration: none;
30041
30292
  }
30042
30293
 
30043
30294
  /* inline */
30044
- .cn-record-list__inline-row[data-v-bc186ef8] {
30295
+ .cn-record-list__inline-row[data-v-b2ef255e] {
30045
30296
  padding: 4px 0;
30046
30297
  }
30047
- .cn-record-list__label[data-v-bc186ef8] {
30298
+ .cn-record-list__label[data-v-b2ef255e] {
30048
30299
  margin-inline-end: 4px;
30049
30300
  }
30050
- .cn-record-list__inline-title[data-v-bc186ef8] {
30301
+ .cn-record-list__inline-title[data-v-b2ef255e] {
30051
30302
  color: var(--color-main-text);
30052
30303
  }
30053
- a.cn-record-list__inline-title[data-v-bc186ef8] {
30304
+ a.cn-record-list__inline-title[data-v-b2ef255e] {
30054
30305
  color: var(--color-primary-element);
30055
30306
  text-decoration: underline;
30056
30307
  }
@@ -30997,40 +31248,40 @@ a.cn-record-list__inline-title[data-v-bc186ef8] {
30997
31248
  }
30998
31249
 
30999
31250
 
31000
- .cn-version-info__card[data-v-7a828af4] {
31251
+ .cn-version-info__card[data-v-17db98e4] {
31001
31252
  background: var(--color-background-hover);
31002
31253
  border: 1px solid var(--color-border);
31003
31254
  border-radius: var(--border-radius-large);
31004
31255
  padding: 20px;
31005
31256
  margin-bottom: 20px;
31006
31257
  }
31007
- .cn-version-info__card h4[data-v-7a828af4] {
31258
+ .cn-version-info__card h4[data-v-17db98e4] {
31008
31259
  margin: 0 0 16px 0;
31009
31260
  font-size: 16px;
31010
31261
  font-weight: 600;
31011
31262
  color: var(--color-main-text);
31012
31263
  }
31013
- .cn-version-info__details[data-v-7a828af4] {
31264
+ .cn-version-info__details[data-v-17db98e4] {
31014
31265
  display: flex;
31015
31266
  flex-direction: column;
31016
31267
  gap: 12px;
31017
31268
  }
31018
- .cn-version-info__item[data-v-7a828af4] {
31269
+ .cn-version-info__item[data-v-17db98e4] {
31019
31270
  display: flex;
31020
31271
  justify-content: space-between;
31021
31272
  align-items: center;
31022
31273
  padding: 8px 0;
31023
31274
  border-bottom: 1px solid var(--color-border);
31024
31275
  }
31025
- .cn-version-info__item[data-v-7a828af4]:last-child {
31276
+ .cn-version-info__item[data-v-17db98e4]:last-child {
31026
31277
  border-bottom: none;
31027
31278
  }
31028
- .cn-version-info__label[data-v-7a828af4] {
31279
+ .cn-version-info__label[data-v-17db98e4] {
31029
31280
  font-weight: 500;
31030
31281
  color: var(--color-text-maxcontrast);
31031
31282
  font-size: 14px;
31032
31283
  }
31033
- .cn-version-info__value[data-v-7a828af4] {
31284
+ .cn-version-info__value[data-v-17db98e4] {
31034
31285
  font-family: 'Courier New', Courier, monospace;
31035
31286
  font-weight: 600;
31036
31287
  color: var(--color-main-text);
@@ -31038,28 +31289,28 @@ a.cn-record-list__inline-title[data-v-bc186ef8] {
31038
31289
  }
31039
31290
 
31040
31291
  /* Status classes for values */
31041
- .cn-version-info__status--ok[data-v-7a828af4] {
31292
+ .cn-version-info__status--ok[data-v-17db98e4] {
31042
31293
  color: var(--color-success);
31043
31294
  font-weight: 600;
31044
31295
  }
31045
- .cn-version-info__status--warning[data-v-7a828af4] {
31296
+ .cn-version-info__status--warning[data-v-17db98e4] {
31046
31297
  color: var(--color-warning);
31047
31298
  font-weight: 600;
31048
31299
  }
31049
- .cn-version-info__status--error[data-v-7a828af4] {
31300
+ .cn-version-info__status--error[data-v-17db98e4] {
31050
31301
  color: var(--color-error);
31051
31302
  font-weight: 600;
31052
31303
  }
31053
31304
  @media (max-width: 768px) {
31054
- .cn-version-info__item[data-v-7a828af4] {
31305
+ .cn-version-info__item[data-v-17db98e4] {
31055
31306
  flex-direction: column;
31056
31307
  align-items: flex-start;
31057
31308
  gap: 4px;
31058
31309
  }
31059
- .cn-version-info__label[data-v-7a828af4] {
31310
+ .cn-version-info__label[data-v-17db98e4] {
31060
31311
  font-weight: 600;
31061
31312
  }
31062
- .cn-version-info__value[data-v-7a828af4] {
31313
+ .cn-version-info__value[data-v-17db98e4] {
31063
31314
  word-break: break-all;
31064
31315
  }
31065
31316
  }
@@ -34327,28 +34578,28 @@ to {
34327
34578
  }
34328
34579
 
34329
34580
 
34330
- .cn-admin-settings-shell[data-v-2f22ff08] {
34581
+ .cn-admin-settings-shell[data-v-3672ca0b] {
34331
34582
  max-width: 900px;
34332
34583
  }
34333
34584
 
34334
34585
  /* The board look lifts the width and lays the header and cards on a grid (look-board.css). */
34335
- .cn-support-info[data-v-2f22ff08] {
34586
+ .cn-support-info[data-v-3672ca0b] {
34336
34587
  margin-top: 16px;
34337
34588
  padding-top: 16px;
34338
34589
  border-top: 1px solid var(--color-border);
34339
34590
  }
34340
- .cn-support-info h4[data-v-2f22ff08] {
34591
+ .cn-support-info h4[data-v-3672ca0b] {
34341
34592
  margin: 0 0 8px 0;
34342
34593
  font-size: 14px;
34343
34594
  font-weight: 600;
34344
34595
  color: var(--color-main-text);
34345
34596
  }
34346
- .cn-support-info p[data-v-2f22ff08] {
34597
+ .cn-support-info p[data-v-3672ca0b] {
34347
34598
  margin: 4px 0;
34348
34599
  color: var(--color-text-maxcontrast);
34349
34600
  font-size: 14px;
34350
34601
  }
34351
- .cn-support-info a[data-v-2f22ff08] {
34602
+ .cn-support-info a[data-v-3672ca0b] {
34352
34603
  color: var(--color-primary-element);
34353
34604
  }
34354
34605
 
@@ -34450,19 +34701,24 @@ to {
34450
34701
  gap: 8px;
34451
34702
  }
34452
34703
 
34453
- .cn-board-view.cn-board-view--board .cn-board-view__card-title {
34704
+ /* The title is a link drawn as a heading (board DqWerkbord): main text, no
34705
+ underline. `!important` because a theme's `a { color; text-decoration }`
34706
+ carries it (thematiq), and a bare `a` with `!important` beats any class. */
34707
+ .cn-board-view.cn-board-view--board .cn-board-view__card-title,
34708
+ .cn-board-view.cn-board-view--board .cn-board-view__card-title:visited {
34454
34709
  flex: 1 1 auto;
34455
34710
  min-width: 0;
34456
34711
  font-size: 15px;
34457
34712
  font-weight: 700;
34458
34713
  line-height: 1.3;
34459
- color: var(--color-main-text);
34460
- text-decoration: none;
34714
+ color: var(--color-main-text) !important;
34715
+ text-decoration: none !important;
34461
34716
  overflow-wrap: anywhere;
34462
34717
  }
34463
34718
 
34464
34719
  .cn-board-view.cn-board-view--board .cn-board-view__card-title:hover {
34465
- text-decoration: underline;
34720
+ color: var(--color-main-text) !important;
34721
+ text-decoration: underline !important;
34466
34722
  }
34467
34723
 
34468
34724
  .cn-board-view.cn-board-view--board .cn-board-view__card-title:focus-visible {
@@ -34622,21 +34878,77 @@ to {
34622
34878
  outline-offset: 2px;
34623
34879
  }
34624
34880
 
34625
- .cn-board-view__columns[data-v-0dd966c7] {
34881
+ /*
34882
+ * screens-board-reference-columns: a wide board wraps its columns onto more
34883
+ * rows (`config.board.wrap`), as many to a row as fit at 240px, instead of
34884
+ * one row that scrolls sideways.
34885
+ */
34886
+ .cn-board-view.cn-board-view--wrap .cn-board-view__columns {
34887
+ display: grid;
34888
+ grid-auto-flow: row;
34889
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
34890
+ overflow-x: visible;
34891
+ }
34892
+
34893
+ .cn-board-view.cn-board-view--wrap:not(.cn-board-view--board) .cn-board-view__columns {
34894
+ gap: 12px;
34895
+ }
34896
+
34897
+ /* A column the dragged card cannot reach fades; the label stays readable. */
34898
+ .cn-board-view .cn-board-view__column--unreachable {
34899
+ opacity: 0.45;
34900
+ }
34901
+
34902
+ /* The selection checkbox: in the board look's card head, before the title. */
34903
+ .cn-board-view .cn-board-view__select {
34904
+ flex: none;
34905
+ width: 16px;
34906
+ height: 16px;
34907
+ margin: 2px 0 0;
34908
+ accent-color: var(--color-primary-element);
34909
+ cursor: pointer;
34910
+ }
34911
+
34912
+ /* Board look: the board draws no checkbox. It shows on a hovered card, on a
34913
+ card holding focus (so Tab still reaches it), once anything is selected, and
34914
+ always where there is no hover. Collapsed rather than hidden, so it stays in
34915
+ the tab order. */
34916
+ @media (hover: hover) {
34917
+ .cn-board-view.cn-board-view--board:not(.cn-board-view--selecting) .cn-board-view__card:not(:hover, :focus-within) .cn-board-view__select {
34918
+ width: 0;
34919
+ margin-inline-end: -8px;
34920
+ opacity: 0;
34921
+ }
34922
+ }
34923
+
34924
+ /* A menu target the card cannot reach: still listed, greyed, with its note. */
34925
+ .cn-board-view.cn-board-view--board .cn-board-view__menu-item.cn-board-view__menu-item--blocked {
34926
+ color: var(--color-text-maxcontrast);
34927
+ cursor: not-allowed;
34928
+ }
34929
+
34930
+ .cn-board-view .cn-board-view__menu-note {
34931
+ margin-inline-start: auto;
34932
+ padding-inline-start: 12px;
34933
+ font-size: 12px;
34934
+ color: var(--color-text-maxcontrast);
34935
+ }
34936
+
34937
+ .cn-board-view__columns[data-v-181b36b2] {
34626
34938
  display: flex;
34627
34939
  gap: 12px;
34628
34940
  overflow-x: auto;
34629
34941
  align-items: flex-start;
34630
34942
  }
34631
34943
 
34632
- .cn-board-view__column[data-v-0dd966c7] {
34944
+ .cn-board-view__column[data-v-181b36b2] {
34633
34945
  flex: 0 0 260px;
34634
34946
  background-color: var(--color-background-hover);
34635
34947
  border-radius: var(--border-radius-large);
34636
34948
  padding: 8px;
34637
34949
  }
34638
34950
 
34639
- .cn-board-view__column-header[data-v-0dd966c7] {
34951
+ .cn-board-view__column-header[data-v-181b36b2] {
34640
34952
  display: flex;
34641
34953
  justify-content: space-between;
34642
34954
  gap: 8px;
@@ -34644,13 +34956,13 @@ to {
34644
34956
  margin: 0 0 8px;
34645
34957
  }
34646
34958
 
34647
- .cn-board-view__count[data-v-0dd966c7],
34648
- .cn-board-view__empty[data-v-0dd966c7],
34649
- .cn-board-view__unusable[data-v-0dd966c7] {
34959
+ .cn-board-view__count[data-v-181b36b2],
34960
+ .cn-board-view__empty[data-v-181b36b2],
34961
+ .cn-board-view__unusable[data-v-181b36b2] {
34650
34962
  color: var(--color-text-maxcontrast);
34651
34963
  }
34652
34964
 
34653
- .cn-board-view__card[data-v-0dd966c7] {
34965
+ .cn-board-view__card[data-v-181b36b2] {
34654
34966
  display: block;
34655
34967
  background-color: var(--color-main-background);
34656
34968
  border: 1px solid var(--color-border);
@@ -34659,29 +34971,29 @@ to {
34659
34971
  margin-bottom: 8px;
34660
34972
  }
34661
34973
 
34662
- .cn-board-view__card-field[data-v-0dd966c7] {
34974
+ .cn-board-view__card-field[data-v-181b36b2] {
34663
34975
  display: block;
34664
34976
  }
34665
34977
 
34666
34978
  /* A late card: an edge in the error colour, drawn as an inset shadow so the
34667
34979
  card keeps its size and its rounded corners. The label below carries the
34668
34980
  meaning; the edge only helps a sighted reader find it. */
34669
- .cn-board-view__card--overdue[data-v-0dd966c7] {
34981
+ .cn-board-view__card--overdue[data-v-181b36b2] {
34670
34982
  border-color: var(--color-error);
34671
34983
  box-shadow: inset 3px 0 0 var(--color-error);
34672
34984
  }
34673
34985
 
34674
- .cn-board-view__due[data-v-0dd966c7] {
34986
+ .cn-board-view__due[data-v-181b36b2] {
34675
34987
  display: block;
34676
34988
  font-size: 0.85em;
34677
34989
  font-weight: 700;
34678
34990
  }
34679
34991
 
34680
- .cn-board-view__due--overdue[data-v-0dd966c7] {
34992
+ .cn-board-view__due--overdue[data-v-181b36b2] {
34681
34993
  color: var(--color-error-text, var(--color-error));
34682
34994
  }
34683
34995
 
34684
- .cn-board-view__due--soon[data-v-0dd966c7] {
34996
+ .cn-board-view__due--soon[data-v-181b36b2] {
34685
34997
  color: var(--color-warning-text, var(--color-main-text));
34686
34998
  font-weight: 600;
34687
34999
  }
@@ -34690,7 +35002,7 @@ to {
34690
35002
  * The card's opening control. The cursor and the focus ring live here now,
34691
35003
  * on the thing that actually does something, rather than on the box.
34692
35004
  */
34693
- .cn-board-view__card-open[data-v-0dd966c7] {
35005
+ .cn-board-view__card-open[data-v-181b36b2] {
34694
35006
  background: none;
34695
35007
  border: none;
34696
35008
  padding: 0;
@@ -34699,12 +35011,12 @@ to {
34699
35011
  font-size: 0.8rem;
34700
35012
  }
34701
35013
 
34702
- .cn-board-view__card-open[data-v-0dd966c7]:focus-visible {
35014
+ .cn-board-view__card-open[data-v-181b36b2]:focus-visible {
34703
35015
  outline: 2px solid var(--color-primary-element);
34704
35016
  outline-offset: 2px;
34705
35017
  }
34706
35018
 
34707
- .cn-board-view__lane-header[data-v-0dd966c7] {
35019
+ .cn-board-view__lane-header[data-v-181b36b2] {
34708
35020
  background: none;
34709
35021
  border: none;
34710
35022
  font-weight: bold;
@@ -34713,12 +35025,12 @@ to {
34713
35025
  color: var(--color-main-text);
34714
35026
  }
34715
35027
 
34716
- .cn-board-view__move-label[data-v-0dd966c7] {
35028
+ .cn-board-view__move-label[data-v-181b36b2] {
34717
35029
  color: var(--color-text-maxcontrast);
34718
35030
  font-size: 0.8rem;
34719
35031
  }
34720
35032
 
34721
- .cn-board-view__refusal[data-v-0dd966c7] {
35033
+ .cn-board-view__refusal[data-v-181b36b2] {
34722
35034
  color: var(--color-error);
34723
35035
  }
34724
35036
 
@@ -35505,6 +35817,16 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
35505
35817
  }
35506
35818
 
35507
35819
 
35820
+ .cn-run-node-dialog__form[data-v-2d7cb7f5] {
35821
+ display: flex;
35822
+ flex-direction: column;
35823
+ gap: 12px;
35824
+ }
35825
+ .cn-run-node-dialog__hint[data-v-2d7cb7f5] {
35826
+ color: var(--color-text-maxcontrast);
35827
+ }
35828
+
35829
+
35508
35830
  .cn-advanced-form-dialog__json-editor[data-v-3cca5b13] {
35509
35831
  display: flex;
35510
35832
  flex-direction: column;
@@ -36101,6 +36423,21 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
36101
36423
  }
36102
36424
 
36103
36425
 
36426
+ .cn-action-buttons[data-v-49607313] {
36427
+ display: inline-flex;
36428
+ align-items: center;
36429
+ gap: 8px;
36430
+ flex-wrap: wrap;
36431
+ }
36432
+
36433
+ /* In menu mode the only children are dialogs, so the wrapper must not be a
36434
+ box: an empty inline-flex child still eats one of the header's flex gaps
36435
+ and pushes the Actions menu away from the Edit button beside it. */
36436
+ .cn-action-buttons--menu[data-v-49607313] {
36437
+ display: contents;
36438
+ }
36439
+
36440
+
36104
36441
  .cn-copy__pattern[data-v-18a59770] {
36105
36442
  margin-bottom: 16px;
36106
36443
  }
@@ -37044,55 +37381,88 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37044
37381
  }
37045
37382
 
37046
37383
 
37047
- .cn-register-mapping__group[data-v-0abd37fe] {
37384
+ .cn-register-mapping__group[data-v-8d3cad98] {
37048
37385
  margin-bottom: 24px;
37049
37386
  border: 1px solid var(--color-border);
37050
37387
  border-radius: var(--border-radius-large);
37051
37388
  padding: 20px;
37052
37389
  background: var(--color-background-hover);
37053
37390
  }
37054
- .cn-register-mapping__group[data-v-0abd37fe]:last-child {
37391
+ .cn-register-mapping__group[data-v-8d3cad98]:last-child {
37055
37392
  margin-bottom: 0;
37056
37393
  }
37057
- .cn-register-mapping__group-header[data-v-0abd37fe] {
37394
+ .cn-register-mapping__group-header[data-v-8d3cad98] {
37058
37395
  display: flex;
37059
37396
  align-items: center;
37060
37397
  justify-content: space-between;
37061
37398
  margin-bottom: 12px;
37062
37399
  }
37063
- .cn-register-mapping__group-title[data-v-0abd37fe] {
37400
+ .cn-register-mapping__group-heading[data-v-8d3cad98] {
37401
+ margin: 0 0 12px;
37402
+ font: inherit;
37403
+ }
37404
+ .cn-register-mapping__group--collapsed .cn-register-mapping__group-heading[data-v-8d3cad98] {
37405
+ margin-bottom: 0;
37406
+ }
37407
+ .cn-register-mapping__group-toggle[data-v-8d3cad98] {
37408
+ box-sizing: border-box;
37409
+ display: flex;
37410
+ align-items: center;
37411
+ gap: 8px;
37412
+ width: 100%;
37413
+ min-height: 44px;
37414
+ margin: 0;
37415
+ padding: 0;
37416
+ border: 0;
37417
+ background: transparent;
37418
+ color: inherit;
37419
+ font: inherit;
37420
+ text-align: start;
37421
+ cursor: pointer;
37422
+ }
37423
+ .cn-register-mapping__group-toggle[data-v-8d3cad98]:focus-visible {
37424
+ outline: 2px solid var(--color-primary-element);
37425
+ outline-offset: 2px;
37426
+ border-radius: var(--border-radius);
37427
+ }
37428
+ .cn-register-mapping__group-chevron[data-v-8d3cad98] {
37429
+ display: inline-flex;
37430
+ flex: none;
37431
+ color: var(--color-text-maxcontrast);
37432
+ }
37433
+ .cn-register-mapping__group-toggle .cn-register-mapping__group-header[data-v-8d3cad98] {
37434
+ flex: 1 1 auto;
37435
+ flex-wrap: wrap;
37436
+ gap: 4px 12px;
37437
+ min-width: 0;
37438
+ margin-bottom: 0;
37439
+ }
37440
+ .cn-register-mapping__group-title[data-v-8d3cad98] {
37064
37441
  font-size: 16px;
37065
37442
  font-weight: 600;
37066
37443
  margin: 0;
37067
37444
  color: var(--color-main-text);
37068
37445
  }
37069
- .cn-register-mapping__group-status[data-v-0abd37fe] {
37446
+ .cn-register-mapping__group-status[data-v-8d3cad98] {
37070
37447
  font-size: 13px;
37071
37448
  color: var(--color-text-maxcontrast);
37072
37449
  }
37073
- .cn-register-mapping__group-description[data-v-0abd37fe] {
37450
+ .cn-register-mapping__group-description[data-v-8d3cad98] {
37074
37451
  color: var(--color-text-maxcontrast);
37075
37452
  font-size: 13px;
37076
37453
  margin: 0 0 12px 0;
37077
37454
  }
37078
- .cn-register-mapping__label[data-v-0abd37fe] {
37079
- display: block;
37080
- font-weight: 500;
37081
- font-size: 13px;
37082
- color: var(--color-text-maxcontrast);
37083
- margin-bottom: 4px;
37084
- }
37085
- .cn-register-mapping__register-select[data-v-0abd37fe] {
37455
+ .cn-register-mapping__register-select[data-v-8d3cad98] {
37086
37456
  margin-bottom: 16px;
37087
37457
  max-width: 400px;
37088
37458
  }
37089
- .cn-register-mapping__type-list[data-v-0abd37fe] {
37459
+ .cn-register-mapping__type-list[data-v-8d3cad98] {
37090
37460
  border: 1px solid var(--color-border);
37091
37461
  border-radius: var(--border-radius);
37092
37462
  overflow: hidden;
37093
37463
  background: var(--color-main-background);
37094
37464
  }
37095
- .cn-register-mapping__type-list-header[data-v-0abd37fe] {
37465
+ .cn-register-mapping__type-list-header[data-v-8d3cad98] {
37096
37466
  display: grid;
37097
37467
  grid-template-columns: 1fr 1fr 40px 32px;
37098
37468
  align-items: center;
@@ -37105,7 +37475,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37105
37475
  border-bottom: 1px solid var(--color-border);
37106
37476
  background: var(--color-background-hover);
37107
37477
  }
37108
- .cn-register-mapping__type-row[data-v-0abd37fe] {
37478
+ .cn-register-mapping__type-row[data-v-8d3cad98] {
37109
37479
  display: grid;
37110
37480
  grid-template-columns: 1fr 1fr 40px 32px;
37111
37481
  align-items: center;
@@ -37114,61 +37484,61 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37114
37484
  cursor: pointer;
37115
37485
  transition: background-color 0.15s ease;
37116
37486
  }
37117
- .cn-register-mapping__type-row[data-v-0abd37fe]:hover {
37487
+ .cn-register-mapping__type-row[data-v-8d3cad98]:hover {
37118
37488
  background: var(--color-background-hover);
37119
37489
  }
37120
- .cn-register-mapping__type-row--expanded[data-v-0abd37fe] {
37490
+ .cn-register-mapping__type-row--expanded[data-v-8d3cad98] {
37121
37491
  background: var(--color-background-hover);
37122
37492
  }
37123
- .cn-register-mapping__type-name[data-v-0abd37fe] {
37493
+ .cn-register-mapping__type-name[data-v-8d3cad98] {
37124
37494
  font-weight: 500;
37125
37495
  color: var(--color-main-text);
37126
37496
  }
37127
- .cn-register-mapping__type-schema[data-v-0abd37fe] {
37497
+ .cn-register-mapping__type-schema[data-v-8d3cad98] {
37128
37498
  color: var(--color-text-maxcontrast);
37129
37499
  font-size: 13px;
37130
37500
  }
37131
- .cn-register-mapping__type-status[data-v-0abd37fe] {
37501
+ .cn-register-mapping__type-status[data-v-8d3cad98] {
37132
37502
  display: flex;
37133
37503
  justify-content: center;
37134
37504
  }
37135
- .cn-register-mapping__type-chevron[data-v-0abd37fe] {
37505
+ .cn-register-mapping__type-chevron[data-v-8d3cad98] {
37136
37506
  display: flex;
37137
37507
  justify-content: center;
37138
37508
  color: var(--color-text-maxcontrast);
37139
37509
  }
37140
- .cn-register-mapping__status-dot[data-v-0abd37fe] {
37510
+ .cn-register-mapping__status-dot[data-v-8d3cad98] {
37141
37511
  display: inline-block;
37142
37512
  width: 10px;
37143
37513
  height: 10px;
37144
37514
  border-radius: 50%;
37145
37515
  }
37146
- .cn-register-mapping__status-dot--configured[data-v-0abd37fe] {
37516
+ .cn-register-mapping__status-dot--configured[data-v-8d3cad98] {
37147
37517
  background-color: var(--color-success);
37148
37518
  }
37149
- .cn-register-mapping__status-dot--unconfigured[data-v-0abd37fe] {
37519
+ .cn-register-mapping__status-dot--unconfigured[data-v-8d3cad98] {
37150
37520
  background-color: var(--color-warning);
37151
37521
  }
37152
- .cn-register-mapping__type-detail[data-v-0abd37fe] {
37522
+ .cn-register-mapping__type-detail[data-v-8d3cad98] {
37153
37523
  padding: 12px 16px 16px;
37154
37524
  border-bottom: 1px solid var(--color-border);
37155
37525
  background: var(--color-main-background);
37156
37526
  }
37157
- .cn-register-mapping__type-description[data-v-0abd37fe] {
37527
+ .cn-register-mapping__type-description[data-v-8d3cad98] {
37158
37528
  color: var(--color-text-maxcontrast);
37159
37529
  font-size: 13px;
37160
37530
  margin: 0 0 8px 0;
37161
37531
  }
37162
37532
 
37163
37533
  /* Slide transition */
37164
- .slide-enter-active[data-v-0abd37fe],
37165
- .slide-leave-active[data-v-0abd37fe] {
37534
+ .slide-enter-active[data-v-8d3cad98],
37535
+ .slide-leave-active[data-v-8d3cad98] {
37166
37536
  transition: all 0.2s ease;
37167
37537
  max-height: 200px;
37168
37538
  overflow: hidden;
37169
37539
  }
37170
- .slide-enter[data-v-0abd37fe],
37171
- .slide-leave-to[data-v-0abd37fe] {
37540
+ .slide-enter[data-v-8d3cad98],
37541
+ .slide-leave-to[data-v-8d3cad98] {
37172
37542
  max-height: 0;
37173
37543
  padding-top: 0;
37174
37544
  padding-bottom: 0;
@@ -37176,20 +37546,20 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37176
37546
  }
37177
37547
 
37178
37548
  /* Last row in list should not have bottom border */
37179
- .cn-register-mapping__type-list[data-v-0abd37fe] > :last-child {
37549
+ .cn-register-mapping__type-list[data-v-8d3cad98] > :last-child {
37180
37550
  border-bottom: none;
37181
37551
  }
37182
37552
  @media (max-width: 768px) {
37183
- .cn-register-mapping__type-list-header[data-v-0abd37fe] {
37553
+ .cn-register-mapping__type-list-header[data-v-8d3cad98] {
37184
37554
  display: none;
37185
37555
  }
37186
- .cn-register-mapping__type-row[data-v-0abd37fe] {
37556
+ .cn-register-mapping__type-row[data-v-8d3cad98] {
37187
37557
  grid-template-columns: 1fr auto 32px;
37188
37558
  }
37189
- .cn-register-mapping__type-schema[data-v-0abd37fe] {
37559
+ .cn-register-mapping__type-schema[data-v-8d3cad98] {
37190
37560
  display: none;
37191
37561
  }
37192
- .cn-register-mapping__register-select[data-v-0abd37fe] {
37562
+ .cn-register-mapping__register-select[data-v-8d3cad98] {
37193
37563
  max-width: none;
37194
37564
  }
37195
37565
  }
@@ -37392,31 +37762,6 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37392
37762
  }
37393
37763
 
37394
37764
 
37395
- .cn-run-node-dialog__form[data-v-2d7cb7f5] {
37396
- display: flex;
37397
- flex-direction: column;
37398
- gap: 12px;
37399
- }
37400
- .cn-run-node-dialog__hint[data-v-2d7cb7f5] {
37401
- color: var(--color-text-maxcontrast);
37402
- }
37403
-
37404
-
37405
- .cn-action-buttons[data-v-49607313] {
37406
- display: inline-flex;
37407
- align-items: center;
37408
- gap: 8px;
37409
- flex-wrap: wrap;
37410
- }
37411
-
37412
- /* In menu mode the only children are dialogs, so the wrapper must not be a
37413
- box: an empty inline-flex child still eats one of the header's flex gaps
37414
- and pushes the Actions menu away from the Edit button beside it. */
37415
- .cn-action-buttons--menu[data-v-49607313] {
37416
- display: contents;
37417
- }
37418
-
37419
-
37420
37765
  .cn-relation-link[data-v-6559b00a] {
37421
37766
  padding: 20px;
37422
37767
  display: flex;
@@ -37533,17 +37878,17 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37533
37878
  }
37534
37879
 
37535
37880
 
37536
- .cn-dashboard-grid[data-v-ca2ae49c] {
37881
+ .cn-dashboard-grid[data-v-a91998fc] {
37537
37882
  width: 100%;
37538
37883
  min-height: 200px;
37539
37884
  }
37540
- .grid-stack[data-v-ca2ae49c] {
37885
+ .grid-stack[data-v-a91998fc] {
37541
37886
  background: transparent;
37542
37887
  }
37543
37888
 
37544
37889
  /* Screen-reader-only text: the keyboard key map and the live region. Kept in
37545
37890
  the layout (not `display: none`) so assistive tech still reads it. */
37546
- .cn-dashboard-grid__sr-only[data-v-ca2ae49c] {
37891
+ .cn-dashboard-grid__sr-only[data-v-a91998fc] {
37547
37892
  position: absolute;
37548
37893
  width: 1px;
37549
37894
  height: 1px;
@@ -37558,7 +37903,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37558
37903
  /* Grid items become tab stops in edit mode — give them a visible focus ring
37559
37904
  that satisfies WCAG 2.1 SC 2.4.7 without relying on the widget's own
37560
37905
  styling. `outline-offset` keeps the ring outside the rounded card. */
37561
- .grid-stack-item[data-v-ca2ae49c]:focus-visible {
37906
+ .grid-stack-item[data-v-a91998fc]:focus-visible {
37562
37907
  outline: 2px solid var(--color-primary-element, #0082c9);
37563
37908
  outline-offset: 2px;
37564
37909
  border-radius: var(--border-radius-container-large, 16px);
@@ -37570,19 +37915,19 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37570
37915
  cell never shrank: "Waiting for me" stayed a tall card around one row. In
37571
37916
  such a cell the child takes its own height. A cell without the key keeps
37572
37917
  the filling child. */
37573
- .cn-dashboard-grid__item--fit[data-v-ca2ae49c] > .grid-stack-item-content > * {
37918
+ .cn-dashboard-grid__item--fit[data-v-a91998fc] > .grid-stack-item-content > * {
37574
37919
  height: auto;
37575
37920
  }
37576
- [data-v-ca2ae49c] .grid-stack-item-content {
37921
+ [data-v-a91998fc] .grid-stack-item-content {
37577
37922
  background: var(--color-main-background);
37578
37923
  border: none;
37579
37924
  box-shadow: none;
37580
37925
  overflow: hidden;
37581
37926
  }
37582
- [data-v-ca2ae49c] .grid-stack-item-content:has(.cn-widget-wrapper--borderless) {
37927
+ [data-v-a91998fc] .grid-stack-item-content:has(.cn-widget-wrapper--borderless) {
37583
37928
  background: transparent;
37584
37929
  }
37585
- [data-v-ca2ae49c] .grid-stack-placeholder > .placeholder-content {
37930
+ [data-v-a91998fc] .grid-stack-placeholder > .placeholder-content {
37586
37931
  background: var(--color-primary-element-light);
37587
37932
  border: 2px dashed var(--color-primary-element);
37588
37933
  border-radius: var(--border-radius-large);
@@ -37850,7 +38195,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37850
38195
  }
37851
38196
 
37852
38197
 
37853
- .cn-dashboard-page[data-v-4abdd0ae] {
38198
+ .cn-dashboard-page[data-v-8b7dcccc] {
37854
38199
  padding: 20px;
37855
38200
  max-width: 1800px;
37856
38201
  /* Centre the leftover space once the cap engages, so a wide screen shows
@@ -37864,7 +38209,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37864
38209
  overflow-y: auto;
37865
38210
  box-sizing: border-box;
37866
38211
  }
37867
- .cn-dashboard-page__header[data-v-4abdd0ae] {
38212
+ .cn-dashboard-page__header[data-v-8b7dcccc] {
37868
38213
  display: flex;
37869
38214
  justify-content: space-between;
37870
38215
  align-items: flex-start;
@@ -37876,21 +38221,21 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37876
38221
  room. Only the HEADER shifts right — body widgets keep full width. */
37877
38222
  padding-inline-start: 56px;
37878
38223
  }
37879
- .cn-dashboard-page__header-left[data-v-4abdd0ae] {
38224
+ .cn-dashboard-page__header-left[data-v-8b7dcccc] {
37880
38225
  min-width: 0;
37881
38226
  }
37882
- .cn-dashboard-page__title-row[data-v-4abdd0ae] {
38227
+ .cn-dashboard-page__title-row[data-v-8b7dcccc] {
37883
38228
  display: flex;
37884
38229
  align-items: center;
37885
38230
  flex-wrap: wrap;
37886
38231
  gap: 12px;
37887
38232
  }
37888
- .cn-dashboard-page__title[data-v-4abdd0ae] {
38233
+ .cn-dashboard-page__title[data-v-8b7dcccc] {
37889
38234
  margin: 0;
37890
38235
  font-size: 20px;
37891
38236
  font-weight: 700;
37892
38237
  }
37893
- .cn-dashboard-page__description[data-v-4abdd0ae] {
38238
+ .cn-dashboard-page__description[data-v-8b7dcccc] {
37894
38239
  margin: 4px 0 0;
37895
38240
  font-size: 14px;
37896
38241
  color: var(--color-text-maxcontrast);
@@ -37898,19 +38243,19 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37898
38243
 
37899
38244
  /* Board look (screens-dashboard-parity): h1 28/700, a 15px grey subtitle 6px
37900
38245
  under it, and 40px buttons with a 10px gap. */
37901
- .cn-dashboard-page--board .cn-dashboard-page__title[data-v-4abdd0ae] {
38246
+ .cn-dashboard-page--board .cn-dashboard-page__title[data-v-8b7dcccc] {
37902
38247
  font-size: 28px;
37903
38248
  font-weight: 700;
37904
38249
  line-height: 1.2;
37905
38250
  }
37906
- .cn-dashboard-page--board .cn-dashboard-page__description[data-v-4abdd0ae] {
38251
+ .cn-dashboard-page--board .cn-dashboard-page__description[data-v-8b7dcccc] {
37907
38252
  margin: 6px 0 0;
37908
38253
  font-size: 15px;
37909
38254
  }
37910
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4abdd0ae] {
38255
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-8b7dcccc] {
37911
38256
  gap: 10px;
37912
38257
  }
37913
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4abdd0ae] .button-vue {
38258
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-8b7dcccc] .button-vue {
37914
38259
  min-height: var(--cn-board-control-height, 40px);
37915
38260
  height: var(--cn-board-control-height, 40px);
37916
38261
  }
@@ -37918,17 +38263,17 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37918
38263
  /* The switch row under the header (screens-dashboard-greeting-header): the
37919
38264
  view switch left, the `viewLinks` pills right (DqMijnWerk: pills 34px high,
37920
38265
  radius 17, 13px/600, a 14px icon, primary light on primary deep). */
37921
- .cn-dashboard-page__switch-row[data-v-4abdd0ae] {
38266
+ .cn-dashboard-page__switch-row[data-v-8b7dcccc] {
37922
38267
  display: flex;
37923
38268
  flex-wrap: wrap;
37924
38269
  align-items: center;
37925
38270
  gap: 10px;
37926
38271
  margin-bottom: var(--cn-board-section-gap, 20px);
37927
38272
  }
37928
- .cn-dashboard-page__switch-row-spacer[data-v-4abdd0ae] {
38273
+ .cn-dashboard-page__switch-row-spacer[data-v-8b7dcccc] {
37929
38274
  flex: 1 1 auto;
37930
38275
  }
37931
- .cn-dashboard-page__view-link[data-v-4abdd0ae] {
38276
+ .cn-dashboard-page__view-link[data-v-8b7dcccc] {
37932
38277
  display: inline-flex;
37933
38278
  align-items: center;
37934
38279
  gap: 6px;
@@ -37942,36 +38287,36 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37942
38287
  white-space: nowrap;
37943
38288
  text-decoration: none !important;
37944
38289
  }
37945
- .cn-dashboard-page__view-link[data-v-4abdd0ae]:hover {
38290
+ .cn-dashboard-page__view-link[data-v-8b7dcccc]:hover {
37946
38291
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
37947
38292
  }
37948
- .cn-dashboard-page__view-link[data-v-4abdd0ae]:focus-visible {
38293
+ .cn-dashboard-page__view-link[data-v-8b7dcccc]:focus-visible {
37949
38294
  outline: 2px solid var(--color-main-text);
37950
38295
  outline-offset: 2px;
37951
38296
  }
37952
- .cn-dashboard-page__view-link-icon[data-v-4abdd0ae] {
38297
+ .cn-dashboard-page__view-link-icon[data-v-8b7dcccc] {
37953
38298
  display: inline-flex;
37954
38299
  }
37955
38300
 
37956
38301
  /* The period group, in a row of its own between the header and the KPI row. */
37957
- .cn-dashboard-page__date-range--segmented[data-v-4abdd0ae] {
38302
+ .cn-dashboard-page__date-range--segmented[data-v-8b7dcccc] {
37958
38303
  margin-bottom: 16px;
37959
38304
  }
37960
- .cn-dashboard-page__date-segmented[data-v-4abdd0ae] {
38305
+ .cn-dashboard-page__date-segmented[data-v-8b7dcccc] {
37961
38306
  display: flex;
37962
38307
  align-items: center;
37963
38308
  gap: 8px;
37964
38309
  }
37965
38310
 
37966
38311
  /* The KPI row above the grid: tiles are cells of the auto-fit grid. */
37967
- .cn-dashboard-page__kpi-row[data-v-4abdd0ae] {
38312
+ .cn-dashboard-page__kpi-row[data-v-8b7dcccc] {
37968
38313
  margin-bottom: var(--cn-board-section-gap, 16px);
37969
38314
  }
37970
- .cn-dashboard-page__kpi-cell[data-v-4abdd0ae] {
38315
+ .cn-dashboard-page__kpi-cell[data-v-8b7dcccc] {
37971
38316
  display: flex;
37972
38317
  min-width: 0;
37973
38318
  }
37974
- .cn-dashboard-page__kpi-cell[data-v-4abdd0ae] > * {
38319
+ .cn-dashboard-page__kpi-cell[data-v-8b7dcccc] > * {
37975
38320
  flex: 1 1 auto;
37976
38321
  min-width: 0;
37977
38322
  }
@@ -37984,7 +38329,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37984
38329
  scoped chip rules then silently don't match and the chip collapses into
37985
38330
  NcActions' ~30px icon slot (text wraps to "Last / 30 / days"). The
37986
38331
  data-testid is stable across chunks, so those rules match regardless. */
37987
- .cn-dashboard-page__header-actions[data-v-4abdd0ae] {
38332
+ .cn-dashboard-page__header-actions[data-v-8b7dcccc] {
37988
38333
  display: flex;
37989
38334
  align-items: center;
37990
38335
  gap: 8px;
@@ -38000,19 +38345,19 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38000
38345
 
38001
38346
  /* Date-range header band. Kept compact so it doesn't open a tall gap
38002
38347
  above the grid; the pills variant is a single tidy toggle row. */
38003
- .cn-dashboard-page__date-range[data-v-4abdd0ae] {
38348
+ .cn-dashboard-page__date-range[data-v-8b7dcccc] {
38004
38349
  margin-bottom: 12px;
38005
38350
  }
38006
- .cn-dashboard-page__date-range--pills[data-v-4abdd0ae] {
38351
+ .cn-dashboard-page__date-range--pills[data-v-8b7dcccc] {
38007
38352
  margin-bottom: 8px;
38008
38353
  }
38009
- .cn-dashboard-page__date-pills[data-v-4abdd0ae] {
38354
+ .cn-dashboard-page__date-pills[data-v-8b7dcccc] {
38010
38355
  display: flex;
38011
38356
  align-items: center;
38012
38357
  flex-wrap: wrap;
38013
38358
  gap: 6px;
38014
38359
  }
38015
- .cn-dashboard-page__date-pill[data-v-4abdd0ae] {
38360
+ .cn-dashboard-page__date-pill[data-v-8b7dcccc] {
38016
38361
  display: inline-flex;
38017
38362
  align-items: center;
38018
38363
  padding: 5px 14px;
@@ -38027,77 +38372,77 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38027
38372
  cursor: pointer;
38028
38373
  transition: background-color 100ms ease, border-color 100ms ease, color 100ms ease;
38029
38374
  }
38030
- .cn-dashboard-page__date-pill[data-v-4abdd0ae]:hover {
38375
+ .cn-dashboard-page__date-pill[data-v-8b7dcccc]:hover {
38031
38376
  background: var(--color-background-hover);
38032
38377
  }
38033
- .cn-dashboard-page__date-pill[data-v-4abdd0ae]:focus-visible {
38378
+ .cn-dashboard-page__date-pill[data-v-8b7dcccc]:focus-visible {
38034
38379
  outline: 2px solid var(--color-primary-element);
38035
38380
  outline-offset: 2px;
38036
38381
  }
38037
- .cn-dashboard-page__date-pill--active[data-v-4abdd0ae] {
38382
+ .cn-dashboard-page__date-pill--active[data-v-8b7dcccc] {
38038
38383
  background: var(--color-primary-element);
38039
38384
  border-color: var(--color-primary-element);
38040
38385
  color: var(--color-primary-element-text);
38041
38386
  }
38042
- .cn-dashboard-page__date-pill--active[data-v-4abdd0ae]:hover {
38387
+ .cn-dashboard-page__date-pill--active[data-v-8b7dcccc]:hover {
38043
38388
  background: var(--color-primary-element-hover, var(--color-primary-element));
38044
38389
  }
38045
38390
 
38046
38391
  /* The custom-range pill is de-emphasised — dashed outline, muted text —
38047
38392
  so it reads as an escape hatch rather than a primary option. */
38048
- .cn-dashboard-page__date-pill--custom[data-v-4abdd0ae] {
38393
+ .cn-dashboard-page__date-pill--custom[data-v-8b7dcccc] {
38049
38394
  border-style: dashed;
38050
38395
  color: var(--color-text-maxcontrast);
38051
38396
  }
38052
- .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .action-item__menutoggle {
38397
+ .cn-dashboard-page__date-pill-custom[data-v-8b7dcccc] .action-item__menutoggle {
38053
38398
  min-width: 0;
38054
38399
  min-height: 0;
38055
38400
  padding: 0;
38056
38401
  background: transparent;
38057
38402
  border: none;
38058
38403
  }
38059
- .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .button-vue,
38060
- .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .button-vue__wrapper,
38061
- .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .button-vue__icon {
38404
+ .cn-dashboard-page__date-pill-custom[data-v-8b7dcccc] .button-vue,
38405
+ .cn-dashboard-page__date-pill-custom[data-v-8b7dcccc] .button-vue__wrapper,
38406
+ .cn-dashboard-page__date-pill-custom[data-v-8b7dcccc] .button-vue__icon {
38062
38407
  width: auto !important;
38063
38408
  min-width: 0 !important;
38064
38409
  overflow: visible !important;
38065
38410
  }
38066
- .cn-dashboard-page__empty[data-v-4abdd0ae] {
38411
+ .cn-dashboard-page__empty[data-v-8b7dcccc] {
38067
38412
  padding: 60px 20px;
38068
38413
  }
38069
38414
 
38070
38415
  /* The page's view switch on a page without a header row: at the end of its
38071
38416
  own row, above the grids, where the header would have put it. */
38072
- .cn-dashboard-page__view-switch[data-v-4abdd0ae] {
38417
+ .cn-dashboard-page__view-switch[data-v-8b7dcccc] {
38073
38418
  display: flex;
38074
38419
  justify-content: flex-end;
38075
38420
  margin-bottom: 12px;
38076
38421
  }
38077
38422
 
38078
38423
  /* A view the switch shows with nothing to draw. */
38079
- .cn-page-view-region--empty[data-v-4abdd0ae] {
38424
+ .cn-page-view-region--empty[data-v-8b7dcccc] {
38080
38425
  padding: 40px 20px;
38081
38426
  }
38082
- .cn-dashboard-page__page-filters[data-v-4abdd0ae] {
38427
+ .cn-dashboard-page__page-filters[data-v-8b7dcccc] {
38083
38428
  display: flex;
38084
38429
  flex-wrap: wrap;
38085
38430
  gap: 16px;
38086
38431
  align-items: flex-end;
38087
38432
  margin-bottom: 12px;
38088
38433
  }
38089
- .cn-dashboard-page__page-filter[data-v-4abdd0ae] {
38434
+ .cn-dashboard-page__page-filter[data-v-8b7dcccc] {
38090
38435
  display: flex;
38091
38436
  flex-direction: column;
38092
38437
  gap: 4px;
38093
38438
  min-width: 200px;
38094
38439
  }
38095
- .cn-dashboard-page__page-filter-label[data-v-4abdd0ae] {
38440
+ .cn-dashboard-page__page-filter-label[data-v-8b7dcccc] {
38096
38441
  font-size: 0.85em;
38097
38442
  font-weight: 600;
38098
38443
  color: var(--color-text-maxcontrast);
38099
38444
  }
38100
- .cn-dashboard-page__widget-edit[data-v-4abdd0ae] {
38445
+ .cn-dashboard-page__widget-edit[data-v-8b7dcccc] {
38101
38446
  position: absolute;
38102
38447
  top: 4px;
38103
38448
  inset-inline-end: 4px;
@@ -38116,8 +38461,8 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38116
38461
  and centre the card. */
38117
38462
  /* `safe` centre so an overflowing tile does not spill out of the top, where
38118
38463
  flex overflow cannot be scrolled back to. Same as detail-page.css. */
38119
- .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-widget-wrapper__content,
38120
- .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-4abdd0ae] .cn-widget-wrapper__content {
38464
+ .cn-dashboard-page__card-fit[data-v-8b7dcccc] .cn-widget-wrapper__content,
38465
+ .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-8b7dcccc] .cn-widget-wrapper__content {
38121
38466
  overflow: hidden;
38122
38467
  display: flex;
38123
38468
  flex-direction: column;
@@ -38133,7 +38478,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38133
38478
  shows up as a scrollbar the user has to drag to see the whole graph. Same
38134
38479
  shape as the card-fit rule above, minus the padding: chart tiles render
38135
38480
  `flush`, and apexcharts already draws its own margins. */
38136
- .cn-dashboard-page__chart-fit[data-v-4abdd0ae] .cn-widget-wrapper__content {
38481
+ .cn-dashboard-page__chart-fit[data-v-8b7dcccc] .cn-widget-wrapper__content {
38137
38482
  overflow: hidden;
38138
38483
  display: flex;
38139
38484
  flex-direction: column;
@@ -38143,13 +38488,13 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38143
38488
  /* Card content (stat / gauge / delta) must fit the tile width: let the
38144
38489
  widget shrink and its value/label truncate instead of pushing past the
38145
38490
  tile edge (the horizontal clip on long currency values). */
38146
- .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-stat-widget,
38147
- .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-gauge-widget,
38148
- .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-delta-widget {
38491
+ .cn-dashboard-page__card-fit[data-v-8b7dcccc] .cn-stat-widget,
38492
+ .cn-dashboard-page__card-fit[data-v-8b7dcccc] .cn-gauge-widget,
38493
+ .cn-dashboard-page__card-fit[data-v-8b7dcccc] .cn-delta-widget {
38149
38494
  min-width: 0;
38150
38495
  max-width: 100%;
38151
38496
  }
38152
- .cn-dashboard-page__unknown[data-v-4abdd0ae] {
38497
+ .cn-dashboard-page__unknown[data-v-8b7dcccc] {
38153
38498
  display: flex;
38154
38499
  align-items: center;
38155
38500
  justify-content: center;
@@ -38160,29 +38505,29 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38160
38505
  }
38161
38506
 
38162
38507
  /* widget-ref content items */
38163
- .cn-dashboard-page__content[data-v-4abdd0ae] {
38508
+ .cn-dashboard-page__content[data-v-8b7dcccc] {
38164
38509
  display: flex;
38165
38510
  flex-direction: column;
38166
38511
  gap: 16px;
38167
38512
  }
38168
- .cn-dashboard-page__content-item[data-v-4abdd0ae] {
38513
+ .cn-dashboard-page__content-item[data-v-8b7dcccc] {
38169
38514
  width: 100%;
38170
38515
  }
38171
38516
  /* On a phone (screens-dashboard-phone) the touch targets of a board dashboard
38172
38517
  are 44px: the widget Actions menu and the KPI tiles. */
38173
38518
  @media (max-width: 640px) {
38174
- .cn-dashboard-page--board[data-v-4abdd0ae] .cn-widget-wrapper__actions .action-item__menutoggle,
38175
- .cn-dashboard-page--board[data-v-4abdd0ae] .cn-widget-wrapper__actions .button-vue {
38519
+ .cn-dashboard-page--board[data-v-8b7dcccc] .cn-widget-wrapper__actions .action-item__menutoggle,
38520
+ .cn-dashboard-page--board[data-v-8b7dcccc] .cn-widget-wrapper__actions .button-vue {
38176
38521
  min-height: 44px;
38177
38522
  }
38178
- .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-4abdd0ae] {
38523
+ .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-8b7dcccc] {
38179
38524
  min-height: 44px;
38180
38525
  }
38181
38526
  }
38182
38527
 
38183
38528
  /* What a registry widget reports for its card header (`header` event): the
38184
38529
  note beside the link ("3 in total") and one action, as on a detail page. */
38185
- .cn-dashboard-page__widget-count[data-v-4abdd0ae] {
38530
+ .cn-dashboard-page__widget-count[data-v-8b7dcccc] {
38186
38531
  align-self: center;
38187
38532
  padding: 1px 8px;
38188
38533
  border-radius: 10px;
@@ -38191,13 +38536,13 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38191
38536
  font-size: 13px;
38192
38537
  font-weight: 600;
38193
38538
  }
38194
- .cn-dashboard-page__widget-note[data-v-4abdd0ae] {
38539
+ .cn-dashboard-page__widget-note[data-v-8b7dcccc] {
38195
38540
  align-self: center;
38196
38541
  color: var(--color-text-maxcontrast);
38197
38542
  font-size: 14px;
38198
38543
  white-space: nowrap;
38199
38544
  }
38200
- .cn-dashboard-page__widget-action[data-v-4abdd0ae] {
38545
+ .cn-dashboard-page__widget-action[data-v-8b7dcccc] {
38201
38546
  display: inline-flex;
38202
38547
  align-items: center;
38203
38548
  align-self: center;
@@ -38213,7 +38558,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38213
38558
  white-space: nowrap;
38214
38559
  cursor: pointer;
38215
38560
  }
38216
- .cn-dashboard-page__widget-action[data-v-4abdd0ae]:focus-visible {
38561
+ .cn-dashboard-page__widget-action[data-v-8b7dcccc]:focus-visible {
38217
38562
  outline: 2px solid var(--color-primary-element);
38218
38563
  outline-offset: 2px;
38219
38564
  }
@@ -40265,21 +40610,21 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40265
40610
 
40266
40611
 
40267
40612
  /* The section wrapper draws no box; the board look makes it the card grid. */
40268
- .cn-settings-page__sections[data-v-1c7a70aa] {
40613
+ .cn-settings-page__sections[data-v-04e49f77] {
40269
40614
  display: contents;
40270
40615
  }
40271
- .cn-settings-page__header-buttons[data-v-1c7a70aa] {
40616
+ .cn-settings-page__header-buttons[data-v-04e49f77] {
40272
40617
  display: flex;
40273
40618
  align-items: center;
40274
40619
  gap: 10px;
40275
40620
  margin-inline-start: auto;
40276
40621
  }
40277
- .cn-settings-page[data-v-1c7a70aa] {
40622
+ .cn-settings-page[data-v-04e49f77] {
40278
40623
  display: flex;
40279
40624
  flex-direction: column;
40280
40625
  gap: 16px;
40281
40626
  }
40282
- .cn-settings-page__actions[data-v-1c7a70aa] {
40627
+ .cn-settings-page__actions[data-v-04e49f77] {
40283
40628
  display: flex;
40284
40629
  justify-content: flex-end;
40285
40630
  gap: 8px;
@@ -40290,7 +40635,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40290
40635
  * orchestration REQ-MSO-5). Uses Nextcloud CSS variables only — no
40291
40636
  * hex literals, no rgba overrides on the elements themselves.
40292
40637
  */
40293
- .cn-settings-page__tabs[data-v-1c7a70aa] {
40638
+ .cn-settings-page__tabs[data-v-04e49f77] {
40294
40639
  display: flex;
40295
40640
  flex-wrap: wrap;
40296
40641
  gap: 4px;
@@ -40298,7 +40643,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40298
40643
  padding-bottom: 0;
40299
40644
  margin-bottom: 8px;
40300
40645
  }
40301
- .cn-settings-page__tab[data-v-1c7a70aa] {
40646
+ .cn-settings-page__tab[data-v-04e49f77] {
40302
40647
  background: transparent;
40303
40648
  border: 0;
40304
40649
  border-bottom: 3px solid transparent;
@@ -40310,52 +40655,52 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40310
40655
  border-radius: var(--border-radius-large) var(--border-radius-large) 0 0;
40311
40656
  transition: background-color 0.1s ease-in-out, color 0.1s ease-in-out, border-color 0.1s ease-in-out;
40312
40657
  }
40313
- .cn-settings-page__tab[data-v-1c7a70aa]:hover,
40314
- .cn-settings-page__tab[data-v-1c7a70aa]:focus-visible {
40658
+ .cn-settings-page__tab[data-v-04e49f77]:hover,
40659
+ .cn-settings-page__tab[data-v-04e49f77]:focus-visible {
40315
40660
  background-color: var(--color-background-hover);
40316
40661
  color: var(--color-main-text);
40317
40662
  outline: none;
40318
40663
  }
40319
- .cn-settings-page__tab--active[data-v-1c7a70aa] {
40664
+ .cn-settings-page__tab--active[data-v-04e49f77] {
40320
40665
  color: var(--color-primary-element);
40321
40666
  border-bottom-color: var(--color-primary-element);
40322
40667
  font-weight: bold;
40323
40668
  }
40324
40669
  @media (max-width: 768px) {
40325
- .cn-settings-page__tabs[data-v-1c7a70aa] {
40670
+ .cn-settings-page__tabs[data-v-04e49f77] {
40326
40671
  flex-direction: column;
40327
40672
  gap: 0;
40328
40673
  border-bottom: 0;
40329
40674
  }
40330
- .cn-settings-page__tab[data-v-1c7a70aa] {
40675
+ .cn-settings-page__tab[data-v-04e49f77] {
40331
40676
  border-bottom: 1px solid var(--color-border);
40332
40677
  border-radius: 0;
40333
40678
  text-align: left;
40334
40679
  }
40335
- .cn-settings-page__tab--active[data-v-1c7a70aa] {
40680
+ .cn-settings-page__tab--active[data-v-04e49f77] {
40336
40681
  border-bottom-width: 1px;
40337
40682
  background-color: var(--color-background-hover);
40338
40683
  }
40339
40684
  }
40340
- .cn-settings-page__fields[data-v-1c7a70aa] {
40685
+ .cn-settings-page__fields[data-v-04e49f77] {
40341
40686
  display: flex;
40342
40687
  flex-direction: column;
40343
40688
  gap: 12px;
40344
40689
  }
40345
- .cn-settings-page__field[data-v-1c7a70aa] {
40690
+ .cn-settings-page__field[data-v-04e49f77] {
40346
40691
  display: flex;
40347
40692
  flex-direction: column;
40348
40693
  gap: 4px;
40349
40694
  }
40350
- .cn-settings-page__field-help[data-v-1c7a70aa] {
40695
+ .cn-settings-page__field-help[data-v-04e49f77] {
40351
40696
  color: var(--color-text-maxcontrast);
40352
40697
  }
40353
- .cn-settings-page__save-bar[data-v-1c7a70aa] {
40698
+ .cn-settings-page__save-bar[data-v-04e49f77] {
40354
40699
  display: flex;
40355
40700
  gap: 8px;
40356
40701
  margin-top: 16px;
40357
40702
  }
40358
- .cn-settings-page__error[data-v-1c7a70aa] {
40703
+ .cn-settings-page__error[data-v-04e49f77] {
40359
40704
  color: var(--color-error);
40360
40705
  background: var(--color-error-light, var(--color-background-hover));
40361
40706
  padding: 8px 12px;