@conduction/nextcloud-vue 2.56.0-beta.31 → 2.56.0-beta.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +55 -4
  2. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
  3. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js +51 -15
  4. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
  5. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +13 -2
  6. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  7. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +63 -52
  8. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  9. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js +10 -0
  10. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js.map +1 -0
  11. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js +252 -0
  12. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js.map +1 -0
  13. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js +140 -0
  14. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js.map +1 -0
  15. package/dist/esm/components/CnChipsFieldWidget/index.js +26 -0
  16. package/dist/esm/components/CnChipsFieldWidget/index.js.map +1 -0
  17. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js +10 -0
  18. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js.map +1 -0
  19. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js +354 -0
  20. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js.map +1 -0
  21. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js +172 -0
  22. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js.map +1 -0
  23. package/dist/esm/components/CnChoicePickerWidget/index.js +27 -0
  24. package/dist/esm/components/CnChoicePickerWidget/index.js.map +1 -0
  25. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +25 -2
  26. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  27. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +2 -1
  28. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  29. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  30. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +3 -2
  31. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  32. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +29 -0
  33. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  34. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +20 -3
  35. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  36. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +7 -1
  37. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  39. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +77 -3
  40. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
  41. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +282 -69
  42. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
  43. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +0 -1
  44. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  45. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  46. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +65 -2
  47. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  48. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +6 -2
  49. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  50. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js +10 -0
  51. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js.map +1 -0
  52. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js +174 -0
  53. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js.map +1 -0
  54. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js +75 -0
  55. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js.map +1 -0
  56. package/dist/esm/components/CnRadioCardsWidget/index.js +28 -0
  57. package/dist/esm/components/CnRadioCardsWidget/index.js.map +1 -0
  58. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +18 -1
  59. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  60. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +34 -25
  61. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  62. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js +10 -0
  63. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js.map +1 -0
  64. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js +222 -0
  65. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js.map +1 -0
  66. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js +64 -0
  67. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js.map +1 -0
  68. package/dist/esm/components/CnSavedViewsWidget/index.js +30 -0
  69. package/dist/esm/components/CnSavedViewsWidget/index.js.map +1 -0
  70. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js.map +1 -1
  71. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js.map +1 -1
  72. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js +10 -0
  73. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js.map +1 -0
  74. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js +347 -0
  75. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js.map +1 -0
  76. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js +184 -0
  77. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js.map +1 -0
  78. package/dist/esm/components/CnSettingsFormWidget/index.js +27 -0
  79. package/dist/esm/components/CnSettingsFormWidget/index.js.map +1 -0
  80. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +87 -6
  81. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  82. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  83. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js +10 -0
  84. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js.map +1 -0
  85. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js +159 -0
  86. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js.map +1 -0
  87. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js +60 -0
  88. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js.map +1 -0
  89. package/dist/esm/components/CnSwitchRowsWidget/index.js +26 -0
  90. package/dist/esm/components/CnSwitchRowsWidget/index.js.map +1 -0
  91. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +47 -1
  92. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  93. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +16 -14
  94. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  95. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js +80 -1
  96. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js.map +1 -1
  97. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js +75 -32
  98. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js.map +1 -1
  99. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js +10 -0
  100. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js.map +1 -0
  101. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +269 -0
  102. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -0
  103. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js +106 -0
  104. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js.map +1 -0
  105. package/dist/esm/components/CnToggleTableWidget/index.js +27 -0
  106. package/dist/esm/components/CnToggleTableWidget/index.js.map +1 -0
  107. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +7 -0
  108. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  109. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js.map +1 -1
  110. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js +4 -2
  111. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js.map +1 -1
  112. package/dist/esm/index.js +7 -0
  113. package/dist/esm/index.js.map +1 -1
  114. package/dist/esm/l10n/en.json.js +1 -0
  115. package/dist/esm/l10n/en.json.js.map +1 -1
  116. package/dist/esm/l10n/nl.json.js +1 -0
  117. package/dist/esm/l10n/nl.json.js.map +1 -1
  118. package/dist/esm/nextcloud-vue.css +843 -4
  119. package/dist/esm/utils/contentHeaderLink.js +51 -0
  120. package/dist/esm/utils/contentHeaderLink.js.map +1 -0
  121. package/dist/esm/utils/fetchFilterCounts.js +40 -5
  122. package/dist/esm/utils/fetchFilterCounts.js.map +1 -1
  123. package/dist/esm/utils/initials.js +32 -0
  124. package/dist/esm/utils/initials.js.map +1 -0
  125. package/dist/esm/utils/libraryWidgetKeys.js +7 -0
  126. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  127. package/dist/esm/utils/objectWrite.js +59 -0
  128. package/dist/esm/utils/objectWrite.js.map +1 -0
  129. package/dist/esm/utils/widgetDispatch.js +1 -1
  130. package/dist/esm/utils/widgetDispatch.js.map +1 -1
  131. package/dist/nextcloud-vue.cjs.js +10510 -6830
  132. package/dist/nextcloud-vue.cjs.js.map +2 -2
  133. package/dist/nextcloud-vue.css +843 -4
  134. package/l10n/en.json +1 -0
  135. package/l10n/nl.json +1 -0
  136. package/package.json +1 -1
  137. package/src/components/CnBannerWidget/CnBannerWidget.vue +93 -13
  138. package/src/components/CnCellRenderer/CnCellRenderer.md +2 -0
  139. package/src/components/CnCellRenderer/CnCellRenderer.vue +43 -3
  140. package/src/components/CnChipsFieldWidget/CnChipsFieldWidget.vue +433 -0
  141. package/src/components/CnChipsFieldWidget/index.js +25 -0
  142. package/src/components/CnChoicePickerWidget/CnChoicePickerWidget.vue +556 -0
  143. package/src/components/CnChoicePickerWidget/index.js +26 -0
  144. package/src/components/CnDashboardPage/CnDashboardPage.vue +38 -2
  145. package/src/components/CnDataTable/CnDataTable.vue +2 -1
  146. package/src/components/CnDetailPage/CnDetailPage.vue +45 -2
  147. package/src/components/CnFactsWidget/CnFactsWidget.vue +18 -3
  148. package/src/components/CnFieldListWidget/CnFieldListWidget.vue +265 -4
  149. package/src/components/CnIndexPage/CnIndexPage.vue +0 -1
  150. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +69 -2
  151. package/src/components/CnRadioCardsWidget/CnRadioCardsWidget.vue +313 -0
  152. package/src/components/CnRadioCardsWidget/index.js +27 -0
  153. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +43 -1
  154. package/src/components/CnSavedViewsWidget/CnSavedViewsWidget.vue +296 -0
  155. package/src/components/CnSavedViewsWidget/index.js +29 -0
  156. package/src/components/CnSegmentedControl/CnSegmentedControl.vue +13 -0
  157. package/src/components/CnSettingsFormWidget/CnSettingsFormWidget.vue +555 -0
  158. package/src/components/CnSettingsFormWidget/index.js +26 -0
  159. package/src/components/CnStatWidget/CnStatWidget.vue +87 -6
  160. package/src/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue +226 -0
  161. package/src/components/CnSwitchRowsWidget/index.js +25 -0
  162. package/src/components/CnTabsWidget/CnTabsWidget.vue +82 -3
  163. package/src/components/CnTasksWidget/CnTasksWidget.vue +175 -15
  164. package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +386 -0
  165. package/src/components/CnToggleTableWidget/index.js +26 -0
  166. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +7 -0
  167. package/src/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue +28 -1
  168. package/src/components/index.js +7 -0
  169. package/src/css/look-board-detail.css +36 -2
  170. package/src/css/look-board-index.css +23 -0
  171. package/src/css/look-board.css +72 -0
  172. package/src/index.js +7 -0
  173. package/src/utils/contentHeaderLink.js +48 -0
  174. package/src/utils/fetchFilterCounts.js +39 -4
  175. package/src/utils/initials.js +29 -0
  176. package/src/utils/libraryWidgetKeys.js +7 -0
  177. package/src/utils/objectWrite.js +55 -0
  178. package/src/utils/widgetDispatch.js +1 -1
