@conduction/nextcloud-vue 2.76.0 → 2.78.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 (173) hide show
  1. package/dist/esm/components/CnAiCompanion/CnAiCompanion.vue2.js +23 -0
  2. package/dist/esm/components/CnAiCompanion/CnAiCompanion.vue2.js.map +1 -1
  3. package/dist/esm/components/CnAiCompanion/CnAiCompanion.vue3.js.map +1 -1
  4. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +18 -3
  5. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
  6. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +49 -3
  7. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
  8. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +2 -1
  9. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
  10. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
  11. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +79 -1
  12. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  13. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +229 -203
  14. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  15. package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue.js +9 -0
  16. package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue.js.map +1 -0
  17. package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue2.js +50 -0
  18. package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue2.js.map +1 -0
  19. package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue3.js +13 -0
  20. package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue3.js.map +1 -0
  21. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +37 -0
  22. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  23. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js +2 -2
  24. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  25. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +29 -4
  26. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  27. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  28. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +48 -6
  29. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  30. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +90 -51
  31. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  32. package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue.js +1 -1
  33. package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue2.js +45 -2
  34. package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue2.js.map +1 -1
  35. package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue3.js.map +1 -1
  36. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +16 -28
  37. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  38. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +12 -24
  39. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  40. package/dist/esm/components/CnFavouriteToggle/CnFavouriteToggle.vue2.js +7 -2
  41. package/dist/esm/components/CnFavouriteToggle/CnFavouriteToggle.vue2.js.map +1 -1
  42. package/dist/esm/components/CnFavouriteToggle/CnFavouriteToggle.vue3.js.map +1 -1
  43. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +114 -1
  44. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  45. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +115 -62
  46. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  47. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js +89 -7
  48. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js.map +1 -1
  49. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue3.js +62 -30
  50. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue3.js.map +1 -1
  51. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +7 -1
  52. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  53. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  54. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +4 -1
  55. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
  56. package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
  57. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +104 -13
  58. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  59. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +13 -9
  60. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  61. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +199 -7
  62. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  63. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +155 -119
  64. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  65. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +6 -0
  66. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  67. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +4 -1
  68. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  69. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +36 -0
  70. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  71. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +35 -23
  72. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  73. package/dist/esm/components/CnStatusBadge/CnStatusBadge.vue2.js +6 -2
  74. package/dist/esm/components/CnStatusBadge/CnStatusBadge.vue2.js.map +1 -1
  75. package/dist/esm/components/CnStatusBadge/CnStatusBadge.vue3.js.map +1 -1
  76. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +13 -0
  77. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  78. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  79. package/dist/esm/composables/useFormDraft.js +11 -1
  80. package/dist/esm/composables/useFormDraft.js.map +1 -1
  81. package/dist/esm/composables/useListView.js +4 -0
  82. package/dist/esm/composables/useListView.js.map +1 -1
  83. package/dist/esm/composables/useObjectPresence.js +15 -4
  84. package/dist/esm/composables/useObjectPresence.js.map +1 -1
  85. package/dist/esm/index.js +2 -1
  86. package/dist/esm/index.js.map +1 -1
  87. package/dist/esm/l10n/en.json.js +32 -1
  88. package/dist/esm/l10n/en.json.js.map +1 -1
  89. package/dist/esm/l10n/nl.json.js +32 -1
  90. package/dist/esm/l10n/nl.json.js.map +1 -1
  91. package/dist/esm/nextcloud-vue.css +500 -75
  92. package/dist/esm/store/plugins/interactions.js +20 -10
  93. package/dist/esm/store/plugins/interactions.js.map +1 -1
  94. package/dist/esm/store/useObjectStore.js +17 -0
  95. package/dist/esm/store/useObjectStore.js.map +1 -1
  96. package/dist/esm/utils/badgeVariants.js +32 -0
  97. package/dist/esm/utils/badgeVariants.js.map +1 -0
  98. package/dist/esm/utils/builtInFormatters.js +15 -7
  99. package/dist/esm/utils/builtInFormatters.js.map +1 -1
  100. package/dist/esm/utils/groupAutocomplete.js +63 -1
  101. package/dist/esm/utils/groupAutocomplete.js.map +1 -1
  102. package/dist/esm/utils/lensAvailability.js +90 -0
  103. package/dist/esm/utils/lensAvailability.js.map +1 -0
  104. package/dist/esm/utils/personalLenses.js +13 -6
  105. package/dist/esm/utils/personalLenses.js.map +1 -1
  106. package/dist/esm/utils/recordInteractions.js +31 -13
  107. package/dist/esm/utils/recordInteractions.js.map +1 -1
  108. package/dist/esm/utils/resolveFilterTokens.js +46 -3
  109. package/dist/esm/utils/resolveFilterTokens.js.map +1 -1
  110. package/dist/esm/utils/schema.js +1 -1
  111. package/dist/esm/utils/schema.js.map +1 -1
  112. package/dist/esm/utils/sentinelTokens.js +4 -4
  113. package/dist/esm/utils/sentinelTokens.js.map +1 -1
  114. package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
  115. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  116. package/dist/esm/utils/widgetVisibility.js +46 -1
  117. package/dist/esm/utils/widgetVisibility.js.map +1 -1
  118. package/dist/nextcloud-vue.cjs.js +4389 -2890
  119. package/dist/nextcloud-vue.cjs.js.map +2 -2
  120. package/dist/nextcloud-vue.css +500 -75
  121. package/l10n/en.json +32 -1
  122. package/l10n/nl.json +32 -1
  123. package/package.json +1 -1
  124. package/src/components/CnAiCompanion/CnAiCompanion.vue +23 -0
  125. package/src/components/CnAppNav/CnAppNav.vue +44 -5
  126. package/src/components/CnBoardView/CnBoardView.vue +2 -1
  127. package/src/components/CnCellRenderer/CnCellRenderer.md +1 -0
  128. package/src/components/CnCellRenderer/CnCellRenderer.vue +106 -9
  129. package/src/components/CnCellRenderer/CnGroupNameCell.vue +61 -0
  130. package/src/components/CnChartWidget/CnChartWidget.vue +39 -2
  131. package/src/components/CnDashboardPage/CnDashboardPage.vue +29 -4
  132. package/src/components/CnDataTable/CnDataTable.md +9 -0
  133. package/src/components/CnDataTable/CnDataTable.vue +87 -22
  134. package/src/components/CnDateRangePicker/CnDateRangePicker.vue +44 -1
  135. package/src/components/CnDetailPage/CnDetailPage.vue +10 -27
  136. package/src/components/CnFavouriteToggle/CnFavouriteToggle.vue +7 -2
  137. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +204 -5
  138. package/src/components/CnFollowToggle/CnFollowToggle.vue +118 -13
  139. package/src/components/CnFormDialog/CnFormDialog.vue +7 -1
  140. package/src/components/CnFormPage/CnFormPage.vue +4 -1
  141. package/src/components/CnIndexPage/CnIndexPage.md +36 -0
  142. package/src/components/CnIndexPage/CnIndexPage.vue +112 -19
  143. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +226 -2
  144. package/src/components/CnObjectSidebar/CnFilesTab.vue +9 -0
  145. package/src/components/CnStatWidget/CnStatWidget.vue +52 -2
  146. package/src/components/CnStatusBadge/CnStatusBadge.vue +6 -2
  147. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +13 -0
  148. package/src/composables/__tests__/useObjectPresence.spec.js +24 -0
  149. package/src/composables/useFormDraft.js +11 -1
  150. package/src/composables/useListView.js +4 -0
  151. package/src/composables/useObjectPresence.js +15 -4
  152. package/src/css/badge.css +31 -0
  153. package/src/css/kpi-card.css +51 -0
  154. package/src/css/look-board-detail.css +40 -2
  155. package/src/css/look-board-index.css +36 -0
  156. package/src/css/look-board.css +8 -0
  157. package/src/css/table.css +82 -17
  158. package/src/index.js +2 -1
  159. package/src/schemas/app-manifest-v2.schema.json +15 -11
  160. package/src/store/plugins/interactions.js +20 -10
  161. package/src/store/useObjectStore.js +17 -0
  162. package/src/utils/badgeVariants.js +29 -0
  163. package/src/utils/builtInFormatters.js +15 -7
  164. package/src/utils/groupAutocomplete.js +75 -0
  165. package/src/utils/index.js +1 -1
  166. package/src/utils/lensAvailability.js +86 -0
  167. package/src/utils/personalLenses.js +13 -6
  168. package/src/utils/recordInteractions.js +31 -13
  169. package/src/utils/resolveFilterTokens.js +45 -2
  170. package/src/utils/schema.js +1 -1
  171. package/src/utils/sentinelTokens.js +4 -4
  172. package/src/utils/validateManifestV2.compiled.js +2 -2
  173. package/src/utils/widgetVisibility.js +45 -0
