@conduction/nextcloud-vue 2.98.0 → 2.99.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 (84) hide show
  1. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js +12 -0
  2. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js.map +1 -1
  3. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js +11 -2
  4. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js.map +1 -1
  5. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue.js +1 -1
  6. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js.map +1 -1
  7. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js +1 -1
  8. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js.map +1 -1
  9. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  10. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +2 -1
  11. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  12. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue.js +1 -1
  13. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js +26 -7
  14. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue2.js.map +1 -1
  15. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js +78 -17
  16. package/dist/esm/components/CnOrderedListField/CnOrderedListField.vue3.js.map +1 -1
  17. package/dist/esm/components/CnSettingsField/CnSettingsField.vue.js +9 -0
  18. package/dist/esm/components/CnSettingsField/CnSettingsField.vue.js.map +1 -0
  19. package/dist/esm/components/CnSettingsField/CnSettingsField.vue2.js +265 -0
  20. package/dist/esm/components/CnSettingsField/CnSettingsField.vue2.js.map +1 -0
  21. package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js +191 -0
  22. package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js.map +1 -0
  23. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue.js +9 -0
  24. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue.js.map +1 -0
  25. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue2.js +508 -0
  26. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue2.js.map +1 -0
  27. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue3.js +99 -0
  28. package/dist/esm/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue3.js.map +1 -0
  29. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue.js +1 -1
  30. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +18 -70
  31. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
  32. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js +6 -44
  33. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
  34. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  35. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  36. package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue.js +9 -0
  37. package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue.js.map +1 -0
  38. package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue2.js +472 -0
  39. package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue2.js.map +1 -0
  40. package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue3.js +231 -0
  41. package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue3.js.map +1 -0
  42. package/dist/esm/components/CnWorkingCalendarWidget/index.js +27 -0
  43. package/dist/esm/components/CnWorkingCalendarWidget/index.js.map +1 -0
  44. package/dist/esm/composables/useFlowStore.js +2 -1
  45. package/dist/esm/composables/useFlowStore.js.map +1 -1
  46. package/dist/esm/index.js +3 -0
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/l10n/en.json.js +95 -1
  49. package/dist/esm/l10n/en.json.js.map +1 -1
  50. package/dist/esm/l10n/nl.json.js +109 -1
  51. package/dist/esm/l10n/nl.json.js.map +1 -1
  52. package/dist/esm/library-style.js +1 -1
  53. package/dist/esm/nextcloud-vue.css +660 -81
  54. package/dist/esm/utils/libraryWidgetKeys.js +1 -0
  55. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  56. package/dist/esm/utils/workingCalendarMonth.js +85 -0
  57. package/dist/esm/utils/workingCalendarMonth.js.map +1 -0
  58. package/dist/nextcloud-vue.cjs.js +9355 -7303
  59. package/dist/nextcloud-vue.cjs.js.map +2 -2
  60. package/dist/nextcloud-vue.css +660 -81
  61. package/l10n/en.json +95 -1
  62. package/l10n/nl.json +109 -1
  63. package/package.json +1 -1
  64. package/src/components/CnActionsMenu/CnActionsMenu.vue +14 -1
  65. package/src/components/CnBreadcrumbs/CnBreadcrumbs.vue +1 -0
  66. package/src/components/CnDetailPage/CnDetailPage.vue +1 -0
  67. package/src/components/CnOrderedListField/CnOrderedListField.vue +81 -9
  68. package/src/components/CnSettingsField/CnSettingsField.vue +449 -0
  69. package/src/components/CnSettingsField/index.js +4 -0
  70. package/src/components/CnSettingsFieldsSection/CnSettingsFieldsSection.vue +613 -0
  71. package/src/components/CnSettingsFieldsSection/index.js +4 -0
  72. package/src/components/CnSettingsPage/CnSettingsPage.vue +6 -86
  73. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  74. package/src/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue +725 -0
  75. package/src/components/CnWorkingCalendarWidget/index.js +26 -0
  76. package/src/components/index.js +3 -0
  77. package/src/composables/useFlowStore.js +2 -1
  78. package/src/css/badge.css +32 -16
  79. package/src/css/look-board-detail.css +80 -8
  80. package/src/css/look-board-index.css +52 -8
  81. package/src/css/look-board.css +219 -1
  82. package/src/index.js +3 -0
  83. package/src/utils/libraryWidgetKeys.js +1 -0
  84. package/src/utils/workingCalendarMonth.js +82 -0
@@ -208,6 +208,50 @@
208
208
  color: var(--color-primary-element-text);
209
209
  }
210
210
 
211
+ /* ---- Header action buttons (CnActionButtons) ----------------------------- */
212
+ /* The board draws a page's secondary actions as neutral 40px buttons: the
213
+ main background, a grey border, the main text at 600 (DqZaak "Bericht",
214
+ "Document", "Contact vastleggen", "Bewerken"). Nextcloud's secondary button
215
+ is a primary tint. The label hands its ink to --nldesign-color-on-surface,
216
+ which a theme that forces the body ink onto every span (thematiq) reads. */
217
+ .cn-look-board .cn-action-buttons .button-vue--secondary:not(.cn-look-nextcloud *),
218
+ .cn-look-board .cn-action-buttons .button-vue--vue-secondary:not(.cn-look-nextcloud *) {
219
+ --nldesign-color-on-surface: var(--color-main-text);
220
+ height: var(--cn-board-control-height);
221
+ min-height: var(--cn-board-control-height);
222
+ padding: 0 14px;
223
+ border: 1px solid var(--color-border-dark);
224
+ border-radius: var(--cn-board-control-radius);
225
+ background: var(--color-main-background);
226
+ color: var(--color-main-text);
227
+ font-size: 14px;
228
+ font-weight: 600;
229
+ }
230
+
231
+ /* Buttons 10px apart, each icon 16px with 8px to its label (DqZaak's header,
232
+ DqZaken's "Downloaden"); NcButton draws a 20px icon in a 30px slot. */
233
+ .cn-look-board .cn-action-buttons:not(.cn-look-nextcloud *) {
234
+ gap: 10px;
235
+ }
236
+
237
+ .cn-look-board .cn-action-buttons .button-vue .button-vue__icon:not(.cn-look-nextcloud *) {
238
+ width: 16px;
239
+ min-width: 16px;
240
+ height: 16px;
241
+ min-height: 16px;
242
+ margin-inline-end: 8px;
243
+ }
244
+
245
+ .cn-look-board .cn-action-buttons .button-vue .button-vue__icon:not(.cn-look-nextcloud *) svg {
246
+ width: 16px;
247
+ height: 16px;
248
+ }
249
+
250
+ .cn-look-board .cn-action-buttons .button-vue--secondary:not(.cn-look-nextcloud *):hover,
251
+ .cn-look-board .cn-action-buttons .button-vue--vue-secondary:not(.cn-look-nextcloud *):hover {
252
+ background: var(--color-background-hover);
253
+ }
254
+
211
255
  /* ---- The buildiq square ------------------------------------------------ */
212
256
  .cn-look-board .cn-buildiq-edit .cn-buildiq-edit__actions .button-vue {
213
257
  box-sizing: border-box;
@@ -220,6 +264,34 @@
220
264
  border-radius: var(--cn-board-control-radius);
221
265
  }
222
266
 
267
+ /* ---- The Actions menu trigger (CnActionsMenu) ---------------------------- */
268
+ /* A menu asked for as `secondary` ("Meer" in a detail header, "Acties" at the
269
+ end of a tab strip) is the board's neutral control: the main background, a
270
+ grey border, the main text at 600 (DqZaak), not Nextcloud's primary tint.
271
+ NcActions marks a secondary menu `action-item--secondary` on its root and
272
+ keeps a class given to it off, so the rule reads that marker. The label
273
+ hands its ink to --nldesign-color-on-surface for a theme that forces the
274
+ body ink onto every span (thematiq). */
275
+ .cn-look-board .action-item.action-item--secondary .action-item__menutoggle.button-vue--secondary:not(.cn-look-nextcloud *) {
276
+ --nldesign-color-on-surface: var(--color-main-text);
277
+ border: 1px solid var(--color-border-dark);
278
+ border-radius: var(--cn-board-control-radius);
279
+ background: var(--color-main-background);
280
+ color: var(--color-main-text);
281
+ font-size: 14px;
282
+ font-weight: 600;
283
+ }
284
+
285
+ .cn-look-board .action-item.action-item--secondary .action-item__menutoggle.button-vue--secondary:not(.cn-look-nextcloud *):hover {
286
+ background: var(--color-background-hover);
287
+ }
288
+
289
+ /* A trailing chevron ("Meer ⌄") follows the label, 6px after it. */
290
+ .cn-look-board .action-item.action-item--secondary .action-item__menutoggle:has(.chevron-down-icon) .button-vue__wrapper:not(.cn-look-nextcloud *) {
291
+ flex-direction: row-reverse;
292
+ gap: 6px;
293
+ }
294
+
223
295
  /* ---- The navigation ---------------------------------------------------- */