@@ -622,6 +622,78 @@
622
622
  .cn-look-board .cn-cell-renderer__age:not(.cn-look-nextcloud *) {
623
623
  font-weight: 600;
624
624
  }
625
+
626
+ /* ---- Record list on a dashboard card (PtDashboard) ---------------------- */
627
+ /* The dashboard's card body is flush, so the rows carry their own inset: the
628
+ board's card pads 24px at the sides and each row 14px, a soft hairline
629
+ between rows, the title 15px weight 600 and the meta 13px muted. A row is a
630
+ link, but only the hover says so: no underline on any text run, however the
631
+ host styles its links (`!important`, because a host rule such as
632
+ `#content a` outranks any class). The pill and the date sit at the right. */
633
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list {
634
+ padding: 0 24px 10px;
635
+ }
636
+
637
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list--rows .cn-record-list__item + .cn-record-list__item {
638
+ border-top: 1px solid var(--color-border-dark, var(--color-border));
639
+ }
640
+
641
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row {
642
+ padding: 14px 0;
643
+ flex-wrap: wrap;
644
+ gap: 8px 16px;
645
+ }
646
+
647
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row,
648
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row:hover,
649
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row:focus-visible,
650
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row * {
651
+ color: inherit;
652
+ text-decoration: none !important;
653
+ }
654
+
655
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__title {
656
+ color: var(--color-main-text);
657
+ font-size: 15px;
658
+ font-weight: 600;
659
+ }
660
+
661
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__meta {
662
+ color: var(--color-text-maxcontrast);
663
+ font-size: 13px;
664
+ }
665
+
666
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__trailing {
667
+ color: var(--color-text-maxcontrast);
668
+ font-size: 13px;
669
+ font-weight: 600;
670
+ }
671
+
672
+ /* Hover: the whole row takes the hover ground, 8px beyond the text so the
673
+ text does not move. */
674
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link {
675
+ margin-inline: -8px;
676
+ padding-inline: 8px;
677
+ border-radius: 8px;
678
+ }
679
+
680
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link:hover,
681
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link:focus-visible {
682
+ background: var(--color-background-hover);
683
+ }
684
+
685
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link:hover .cn-record-list__title {
686
+ text-decoration: none !important;
687
+ }
688
+
689
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__aside {
690
+ margin-inline-start: auto;
691
+ }
692
+
693
+ /* The board draws no chevron after the pill and date. */
694
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__chevron {
695
+ display: none;
696
+ }
625
697
  /*
626
698
  * The board dialog (screens-dialog-parity, canon section 5).
627
699
  *
@@ -1838,6 +1910,29 @@
1838
1910
  font-size: 13px;
1839
1911
  }
1840
1912
 
1913
+ /* An avatar in the title column (PtAccounts): a 32px chip circle, 10px before
1914
+ the name, the e-mail under the name beside it. The name keeps the title's
1915
+ weight and size, and its underline: an inline-flex box is atomic, so the
1916
+ cell's own underline does not reach it. */
1917
+ .cn-look-board .cn-table-container--board .cn-data-table .cn-cell-renderer__avatar {
1918
+ gap: 10px;
1919
+ }
1920
+
1921
+ .cn-look-board .cn-table-container--board .cn-data-table .cn-cell-renderer__avatar-initials {
1922
+ background: var(--color-background-dark);
1923
+ color: var(--color-main-text);
1924
+ font-size: 12px;
1925
+ }
1926
+
1927
+ .cn-look-board .cn-table-container--board .cn-data-table td.cn-table-col--title .cn-cell-renderer__avatar-name {
1928
+ text-decoration: underline;
1929
+ text-underline-offset: 2px;
1930
+ }
1931
+
1932
+ .cn-look-board .cn-table-container--board.cn-table-container--title-plain .cn-data-table td.cn-table-col--title .cn-cell-renderer__avatar-name {
1933
+ text-decoration: none;
1934
+ }
1935
+
1841
1936
  /* A status pill: 3px 10px, radius 12, 13px weight 600. The colours stay the
1842
1937
  status colour map's. */