@@ -502,6 +502,14 @@
502
502
  color: var(--color-main-text);
503
503
  opacity: 1;
504
504
  }
505
+
506
+ /* ---- Status pills (screens-cell-pill-parity) ---------------------------- */
507
+ /* The board draws a primary pill in the deep primary ink on the light primary
508
+ ground ("Verzoek", "Nieuw"); the default look keeps the brighter
509
+ primary-element text. The other tones already match the board. */
510
+ .cn-look-board .cn-status-badge--primary:not(.cn-status-badge--solid):not(.cn-look-nextcloud *) {
511
+ color: var(--color-primary-element-light-text);
512
+ }
505
513
  /*
506
514
  * The board dialog (screens-dialog-parity, canon section 5).
507
515
  *
@@ -1192,6 +1200,42 @@
1192
1200
  margin-inline-start: 0;
1193
1201
  }
1194
1202
 
1203
+ /* The header buttons keep the board's button under a theme that styles every
1204
+ secondary or primary button with `!important` (the nldesign theme: a
1205
+ primary border, 8px 16px padding): Download and the Actions menu are 40px,
1206
+ a grey border on the main background (PqTickets, DqZaken), the primary
1207
+ button is the primary fill without a border. The buildiq square is not a
1208
+ direct child button and keeps its own rule. */
1209
+ .cn-look-board .cn-index-page .cn-index-page__header-buttons > .button-vue--secondary,
1210
+ .cn-look-board .cn-index-page .cn-index-page__header-buttons > .action-item .button-vue {
1211
+ height: var(--cn-board-control-height) !important;
1212
+ min-height: var(--cn-board-control-height) !important;
1213
+ padding: 0 14px !important;
1214
+ border: 1px solid var(--color-border-dark) !important;
1215
+ border-radius: var(--cn-board-control-radius) !important;
1216
+ background: var(--color-main-background) !important;
1217
+ color: var(--color-main-text) !important;
1218
+ }
1219
+
1220
+ .cn-look-board .cn-index-page .cn-index-page__header-buttons > .button-vue--secondary:hover,
1221
+ .cn-look-board .cn-index-page .cn-index-page__header-buttons > .action-item .button-vue:hover {
1222
+ background: var(--color-background-hover) !important;
1223
+ }
1224
+
1225
+ .cn-look-board .cn-index-page .cn-index-page__header-buttons > .button-vue--primary {
1226
+ height: var(--cn-board-control-height) !important;
1227
+ min-height: var(--cn-board-control-height) !important;
1228
+ padding: 0 16px !important;
1229
+ border: 0 !important;
1230
+ border-radius: var(--cn-board-control-radius) !important;
1231
+ background: var(--color-primary-element) !important;
1232
+ color: var(--color-primary-element-text) !important;
1233
+ }
1234
+
1235
+ .cn-look-board .cn-index-page .cn-index-page__header-buttons > .button-vue--primary:hover {
1236
+ background: var(--color-primary-element-hover) !important;
1237
+ }
1238
+
1195
1239
  /* ----------------------------------------------------------------- toolbar */