224
296
  .cn-look-board .app-navigation[data-testid="cn-nav"] {
225
297
  --app-navigation-padding: 0px;
@@ -441,6 +513,71 @@
441
513
  font-weight: 600;
442
514
  }
443
515
 
516
+ /* ---- Breadcrumbs (CnBreadcrumbs) ----------------------------------------- */
517
+ /* The board draws a trail as a line of 14px text, 8px apart: the crumbs that
518
+ lead somewhere as underlined links in the primary colour, the current one
519
+ as plain muted text (DqZaak "Alle zaken / 2026-0082"). NcBreadcrumbs draws
520
+ each crumb as a 34px tertiary button. The doubled classes outrank its
521
+ scoped rules; the ink goes through --nldesign-color-on-surface as well, for
522
+ a theme that forces the body ink onto every link and span (thematiq). */
523
+ .cn-look-board .cn-breadcrumbs.cn-breadcrumbs:not(.cn-look-nextcloud *) {
524
+ min-height: 0;
525
+ height: auto;
526
+ color: var(--color-text-maxcontrast);
527
+ font-size: 14px;
528
+ line-height: normal;
529
+ }
530
+
531
+ .cn-look-board .cn-breadcrumbs .breadcrumb__crumbs:not(.cn-look-nextcloud *) {
532
+ gap: 8px;
533
+ min-height: 0;
534
+ margin: 0;
535
+ padding: 0;
536
+ }
537
+
538
+ .cn-look-board .cn-breadcrumbs .vue-crumb.vue-crumb:not(.cn-look-nextcloud *) {
539
+ gap: 8px;
540
+ min-width: 0;
541
+ min-height: 0;
542
+ height: auto;
543
+ }
544
+
545
+ .cn-look-board .cn-breadcrumbs .vue-crumb .button-vue.button-vue:not(.cn-look-nextcloud *) {
546
+ --nldesign-color-on-surface: var(--color-primary-element);
547
+ min-width: 0;
548
+ min-height: 0;
549
+ height: auto;
550
+ padding: 0;
551
+ border: 0;
552
+ background: transparent;
553
+ color: var(--color-primary-element);
554
+ font-size: 14px;
555
+ font-weight: 400;
556
+ line-height: inherit;
557
+ }
558
+
559
+ .cn-look-board .cn-breadcrumbs .vue-crumb .button-vue.button-vue:not(.cn-look-nextcloud *) .button-vue__text {
560
+ padding: 0;
561
+ font-weight: inherit;
562
+ line-height: inherit;
563
+ text-decoration: underline;
564
+ }
565
+
566
+ .cn-look-board .cn-breadcrumbs .vue-crumb .button-vue.button-vue[aria-current='page']:not(.cn-look-nextcloud *) {
567
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
568
+ color: var(--color-text-maxcontrast);
569
+ cursor: default;
570
+ }
571
+
572
+ .cn-look-board .cn-breadcrumbs .vue-crumb .button-vue.button-vue[aria-current='page']:not(.cn-look-nextcloud *) .button-vue__text {
573
+ text-decoration: none;
574
+ }
575
+
576
+ .cn-look-board .cn-breadcrumbs .vue-crumb__separator:not(.cn-look-nextcloud *) {
577
+ margin: 0;
578
+ color: var(--color-text-maxcontrast);
579
+ }
580
+
444
581
  /* ---- Settings: header, cards in a grid, version card ------------------- */
445
582
  .cn-look-board .cn-admin-settings-shell__header:not(.cn-look-nextcloud *),
446
583
  .cn-look-board .cn-settings-page__header:not(.cn-look-nextcloud *) {
@@ -859,7 +996,26 @@
859
996
  ground ("Verzoek", "Nieuw"); the default look keeps the brighter
860
997
  primary-element text. The other tones already match the board. */
861
998
  .cn-look-board .cn-status-badge--primary:not(.cn-status-badge--solid):not(.cn-look-nextcloud *) {
862
- color: var(--color-primary-element-light-text);
999
+ --cn-status-badge-ink: var(--color-primary-element-light-text);
1000
+ color: var(--cn-status-badge-ink);
1001
+ }
1002
+
1003
+ /* Every board pill is 13px at 600 on a 3px 10px pad with a 12px corner
1004
+ (DqZaak's header pills, DqZaken's status column). */
1005
+ .cn-look-board .cn-status-badge:not(.cn-status-badge--small):not(.cn-look-nextcloud *) {
1006
+ padding: 3px 10px;
1007
+ border-radius: 12px;
1008
+ font-size: 13px;
1009
+ font-weight: 600;
1010
+ line-height: normal;
1011
+ }
1012
+
1013
+ /* A pill paints its own pairing of ink and fill. A theme that forces the body
1014
+ ink onto every span (thematiq's text rule, `!important` at id level) reads
1015
+ that ink from --nldesign-color-on-surface when the surface sets it, so the
1016
+ pill hands it its own ink: "In behandeling" stays purple on purple. */
1017
+ .cn-look-board .cn-status-badge:not(.cn-look-nextcloud *) {
1018
+ --nldesign-color-on-surface: var(--cn-status-badge-ink);
863
1019
  }
864
1020
 
865
1021
  /* ---- Date and age cells (screens-cell-date-parity) ---------------------- */
@@ -869,6 +1025,68 @@
869
1025
  font-weight: 600;
870
1026
  }
871
1027
 
1028
+ /* ---- Label and value pairs (CnDetailGrid) -------------------------------- */
1029
+ /* The board draws pairs as plain text, not as grey cards with an accent bar:
1030
+ the grid as a 13px muted label over a 15px value at weight 500 with a
1031
+ hairline under each pair (DqZaak "Zaakgegevens"), the horizontal layout as
1032
+ two columns of 14px text, the label column as wide as its longest label
1033
+ (the side cards). Both at the board's line height, 1.2, not Nextcloud's 1.5:
1034
+ a pair is 47px tall on the board. The muted label also hands its ink to
1035
+ --nldesign-color-on-surface, which a theme that forces the body ink onto
1036
+ every div (thematiq) reads. */
1037
+ .cn-look-board .cn-detail-grid.cn-detail-grid--grid:not(.cn-look-nextcloud *) {
1038
+ gap: 12px 24px;
1039
+ font-size: 15px;
1040
+ }
1041
+
1042
+ .cn-look-board .cn-detail-grid.cn-detail-grid--horizontal:not(.cn-look-nextcloud *) {
1043
+ display: grid;
1044
+ grid-template-columns: max-content 1fr;
1045
+ gap: 8px 16px;
1046
+ font-size: 14px;
1047
+ }
1048
+
1049
+ .cn-look-board .cn-detail-grid .cn-detail-grid__item:not(.cn-look-nextcloud *) {
1050
+ gap: 3px;
1051
+ padding: 0;
1052
+ border-inline-start: none;
1053
+ border-radius: 0;
1054
+ background: none;
1055
+ }
1056
+
1057
+ .cn-look-board .cn-detail-grid.cn-detail-grid--grid .cn-detail-grid__item:not(.cn-look-nextcloud *) {
1058
+ padding-bottom: 10px;
1059
+ border-bottom: 1px solid var(--cn-board-hairline);
1060
+ }
1061
+
1062
+ .cn-look-board .cn-detail-grid.cn-detail-grid--horizontal .cn-detail-grid__item:not(.cn-look-nextcloud *) {
1063
+ display: contents;
1064
+ }
1065
+
1066
+ .cn-look-board .cn-detail-grid .cn-detail-grid__label:not(.cn-look-nextcloud *) {
1067
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
1068
+ min-width: 0;
1069
+ color: var(--color-text-maxcontrast);
1070
+ font-size: 13px;
1071
+ font-weight: 400;
1072
+ line-height: 1.2;
1073
+ }
1074
+
1075
+ .cn-look-board .cn-detail-grid.cn-detail-grid--horizontal .cn-detail-grid__label:not(.cn-look-nextcloud *) {
1076
+ font-size: inherit;
1077
+ }
1078
+
1079
+ .cn-look-board .cn-detail-grid .cn-detail-grid__value:not(.cn-look-nextcloud *) {
1080
+ margin: 0;
1081
+ font-size: inherit;
1082
+ font-weight: 500;
1083
+ line-height: 1.2;
1084
+ }
1085
+
1086
+ .cn-look-board .cn-detail-grid.cn-detail-grid--horizontal .cn-detail-grid__value:not(.cn-look-nextcloud *) {
1087
+ font-weight: 400;
1088
+ }
1089
+
872
1090
  /* ---- Dashboard card titles --------------------------------------------- */