1843
1938
  .cn-look-board .cn-table-container--board .cn-data-table .cn-status-badge {
@@ -6204,6 +6299,15 @@ a.cn-kpi-card--board * {
6204
6299
  gap: 4px;
6205
6300
  }
6206
6301
 
6302
+ /* No inner scroller: tabs that do not fit the width wrap onto a second row
6303
+ instead of scrolling sideways (the library's default strip), so the strip
6304
+ has no scrollbar, no clipped tab and no fade or chevron to find the rest. */
6305
+ .cn-look-board .cn-tabs--board .cn-tabs__nav {
6306
+ flex-wrap: wrap;
6307
+ overflow: visible;
6308
+ row-gap: 4px;
6309
+ }
6310
+
6207
6311
  .cn-look-board .cn-tabs--board .cn-tabs__nav-item {
6208
6312
  background-color: var(--color-background-dark);
6209
6313
  border: 1px solid var(--color-border-dark);
@@ -6349,12 +6453,28 @@ a.cn-kpi-card--board * {
6349
6453
  padding: 0 0 10px;
6350
6454
  }
6351
6455
 
6352
- .cn-look-board .cn-object-data-widget__label {
6353
- color: var(--color-text-maxcontrast);
6456
+ /* Outranks the component's own `.cn-object-data-widget__label[data-v-...]`
6457
+ (weight 500, 0.85em, which has the same specificity as the look's rule and
6458
+ wins on source order wherever a bundle, such as a companion app's, loads
6459
+ after this stylesheet), through the grid the labels sit in. Measured live:
6460
+ the labels read bold and dark where the boards (DqContact, PqKlant, ShKlant)
6461
+ draw them 13px, regular weight and light grey.
6462
+
6463
+ The colour carries `!important`: a theme (nldesign's element overrides) sets
6464
+ the ink of every `div` outside the header with a selector that has an id in
6465
+ its `:not()`, which no class rule outranks. */
6466
+ .cn-look-board .cn-object-data-widget__grid .cn-object-data-widget__label {
6467
+ color: var(--color-text-maxcontrast) !important;
6354
6468
  font-size: 13px;
6355
6469
  font-weight: 400;
6356
6470
  }
6357
6471
 
6472
+ /* The facts card's labels: the same light grey, regular weight. */
6473
+ .cn-look-board .cn-facts-widget .cn-facts-widget__label {
6474
+ color: var(--color-text-maxcontrast);
6475
+ font-weight: 400;
6476
+ }
6477
+
6358
6478
  .cn-look-board .cn-object-data-widget__value {
6359
6479
  font-weight: 500;
6360
6480
  }
@@ -6612,6 +6732,15 @@ a.cn-kpi-card--board * {
6612
6732
  font-size: 13px;
6613
6733
  margin: 2px 0 0;
6614
6734
  }
6735
+
6736
+ /* The sidebar's own open toggle (NcAppSidebar's `.app-sidebar__toggle`, drawn
6737
+ when the sidebar is closed) is positioned over the content's top-right
6738
+ corner, which in this look is the header's last button: a stray square icon
6739
+ on "More". The board draws none, so it is hidden on a detail page and the
6740
+ header menu offers "Open sidebar" instead. */
6741
+ .cn-look-board:has(.cn-detail-page) > .app-sidebar__toggle {
6742
+ display: none;
6743
+ }
6615
6744
  /* CnReferencePreview — a reference that shows what it points at. */
6616
6745
 
6617
6746
  .cn-reference-preview {
@@ -9734,11 +9863,31 @@ svg.leaflet-image-layer.leaflet-interactive path {
9734
9863
  font-weight: 700;
9735
9864
  line-height: 1;
9736
9865
  }
9866
+ .cn-cell-renderer__avatar-text[data-v-37d7b88f] {
9867
+ display: flex;
9868
+ flex-direction: column;
9869
+ min-width: 0;
9870
+ }
9737
9871
  .cn-cell-renderer__avatar-name[data-v-37d7b88f] {
9738
9872
  min-width: 0;
9739
9873
  overflow: hidden;
9740
9874
  text-overflow: ellipsis;
9741
9875
  white-space: nowrap;
9876
+ /* The name is the cell's text: it keeps the weight, size and colour the
9877
+ cell sets, as a plain value does. */
9878
+ font: inherit;
9879
+ color: inherit;
9880
+ }
9881
+ .cn-cell-renderer__avatar-secondary[data-v-37d7b88f] {
9882
+ min-width: 0;
9883
+ overflow: hidden;
9884
+ color: var(--color-text-maxcontrast);
9885
+ font-size: 13px;
9886
+ font-weight: 400;
9887
+ line-height: 1.35;
9888
+ text-overflow: ellipsis;
9889
+ text-decoration: none;
9890
+ white-space: nowrap;
9742
9891
  }
9743
9892
 
9744
9893
  /* A date that matched a rule is also set in a heavier weight, so the signal
@@ -22571,6 +22720,20 @@ to { background-position: -200% 0;
22571
22720
  .cn-banner-widget__card[data-v-3531692f] {
22572
22721
  margin: 0;
22573
22722
  }
22723
+ .cn-banner-widget__line[data-v-3531692f] {
22724
+ display: flex;
22725
+ flex-wrap: wrap;
22726
+ align-items: baseline;
22727
+ gap: 4px 20px;
22728
+ }
22729
+ .cn-banner-widget__lead[data-v-3531692f] {
22730
+ font-weight: 700;
22731
+ }
22732
+ .cn-banner-widget__link[data-v-3531692f] {
22733
+ margin-inline-start: auto;
22734
+ font-size: 14px;
22735
+ font-weight: 600;
22736
+ }
22574
22737
  .cn-banner-widget__text--clickable[data-v-3531692f] {
22575
22738
  cursor: pointer;
22576
22739
  text-decoration: underline;
@@ -22847,6 +23010,18 @@ to { background-position: -200% 0;
22847
23010
  box-shadow: 0 1px 2px var(--color-box-shadow);
22848
23011
  }
22849
23012
 
23013
+ /* On a phone (screens-dashboard-phone) the compact group's segments are 44px
23014
+ high touch targets, and the group wraps onto a second row instead of
23015
+ running off the screen. */
23016
+ @media (max-width: 640px) {
23017
+ .cn-segmented-control.cn-segmented-control--compact[data-v-7b344b4f] {
23018
+ flex-wrap: wrap;
23019
+ }
23020
+ .cn-segmented-control.cn-segmented-control--compact .cn-segmented-control__option[data-v-7b344b4f] {
23021
+ min-height: 44px;
23022
+ }
23023
+ }
23024
+
22850
23025
 
22851
23026
  .cn-header-widget[data-v-1b97430f] {
22852
23027
  width: 100%;
@@ -24131,6 +24306,26 @@ button.cn-stepper__step[data-v-19697746] {
24131
24306
  gap: 20px;
24132
24307
  }
24133
24308
 
24309
+ /* A gridded stack (`columns` / `layout` on the tab): 12 columns, widgets wrap
24310
+ onto the next row, a row's cards as tall as the tallest. Narrow, it is the
24311
+ plain stack again. */
24312
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] {
24313
+ display: grid;
24314
+ grid-template-columns: repeat(12, minmax(0, 1fr));
24315
+ align-items: stretch;
24316
+ }
24317
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] > * {
24318
+ min-width: 0;
24319
+ }
24320
+ @media (max-width: 700px) {
24321
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] {
24322
+ grid-template-columns: minmax(0, 1fr);
24323
+ }
24324
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] > * {
24325
+ grid-column: auto !important;
24326
+ }
24327
+ }
24328
+
24134
24329
  /* The panel is the card; the strip is not inside it. There is no title bar
24135
24330
  above the tabs either: the open tab names the panel, so a title row would
24136
24331
  say the same thing twice and cost a row of height on a card that is mostly
@@ -24247,6 +24442,14 @@ button.cn-stepper__step[data-v-19697746] {
24247
24442
  .cn-tabs-widget__tabs[data-v-1dbd6122] .cn-tab {
24248
24443
  height: 100%;
24249
24444
  }
24445
+
24446
+ /* A list widget's footer Add bleeds through its card's 16px content padding
24447
+ (margin 0 -16px -16px). The panel of a tab pads 12px, so on a tab that
24448
+ holds the list directly the footer stuck out 4px on the right and at the
24449
+ bottom and made the panel scroll. It bleeds exactly the panel's padding. */
24450
+ .cn-tabs-widget__tabs[data-v-1dbd6122] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
24451
+ margin: auto -12px -12px;
24452
+ }
24250
24453
  .cn-tabs-widget__title[data-v-1dbd6122] {
24251
24454
  align-items: center;
24252
24455
  display: inline-flex;
@@ -28202,6 +28405,50 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
28202
28405
  font-variant-numeric: tabular-nums;
28203
28406
  }