1196
1240
 
1197
1241
  /* No band, no padding, no radius. The DOM is already in reading order (row 1,
@@ -2198,9 +2242,64 @@
2198
2242
  background-color: var(--color-background-hover);
2199
2243
  }
2200
2244
 
2201
- .cn-table-sort-indicator {
2202
- margin-inline-start: var(--default-grid-baseline);
2203
- opacity: 0.6;
2245
+ /* The sort control: a real button that looks like the header text, the label
2246
+ followed by a 14px chevron 4px after it (the "Wettelijke termijn" header on
2247
+ the DqWooVerzoeken board). Selector scoped under the table so it outranks
2248
+ Nextcloud's own `button` rule, which would otherwise give it a border, a
2249
+ fill, a 34px min-height and a margin. */
2250
+ .cn-data-table th .cn-table-header__sort {
2251
+ display: inline-flex;
2252
+ align-items: center;
2253
+ gap: 4px;
2254
+ max-width: 100%;
2255
+ min-width: 0;
2256
+ min-height: 0;
2257
+ margin: 0;
2258
+ padding: 0;
2259
+ border: 0;
2260
+ border-radius: var(--border-radius, 4px);
2261
+ background: transparent;
2262
+ color: inherit;
2263
+ font: inherit;
2264
+ font-weight: inherit;
2265
+ text-align: start;
2266
+ vertical-align: middle;
2267
+ cursor: pointer;
2268
+ }
2269
+
2270
+ .cn-data-table th .cn-table-header__sort:hover,
2271
+ .cn-data-table th .cn-table-header__sort:focus {
2272
+ background: transparent;
2273
+ }
2274
+
2275
+ .cn-data-table th .cn-table-header__sort:focus-visible {
2276
+ outline: 2px solid var(--color-main-text);
2277
+ outline-offset: 2px;
2278
+ }
2279
+
2280
+ .cn-data-table th .cn-table-header__sort > :first-child {
2281
+ min-width: 0;
2282
+ overflow: hidden;
2283
+ text-overflow: ellipsis;
2284
+ }
2285
+
2286
+ /* The chevron. Unsorted columns show a pale down chevron, so every sortable
2287
+ column says it sorts; the sorted column shows the direction at full text
2288
+ colour. The direction is also in the header's `aria-sort`. */
2289
+ .cn-table-header__chevron {
2290
+ display: inline-flex;
2291
+ flex: none;
2292
+ color: var(--color-main-text);
2293
+ }
2294
+
2295
+ .cn-table-header__chevron--idle {
2296
+ color: var(--color-text-maxcontrast);
2297
+ opacity: 0.5;
2298
+ }
2299
+
2300
+ .cn-data-table th.cn-table-header--sortable:hover .cn-table-header__chevron--idle,
2301
+ .cn-data-table th .cn-table-header__sort:focus-visible .cn-table-header__chevron--idle {
2302
+ opacity: 1;
2204
2303
  }
2205
2304
 