873
1091
  /* A card's title on a dashboard (and on the widgets under a reports page) is
874
1092
  the board's card h2: 17px weight 700 (boards PqMijnWerk, DcRapportages and
@@ -2063,10 +2281,15 @@
2063
2281
  outline-offset: 2px;
2064
2282
  }
2065
2283
 
2284
+ /* The selected chip is light on dark, so it hands its ink to
2285
+ --nldesign-color-on-surface: thematiq forces the body ink onto every span
2286
+ with `!important` and reads it from that property, which left the label
2287
+ dark on dark. */
2066
2288
  .cn-look-board .cn-saved-views__chips .cn-saved-views__chip--selected,
2067
2289
  .cn-look-board .cn-saved-views__chips .cn-saved-views__chip--selected:hover,
2068
2290
  .cn-look-board .cn-quick-filter-bar .cn-quick-filter-bar__tab--active,
2069
2291
  .cn-look-board .cn-quick-filter-bar .cn-quick-filter-bar__tab--active:hover {
2292
+ --nldesign-color-on-surface: var(--color-main-background);
2070
2293
  border-color: transparent;
2071
2294
  background: var(--color-main-text);
2072
2295
  color: var(--color-main-background);
@@ -2087,8 +2310,12 @@
2087
2310
  }
2088
2311
 
2089
2312
  .cn-look-board .cn-saved-views__chip--selected .cn-saved-views__chip-count,
2313
+ /* On the selected chip the count is a lighter bubble on the dark chip
2314
+ (DqZaken: #3d4047 on #1b1c1d); --cn-board-text-soft resolves to the main
2315
+ text, the chip's own colour, which hid the bubble. */
2090
2316
  .cn-look-board .cn-quick-filter-bar .cn-quick-filter-bar__tab--active .cn-quick-filter-bar__count {
2091
- background: var(--cn-board-text-soft);
2317
+ --nldesign-color-on-surface: var(--color-primary-element-text);
2318
+ background: color-mix(in srgb, var(--color-main-background) 15%, var(--color-main-text));
2092
2319
  color: var(--color-primary-element-text);
2093
2320
  }
2094
2321
 
@@ -2360,12 +2587,16 @@
2360
2587
  border-radius: 0;
2361
2588
  }
2362
2589
 
2363
- /* The header row is near-white on the boards (#fafbfc), not the hover grey. */
2590
+ /* The header row is near-white on the boards (#fafbfc), not the hover grey,
2591
+ its labels 14px muted. The ink also goes to --nldesign-color-on-surface,
2592
+ which a theme that forces the body ink onto every span (thematiq) reads. */
2364
2593
  .cn-look-board .cn-table-container--board .cn-data-table th {
2594
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
2365
2595
  padding: 12px 16px;
2366
2596
  border-bottom: 0;
2367
2597
  background: var(--cn-board-table-head-bg, color-mix(in srgb, var(--color-background-hover) 40%, var(--color-main-background)));
2368
2598
  color: var(--color-text-maxcontrast);
2599
+ font-size: 14px;
2369
2600
  font-weight: 600;
2370
2601
  }
2371
2602
 
@@ -2376,6 +2607,20 @@
2376
2607
  font-size: 14px;
2377
2608
  }
2378
2609
 
2610
+ /* The board sets its table at the normal line height: a row with a title and
2611
+ a secondary line is 66px and the header row 50px (DqZaken). Nextcloud's 1.5
2612
+ made them 71px and 67px, and the header's sort button kept the 34px
2613
+ clickable area. */
2614
+ .cn-look-board .cn-table-container--board .cn-data-table {
2615
+ line-height: normal;
2616
+ }
2617
+
2618
+ .cn-look-board .cn-table-container--board .cn-data-table th .cn-table-header__sort {
2619
+ min-height: 0;
2620
+ height: auto;
2621
+ line-height: inherit;
2622
+ }
2623
+
2379
2624
  .cn-look-board .cn-table-container--board .cn-data-table .cn-table-row {
2380
2625
  border-bottom: 0;
2381
2626
  }
@@ -2431,7 +2676,9 @@
2431
2676
  margin-inline-start: 4px;
2432
2677
  }
2433
2678
 
2434
- /* The selection column: 18px checkboxes, 28px of content after 16px of padding.
2679
+ /* The selection column: 18px checkboxes, 28px of content between 16px of
2680
+ padding either side, 60px in all (DqZaken and 130 other boards; the title
2681
+ column starts 77px in).
2435
2682
  The box model is set with `!important` and the widths include the padding:
2436
2683
  Nextcloud's server.css sets `box-sizing: border-box` on everything under
2437
2684
  `#content[class*="app-"]`, an id selector no class rule outranks, so a plain
@@ -2439,9 +2686,9 @@
2439
2686
  header's checkbox showed as a stray bracket). */
2440
2687
  .cn-look-board .cn-table-container--board .cn-data-table .cn-table-col--checkbox {
2441
2688
  box-sizing: border-box !important;
2442
- width: 44px;
2443
- min-width: 44px;
2444
- padding-inline: 16px 0;
2689
+ width: 60px;
2690
+ min-width: 60px;
2691
+ padding-inline: 16px;
2445
2692
  text-align: start;
2446
2693
  }
2447
2694
 
@@ -2449,6 +2696,16 @@
2449
2696
  --icon-size: 18px;
2450
2697
  }
2451
2698
 
2699
+ /* The checkbox is the 18px box alone, as the board draws it: NcCheckboxRadioSwitch
2700
+ wraps it in a 34px clickable area with 4px 7px of padding, a 42px block that
2701
+ set every row's height (71px where DqZaken's rows are 66). The cell around it
2702
+ stays the click target's room: 44px wide, a full row high. */
2703
+ .cn-look-board .cn-table-container--board .cn-data-table .checkbox-radio-switch .checkbox-radio-switch__content {
2704
+ min-height: 0;
2705
+ height: auto;
2706
+ padding: 0;
2707
+ }
2708
+
2452
2709
  /* The title column: a 15px weight 600 link, the secondary line under it. */
2453
2710
  .cn-look-board .cn-table-container--board .cn-data-table td.cn-table-col--title {
2454
2711
  color: var(--color-main-text);
@@ -2459,6 +2716,7 @@
2459
2716
  }
2460
2717
 
2461
2718
  .cn-look-board .cn-table-container--board .cn-data-table td.cn-table-col--title .cn-table-cell__secondary {
2719
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
2462
2720
  color: var(--color-text-maxcontrast);
2463
2721
  font-size: 14px;
2464
2722
  font-weight: 400;
@@ -2500,10 +2758,14 @@
2500
2758
  gap: 10px;
2501
2759
  }
2502
2760
 
2761
+ /* The initials sit on the light primary tint in the primary ink, the board's
2762
+ person chip (DqZaken's Behandelaar, and most boards' people). */
2503
2763
  .cn-look-board .cn-table-container--board .cn-data-table .cn-cell-renderer__avatar-initials {
2504
- background: var(--color-background-dark);
2505
- color: var(--color-main-text);
2764
+ --nldesign-color-on-surface: var(--color-primary-element-light-text);
2765
+ background: var(--color-primary-element-light);
2766
+ color: var(--color-primary-element-light-text);
2506
2767
  font-size: 12px;
2768
+ font-weight: 700;
2507
2769
  }
2508
2770
 