28204
28407
 
28408
+ /* List variant, after the dashboard board's My tasks card: a checkbox, the
28409
+ title, the subject on a muted second line and the due date at its right. */
28410
+ .cn-tasks-widget--list .cn-tasks-widget__row[data-v-ff399342] {
28411
+ align-items: flex-start;
28412
+ gap: 12px;
28413
+ padding: 12px 0;
28414
+ }
28415
+ .cn-tasks-widget--list .cn-tasks-widget__name[data-v-ff399342] {
28416
+ font-weight: 400;
28417
+ font-size: 15px;
28418
+ line-height: 1.35;
28419
+ color: var(--color-main-text);
28420
+ }
28421
+ .cn-tasks-widget__check[data-v-ff399342],
28422
+ .cn-tasks-widget__check-spacer[data-v-ff399342] {
28423
+ flex: none;
28424
+ width: 20px;
28425
+ height: 20px;
28426
+ margin: 1px 0 0;
28427
+ }
28428
+ .cn-tasks-widget__check[data-v-ff399342] {
28429
+ accent-color: var(--color-primary-element);
28430
+ cursor: pointer;
28431
+ }
28432
+ .cn-tasks-widget__meta--split[data-v-ff399342] {
28433
+ display: flex;
28434
+ justify-content: space-between;
28435
+ gap: 8px;
28436
+ font-size: 13px;
28437
+ overflow: visible;
28438
+ }
28439
+ .cn-tasks-widget__subject[data-v-ff399342] {
28440
+ min-width: 0;
28441
+ overflow: hidden;
28442
+ text-overflow: ellipsis;
28443
+ }
28444
+ .cn-tasks-widget--list .cn-tasks-widget__due[data-v-ff399342] {
28445
+ font-size: 13px;
28446
+ font-weight: 500;
28447
+ }
28448
+ .cn-tasks-widget--list .cn-tasks-widget__due--overdue[data-v-ff399342] {
28449
+ font-weight: 600;
28450
+ }
28451
+
28205
28452
  /* Overdue: weight AND colour on top of the wording, which already says
28206
28453
  "Overdue by N days" — the signal survives monochrome. */