2206
2305
  /* A column carrying a `description` gets a dotted underline — the long-standing
@@ -2216,15 +2315,12 @@
2216
2315
  cursor: help;
2217
2316
  }
2218
2317
 
2219
- .cn-data-table th.cn-table-header--sortable:focus-visible {
2220
- outline: 2px solid var(--color-main-text);
2221
- outline-offset: -2px;
2222
- }
2223
-
2224
- /* Header filter button (CnDataTable `filterable`). 24px hit area with the
2225
- 16px icon; the filled icon plus the primary colour marks an active filter,
2226
- so the state never rests on colour alone. */
2227
- .cn-table-header__filter {
2318
+ /* Header filter button (CnDataTable `filterable`): a 14px funnel directly
2319
+ after the sort chevron, in a 24px hit area. Muted with no filter set; with
2320
+ a filter set it takes the dark primary and a dot, so the state never rests
2321
+ on colour alone. */
2322
+ .cn-data-table th .cn-table-header__filter {
2323
+ position: relative;
2228
2324
  display: inline-flex;
2229
2325
  align-items: center;
2230
2326
  justify-content: center;
@@ -2232,7 +2328,7 @@
2232
2328
  min-width: 24px;
2233
2329
  height: 24px;
2234
2330
  min-height: 24px;
2235
- margin: 0 0 0 4px;
2331
+ margin: 0 0 0 2px;
2236
2332
  padding: 0;
2237
2333
  border: none;
2238
2334
  border-radius: var(--border-radius, 4px);
@@ -2242,18 +2338,31 @@
2242
2338
  cursor: pointer;
2243
2339
  }
2244
2340
 
2245
- .cn-table-header__filter:hover {
2341
+ .cn-data-table th .cn-table-header__filter:hover {
2246
2342
  background-color: var(--color-background-hover);
2247
2343
  color: var(--color-main-text);
2248
2344
  }
2249
2345
 
2250
- .cn-table-header__filter:focus-visible {
2346
+ .cn-data-table th .cn-table-header__filter:focus-visible {
2251
2347
  outline: 2px solid var(--color-main-text);
2252
2348
  outline-offset: 0;
2253
2349
  }
2254
2350
 
2255
- .cn-table-header__filter--active {
2256
- color: var(--color-primary-element);
2351
+ .cn-data-table th .cn-table-header__filter--active,
2352
+ .cn-data-table th .cn-table-header__filter--active:hover {
2353
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
2354
+ }
2355
+
2356
+ /* The active-filter dot, on the funnel's top right. */
2357
+ .cn-table-header__filter-dot {
2358
+ position: absolute;
2359
+ inset-block-start: 3px;
2360
+ inset-inline-end: 3px;
2361
+ width: 6px;
2362
+ height: 6px;
2363
+ border-radius: 50%;
2364
+ background-color: var(--color-primary-element);
2365
+ pointer-events: none;
2257
2366
  }
2258
2367
 
2259
2368
  /* Active header filters above the table, one removable chip each. */
@@ -3281,6 +3390,57 @@ a.cn-kpi-card--stacked:focus-visible {
3281
3390
  gap: 6px;
3282
3391
  }
3283
3392
 
3393
+ /* A linked board tile is one link: the label is not underlined link text, in
3394
+ any layout (screens-stat-tile-parity). The NL Design theme underlines every
3395
+ `a` with `!important`, so the opt-out needs it too. */
3396
+ a.cn-kpi-card--board,
3397
+ a.cn-kpi-card--board:hover,
3398
+ a.cn-kpi-card--board:focus-visible,
3399
+ a.cn-kpi-card--board * {
3400
+ text-decoration: none !important;
3401
+ }
3402
+
3403
+ /* `content.iconPlacement: "end"` (DqDashboard): label left, the icon in a
3404
+ 32px circle right, tinted by the tile's state. */
3405
+ .cn-kpi-card--board .cn-kpi-card__title--badge-end {
3406
+ justify-content: space-between;
3407
+ gap: 8px;
3408
+ }
3409
+
3410
+ .cn-kpi-card__badge {
3411
+ display: inline-flex;
3412
+ flex: 0 0 auto;
3413
+ align-items: center;
3414
+ justify-content: center;
3415
+ width: 32px;
3416
+ height: 32px;
3417
+ margin-inline-start: auto;
3418
+ border-radius: 50%;
3419
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
3420
+ background: var(--color-primary-element-light, color-mix(in srgb, var(--color-primary-element) 12%, transparent));
3421
+ }
3422
+
3423
+ .cn-kpi-card__badge svg {
3424
+ width: 18px;
3425
+ height: 18px;
3426
+ fill: currentcolor;
3427
+ }
3428
+
3429
+ .cn-kpi-card__badge--success {
3430
+ color: var(--color-text-success, var(--color-success-text));
3431
+ background: color-mix(in srgb, var(--color-text-success, var(--color-success-text)) 12%, var(--color-main-background));
3432
+ }
3433
+
3434
+ .cn-kpi-card__badge--warning {
3435
+ color: var(--color-element-warning, var(--color-warning-text));
3436
+ background: color-mix(in srgb, var(--color-element-warning, var(--color-warning-text)) 12%, var(--color-main-background));
3437
+ }
3438
+
3439
+ .cn-kpi-card__badge--error {
3440
+ color: var(--color-text-error, var(--color-error-text));
3441
+ background: color-mix(in srgb, var(--color-text-error, var(--color-error-text)) 10%, var(--color-main-background));
3442
+ }
3443
+
3284
3444
  .cn-kpi-card__glyph {
3285
3445
  display: inline-flex;
3286
3446
  flex: 0 0 auto;
@@ -3527,6 +3687,15 @@ a.cn-kpi-card--stacked:focus-visible {
3527
3687
  @conduction/nextcloud-vue — Status Badge
3528
3688
  ======================================== */
3529
3689
 
3690
+ /* The two board tones without a Nextcloud colour role (screens-cell-pill-parity).
3691
+ A theme may redefine them; the six role variants below use Nextcloud's own. */
3692
+ :root {
3693
+ --cn-status-purple-bg: #e8e6f6;
3694
+ --cn-status-purple-text: #4a3f8f;
3695
+ --cn-status-teal-bg: #e3f1f3;
3696
+ --cn-status-teal-text: #1d5e66;
3697
+ }
3698
+
3530
3699
  .cn-status-badge {
3531
3700
  display: inline-flex;
3532
3701
  align-items: center;
@@ -3576,6 +3745,18 @@ a.cn-kpi-card--stacked:focus-visible {
3576
3745
  color: var(--color-info-text, var(--color-info, #0082c9));
3577
3746
  }
3578
3747
 
3748
+ /* Work in progress ("In behandeling"), a board tone. */
3749
+ .cn-status-badge--purple {
3750
+ background-color: var(--cn-status-purple-bg);
3751
+ color: var(--cn-status-purple-text);
3752
+ }
3753
+
3754
+ /* Handed on ("Omgezet naar een zaak"), a board tone. */
3755
+ .cn-status-badge--teal {
3756
+ background-color: var(--cn-status-teal-bg);
3757
+ color: var(--cn-status-teal-text);
3758
+ }
3759
+
3579
3760
  /* Solid variants — solid background with white text for use on colored backgrounds */
3580
3761
  .cn-status-badge--solid.cn-status-badge--default {
3581
3762
  background-color: var(--color-background-dark);
@@ -3606,6 +3787,16 @@ a.cn-kpi-card--stacked:focus-visible {
3606
3787
  background-color: var(--color-info, #0082c9);
3607
3788
  color: white;
3608
3789
  }
3790
+
3791
+ .cn-status-badge--solid.cn-status-badge--purple {
3792
+ background-color: var(--cn-status-purple-text);
3793
+ color: white;
3794
+ }
3795
+
3796
+ .cn-status-badge--solid.cn-status-badge--teal {
3797
+ background-color: var(--cn-status-teal-text);
3798
+ color: white;
3799
+ }
3609
3800
  /* ========================================
3610
3801
  @conduction/nextcloud-vue — Layout & Filter Utility Styles
3611
3802
  ======================================== */
@@ -5503,12 +5694,26 @@ a.cn-kpi-card--stacked:focus-visible {
5503
5694
 
5504
5695
  /* ---- Folder tabs ------------------------------------------------------- */
5505
5696
 
5697
+ /* The strip draws no line of its own (design-system pull request 147). The card under it
5698
+ carries its full border, top included, so the top-right corner is the
5699
+ card's own rounded corner instead of a strip rule running straight past it.
5700
+ The open tab overlaps that top border by 1px (the nav's -1px margin) and
5701
+ paints over it, so it flows into the card as a folder tab. */
5506
5702
  .cn-look-board .cn-tabs--board .cn-tabs__bar {
5507
- border-bottom: 1px solid var(--color-border-dark);
5703
+ border-bottom: none;
5508
5704
  gap: 4px;
5705
+ position: relative;
5509
5706
  }
5510
5707
 
5708
+ .cn-look-board .cn-tabs.cn-tabs--board .cn-tabs__bar::after {
5709
+ content: none;
5710
+ }
5711
+
5712
+ /* Tabs sit on the card's top edge; only the open tab reaches 1px further
5713
+ down (min-height 35px below), over the card's top border. Top-aligned so
5714
+ the inactive tabs do not stretch to the open tab's height. */
5511
5715
  .cn-look-board .cn-tabs--board .cn-tabs__nav {
5716
+ align-items: flex-start;
5512
5717
  gap: 4px;
5513
5718
  }
5514
5719
 
@@ -5529,7 +5734,11 @@ a.cn-kpi-card--stacked:focus-visible {
5529
5734
  border-bottom: 1px solid var(--color-main-background);
5530
5735
  border-top: 1px solid var(--color-border-dark);
5531
5736
  font-weight: 700;
5737
+ min-height: 35px;
5738
+ padding-bottom: 9px;
5532
5739
  padding-top: 8px;
5740
+ position: relative;
5741
+ z-index: 1;
5533
5742
  }
5534
5743
 
5535
5744
  /* The count: a grey, borderless 20px badge 8px after the label. */
@@ -5566,10 +5775,30 @@ a.cn-kpi-card--stacked:focus-visible {
5566
5775
  .cn-look-board .cn-tabs--board .cn-tabs__content > .cn-tab > :first-child .cn-widget-wrapper,
5567
5776
  .cn-look-board .cn-tabs--board .cn-tabs__content > .cn-tab > .cn-widget-wrapper,
5568
5777
  .cn-look-board .cn-tabs--board .cn-tabs__content > .cn-tab > .cn-detail-card {
5569
- border-top: none;
5778
+ border-top: 1px solid var(--color-border);
5779
+ border-radius: 0 12px 12px 12px;
5780
+ }
5781
+
5782
+ /* A CnTabsWidget panel is the card itself: the same full border, so it joins
5783
+ the open tab the same way. The top-left stays square under the first tab. */
5784
+ .cn-look-board .cn-tabs--board.cn-tabs-widget__tabs .cn-tabs__content {
5785
+ border: 1px solid var(--color-border);
5570
5786
  border-radius: 0 12px 12px 12px;
5571
5787
  }
5572
5788
 
5789
+ /* A panel of CnTabsWidget is the content block itself: the open tab flows
5790
+ straight into it. The widget in the panel renders chromeless, but the board
5791
+ card rule below (and the first-card rule above) used to give its wrapper a
5792
+ border and a 12px radius again, so a second card sat inside the panel. Its
5793
+ left edge ran down from the open tab and its rounded top-right drew a line
5794
+ across the top right of the content block, where DqZaak shows one sheet.
5795
+ Same specificity as the first-card rule and later, so it wins on order. */
5796
+ .cn-look-board .cn-tabs--board.cn-tabs-widget__tabs .cn-tabs__content .cn-widget-wrapper.cn-widget-wrapper--chromeless {
5797
+ background: transparent;
5798
+ border: 0;
5799
+ border-radius: 0;
5800
+ }
5801
+
5573
5802
  /* ---- Body cards and side cards ----------------------------------------- */
5574
5803
 
5575
5804
  .cn-look-board .cn-detail-page .cn-widget-wrapper,
@@ -9019,8 +9248,11 @@ svg.leaflet-image-layer.leaflet-interactive path {
9019
9248
  .cn-cell-renderer__date--error[data-v-37d7b88f] {
9020
9249
  color: var(--color-text-error, var(--color-error-text));
9021
9250
  }
9251
+
9252
+ /* The text variant, not the fill: from Nextcloud 32 `--color-success` is a
9253
+ background colour and too pale for a 16px glyph on a light theme. */
9022
9254
  .cn-cell-renderer__icon--success[data-v-37d7b88f] {
9023
- color: var(--color-success);
9255
+ color: var(--color-text-success, var(--color-success-text, var(--color-success)));
9024
9256
  }
9025
9257
  .cn-cell-renderer__swatch-wrap[data-v-37d7b88f] {
9026
9258
  display: inline-flex;
@@ -9356,9 +9588,64 @@ svg.leaflet-image-layer.leaflet-interactive path {
9356
9588
  background-color: var(--color-background-hover);
9357
9589
  }
9358
9590
 
9359
- .cn-table-sort-indicator {
9360
- margin-inline-start: var(--default-grid-baseline);
9361
- opacity: 0.6;
9591
+ /* The sort control: a real button that looks like the header text, the label
9592
+ followed by a 14px chevron 4px after it (the "Wettelijke termijn" header on
9593
+ the DqWooVerzoeken board). Selector scoped under the table so it outranks
9594
+ Nextcloud's own `button` rule, which would otherwise give it a border, a
9595
+ fill, a 34px min-height and a margin. */
9596
+ .cn-data-table th .cn-table-header__sort {
9597
+ display: inline-flex;
9598
+ align-items: center;
9599
+ gap: 4px;
9600
+ max-width: 100%;
9601
+ min-width: 0;
9602
+ min-height: 0;
9603
+ margin: 0;
9604
+ padding: 0;
9605
+ border: 0;
9606
+ border-radius: var(--border-radius, 4px);
9607
+ background: transparent;
9608
+ color: inherit;
9609
+ font: inherit;
9610
+ font-weight: inherit;
9611
+ text-align: start;
9612
+ vertical-align: middle;
9613
+ cursor: pointer;
9614
+ }
9615
+
9616
+ .cn-data-table th .cn-table-header__sort:hover,
9617
+ .cn-data-table th .cn-table-header__sort:focus {
9618
+ background: transparent;
9619
+ }
9620
+
9621
+ .cn-data-table th .cn-table-header__sort:focus-visible {
9622
+ outline: 2px solid var(--color-main-text);
9623
+ outline-offset: 2px;
9624
+ }
9625
+
9626
+ .cn-data-table th .cn-table-header__sort > :first-child {
9627
+ min-width: 0;
9628
+ overflow: hidden;
9629
+ text-overflow: ellipsis;
9630
+ }
9631
+
9632
+ /* The chevron. Unsorted columns show a pale down chevron, so every sortable
9633
+ column says it sorts; the sorted column shows the direction at full text
9634
+ colour. The direction is also in the header's `aria-sort`. */
9635
+ .cn-table-header__chevron {
9636
+ display: inline-flex;
9637
+ flex: none;
9638
+ color: var(--color-main-text);
9639
+ }
9640
+
9641
+ .cn-table-header__chevron--idle {
9642
+ color: var(--color-text-maxcontrast);
9643
+ opacity: 0.5;
9644
+ }
9645
+
9646
+ .cn-data-table th.cn-table-header--sortable:hover .cn-table-header__chevron--idle,
9647
+ .cn-data-table th .cn-table-header__sort:focus-visible .cn-table-header__chevron--idle {
9648
+ opacity: 1;
9362
9649
  }
9363
9650
 
9364
9651
  /* A column carrying a `description` gets a dotted underline — the long-standing
@@ -9374,15 +9661,12 @@ svg.leaflet-image-layer.leaflet-interactive path {
9374
9661
  cursor: help;
9375
9662
  }
9376
9663
 
9377
- .cn-data-table th.cn-table-header--sortable:focus-visible {
9378
- outline: 2px solid var(--color-main-text);
9379
- outline-offset: -2px;
9380
- }
9381
-
9382
- /* Header filter button (CnDataTable `filterable`). 24px hit area with the
9383
- 16px icon; the filled icon plus the primary colour marks an active filter,
9384
- so the state never rests on colour alone. */
9385
- .cn-table-header__filter {
9664
+ /* Header filter button (CnDataTable `filterable`): a 14px funnel directly
9665
+ after the sort chevron, in a 24px hit area. Muted with no filter set; with
9666
+ a filter set it takes the dark primary and a dot, so the state never rests
9667
+ on colour alone. */
9668
+ .cn-data-table th .cn-table-header__filter {
9669
+ position: relative;
9386
9670
  display: inline-flex;
9387
9671
  align-items: center;
9388
9672
  justify-content: center;
@@ -9390,7 +9674,7 @@ svg.leaflet-image-layer.leaflet-interactive path {
9390
9674
  min-width: 24px;
9391
9675
  height: 24px;
9392
9676
  min-height: 24px;
9393
- margin: 0 0 0 4px;
9677
+ margin: 0 0 0 2px;
9394
9678
  padding: 0;
9395
9679
  border: none;
9396
9680
  border-radius: var(--border-radius, 4px);
@@ -9400,18 +9684,31 @@ svg.leaflet-image-layer.leaflet-interactive path {
9400
9684
  cursor: pointer;
9401
9685
  }
9402
9686
 
9403
- .cn-table-header__filter:hover {
9687
+ .cn-data-table th .cn-table-header__filter:hover {
9404
9688
  background-color: var(--color-background-hover);
9405
9689
  color: var(--color-main-text);
9406
9690
  }
9407
9691
 
9408
- .cn-table-header__filter:focus-visible {
9692
+ .cn-data-table th .cn-table-header__filter:focus-visible {
9409
9693
  outline: 2px solid var(--color-main-text);
9410
9694
  outline-offset: 0;
9411
9695
  }
9412
9696
 
9413
- .cn-table-header__filter--active {
9414
- color: var(--color-primary-element);
9697
+ .cn-data-table th .cn-table-header__filter--active,
9698
+ .cn-data-table th .cn-table-header__filter--active:hover {
9699
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
9700
+ }
9701
+
9702
+ /* The active-filter dot, on the funnel's top right. */
9703
+ .cn-table-header__filter-dot {
9704
+ position: absolute;
9705
+ inset-block-start: 3px;
9706
+ inset-inline-end: 3px;
9707
+ width: 6px;
9708
+ height: 6px;
9709
+ border-radius: 50%;
9710
+ background-color: var(--color-primary-element);
9711
+ pointer-events: none;
9415
9712
  }
9416
9713
 
9417
9714
  /* Active header filters above the table, one removable chip each. */
@@ -14188,12 +14485,55 @@ button.cn-files-card__open[data-v-46f7e3c9]:hover {
14188
14485
  flex-direction: column;
14189
14486
  gap: 8px;
14190
14487
  min-width: 0;
14488
+ position: relative;
14191
14489
  border-radius: var(--border-radius-large, 8px);
14192
14490
  }
14193
14491
  .cn-files-browser--dragging[data-v-f5bdd9e2] {
14194
14492
  outline: 2px dashed var(--color-primary-element);
14195
14493
  outline-offset: 4px;
14196
14494
  }
14495
+ .cn-files-browser__drop-overlay[data-v-f5bdd9e2] {
14496
+ position: absolute;
14497
+ inset: 0;
14498
+ z-index: 2;
14499
+ display: flex;
14500
+ flex-direction: column;
14501
+ align-items: center;
14502
+ justify-content: center;
14503
+ gap: 10px;
14504
+ padding: 24px;
14505
+ box-sizing: border-box;
14506
+ border: 2px dashed var(--color-primary-element);
14507
+ border-radius: var(--border-radius-large, 8px);
14508
+ background: var(--color-primary-element-light);
14509
+ color: var(--color-primary-element-light-text, var(--color-main-text));
14510
+ text-align: center;
14511
+ pointer-events: none;
14512
+ }
14513
+ .cn-files-browser__drop-icon[data-v-f5bdd9e2] {
14514
+ display: flex;
14515
+ align-items: center;
14516
+ justify-content: center;
14517
+ width: 56px;
14518
+ height: 56px;
14519
+ border-radius: 50%;
14520
+ background: var(--color-main-background);
14521
+ color: var(--color-primary-element);
14522
+ }
14523
+ .cn-files-browser__drop-label[data-v-f5bdd9e2] {
14524
+ font-size: 20px;
14525
+ font-weight: 700;
14526
+ }
14527
+ .cn-files-browser__drop-hint[data-v-f5bdd9e2] {
14528
+ display: flex;
14529
+ align-items: center;
14530
+ gap: 8px;
14531
+ margin: 0;
14532
+ padding-top: 12px;
14533
+ border-top: 1px solid var(--color-border);
14534
+ font-size: 13px;
14535
+ color: var(--color-text-maxcontrast);
14536
+ }
14197
14537
  .cn-files-browser__bar[data-v-f5bdd9e2] {
14198
14538
  display: flex;
14199
14539
  align-items: center;
@@ -20622,6 +20962,57 @@ a.cn-kpi-card--stacked:focus-visible {
20622
20962
  gap: 6px;
20623
20963
  }
20624
20964
 
20965
+ /* A linked board tile is one link: the label is not underlined link text, in
20966
+ any layout (screens-stat-tile-parity). The NL Design theme underlines every
20967
+ `a` with `!important`, so the opt-out needs it too. */
20968
+ a.cn-kpi-card--board,
20969
+ a.cn-kpi-card--board:hover,
20970
+ a.cn-kpi-card--board:focus-visible,
20971
+ a.cn-kpi-card--board * {
20972
+ text-decoration: none !important;
20973
+ }
20974
+
20975
+ /* `content.iconPlacement: "end"` (DqDashboard): label left, the icon in a
20976
+ 32px circle right, tinted by the tile's state. */
20977
+ .cn-kpi-card--board .cn-kpi-card__title--badge-end {
20978
+ justify-content: space-between;
20979
+ gap: 8px;
20980
+ }
20981
+
20982
+ .cn-kpi-card__badge {
20983
+ display: inline-flex;
20984
+ flex: 0 0 auto;
20985
+ align-items: center;
20986
+ justify-content: center;
20987
+ width: 32px;
20988
+ height: 32px;
20989
+ margin-inline-start: auto;
20990
+ border-radius: 50%;
20991
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
20992
+ background: var(--color-primary-element-light, color-mix(in srgb, var(--color-primary-element) 12%, transparent));
20993
+ }
20994
+
20995
+ .cn-kpi-card__badge svg {
20996
+ width: 18px;
20997
+ height: 18px;
20998
+ fill: currentcolor;
20999
+ }
21000
+
21001
+ .cn-kpi-card__badge--success {
21002
+ color: var(--color-text-success, var(--color-success-text));
21003
+ background: color-mix(in srgb, var(--color-text-success, var(--color-success-text)) 12%, var(--color-main-background));
21004
+ }
21005
+
21006
+ .cn-kpi-card__badge--warning {
21007
+ color: var(--color-element-warning, var(--color-warning-text));
21008
+ background: color-mix(in srgb, var(--color-element-warning, var(--color-warning-text)) 12%, var(--color-main-background));
21009
+ }
21010
+
21011
+ .cn-kpi-card__badge--error {
21012
+ color: var(--color-text-error, var(--color-error-text));
21013
+ background: color-mix(in srgb, var(--color-text-error, var(--color-error-text)) 10%, var(--color-main-background));
21014
+ }
21015
+
20625
21016
  .cn-kpi-card__glyph {
20626
21017
  display: inline-flex;
20627
21018
  flex: 0 0 auto;
@@ -26339,6 +26730,15 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
26339
26730
  @conduction/nextcloud-vue — Status Badge
26340
26731
  ======================================== */
26341
26732
 
26733
+ /* The two board tones without a Nextcloud colour role (screens-cell-pill-parity).
26734
+ A theme may redefine them; the six role variants below use Nextcloud's own. */
26735
+ :root {
26736
+ --cn-status-purple-bg: #e8e6f6;
26737
+ --cn-status-purple-text: #4a3f8f;
26738
+ --cn-status-teal-bg: #e3f1f3;
26739
+ --cn-status-teal-text: #1d5e66;
26740
+ }
26741
+
26342
26742
  .cn-status-badge {
26343
26743
  display: inline-flex;
26344
26744
  align-items: center;
@@ -26388,6 +26788,18 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
26388
26788
  color: var(--color-info-text, var(--color-info, #0082c9));
26389
26789
  }
26390
26790
 
26791
+ /* Work in progress ("In behandeling"), a board tone. */
26792
+ .cn-status-badge--purple {
26793
+ background-color: var(--cn-status-purple-bg);
26794
+ color: var(--cn-status-purple-text);
26795
+ }
26796
+
26797
+ /* Handed on ("Omgezet naar een zaak"), a board tone. */
26798
+ .cn-status-badge--teal {
26799
+ background-color: var(--cn-status-teal-bg);
26800
+ color: var(--cn-status-teal-text);
26801
+ }
26802
+
26391
26803
  /* Solid variants — solid background with white text for use on colored backgrounds */
26392
26804
  .cn-status-badge--solid.cn-status-badge--default {
26393
26805
  background-color: var(--color-background-dark);
@@ -26419,6 +26831,16 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
26419
26831
  color: white;
26420
26832
  }
26421
26833
 
26834
+ .cn-status-badge--solid.cn-status-badge--purple {
26835
+ background-color: var(--cn-status-purple-text);
26836
+ color: white;
26837
+ }
26838
+
26839
+ .cn-status-badge--solid.cn-status-badge--teal {
26840
+ background-color: var(--cn-status-teal-text);
26841
+ color: white;
26842
+ }
26843
+
26422
26844
 
26423
26845
  /*
26424
26846
  * The card itself — its box, body stack, icon circle, title and value
@@ -32093,8 +32515,42 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
32093
32515
  }
32094
32516
 
32095
32517
 
32096
- .cn-favourite-toggle__star[data-v-836dad16] {
32097
- color: var(--color-warning);
32518
+ .cn-follow-toggle[data-v-eec896e2] {
32519
+ display: inline-flex;
32520
+ align-items: center;
32521
+ gap: 4px;
32522
+ }
32523
+ .cn-follow-toggle__on[data-v-eec896e2] {
32524
+ color: var(--color-primary-element);
32525
+ }
32526
+ .cn-follow-toggle__popover[data-v-eec896e2] {
32527
+ min-width: 260px;
32528
+ padding: 12px;
32529
+ }
32530
+ .cn-follow-toggle__list[data-v-eec896e2] {
32531
+ list-style: none;
32532
+ margin: 0 0 8px;
32533
+ padding: 0;
32534
+ }
32535
+ .cn-follow-toggle__row[data-v-eec896e2] {
32536
+ display: flex;
32537
+ align-items: center;
32538
+ gap: 8px;
32539
+ padding: 4px 0;
32540
+ }
32541
+ .cn-follow-toggle__who[data-v-eec896e2] {
32542
+ display: flex;
32543
+ flex-direction: column;
32544
+ flex: 1 1 auto;
32545
+ min-width: 0;
32546
+ }
32547
+ .cn-follow-toggle__since[data-v-eec896e2] {
32548
+ color: var(--color-text-maxcontrast);
32549
+ font-size: var(--font-size-small, 13px);
32550
+ }
32551
+ .cn-follow-toggle__error[data-v-eec896e2] {
32552
+ margin: 8px 0 0;
32553
+ color: var(--color-error-text);
32098
32554
  }
32099
32555
 
32100
32556
 
@@ -34239,42 +34695,6 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
34239
34695
  }
34240
34696
 
34241
34697
 
34242
- .cn-follow-toggle[data-v-eec896e2] {
34243
- display: inline-flex;
34244
- align-items: center;
34245
- gap: 4px;
34246
- }
34247
- .cn-follow-toggle__popover[data-v-eec896e2] {
34248
- min-width: 260px;
34249
- padding: 12px;
34250
- }
34251
- .cn-follow-toggle__list[data-v-eec896e2] {
34252
- list-style: none;
34253
- margin: 0 0 8px;
34254
- padding: 0;
34255
- }
34256
- .cn-follow-toggle__row[data-v-eec896e2] {
34257
- display: flex;
34258
- align-items: center;
34259
- gap: 8px;
34260
- padding: 4px 0;
34261
- }
34262
- .cn-follow-toggle__who[data-v-eec896e2] {
34263
- display: flex;
34264
- flex-direction: column;
34265
- flex: 1 1 auto;
34266
- min-width: 0;
34267
- }
34268
- .cn-follow-toggle__since[data-v-eec896e2] {
34269
- color: var(--color-text-maxcontrast);
34270
- font-size: var(--font-size-small, 13px);
34271
- }
34272
- .cn-follow-toggle__error[data-v-eec896e2] {
34273
- margin: 8px 0 0;
34274
- color: var(--color-error-text);
34275
- }
34276
-
34277
-
34278
34698
  .cn-lifecycle-actions[data-v-a62ad362] {
34279
34699
  display: flex;
34280
34700
  flex-wrap: wrap;
@@ -35948,6 +36368,11 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
35948
36368
  }
35949
36369
 
35950
36370
 
36371
+ .cn-favourite-toggle__star[data-v-836dad16] {
36372
+ color: var(--color-warning);
36373
+ }
36374
+
36375
+
35951
36376
  .cn-journey-review-list__items[data-v-d3c04832] {
35952
36377
  list-style: none;
35953
36378
  margin: 8px 0 0;