2509
2771
  .cn-look-board .cn-table-container--board .cn-data-table td.cn-table-col--title .cn-cell-renderer__avatar-name {
@@ -4810,86 +5072,102 @@ a.cn-kpi-card--board * {
4810
5072
 
4811
5073
  /* Color variants */
4812
5074
  .cn-status-badge--default {
5075
+ --cn-status-badge-ink: var(--color-main-text);
4813
5076
  background-color: var(--color-background-dark);
4814
- color: var(--color-main-text);
5077
+ color: var(--cn-status-badge-ink);
4815
5078
  }
4816
5079
 
4817
5080
  .cn-status-badge--primary {
5081
+ --cn-status-badge-ink: var(--color-primary-element);
4818
5082
  background-color: var(--color-primary-element-light);
4819
- color: var(--color-primary-element);
5083
+ color: var(--cn-status-badge-ink);
4820
5084
  }
4821
5085
 
4822
5086
  .cn-status-badge--success {
5087
+ --cn-status-badge-ink: var(--color-success-text, var(--color-success));
4823
5088
  background-color: var(--color-success-light, rgba(70, 186, 97, 0.15));
4824
- color: var(--color-success-text, var(--color-success));
5089
+ color: var(--cn-status-badge-ink);
4825
5090
  }
4826
5091
 
4827
5092
  .cn-status-badge--warning {
5093
+ --cn-status-badge-ink: var(--color-warning-text, var(--color-warning));
4828
5094
  background-color: var(--color-warning-light, rgba(232, 163, 39, 0.15));
4829
- color: var(--color-warning-text, var(--color-warning));
5095
+ color: var(--cn-status-badge-ink);
4830
5096
  }
4831
5097
 
4832
5098
  .cn-status-badge--error {
5099
+ --cn-status-badge-ink: var(--color-error-text, var(--color-error));
4833
5100
  background-color: var(--color-error-light, rgba(224, 68, 68, 0.15));
4834
- color: var(--color-error-text, var(--color-error));
5101
+ color: var(--cn-status-badge-ink);
4835
5102
  }
4836
5103
 
4837
5104
  .cn-status-badge--info {
5105
+ --cn-status-badge-ink: var(--color-info-text, var(--color-info, #0082c9));
4838
5106
  background-color: var(--color-info-light, rgba(0, 130, 201, 0.15));
4839
- color: var(--color-info-text, var(--color-info, #0082c9));
5107
+ color: var(--cn-status-badge-ink);
4840
5108
  }
4841
5109
 
4842
5110
  /* Work in progress ("In behandeling"), a board tone. */
4843
5111
  .cn-status-badge--purple {
5112
+ --cn-status-badge-ink: var(--cn-status-purple-text);
4844
5113
  background-color: var(--cn-status-purple-bg);
4845
- color: var(--cn-status-purple-text);
5114
+ color: var(--cn-status-badge-ink);
4846
5115
  }
4847
5116
 
4848
5117
  /* Handed on ("Omgezet naar een zaak"), a board tone. */
4849
5118
  .cn-status-badge--teal {
5119
+ --cn-status-badge-ink: var(--cn-status-teal-text);
4850
5120
  background-color: var(--cn-status-teal-bg);
4851
- color: var(--cn-status-teal-text);
5121
+ color: var(--cn-status-badge-ink);
4852
5122
  }
4853
5123
 
4854
5124
  /* Solid variants — solid background with white text for use on colored backgrounds */
4855
5125
  .cn-status-badge--solid.cn-status-badge--default {
5126
+ --cn-status-badge-ink: var(--color-main-text);
4856
5127
  background-color: var(--color-background-dark);
4857
- color: var(--color-main-text);
5128
+ color: var(--cn-status-badge-ink);
4858
5129
  }
4859
5130
 
4860
5131
  .cn-status-badge--solid.cn-status-badge--primary {
5132
+ --cn-status-badge-ink: white;
4861
5133
  background-color: var(--color-primary-element);
4862
- color: white;
5134
+ color: var(--cn-status-badge-ink);
4863
5135
  }
4864
5136
 
4865
5137
  .cn-status-badge--solid.cn-status-badge--success {
5138
+ --cn-status-badge-ink: white;
4866
5139
  background-color: var(--color-success);
4867
- color: white;
5140
+ color: var(--cn-status-badge-ink);
4868
5141
  }
4869
5142
 
4870
5143
  .cn-status-badge--solid.cn-status-badge--warning {
5144
+ --cn-status-badge-ink: var(--color-primary-text);
4871
5145
  background-color: var(--color-warning);
4872
- color: var(--color-primary-text);
5146
+ color: var(--cn-status-badge-ink);
4873
5147
  }
4874
5148
 
4875
5149
  .cn-status-badge--solid.cn-status-badge--error {
5150
+ --cn-status-badge-ink: white;
4876
5151
  background-color: var(--color-error);
4877
- color: white;
5152
+ color: var(--cn-status-badge-ink);
4878
5153
  }
4879
5154
 
4880
5155
  .cn-status-badge--solid.cn-status-badge--info {
5156
+ --cn-status-badge-ink: white;
4881
5157
  background-color: var(--color-info, #0082c9);
4882
- color: white;
5158
+ color: var(--cn-status-badge-ink);
4883
5159
  }
4884
5160
 
4885
5161
  .cn-status-badge--solid.cn-status-badge--purple {
5162
+ --cn-status-badge-ink: white;
4886
5163
  background-color: var(--cn-status-purple-text);
4887
- color: white;
5164
+ color: var(--cn-status-badge-ink);
4888
5165
  }
4889
5166
 
4890
5167
  .cn-status-badge--solid.cn-status-badge--teal {
5168
+ --cn-status-badge-ink: white;
4891
5169
  background-color: var(--cn-status-teal-text);
4892
- color: white;
5170
+ color: var(--cn-status-badge-ink);
4893
5171
  }
4894
5172
  /* ========================================
4895
5173
  @conduction/nextcloud-vue — Layout & Filter Utility Styles
@@ -7088,6 +7366,32 @@ a.cn-kpi-card--board * {
7088
7366
  margin-top: 16px;
7089
7367
  }
7090
7368
 
7369
+ /* ---- The stages bars (CnStagesWidget `variant: "bars"`) ---------------- */
7370
+ /* DqZaak's "Voortgang": the bars sit flush with the content edge (the
7371
+ widget's 4px pad is room for the 32px circles, which the bars variant does
7372
+ not draw), the label 8px under its bar and the date 8px under the label at
7373
+ the normal line height, open steps muted and the done and current ones in
7374
+ the main text. Each hands its ink to --nldesign-color-on-surface, which a
7375
+ theme that forces the body ink onto every span (thematiq) reads instead. */
7376
+ .cn-look-board .cn-stages-widget:has(> .cn-stages-widget__bars):not(.cn-look-nextcloud *) {
7377
+ padding: 0;
7378
+ }
7379
+
7380
+ .cn-look-board .cn-stages-widget__bars .cn-stages-widget__bar-label:not(.cn-look-nextcloud *) {
7381
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
7382
+ line-height: normal;
7383
+ }
7384
+
7385
+ .cn-look-board .cn-stages-widget__bars .cn-stages-widget__bar-step--done .cn-stages-widget__bar-label:not(.cn-look-nextcloud *),
7386
+ .cn-look-board .cn-stages-widget__bars .cn-stages-widget__bar-step--current .cn-stages-widget__bar-label:not(.cn-look-nextcloud *) {
7387
+ --nldesign-color-on-surface: var(--color-main-text);
7388
+ }
7389
+
7390
+ .cn-look-board .cn-stages-widget__bars .cn-stages-widget__bar-date:not(.cn-look-nextcloud *) {
7391
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
7392
+ line-height: normal;
7393
+ }
7394
+
7091
7395
  /* ---- The body and the side column ------------------------------------- */
7092
7396
 
7093
7397
  .cn-look-board.cn-detail-page--with-side {
@@ -7121,6 +7425,7 @@ a.cn-kpi-card--board * {
7121
7425
  The open tab overlaps that top border by 1px (the nav's -1px margin) and
7122
7426
  paints over it, so it flows into the card as a folder tab. */
7123
7427
  .cn-look-board .cn-tabs--board .cn-tabs__bar {
7428
+ align-items: flex-end;
7124
7429
  border-bottom: none;
7125
7430
  gap: 4px;
7126
7431
  position: relative;
@@ -7163,6 +7468,9 @@ a.cn-kpi-card--board * {
7163
7468
  row-gap: 4px;
7164
7469
  }
7165
7470
 
7471
+ /* `margin: 0`: a tab is a <button>, and Nextcloud's core stylesheet gives
7472
+ every `button:not(.button-vue)` `margin: 3px 3px 3px 0`, which put the strip
7473
+ 3px low and the tabs 7px apart instead of 4 (DqZaak "Zaakonderdelen"). */
7166
7474
  .cn-look-board .cn-tabs--board .cn-tabs__nav-item {
7167
7475
  background-color: var(--color-background-dark);
7168
7476
  border: 1px solid var(--color-border-dark);
@@ -7170,6 +7478,7 @@ a.cn-kpi-card--board * {
7170
7478
  border-radius: 8px 8px 0 0;
7171
7479
  font-size: 14px;
7172
7480
  font-weight: 400;
7481
+ margin: 0;
7173
7482
  min-height: 34px;
7174
7483
  padding: 8px 12px;
7175
7484
  }
@@ -7203,9 +7512,12 @@ a.cn-kpi-card--board * {
7203
7512
  padding: 0 6px;
7204
7513
  }
7205
7514
 
7206
- /* The Actions button at the end of the strip, level with the tabs. */
7515
+ /* The Actions button at the end of the strip: at the top, 8px in from the
7516
+ end and 8px clear of the card, so the tabs, aligned to the bottom, sit 6px
7517
+ lower than the button (DqZaak "Acties"). */
7207
7518
  .cn-look-board .cn-tabs--board .cn-tabs__nav-end {
7208
7519
  align-self: flex-start;
7520
+ margin: 0 8px 8px 0;
7209
7521
  }
7210
7522
 
7211
7523
  .cn-look-board .cn-tabs--board .cn-tabs__nav-end .button-vue {
@@ -7263,21 +7575,26 @@ a.cn-kpi-card--board * {
7263
7575
 
7264
7576
  /* ---- Body cards and side cards ----------------------------------------- */
7265
7577
 
7578
+ /* A CnDetailCard takes the board card wherever it sits, not only on a detail
7579
+ page: a dashboard or a custom page that mounts one drew the Nextcloud card
7580
+ (a 12px 16px header over a rule). The doubled class keeps the specificity
7581
+ the page-scoped rule had. */
7582
+
7266
7583
  .cn-look-board .cn-detail-page .cn-widget-wrapper,
7267
- .cn-look-board .cn-detail-page .cn-detail-card {
7584
+ .cn-look-board .cn-detail-card.cn-detail-card:not(.cn-detail-card--chromeless) {
7268
7585
  background: var(--color-main-background);
7269
7586
  border: 1px solid var(--color-border);
7270
7587
  border-radius: var(--cn-board-card-radius);
7271
7588
  }
7272
7589
 
7273
7590
  .cn-look-board .cn-detail-page .cn-widget-wrapper__header,
7274
- .cn-look-board .cn-detail-page .cn-detail-card__header {
7591
+ .cn-look-board .cn-detail-card .cn-detail-card__header {
7275
7592
  border-bottom: none;
7276
7593
  padding: 20px 22px 0;
7277
7594
  }
7278
7595
 
7279
7596
  .cn-look-board .cn-detail-page .cn-widget-wrapper__title,
7280
- .cn-look-board .cn-detail-page .cn-detail-card__title {
7597
+ .cn-look-board .cn-detail-card .cn-detail-card__title {
7281
7598
  font-size: var(--cn-board-heading-size);
7282
7599
  font-weight: 700;
7283
7600
  line-height: 1.3;
@@ -7287,7 +7604,7 @@ a.cn-kpi-card--board * {
7287
7604
  padding: 12px 22px 20px;
7288
7605
  }
7289
7606
 
7290
- .cn-look-board .cn-detail-page .cn-detail-card__content {
7607
+ .cn-look-board .cn-detail-card .cn-detail-card__content {
7291
7608
  padding: 12px 22px 20px;
7292
7609
  }
7293
7610
 
@@ -7334,10 +7651,12 @@ a.cn-kpi-card--board * {
7334
7651
  font-weight: 500;
7335
7652
  }
7336
7653
 
7337
- /* Side cards: the heading is a 15px muted label, not a title. */
7654
+ /* Side cards: the heading is a 15px muted label, not a title. The tone
7655
+ carries `!important` against a theme that colours every h3 that way
7656
+ (thematiq's heading colour). */
7338
7657
  .cn-look-board .cn-detail-page__side .cn-widget-wrapper__title,
7339
7658
  .cn-look-board .cn-detail-page__side .cn-detail-card__title {
7340
- color: var(--color-text-maxcontrast);
7659
+ color: var(--color-text-maxcontrast) !important;
7341
7660
  font-size: var(--cn-board-side-heading-size);
7342
7661
  font-weight: 600;
7343
7662
  }
@@ -7392,17 +7711,23 @@ a.cn-kpi-card--board * {
7392
7711
 
7393
7712
  /* ---- The next-step card ------------------------------------------------- */
7394
7713
 
7714
+ /* The board sets the card at the browser's normal line height: a step row is
7715
+ the 20px marker, 28px apart (DqZaak "Wat nu?"). */
7395
7716
  .cn-look-board .cn-next-step-card--board {
7396
7717
  border-radius: 12px;
7397
7718
  gap: 16px 32px;
7719
+ line-height: normal;
7398
7720
  padding: 20px 24px 20px 28px;
7399
7721
  }
7400
7722
 
7723
+ /* The kicker keeps its tone under a theme that colours every h3 with
7724
+ `!important` (thematiq's heading colour); only `!important` beats it. */
7401
7725
  .cn-look-board .cn-next-step-card--board .cn-next-step-card__title.cn-next-step-card__title {
7402
- color: var(--color-primary-element-light-text);
7726
+ color: var(--color-primary-element-light-text) !important;
7403
7727
  font-size: 13px !important;
7404
7728
  font-weight: 700;
7405
7729
  letter-spacing: 0.06em;
7730
+ line-height: normal;
7406
7731
  text-transform: uppercase;
7407
7732
  }
7408
7733
 
@@ -7433,11 +7758,36 @@ a.cn-kpi-card--board * {
7433
7758
  padding: 0 20px;
7434
7759
  }
7435
7760
 
7761
+ /* The label alone sets the width (DqZaak: 198px for "Verder met beoordelen"):
7762
+ NcButton pads its text 4px a side inside the button's own padding, from a
7763
+ rule that reaches it through `:has()`, hence the doubled class. */
7764
+ .cn-look-board .cn-next-step-card--board .cn-next-step-card__side .button-vue .button-vue__text.button-vue__text {
7765
+ margin-inline: 0;
7766
+ padding-inline: 0;
7767
+ }
7768
+
7436
7769
  .cn-look-board .cn-next-step-card--board .cn-next-step-card__after {
7437
7770
  color: var(--color-text-maxcontrast);
7438
7771
  font-size: 13px;
7439
7772
  }
7440
7773
 
7774
+ /* Done and open steps are muted, the current one in the main text. Each hands
7775
+ its ink to --nldesign-color-on-surface, which a theme that forces the body
7776
+ ink onto every li and span (thematiq) reads instead. */
7777
+ .cn-look-board .cn-next-step-card--board .cn-next-step-card__item,
7778
+ .cn-look-board .cn-next-step-card--board .cn-next-step-card__hint,
7779
+ .cn-look-board .cn-next-step-card--board .cn-next-step-card__after {
7780
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
7781
+ }
7782
+
7783
+ .cn-look-board .cn-next-step-card--board .cn-next-step-card__item--current {
7784
+ --nldesign-color-on-surface: var(--color-main-text);
7785
+ }
7786
+
7787
+ .cn-look-board .cn-next-step-card--board .cn-next-step-card__item--current .cn-next-step-card__hint {
7788
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
7789
+ }
7790
+
7441
7791
  /* ---- History: the activity tab ------------------------------------------ */
7442
7792
 
7443
7793
  .cn-look-board .cn-activity-tab--board .cn-activity-tab__board-head {
@@ -23528,86 +23878,102 @@ a.cn-kpi-card--board * {
23528
23878
 
23529
23879
  /* Color variants */
23530
23880
  .cn-status-badge--default {
23881
+ --cn-status-badge-ink: var(--color-main-text);
23531
23882
  background-color: var(--color-background-dark);
23532
- color: var(--color-main-text);
23883
+ color: var(--cn-status-badge-ink);
23533
23884
  }
23534
23885
 
23535
23886
  .cn-status-badge--primary {
23887
+ --cn-status-badge-ink: var(--color-primary-element);
23536
23888
  background-color: var(--color-primary-element-light);
23537
- color: var(--color-primary-element);
23889
+ color: var(--cn-status-badge-ink);
23538
23890
  }
23539
23891
 
23540
23892
  .cn-status-badge--success {
23893
+ --cn-status-badge-ink: var(--color-success-text, var(--color-success));
23541
23894
  background-color: var(--color-success-light, rgba(70, 186, 97, 0.15));
23542
- color: var(--color-success-text, var(--color-success));
23895
+ color: var(--cn-status-badge-ink);
23543
23896
  }
23544
23897
 
23545
23898
  .cn-status-badge--warning {
23899
+ --cn-status-badge-ink: var(--color-warning-text, var(--color-warning));
23546
23900
  background-color: var(--color-warning-light, rgba(232, 163, 39, 0.15));
23547
- color: var(--color-warning-text, var(--color-warning));
23901
+ color: var(--cn-status-badge-ink);
23548
23902
  }
23549
23903
 
23550
23904
  .cn-status-badge--error {
23905
+ --cn-status-badge-ink: var(--color-error-text, var(--color-error));
23551
23906
  background-color: var(--color-error-light, rgba(224, 68, 68, 0.15));
23552
- color: var(--color-error-text, var(--color-error));
23907
+ color: var(--cn-status-badge-ink);
23553
23908
  }
23554
23909
 
23555
23910
  .cn-status-badge--info {
23911
+ --cn-status-badge-ink: var(--color-info-text, var(--color-info, #0082c9));
23556
23912
  background-color: var(--color-info-light, rgba(0, 130, 201, 0.15));
23557
- color: var(--color-info-text, var(--color-info, #0082c9));
23913
+ color: var(--cn-status-badge-ink);
23558
23914
  }
23559
23915
 
23560
23916
  /* Work in progress ("In behandeling"), a board tone. */
23561
23917
  .cn-status-badge--purple {
23918
+ --cn-status-badge-ink: var(--cn-status-purple-text);
23562
23919
  background-color: var(--cn-status-purple-bg);
23563
- color: var(--cn-status-purple-text);
23920
+ color: var(--cn-status-badge-ink);
23564
23921
  }
23565
23922
 
23566
23923
  /* Handed on ("Omgezet naar een zaak"), a board tone. */
23567
23924
  .cn-status-badge--teal {
23925
+ --cn-status-badge-ink: var(--cn-status-teal-text);
23568
23926
  background-color: var(--cn-status-teal-bg);
23569
- color: var(--cn-status-teal-text);
23927
+ color: var(--cn-status-badge-ink);
23570
23928
  }
23571
23929
 
23572
23930
  /* Solid variants — solid background with white text for use on colored backgrounds */
23573
23931
  .cn-status-badge--solid.cn-status-badge--default {
23932
+ --cn-status-badge-ink: var(--color-main-text);
23574
23933
  background-color: var(--color-background-dark);
23575
- color: var(--color-main-text);
23934
+ color: var(--cn-status-badge-ink);
23576
23935
  }
23577
23936
 
23578
23937
  .cn-status-badge--solid.cn-status-badge--primary {
23938
+ --cn-status-badge-ink: white;
23579
23939
  background-color: var(--color-primary-element);
23580
- color: white;
23940
+ color: var(--cn-status-badge-ink);
23581
23941
  }
23582
23942
 
23583
23943
  .cn-status-badge--solid.cn-status-badge--success {
23944
+ --cn-status-badge-ink: white;
23584
23945
  background-color: var(--color-success);
23585
- color: white;
23946
+ color: var(--cn-status-badge-ink);
23586
23947
  }
23587
23948
 
23588
23949
  .cn-status-badge--solid.cn-status-badge--warning {
23950
+ --cn-status-badge-ink: var(--color-primary-text);
23589
23951
  background-color: var(--color-warning);
23590
- color: var(--color-primary-text);
23952
+ color: var(--cn-status-badge-ink);
23591
23953
  }
23592
23954
 
23593
23955
  .cn-status-badge--solid.cn-status-badge--error {
23956
+ --cn-status-badge-ink: white;
23594
23957
  background-color: var(--color-error);
23595
- color: white;
23958
+ color: var(--cn-status-badge-ink);
23596
23959
  }
23597
23960
 
23598
23961
  .cn-status-badge--solid.cn-status-badge--info {
23962
+ --cn-status-badge-ink: white;
23599
23963
  background-color: var(--color-info, #0082c9);
23600
- color: white;
23964
+ color: var(--cn-status-badge-ink);
23601
23965
  }
23602
23966
 
23603
23967
  .cn-status-badge--solid.cn-status-badge--purple {
23968
+ --cn-status-badge-ink: white;
23604
23969
  background-color: var(--cn-status-purple-text);
23605
- color: white;
23970
+ color: var(--cn-status-badge-ink);
23606
23971
  }
23607
23972
 
23608
23973
  .cn-status-badge--solid.cn-status-badge--teal {
23974
+ --cn-status-badge-ink: white;
23609
23975
  background-color: var(--cn-status-teal-text);
23610
- color: white;
23976
+ color: var(--cn-status-badge-ink);
23611
23977
  }
23612
23978
 
23613
23979
 
@@ -25512,10 +25878,10 @@ button.cn-stepper__step[data-v-776581d4] {
25512
25878
  /* `separator`: a text separator in place of the chevron. The chevron's own
25513
25879
  element stays (it carries NcBreadcrumbs' spacing and its "no separator after
25514
25880
  the last crumb" rule); only its icon gives way to the text. */
25515
- .cn-breadcrumbs--text-separator[data-v-54c3381a] .vue-crumb__separator svg {
25881
+ .cn-breadcrumbs--text-separator[data-v-4bee2493] .vue-crumb__separator svg {
25516
25882
  display: none;
25517
25883
  }
25518
- .cn-breadcrumbs--text-separator[data-v-54c3381a] .vue-crumb__separator::before {
25884
+ .cn-breadcrumbs--text-separator[data-v-4bee2493] .vue-crumb__separator::before {
25519
25885
  content: var(--cn-breadcrumbs-separator);
25520
25886
  padding-inline: var(--cn-breadcrumbs-separator-gap, 0);
25521
25887
  color: var(--color-text-maxcontrast);
@@ -30506,6 +30872,99 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
30506
30872
  }
30507
30873
 
30508
30874
 
30875
+ .cn-working-calendar[data-v-03ee459c] {
30876
+ display: flex;
30877
+ flex-direction: column;
30878
+ gap: 12px;
30879
+ }
30880
+ .cn-working-calendar__head[data-v-03ee459c] {
30881
+ align-items: center;
30882
+ display: flex;
30883
+ gap: 4px;
30884
+ }
30885
+ .cn-working-calendar__title[data-v-03ee459c] {
30886
+ font-size: 15px;
30887
+ min-width: 9em;
30888
+ text-align: center;
30889
+ }
30890
+ .cn-working-calendar__add[data-v-03ee459c] {
30891
+ margin-inline-start: auto;
30892
+ }
30893
+ .cn-working-calendar__grid[data-v-03ee459c] {
30894
+ display: flex;
30895
+ flex-direction: column;
30896
+ gap: 4px;
30897
+ }
30898
+ .cn-working-calendar__row[data-v-03ee459c] {
30899
+ display: grid;
30900
+ gap: 4px;
30901
+ grid-template-columns: repeat(7, minmax(0, 1fr));
30902
+ }
30903
+ .cn-working-calendar__weekday[data-v-03ee459c] {
30904
+ color: var(--color-text-maxcontrast);
30905
+ font-size: 12px;
30906
+ text-align: center;
30907
+ }
30908
+ .cn-working-calendar__day[data-v-03ee459c] {
30909
+ align-items: center;
30910
+ background: var(--color-main-background);
30911
+ border: 1px solid var(--color-border);
30912
+ border-radius: 6px;
30913
+ cursor: default;
30914
+ display: flex;
30915
+ font-size: 13px;
30916
+ height: 34px;
30917
+ justify-content: center;
30918
+ }
30919
+ .cn-working-calendar__day[data-v-03ee459c]:focus-visible {
30920
+ outline: 2px solid var(--color-primary-element);
30921
+ outline-offset: 1px;
30922
+ }
30923
+ .cn-working-calendar__day--off[data-v-03ee459c] {
30924
+ background: var(--color-background-dark);
30925
+ }
30926
+ .cn-working-calendar__day--closed[data-v-03ee459c] {
30927
+ background: var(--color-error-light, color-mix(in srgb, var(--color-error) 12%, var(--color-main-background)));
30928
+ border-color: var(--color-error);
30929
+ color: var(--color-error-text, var(--color-main-text));
30930
+ font-weight: 600;
30931
+ }
30932
+ .cn-working-calendar__day--today[data-v-03ee459c] {
30933
+ box-shadow: inset 0 0 0 2px var(--color-primary-element);
30934
+ }
30935
+ .cn-working-calendar__live[data-v-03ee459c] {
30936
+ clip-path: inset(50%);
30937
+ height: 1px;
30938
+ overflow: hidden;
30939
+ position: absolute;
30940
+ white-space: nowrap;
30941
+ width: 1px;
30942
+ }
30943
+ .cn-working-calendar__note[data-v-03ee459c] {
30944
+ color: var(--color-text-maxcontrast);
30945
+ margin: 0;
30946
+ }
30947
+ .cn-working-calendar__form[data-v-03ee459c] {
30948
+ display: flex;
30949
+ flex-wrap: wrap;
30950
+ gap: 8px 12px;
30951
+ }
30952
+ .cn-working-calendar__field[data-v-03ee459c] {
30953
+ display: flex;
30954
+ flex-direction: column;
30955
+ gap: 4px;
30956
+ }
30957
+ .cn-working-calendar__form-actions[data-v-03ee459c] {
30958
+ align-items: flex-end;
30959
+ display: flex;
30960
+ gap: 8px;
30961
+ }
30962
+ .cn-working-calendar__error[data-v-03ee459c] {
30963
+ color: var(--color-error-text, var(--color-error));
30964
+ margin: 0;
30965
+ }
30966
+
30967
+
30509
30968
  .cn-run-node-dialog__form[data-v-2d7cb7f5] {
30510
30969
  display: flex;
30511
30970
  flex-direction: column;
@@ -32732,6 +33191,101 @@ a.cn-record-list__inline-title[data-v-b768fcd6] {
32732
33191
  }
32733
33192
 
32734
33193
 
33194
+ .cn-settings-field[data-v-d2218996] {
33195
+ display: flex;
33196
+ flex-direction: column;
33197
+ gap: 4px;
33198
+ min-width: 0;
33199
+ }
33200
+ .cn-settings-field__hint[data-v-d2218996],
33201
+ .cn-settings-field__error[data-v-d2218996] {
33202
+ margin: 0;
33203
+ font-size: 13px;
33204
+ line-height: 1.4;
33205
+ }
33206
+ .cn-settings-field__image[data-v-d2218996] {
33207
+ display: flex;
33208
+ flex-direction: column;
33209
+ gap: 6px;
33210
+ }
33211
+ .cn-settings-field__image-label[data-v-d2218996] {
33212
+ font-weight: 600;
33213
+ }
33214
+ .cn-settings-field__image-row[data-v-d2218996] {
33215
+ display: flex;
33216
+ flex-wrap: wrap;
33217
+ align-items: center;
33218
+ gap: 12px;
33219
+ }
33220
+ .cn-settings-field__image-tile[data-v-d2218996] {
33221
+ display: inline-flex;
33222
+ align-items: center;
33223
+ justify-content: center;
33224
+ width: 64px;
33225
+ height: 64px;
33226
+ overflow: hidden;
33227
+ border: 1px solid var(--color-border);
33228
+ border-radius: var(--border-radius-large);
33229
+ background: var(--color-primary-element-light);
33230
+ }
33231
+ .cn-settings-field__image-tile img[data-v-d2218996] {
33232
+ max-width: 100%;
33233
+ max-height: 100%;
33234
+ object-fit: contain;
33235
+ }
33236
+ .cn-settings-field__image-initials[data-v-d2218996] {
33237
+ font-size: 20px;
33238
+ font-weight: 700;
33239
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
33240
+ }
33241
+ .cn-settings-field__hint[data-v-d2218996] {
33242
+ color: var(--color-text-maxcontrast);
33243
+ }
33244
+ .cn-settings-field__error[data-v-d2218996] {
33245
+ color: var(--color-error-text, var(--color-error));
33246
+ }
33247
+
33248
+
33249
+ .cn-settings-fields[data-v-65c151a8] {
33250
+ display: flex;
33251
+ flex-direction: column;
33252
+ gap: 16px;
33253
+ container-type: inline-size;
33254
+ }
33255
+ .cn-settings-fields__grid[data-v-65c151a8] {
33256
+ display: grid;
33257
+ grid-template-columns: minmax(0, 1fr);
33258
+ gap: 16px 20px;
33259
+ }
33260
+
33261
+ /* Two or three columns where the card is wide enough; stacked otherwise. */
33262
+ @container (min-width: 520px) {
33263
+ .cn-settings-fields__grid--2[data-v-65c151a8],
33264
+ .cn-settings-fields__grid--3[data-v-65c151a8] {
33265
+ grid-template-columns: repeat(2, minmax(0, 1fr));
33266
+ }
33267
+ }
33268
+ @container (min-width: 780px) {
33269
+ .cn-settings-fields__grid--3[data-v-65c151a8] {
33270
+ grid-template-columns: repeat(3, minmax(0, 1fr));
33271
+ }
33272
+ }
33273
+ .cn-settings-fields__field--wide[data-v-65c151a8] {
33274
+ grid-column: 1 / -1;
33275
+ }
33276
+ .cn-settings-fields__save[data-v-65c151a8] {
33277
+ display: flex;
33278
+ flex-wrap: wrap;
33279
+ align-items: center;
33280
+ justify-content: flex-end;
33281
+ gap: 12px;
33282
+ }
33283
+ .cn-settings-fields__dirty[data-v-65c151a8] {
33284
+ font-size: 14px;
33285
+ color: var(--color-text-maxcontrast);
33286
+ }
33287
+
33288
+
32735
33289
  ._passwordDialog_joix2_2 {
32736
33290
  display: flex;
32737
33291
  flex-direction: column;
@@ -37061,16 +37615,16 @@ to {
37061
37615
  }
37062
37616
 
37063
37617
 
37064
- .cn-ordered-list-field[data-v-81cf425a] {
37618
+ .cn-ordered-list-field[data-v-3ab313d4] {
37065
37619
  display: flex;
37066
37620
  flex-direction: column;
37067
37621
  gap: 10px;
37068
37622
  }
37069
- .cn-ordered-list-field__label[data-v-81cf425a] {
37623
+ .cn-ordered-list-field__label[data-v-3ab313d4] {
37070
37624
  margin: 0;
37071
37625
  font-weight: 600;
37072
37626
  }
37073
- .cn-ordered-list-field__rows[data-v-81cf425a] {
37627
+ .cn-ordered-list-field__rows[data-v-3ab313d4] {
37074
37628
  display: flex;
37075
37629
  flex-direction: column;
37076
37630
  margin: 0;
@@ -37079,34 +37633,34 @@ to {
37079
37633
  border-radius: var(--border-radius-element, 8px);
37080
37634
  list-style: none;
37081
37635
  }
37082
- .cn-ordered-list-field__row[data-v-81cf425a] {
37636
+ .cn-ordered-list-field__row[data-v-3ab313d4] {
37083
37637
  display: flex;
37084
37638
  align-items: center;
37085
37639
  gap: 10px;
37086
37640
  min-height: 44px;
37087
37641
  padding: 2px 6px 2px 12px;
37088
37642
  }
37089
- .cn-ordered-list-field__row + .cn-ordered-list-field__row[data-v-81cf425a] {
37643
+ .cn-ordered-list-field__row + .cn-ordered-list-field__row[data-v-3ab313d4] {
37090
37644
  border-top: 1px solid var(--color-border);
37091
37645
  }
37092
- .cn-ordered-list-field__position[data-v-81cf425a] {
37646
+ .cn-ordered-list-field__position[data-v-3ab313d4] {
37093
37647
  flex: none;
37094
37648
  min-width: 18px;
37095
37649
  color: var(--color-text-maxcontrast);
37096
37650
  font-size: 13px;
37097
37651
  font-variant-numeric: tabular-nums;
37098
37652
  }
37099
- .cn-ordered-list-field__text[data-v-81cf425a] {
37653
+ .cn-ordered-list-field__text[data-v-3ab313d4] {
37100
37654
  flex: 1 1 auto;
37101
37655
  min-width: 0;
37102
37656
  overflow-wrap: anywhere;
37103
37657
  }
37104
- .cn-ordered-list-field__actions[data-v-81cf425a] {
37658
+ .cn-ordered-list-field__actions[data-v-3ab313d4] {
37105
37659
  display: flex;
37106
37660
  flex: none;
37107
37661
  gap: 2px;
37108
37662
  }
37109
- .cn-ordered-list-field__button[data-v-81cf425a] {
37663
+ .cn-ordered-list-field__button[data-v-3ab313d4] {
37110
37664
  display: inline-flex;
37111
37665
  align-items: center;
37112
37666
  justify-content: center;
@@ -37122,21 +37676,46 @@ to {
37122
37676
  color: var(--color-main-text);
37123
37677
  cursor: pointer;
37124
37678
  }
37125
- .cn-ordered-list-field__button[data-v-81cf425a]:hover:not(:disabled) {
37679
+ .cn-ordered-list-field__button[data-v-3ab313d4]:hover:not(:disabled) {
37126
37680
  background: var(--color-background-hover);
37127
37681
  }
37128
- .cn-ordered-list-field__button[data-v-81cf425a]:focus-visible {
37682
+ .cn-ordered-list-field__button[data-v-3ab313d4]:focus-visible {
37129
37683
  outline: 2px solid var(--color-primary-element);
37130
37684
  outline-offset: 1px;
37131
37685
  }
37132
- .cn-ordered-list-field__button[data-v-81cf425a]:disabled {
37686
+ .cn-ordered-list-field__button[data-v-3ab313d4]:disabled {
37133
37687
  opacity: 0.4;
37134
37688
  cursor: default;
37135
37689
  }
37136
- .cn-ordered-list-field__empty[data-v-81cf425a] {
37690
+ .cn-ordered-list-field__empty[data-v-3ab313d4] {
37137
37691
  margin: 0;
37138
37692
  color: var(--color-text-maxcontrast);
37139
37693
  }
37694
+ .cn-ordered-list-field__tile[data-v-3ab313d4] {
37695
+ display: inline-flex;
37696
+ flex: none;
37697
+ align-items: center;
37698
+ justify-content: center;
37699
+ width: 32px;
37700
+ height: 32px;
37701
+ border-radius: var(--border-radius-element, 8px);
37702
+ background: var(--color-background-dark);
37703
+ color: var(--color-main-text);
37704
+ }
37705
+ .cn-ordered-list-field__name[data-v-3ab313d4] {
37706
+ display: block;
37707
+ }
37708
+ .cn-ordered-list-field__description[data-v-3ab313d4] {
37709
+ display: block;
37710
+ color: var(--color-text-maxcontrast);
37711
+ font-size: 13px;
37712
+ }
37713
+ .cn-ordered-list-field__option[data-v-3ab313d4] {
37714
+ display: flex;
37715
+ align-items: center;
37716
+ gap: 10px;
37717
+ min-width: 0;
37718
+ }
37140
37719
 
37141
37720
 
37142
37721
  .cn-object-kanban__loading[data-v-1ba5f05c],
@@ -42106,21 +42685,21 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
42106
42685
 
42107
42686
 
42108
42687
  /* The section wrapper draws no box; the board look makes it the card grid. */
42109
- .cn-settings-page__sections[data-v-50865bde] {
42688
+ .cn-settings-page__sections[data-v-0b4a7625] {
42110
42689
  display: contents;
42111
42690
  }
42112
- .cn-settings-page__header-buttons[data-v-50865bde] {
42691
+ .cn-settings-page__header-buttons[data-v-0b4a7625] {
42113
42692
  display: flex;
42114
42693
  align-items: center;
42115
42694
  gap: 10px;
42116
42695
  margin-inline-start: auto;
42117
42696
  }
42118
- .cn-settings-page[data-v-50865bde] {
42697
+ .cn-settings-page[data-v-0b4a7625] {
42119
42698
  display: flex;
42120
42699
  flex-direction: column;
42121
42700
  gap: 16px;
42122
42701
  }
42123
- .cn-settings-page__actions[data-v-50865bde] {
42702
+ .cn-settings-page__actions[data-v-0b4a7625] {
42124
42703
  display: flex;
42125
42704
  justify-content: flex-end;
42126
42705
  gap: 8px;
@@ -42131,7 +42710,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
42131
42710
  * orchestration REQ-MSO-5). Uses Nextcloud CSS variables only — no
42132
42711
  * hex literals, no rgba overrides on the elements themselves.
42133
42712
  */
42134
- .cn-settings-page__tabs[data-v-50865bde] {
42713
+ .cn-settings-page__tabs[data-v-0b4a7625] {
42135
42714
  display: flex;
42136
42715
  flex-wrap: wrap;
42137
42716
  gap: 4px;
@@ -42139,7 +42718,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
42139
42718
  padding-bottom: 0;
42140
42719
  margin-bottom: 8px;
42141
42720
  }
42142
- .cn-settings-page__tab[data-v-50865bde] {
42721
+ .cn-settings-page__tab[data-v-0b4a7625] {
42143
42722
  background: transparent;
42144
42723
  border: 0;
42145
42724
  border-bottom: 3px solid transparent;
@@ -42151,52 +42730,52 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
42151
42730
  border-radius: var(--border-radius-large) var(--border-radius-large) 0 0;
42152
42731
  transition: background-color 0.1s ease-in-out, color 0.1s ease-in-out, border-color 0.1s ease-in-out;
42153
42732
  }
42154
- .cn-settings-page__tab[data-v-50865bde]:hover,
42155
- .cn-settings-page__tab[data-v-50865bde]:focus-visible {
42733
+ .cn-settings-page__tab[data-v-0b4a7625]:hover,
42734
+ .cn-settings-page__tab[data-v-0b4a7625]:focus-visible {
42156
42735
  background-color: var(--color-background-hover);
42157
42736
  color: var(--color-main-text);
42158
42737
  outline: none;
42159
42738
  }
42160
- .cn-settings-page__tab--active[data-v-50865bde] {
42739
+ .cn-settings-page__tab--active[data-v-0b4a7625] {
42161
42740
  color: var(--color-primary-element);
42162
42741
  border-bottom-color: var(--color-primary-element);
42163
42742
  font-weight: bold;
42164
42743
  }
42165
42744
  @media (max-width: 768px) {
42166
- .cn-settings-page__tabs[data-v-50865bde] {
42745
+ .cn-settings-page__tabs[data-v-0b4a7625] {
42167
42746
  flex-direction: column;
42168
42747
  gap: 0;
42169
42748
  border-bottom: 0;
42170
42749
  }
42171
- .cn-settings-page__tab[data-v-50865bde] {
42750
+ .cn-settings-page__tab[data-v-0b4a7625] {
42172
42751
  border-bottom: 1px solid var(--color-border);
42173
42752
  border-radius: 0;
42174
42753
  text-align: left;
42175
42754
  }
42176
- .cn-settings-page__tab--active[data-v-50865bde] {
42755
+ .cn-settings-page__tab--active[data-v-0b4a7625] {
42177
42756
  border-bottom-width: 1px;
42178
42757
  background-color: var(--color-background-hover);
42179
42758
  }
42180
42759
  }
42181
- .cn-settings-page__fields[data-v-50865bde] {
42760
+ .cn-settings-page__fields[data-v-0b4a7625] {
42182
42761
  display: flex;
42183
42762
  flex-direction: column;
42184
42763
  gap: 12px;
42185
42764
  }
42186
- .cn-settings-page__field[data-v-50865bde] {
42765
+ .cn-settings-page__field[data-v-0b4a7625] {
42187
42766
  display: flex;
42188
42767
  flex-direction: column;
42189
42768
  gap: 4px;
42190
42769
  }
42191
- .cn-settings-page__field-help[data-v-50865bde] {
42770
+ .cn-settings-page__field-help[data-v-0b4a7625] {
42192
42771
  color: var(--color-text-maxcontrast);
42193
42772
  }
42194
- .cn-settings-page__save-bar[data-v-50865bde] {
42773
+ .cn-settings-page__save-bar[data-v-0b4a7625] {
42195
42774
  display: flex;
42196
42775
  gap: 8px;
42197
42776
  margin-top: 16px;
42198
42777
  }
42199
- .cn-settings-page__error[data-v-50865bde] {
42778
+ .cn-settings-page__error[data-v-0b4a7625] {
42200
42779
  color: var(--color-error);
42201
42780
  background: var(--color-error-light, var(--color-background-hover));
42202
42781
  padding: 8px 12px;