28207
28454
  .cn-tasks-widget__due--overdue[data-v-ff399342] {
@@ -28300,11 +28547,21 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
28300
28547
  .cn-facts-widget__row[data-v-2ca63011] {
28301
28548
  display: contents;
28302
28549
  }
28303
- .cn-facts-widget__label[data-v-2ca63011] {
28550
+
28551
+ /* Nextcloud core styles `dt` and `dd` (text-align end, 12px padding), which
28552
+ pushed the label to the right of its column and added 12px around both. The
28553
+ class is doubled so these resets outrank that rule, and a dossiq-style
28554
+ `:deep()` override in an app is not needed. */
28555
+ .cn-facts-widget__label.cn-facts-widget__label[data-v-2ca63011] {
28556
+ margin: 0;
28557
+ padding: 0;
28558
+ text-align: start;
28304
28559
  color: var(--color-text-maxcontrast);
28305
28560
  }
28306
- .cn-facts-widget__value[data-v-2ca63011] {
28561
+ .cn-facts-widget__value.cn-facts-widget__value[data-v-2ca63011] {
28307
28562
  margin: 0;
28563
+ padding: 0;
28564
+ text-align: start;
28308
28565
  font-weight: 500;
28309
28566
  min-width: 0;
28310
28567
  overflow-wrap: anywhere;
@@ -28524,6 +28781,496 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
28524
28781
  .cn-field-list-widget__add > button[data-v-0f29a833] {
28525
28782
  flex: 0 0 auto;
28526
28783
  }
28784
+ .cn-field-list-widget__toolbar[data-v-0f29a833] {
28785
+ display: flex;
28786
+ justify-content: flex-end;
28787
+ }
28788
+ .cn-field-list-widget__table-wrap[data-v-0f29a833] {
28789
+ display: flex;
28790
+ flex-direction: column;
28791
+ gap: 12px;
28792
+ overflow-x: auto;
28793
+ }
28794
+ .cn-field-list-widget__table[data-v-0f29a833] {
28795
+ width: 100%;
28796
+ border-collapse: collapse;
28797
+ }
28798
+ .cn-field-list-widget__th[data-v-0f29a833] {
28799
+ padding: 8px 12px;
28800
+ text-align: start;
28801
+ font-size: 13px;
28802
+ font-weight: 600;
28803
+ white-space: nowrap;
28804
+ color: var(--color-text-maxcontrast);
28805
+ background: var(--color-background-hover);
28806
+ }
28807
+ .cn-field-list-widget__th--menu[data-v-0f29a833],
28808
+ .cn-field-list-widget__td--menu[data-v-0f29a833] {
28809
+ width: 1%;
28810
+ text-align: end;
28811
+ }
28812
+ .cn-field-list-widget__tr[data-v-0f29a833] {
28813
+ border-top: 1px solid var(--cn-board-hairline, var(--color-border));
28814
+ }
28815
+ .cn-field-list-widget__td[data-v-0f29a833] {
28816
+ padding: 10px 12px;
28817
+ vertical-align: middle;
28818
+ overflow-wrap: anywhere;
28819
+ }
28820
+ .cn-field-list-widget__sr[data-v-0f29a833] {
28821
+ position: absolute;
28822
+ width: 1px;
28823
+ height: 1px;
28824
+ overflow: hidden;
28825
+ clip-path: inset(50%);
28826
+ }
28827
+ .cn-field-list-widget__band[data-v-0f29a833] {
28828
+ display: flex;
28829
+ flex-wrap: wrap;
28830
+ align-items: center;
28831
+ justify-content: space-between;
28832
+ gap: 8px 12px;
28833
+ padding: 12px 14px;
28834
+ border: 1px solid var(--color-warning);
28835
+ border-radius: 10px;
28836
+ background: color-mix(in srgb, var(--color-warning) 14%, var(--color-main-background));
28837
+ font-size: 14px;
28838
+ }
28839
+
28840
+
28841
+ .cn-settings-form[data-v-731c450f] {
28842
+ display: flex;
28843
+ flex-direction: column;
28844
+ gap: 14px;
28845
+ min-width: 0;
28846
+ }
28847
+ .cn-settings-form__grid[data-v-731c450f] {
28848
+ display: grid;
28849
+ gap: 14px 16px;
28850
+ grid-template-columns: minmax(0, 1fr);
28851
+ }
28852
+ .cn-settings-form__grid--2[data-v-731c450f] {
28853
+ grid-template-columns: repeat(2, minmax(0, 1fr));
28854
+ }
28855
+ .cn-settings-form__field[data-v-731c450f] {
28856
+ display: flex;
28857
+ flex-direction: column;
28858
+ gap: 4px;
28859
+ min-width: 0;
28860
+ }
28861
+ .cn-settings-form__field--wide[data-v-731c450f] {
28862
+ grid-column: 1 / -1;
28863
+ }
28864
+ .cn-settings-form__label[data-v-731c450f] {
28865
+ font-size: 13px;
28866
+ font-weight: 600;
28867
+ color: var(--color-main-text);
28868
+ }
28869
+ .cn-settings-form__control[data-v-731c450f] {
28870
+ width: 100%;
28871
+ box-sizing: border-box;
28872
+ height: var(--cn-board-control-height, 40px);
28873
+ padding: 0 12px;
28874
+ border: 1px solid var(--color-border-maxcontrast);
28875
+ border-radius: var(--cn-board-control-radius, 8px);
28876
+ background: var(--color-main-background);
28877
+ color: var(--color-main-text);
28878
+ font: inherit;
28879
+ }
28880
+ .cn-settings-form__file[data-v-731c450f] {
28881
+ display: flex;
28882
+ flex-wrap: wrap;
28883
+ align-items: center;
28884
+ gap: 8px;
28885
+ }
28886
+ .cn-settings-form__control--file[data-v-731c450f] {
28887
+ display: inline-flex;
28888
+ align-items: center;
28889
+ width: auto;
28890
+ min-width: 120px;
28891
+ flex: 0 1 auto;
28892
+ overflow-wrap: anywhere;
28893
+ }
28894
+ .cn-settings-form__control--placeholder[data-v-731c450f] {
28895
+ color: var(--color-text-maxcontrast);
28896
+ }
28897
+ .cn-settings-form__control--area[data-v-731c450f] {
28898
+ height: auto;
28899
+ padding: 10px 12px;
28900
+ resize: vertical;
28901
+ }
28902
+ .cn-settings-form__control[data-v-731c450f]:focus-visible {
28903
+ outline: 2px solid var(--color-primary-element);
28904
+ outline-offset: 1px;
28905
+ }
28906
+ .cn-settings-form__hint[data-v-731c450f],
28907
+ .cn-settings-form__error[data-v-731c450f] {
28908
+ margin: 0;
28909
+ font-size: 12px;
28910
+ color: var(--color-text-maxcontrast);
28911
+ }
28912
+ .cn-settings-form__error[data-v-731c450f] {
28913
+ color: var(--color-error-text);
28914
+ }
28915
+ .cn-settings-form__actions[data-v-731c450f] {
28916
+ display: flex;
28917
+ justify-content: flex-start;
28918
+ }
28919
+ @media (max-width: 640px) {
28920
+ .cn-settings-form__grid--2[data-v-731c450f] {
28921
+ grid-template-columns: minmax(0, 1fr);
28922
+ }
28923
+ }
28924
+
28925
+
28926
+ .cn-switch-rows[data-v-9dd5b4e2] {
28927
+ display: flex;
28928
+ flex-direction: column;
28929
+ gap: 8px;
28930
+ min-width: 0;
28931
+ }
28932
+ .cn-switch-rows__list[data-v-9dd5b4e2] {
28933
+ list-style: none;
28934
+ margin: 0;
28935
+ padding: 0;
28936
+ display: flex;
28937
+ flex-direction: column;
28938
+ }
28939
+ .cn-switch-rows__row[data-v-9dd5b4e2] {
28940
+ padding: 10px 0;
28941
+ border-top: 1px solid var(--cn-board-hairline, var(--color-border));
28942
+ }
28943
+ .cn-switch-rows__row[data-v-9dd5b4e2]:first-child {
28944
+ border-top: none;
28945
+ padding-top: 0;
28946
+ }
28947
+ .cn-switch-rows__label[data-v-9dd5b4e2] {
28948
+ display: block;
28949
+ font-weight: 600;
28950
+ }
28951
+ .cn-switch-rows__hint[data-v-9dd5b4e2] {
28952
+ display: block;
28953
+ font-size: 12px;
28954
+ font-weight: 400;
28955
+ color: var(--color-text-maxcontrast);
28956
+ }
28957
+
28958
+
28959
+ .cn-radio-cards[data-v-8aefa4a2] {
28960
+ display: flex;
28961
+ flex-direction: column;
28962
+ gap: 8px;
28963
+ min-width: 0;
28964
+ margin: 0;
28965
+ padding: 0;
28966
+ border: 0;
28967
+ }
28968
+ .cn-radio-cards__legend[data-v-8aefa4a2] {
28969
+ padding: 0;
28970
+ margin-bottom: 6px;
28971
+ font-weight: 600;
28972
+ }
28973
+ .cn-radio-cards__grid[data-v-8aefa4a2] {
28974
+ display: grid;
28975
+ gap: 10px;
28976
+ grid-template-columns: minmax(0, 1fr);
28977
+ }
28978
+ .cn-radio-cards__grid--2[data-v-8aefa4a2] {
28979
+ grid-template-columns: repeat(2, minmax(0, 1fr));
28980
+ }
28981
+ .cn-radio-cards__grid--3[data-v-8aefa4a2] {
28982
+ grid-template-columns: repeat(3, minmax(0, 1fr));
28983
+ }
28984
+ .cn-radio-cards__card[data-v-8aefa4a2] {
28985
+ position: relative;
28986
+ display: flex;
28987
+ align-items: flex-start;
28988
+ gap: 10px;
28989
+ padding: 12px 14px;
28990
+ border: 1px solid var(--color-border-maxcontrast);
28991
+ border-radius: var(--cn-board-control-radius, 8px);
28992
+ background: var(--color-main-background);
28993
+ cursor: pointer;
28994
+ }
28995
+ .cn-radio-cards__card--selected[data-v-8aefa4a2] {
28996
+ border-color: var(--color-primary-element);
28997
+ background: var(--color-primary-element-light);
28998
+ box-shadow: 0 0 0 1px var(--color-primary-element);
28999
+ }
29000
+ .cn-radio-cards__card[data-v-8aefa4a2]:focus-within {
29001
+ outline: 2px solid var(--color-primary-element);
29002
+ outline-offset: 2px;
29003
+ }
29004
+
29005
+ /* The real input stays in the DOM and in the accessibility tree; the dot is its picture. */
29006
+ .cn-radio-cards__input[data-v-8aefa4a2] {
29007
+ position: absolute;
29008
+ opacity: 0;
29009
+ inset: 0;
29010
+ margin: 0;
29011
+ cursor: pointer;
29012
+ }
29013
+ .cn-radio-cards__dot[data-v-8aefa4a2] {
29014
+ flex: 0 0 auto;
29015
+ width: 14px;
29016
+ height: 14px;
29017
+ margin-top: 3px;
29018
+ box-sizing: border-box;
29019
+ border: 1px solid var(--color-border-maxcontrast);
29020
+ border-radius: 50%;
29021
+ background: var(--color-main-background);
29022
+ }
29023
+ .cn-radio-cards__card--selected .cn-radio-cards__dot[data-v-8aefa4a2] {
29024
+ border: 4px solid var(--color-primary-element);
29025
+ }
29026
+ .cn-radio-cards__text[data-v-8aefa4a2] {
29027
+ display: flex;
29028
+ flex-direction: column;
29029
+ gap: 2px;
29030
+ min-width: 0;
29031
+ }
29032
+ .cn-radio-cards__title[data-v-8aefa4a2] {
29033
+ font-weight: 600;
29034
+ }
29035
+ .cn-radio-cards__description[data-v-8aefa4a2] {
29036
+ font-size: 12px;
29037
+ color: var(--color-text-maxcontrast);
29038
+ }
29039
+ @media (max-width: 640px) {
29040
+ .cn-radio-cards__grid--2[data-v-8aefa4a2],
29041
+ .cn-radio-cards__grid--3[data-v-8aefa4a2] {
29042
+ grid-template-columns: minmax(0, 1fr);
29043
+ }
29044
+ }
29045
+
29046
+
29047
+ .cn-chips-field[data-v-43e5bfcf] {
29048
+ display: flex;
29049
+ flex-direction: column;
29050
+ gap: 6px;
29051
+ min-width: 0;
29052
+ }
29053
+ .cn-chips-field__label[data-v-43e5bfcf] {
29054
+ margin: 0;
29055
+ font-size: 13px;
29056
+ font-weight: 600;
29057
+ }
29058
+ .cn-chips-field__chips[data-v-43e5bfcf] {
29059
+ list-style: none;
29060
+ margin: 0;
29061
+ padding: 0;
29062
+ display: flex;
29063
+ flex-wrap: wrap;
29064
+ align-items: center;
29065
+ gap: 8px;
29066
+ }
29067
+ .cn-chips-field__chip[data-v-43e5bfcf] {
29068
+ display: inline-flex;
29069
+ align-items: center;
29070
+ gap: 6px;
29071
+ padding: 4px 6px 4px 12px;
29072
+ border-radius: 999px;
29073
+ background: var(--color-primary-element-light);
29074
+ color: var(--color-primary-element-light-text, var(--color-main-text));
29075
+ font-weight: 600;
29076
+ overflow-wrap: anywhere;
29077
+ }
29078
+ .cn-chips-field__remove[data-v-43e5bfcf] {
29079
+ display: inline-flex;
29080
+ align-items: center;
29081
+ justify-content: center;
29082
+ width: 20px;
29083
+ height: 20px;
29084
+ padding: 0;
29085
+ border: 0;
29086
+ border-radius: 50%;
29087
+ background: transparent;
29088
+ color: inherit;
29089
+ font-size: 16px;
29090
+ line-height: 1;
29091
+ cursor: pointer;
29092
+ }
29093
+ .cn-chips-field__remove[data-v-43e5bfcf]:hover:not(:disabled),
29094
+ .cn-chips-field__remove[data-v-43e5bfcf]:focus-visible {
29095
+ background: var(--color-primary-element-light-hover, var(--color-background-hover));
29096
+ }
29097
+ .cn-chips-field__add[data-v-43e5bfcf] {
29098
+ padding: 4px 12px;
29099
+ border: 1px dashed var(--color-border-maxcontrast);
29100
+ border-radius: 999px;
29101
+ background: transparent;
29102
+ color: var(--color-main-text);
29103
+ font-weight: 600;
29104
+ cursor: pointer;
29105
+ }
29106
+ .cn-chips-field__add[data-v-43e5bfcf]:hover:not(:disabled) {
29107
+ background: var(--color-background-hover);
29108
+ }
29109
+ .cn-chips-field__form[data-v-43e5bfcf] {
29110
+ display: flex;
29111
+ align-items: center;
29112
+ gap: 8px;
29113
+ }
29114
+ .cn-chips-field__input[data-v-43e5bfcf] {
29115
+ height: var(--cn-board-control-height, 40px);
29116
+ box-sizing: border-box;
29117
+ padding: 0 12px;
29118
+ border: 1px solid var(--color-border-maxcontrast);
29119
+ border-radius: var(--cn-board-control-radius, 8px);
29120
+ background: var(--color-main-background);
29121
+ color: var(--color-main-text);
29122
+ font: inherit;
29123
+ }
29124
+ .cn-chips-field__hint[data-v-43e5bfcf],
29125
+ .cn-chips-field__error[data-v-43e5bfcf] {
29126
+ margin: 0;
29127
+ font-size: 12px;
29128
+ color: var(--color-text-maxcontrast);
29129
+ }
29130
+ .cn-chips-field__error[data-v-43e5bfcf] {
29131
+ color: var(--color-error-text);
29132
+ }
29133
+
29134
+
29135
+ .cn-toggle-table[data-v-53a57112] {
29136
+ display: flex;
29137
+ flex-direction: column;
29138
+ gap: 8px;
29139
+ min-width: 0;
29140
+ }
29141
+ .cn-toggle-table__table[data-v-53a57112] {
29142
+ width: 100%;
29143
+ border-collapse: collapse;
29144
+ }
29145
+ .cn-toggle-table__head[data-v-53a57112] {
29146
+ padding: 8px 12px;
29147
+ text-align: start;
29148
+ font-size: 13px;
29149
+ font-weight: 600;
29150
+ color: var(--color-text-maxcontrast);
29151
+ background: var(--color-background-hover);
29152
+ }
29153
+ .cn-toggle-table__head--toggle[data-v-53a57112],
29154
+ .cn-toggle-table__cell--toggle[data-v-53a57112] {
29155
+ width: 1%;
29156
+ white-space: nowrap;
29157
+ text-align: end;
29158
+ }
29159
+ .cn-toggle-table__row[data-v-53a57112] {
29160
+ border-top: 1px solid var(--cn-board-hairline, var(--color-border));
29161
+ }
29162
+ .cn-toggle-table__cell[data-v-53a57112] {
29163
+ padding: 10px 12px;
29164
+ vertical-align: middle;
29165
+ overflow-wrap: anywhere;
29166
+ }
29167
+ .cn-toggle-table__title[data-v-53a57112] {
29168
+ display: block;
29169
+ font-weight: 600;
29170
+ }
29171
+ .cn-toggle-table__hint[data-v-53a57112] {
29172
+ display: block;
29173
+ font-size: 12px;
29174
+ color: var(--color-text-maxcontrast);
29175
+ }
29176
+ .cn-toggle-table__empty[data-v-53a57112] {
29177
+ margin: 0;
29178
+ color: var(--color-text-maxcontrast);
29179
+ }
29180
+
29181
+
29182
+ .cn-choice-picker[data-v-7075cbe2] {
29183
+ display: flex;
29184
+ flex-direction: column;
29185
+ gap: 12px;
29186
+ min-width: 0;
29187
+ }
29188
+ .cn-choice-picker__cards[data-v-7075cbe2] {
29189
+ display: flex;
29190
+ flex-wrap: wrap;
29191
+ gap: 10px;
29192
+ margin: 0;
29193
+ padding: 0;
29194
+ border: 0;
29195
+ }
29196
+ .cn-choice-picker__legend[data-v-7075cbe2] {
29197
+ position: absolute;
29198
+ width: 1px;
29199
+ height: 1px;
29200
+ overflow: hidden;
29201
+ clip-path: inset(50%);
29202
+ }
29203
+ .cn-choice-picker__card[data-v-7075cbe2] {
29204
+ position: relative;
29205
+ display: flex;
29206
+ flex: 1 1 220px;
29207
+ align-items: center;
29208
+ gap: 12px;
29209
+ padding: 10px 12px;
29210
+ border: 1px solid var(--cn-board-hairline, var(--color-border));
29211
+ border-radius: 10px;
29212
+ background: var(--color-main-background);
29213
+ cursor: pointer;
29214
+ }
29215
+ .cn-choice-picker__card--selected[data-v-7075cbe2] {
29216
+ padding: 9px 11px;
29217
+ border: 2px solid var(--color-primary-element);
29218
+ }
29219
+ .cn-choice-picker__card--refused[data-v-7075cbe2] {
29220
+ cursor: not-allowed;
29221
+ opacity: 0.7;
29222
+ }
29223
+ .cn-choice-picker__card[data-v-7075cbe2]:focus-within {
29224
+ outline: 2px solid var(--color-primary-element);
29225
+ outline-offset: 2px;
29226
+ }
29227
+ .cn-choice-picker__input[data-v-7075cbe2] {
29228
+ flex: 0 0 auto;
29229
+ width: 18px;
29230
+ height: 18px;
29231
+ margin: 0;
29232
+ accent-color: var(--color-primary-element);
29233
+ }
29234
+ .cn-choice-picker__swatches[data-v-7075cbe2] {
29235
+ display: flex;
29236
+ gap: 4px;
29237
+ }
29238
+ .cn-choice-picker__swatch[data-v-7075cbe2] {
29239
+ width: 18px;
29240
+ height: 18px;
29241
+ box-sizing: border-box;
29242
+ border: 1px solid var(--color-border);
29243
+ border-radius: 4px;
29244
+ }
29245
+ .cn-choice-picker__text[data-v-7075cbe2] {
29246
+ display: flex;
29247
+ flex: 1 1 auto;
29248
+ flex-direction: column;
29249
+ gap: 2px;
29250
+ min-width: 0;
29251
+ }
29252
+ .cn-choice-picker__title[data-v-7075cbe2] {
29253
+ font-size: 15px;
29254
+ }
29255
+ .cn-choice-picker__refusal[data-v-7075cbe2],
29256
+ .cn-choice-picker__hint[data-v-7075cbe2],
29257
+ .cn-choice-picker__note[data-v-7075cbe2] {
29258
+ margin: 0;
29259
+ font-size: 13px;
29260
+ color: var(--color-text-maxcontrast);
29261
+ }
29262
+ .cn-choice-picker__warning-intro[data-v-7075cbe2] {
29263
+ margin: 0 0 4px;
29264
+ }
29265
+ .cn-choice-picker__warning-list[data-v-7075cbe2] {
29266
+ margin: 0;
29267
+ padding-inline-start: 18px;
29268
+ }
29269
+ .cn-choice-picker__actions[data-v-7075cbe2] {
29270
+ display: flex;
29271
+ flex-wrap: wrap;
29272
+ gap: 8px;
29273
+ }
28527
29274
 
28528
29275
 
28529
29276
  .cn-record-list__list[data-v-7073b362] {
@@ -28558,6 +29305,19 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
28558
29305
  .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-7073b362] {
28559
29306
  text-decoration: underline;
28560
29307
  }
29308
+ .cn-record-list__avatar[data-v-7073b362] {
29309
+ align-items: center;
29310
+ background: var(--color-background-hover);
29311
+ border-radius: 50%;
29312
+ color: var(--color-main-text);
29313
+ display: flex;
29314
+ flex: none;
29315
+ font-size: 12px;
29316
+ font-weight: 700;
29317
+ height: 36px;
29318
+ justify-content: center;
29319
+ width: 36px;
29320
+ }
28561
29321
  .cn-record-list__main[data-v-7073b362] {
28562
29322
  display: flex;
28563
29323
  flex: 1 1 auto;
@@ -28647,6 +29407,53 @@ a.cn-record-list__inline-title[data-v-7073b362] {
28647
29407
  display: none;
28648
29408
  }
28649
29409
 
29410
+ /* A row is a touch target of at least 44px on a phone. */
29411
+ @media (max-width: 640px) {
29412
+ .cn-record-list__row {
29413
+ min-height: 44px;
29414
+ }
29415
+ }
29416
+
29417
+
29418
+ .cn-saved-views-widget__list[data-v-8ca66162] {
29419
+ display: flex;
29420
+ flex-direction: column;
29421
+ gap: 10px;
29422
+ list-style: none;
29423
+ margin: 0;
29424
+ padding: 0;
29425
+ }
29426
+ .cn-saved-views-widget__link[data-v-8ca66162] {
29427
+ color: var(--color-primary-element);
29428
+ display: inline-block;
29429
+ font-size: 14px;
29430
+ font-weight: 600;
29431
+ min-height: 24px;
29432
+ text-decoration: none;
29433
+ }
29434
+ .cn-saved-views-widget__link[data-v-8ca66162]:hover,
29435
+ .cn-saved-views-widget__link[data-v-8ca66162]:focus-visible {
29436
+ text-decoration: underline;
29437
+ }
29438
+ .cn-saved-views-widget__note[data-v-8ca66162] {
29439
+ color: var(--color-text-maxcontrast);
29440
+ margin: 0;
29441
+ }
29442
+ .cn-saved-views-widget__loading[data-v-8ca66162] {
29443
+ display: flex;
29444
+ justify-content: center;
29445
+ padding: 8px 0;
29446
+ }
29447
+
29448
+ /* A phone: each link is a 44px touch target. */
29449
+ @media (max-width: 640px) {
29450
+ .cn-saved-views-widget__link[data-v-8ca66162] {
29451
+ align-items: center;
29452
+ display: inline-flex;
29453
+ min-height: 44px;
29454
+ }
29455
+ }
29456
+
28650
29457
 
28651
29458
  .cn-notepad-widget-form[data-v-c752df66] {
28652
29459
  display: flex;
@@ -29037,6 +29844,27 @@ a.cn-record-list__inline-title[data-v-7073b362] {
29037
29844
  font-size: 0.85em;
29038
29845
  }
29039
29846
 
29847
+ /* On a phone the bar's controls take a row each (the chips already wrap), and
29848
+ a switch and a select are 44px touch targets. */
29849
+ @media (max-width: 640px) {
29850
+ .cn-workspace-filter-widget--bar > .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] {
29851
+ flex: 1 1 100%;
29852
+ }
29853
+ .cn-workspace-filter-widget--bar > .cn-workspace-filter-widget--end[data-v-f0d5c1c6] {
29854
+ margin-inline-start: 0;
29855
+ }
29856
+ .cn-workspace-filter-widget--inline .cn-workspace-filter-widget__toggle[data-v-f0d5c1c6] {
29857
+ min-height: 44px;
29858
+ }
29859
+ .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] .v-select {
29860
+ flex: 1 1 auto;
29861
+ min-width: 0;
29862
+ }
29863
+ .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] .vs__dropdown-toggle {
29864
+ min-height: 44px;
29865
+ }
29866
+ }
29867
+
29040
29868
 
29041
29869
  .cn-data-matrix[data-v-6e3e1a0f] {
29042
29870
  display: flex;
@@ -36666,6 +37494,17 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
36666
37494
  .cn-dashboard-page__content-item[data-v-824052fe] {
36667
37495
  width: 100%;
36668
37496
  }
37497
+ /* On a phone (screens-dashboard-phone) the touch targets of a board dashboard
37498
+ are 44px: the widget Actions menu and the KPI tiles. */
37499
+ @media (max-width: 640px) {
37500
+ .cn-dashboard-page--board[data-v-824052fe] .cn-widget-wrapper__actions .action-item__menutoggle,
37501
+ .cn-dashboard-page--board[data-v-824052fe] .cn-widget-wrapper__actions .button-vue {
37502
+ min-height: 44px;
37503
+ }
37504
+ .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-824052fe] {
37505
+ min-height: 44px;
37506
+ }
37507
+ }
36669
37508
 
36670
37509
 
36671
37510
  /* Trigger: strip NcActions' default button chrome down to just the chip span. */