@conduction/nextcloud-vue 2.110.0 → 2.112.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 (142) hide show
  1. package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js +1 -1
  2. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +3 -2
  3. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
  4. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +4 -2
  5. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
  6. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +2 -1
  7. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  8. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  9. package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue.js +1 -1
  10. package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue2.js +3 -2
  11. package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue2.js.map +1 -1
  12. package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue3.js +2 -1
  13. package/dist/esm/components/CnAssignDialog/CnAssignDialog.vue3.js.map +1 -1
  14. package/dist/esm/components/CnBoardView/CnBoardView.vue.js +1 -1
  15. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +54 -5
  16. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
  17. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +16 -2
  18. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
  19. package/dist/esm/components/CnCardGrid/CnCardGrid.vue.js +1 -1
  20. package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js +10 -0
  21. package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js.map +1 -1
  22. package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js +2 -1
  23. package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js.map +1 -1
  24. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue.js +1 -1
  25. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +22 -2
  26. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  27. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +17 -3
  28. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  29. package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
  30. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  31. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  32. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +52 -8
  33. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  34. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +98 -63
  35. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  36. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  37. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +48 -11
  38. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  39. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +160 -97
  40. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  41. package/dist/esm/components/CnFormDialog/CnFormDialog.vue.js +1 -1
  42. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  43. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +2 -2
  44. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  45. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +203 -14
  46. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  47. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +19 -4
  48. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  49. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
  50. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js +1 -1
  51. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
  52. package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue.js +1 -1
  53. package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue2.js +21 -1
  54. package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue2.js.map +1 -1
  55. package/dist/esm/components/CnNcDashboardList/CnNcDashboardList.vue3.js.map +1 -1
  56. package/dist/esm/components/CnObjectCard/CnObjectCard.vue.js +1 -1
  57. package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js +36 -2
  58. package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js.map +1 -1
  59. package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js +44 -5
  60. package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js.map +1 -1
  61. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue.js +1 -0
  62. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue.js.map +1 -1
  63. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue2.js +22 -2
  64. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue2.js.map +1 -1
  65. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue3.js +36 -16
  66. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue3.js.map +1 -1
  67. package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue.js +1 -1
  68. package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue2.js.map +1 -1
  69. package/dist/esm/components/CnSearchSelect/CnSearchSelect.vue3.js.map +1 -1
  70. package/dist/esm/composables/useRefLabels.js +26 -6
  71. package/dist/esm/composables/useRefLabels.js.map +1 -1
  72. package/dist/esm/integrations/registry.js +4 -0
  73. package/dist/esm/integrations/registry.js.map +1 -1
  74. package/dist/esm/l10n/en.json.js +3 -1
  75. package/dist/esm/l10n/en.json.js.map +1 -1
  76. package/dist/esm/l10n/nl.json.js +3 -1
  77. package/dist/esm/l10n/nl.json.js.map +1 -1
  78. package/dist/esm/library-style.js +1 -1
  79. package/dist/esm/nextcloud-vue.css +630 -303
  80. package/dist/esm/store/plugins/liveUpdates.js +3 -1
  81. package/dist/esm/store/plugins/liveUpdates.js.map +1 -1
  82. package/dist/esm/store/plugins/logs.js +2 -1
  83. package/dist/esm/store/plugins/logs.js.map +1 -1
  84. package/dist/esm/utils/detailActionModel.js +28 -1
  85. package/dist/esm/utils/detailActionModel.js.map +1 -1
  86. package/dist/esm/utils/fillTemplate.js +13 -5
  87. package/dist/esm/utils/fillTemplate.js.map +1 -1
  88. package/dist/esm/utils/headerFieldChips.js +21 -2
  89. package/dist/esm/utils/headerFieldChips.js.map +1 -1
  90. package/dist/esm/utils/mapList.js +26 -11
  91. package/dist/esm/utils/mapList.js.map +1 -1
  92. package/dist/esm/utils/savedViewHelpers.js +40 -3
  93. package/dist/esm/utils/savedViewHelpers.js.map +1 -1
  94. package/dist/esm/utils/savedViewMenu.js +12 -5
  95. package/dist/esm/utils/savedViewMenu.js.map +1 -1
  96. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  97. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  98. package/dist/nextcloud-vue.cjs.js +2760 -1995
  99. package/dist/nextcloud-vue.cjs.js.map +2 -2
  100. package/dist/nextcloud-vue.css +630 -303
  101. package/l10n/en.json +3 -1
  102. package/l10n/nl.json +3 -1
  103. package/package.json +1 -1
  104. package/src/components/CnActionDialog/CnActionDialog.vue +32 -9
  105. package/src/components/CnAppRoot/CnAppRoot.vue +2 -1
  106. package/src/components/CnAssignDialog/CnAssignDialog.vue +4 -2
  107. package/src/components/CnBoardView/CnBoardView.vue +58 -5
  108. package/src/components/CnCardGrid/CnCardGrid.md +1 -0
  109. package/src/components/CnCardGrid/CnCardGrid.vue +11 -0
  110. package/src/components/CnCellRenderer/CnCellRenderer.vue +27 -3
  111. package/src/components/CnChartWidget/CnChartWidget.vue +6 -0
  112. package/src/components/CnDetailPage/CnDetailPage.vue +77 -20
  113. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +100 -5
  114. package/src/components/CnFormDialog/CnFormDialog.vue +1 -1
  115. package/src/components/CnIndexPage/CnIndexPage.md +1 -1
  116. package/src/components/CnIndexPage/CnIndexPage.vue +211 -16
  117. package/src/components/CnIndexSidebar/CnIndexSidebar.md +1 -1
  118. package/src/components/CnIndexSidebar/CnIndexSidebar.vue +2 -2
  119. package/src/components/CnNcDashboardList/CnNcDashboardList.vue +21 -1
  120. package/src/components/CnObjectCard/CnObjectCard.md +1 -0
  121. package/src/components/CnObjectCard/CnObjectCard.vue +51 -5
  122. package/src/components/CnPartyPicker/CnPartyPicker.vue +62 -16
  123. package/src/components/CnSearchSelect/CnSearchSelect.vue +8 -0
  124. package/src/composables/useRefLabels.js +25 -5
  125. package/src/css/board.css +5 -2
  126. package/src/css/dialog.css +53 -3
  127. package/src/css/index-page.css +26 -1
  128. package/src/css/look-board-detail.css +55 -22
  129. package/src/css/look-board-index.css +82 -12
  130. package/src/css/look-board-reports.css +1 -1
  131. package/src/css/look-board.css +84 -11
  132. package/src/integrations/registry.js +4 -0
  133. package/src/schemas/app-manifest-v2.schema.json +11 -5
  134. package/src/store/plugins/liveUpdates.js +3 -1
  135. package/src/store/plugins/logs.js +2 -1
  136. package/src/utils/detailActionModel.js +27 -0
  137. package/src/utils/fillTemplate.js +13 -5
  138. package/src/utils/headerFieldChips.js +21 -2
  139. package/src/utils/mapList.js +26 -11
  140. package/src/utils/savedViewHelpers.js +39 -2
  141. package/src/utils/savedViewMenu.js +12 -5
  142. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -91,14 +91,19 @@
91
91
  /* Buttons and inputs. */
92
92
  --cn-board-control-height: 40px;
93
93
  --cn-board-control-radius: 8px;
94
+ /* A control's edge: 3:1 against every ground a control sits on (WCAG
95
+ 1.4.11). Nextcloud's border-dark is a hairline (#dbdbdb, 1.4:1); its
96
+ max-contrast border is the control step, and a theme sets both. */
97
+ --cn-board-control-border: var(--color-border-maxcontrast);
94
98
  /* Cards. */
95
99
  --cn-board-card-radius: 12px;
96
100
  --cn-board-card-padding: 20px 22px;
97
101
  /* The side inset of a dashboard card: its title and its rows. */
98
102
  --cn-board-dashboard-card-inset: 24px;
99
- /* Hairline inside a card, and the soft secondary text. */
103
+ /* Hairline inside a card, and the soft secondary text: the boards' #3d4047,
104
+ between the main text and the muted text, so it follows a theme's pair. */
100
105
  --cn-board-hairline: var(--color-border);
101
- --cn-board-text-soft: var(--color-main-text);
106
+ --cn-board-text-soft: color-mix(in srgb, var(--color-main-text) 45%, var(--color-text-maxcontrast));
102
107
  }
103
108
 
104
109
  /*
@@ -250,6 +255,47 @@
250
255
  --font-weight-element: 600;
251
256
  }
252
257
 
258
+ /* ---- A button with an icon and a label --------------------------------- */
259
+ /* The boards draw it 14px in at both sides with 14px text and a 16px icon
260
+ 8px from its label (DqZaakEmail "Notitie toevoegen", DqVthInstellingen
261
+ "Regel toevoegen"). NcButton pads its start 4px and its end 12px, and puts
262
+ a 20px icon in a 30px slot. The rules hold the condition in `:where()`, so
263
+ they weigh (0,3,0): enough to outrank NcButton's own (0,2,0), and less than
264
+ any surface rule (header, toolbar, follow pill, Meer chevron, tab strip),
265
+ which keeps its own value. The padding goes through NcButton's
266
+ `--button-padding`, so a surface that sets `padding` is never contested.
267
+ @spec openspec/changes/board-icon-label-button/specs/board-icon-label-button/spec.md#requirement-a-board-button-with-an-icon-and-a-label-is-padded-as-the-boards-draw-it */
268
+ .cn-look-board .button-vue.button-vue:where(:has(> .button-vue__wrapper > .button-vue__icon:not(:empty)):has(> .button-vue__wrapper > .button-vue__text:not(:empty)):not(.cn-look-nextcloud *):not(.vue-crumb *)) {
269
+ --button-padding: 14px;
270
+ font-size: 14px;
271
+ }
272
+
273
+ .cn-look-board :where(.button-vue:has(> .button-vue__wrapper > .button-vue__icon:not(:empty)):has(> .button-vue__wrapper > .button-vue__text:not(:empty)):not(.cn-look-nextcloud *):not(.vue-crumb *)) .button-vue__wrapper.button-vue__wrapper {
274
+ gap: 8px;
275
+ }
276
+
277
+ .cn-look-board :where(.button-vue:has(> .button-vue__wrapper > .button-vue__icon:not(:empty)):has(> .button-vue__wrapper > .button-vue__text:not(:empty)):not(.cn-look-nextcloud *):not(.vue-crumb *)) .button-vue__icon.button-vue__icon {
278
+ width: 16px;
279
+ min-width: 16px;
280
+ height: 16px;
281
+ min-height: 16px;
282
+ }
283
+
284
+ .cn-look-board :where(.button-vue:has(> .button-vue__wrapper > .button-vue__icon:not(:empty)):has(> .button-vue__wrapper > .button-vue__text:not(:empty)):not(.cn-look-nextcloud *):not(.vue-crumb *)) .button-vue__icon svg {
285
+ width: 16px;
286
+ height: 16px;
287
+ }
288
+
289
+ /* ---- A single select -------------------------------------------------- */
290
+ /* NcSelect draws a single select as its search field with the clear and
291
+ open buttons laid over its end. A legacy vue-select rule that Nextcloud
292
+ still loads caps the field at the width less one clickable area, which
293
+ left those buttons outside the field's border (DqNieuweZaak "Zaaktype",
294
+ "Intakekanaal"). */
295
+ .cn-look-board .nc-select.v-select.select.vs--single .vs__selected-options {
296
+ max-width: none;
297
+ }
298
+
253
299
  /* ---- The header button ------------------------------------------------- */
254
300
  .cn-look-board .cn-index-page__header-buttons:not(.cn-look-nextcloud *),
255
301
  .cn-look-board .cn-detail-page__header-actions:not(.cn-look-nextcloud *),
@@ -279,7 +325,7 @@
279
325
  --nldesign-component-button-primary-action-font-weight: 600;
280
326
  --nldesign-component-button-secondary-action-color: var(--color-main-text);
281
327
  --nldesign-component-button-secondary-action-background-color: var(--color-main-background);
282
- --nldesign-component-button-secondary-action-border-color: var(--color-border-dark);
328
+ --nldesign-component-button-secondary-action-border-color: var(--cn-board-control-border);
283
329
  --nldesign-component-button-secondary-action-hover-background-color: var(--color-background-hover);
284
330
  }
285
331
 
@@ -293,7 +339,7 @@
293
339
  min-height: var(--cn-board-control-height);
294
340
  padding: 0 14px;
295
341
  gap: 8px;
296
- border: 1px solid var(--color-border-dark);
342
+ border: 1px solid var(--cn-board-control-border);
297
343
  border-radius: var(--cn-board-control-radius);
298
344
  background: var(--color-main-background);
299
345
  color: var(--color-main-text);
@@ -325,7 +371,7 @@
325
371
  height: var(--cn-board-control-height);
326
372
  min-height: var(--cn-board-control-height);
327
373
  padding: 0 14px;
328
- border: 1px solid var(--color-border-dark);
374
+ border: 1px solid var(--cn-board-control-border);
329
375
  border-radius: var(--cn-board-control-radius);
330
376
  background: var(--color-main-background);
331
377
  color: var(--color-main-text);
@@ -333,8 +379,9 @@
333
379
  font-weight: 600;
334
380
  }
335
381
 
336
- /* Buttons 10px apart, each icon 16px with 8px to its label (DqZaak's header,
337
- DqZaken's "Downloaden"); NcButton draws a 20px icon in a 30px slot. */
382
+ /* Buttons 10px apart, each icon 16px (DqZaak's header, DqZaken's
383
+ "Downloaden"); NcButton draws a 20px icon in a 30px slot. The 8px to the
384
+ label is the board's icon-and-label gap above. */
338
385
  .cn-look-board .cn-action-buttons:not(.cn-look-nextcloud *) {
339
386
  gap: 10px;
340
387
  }
@@ -344,7 +391,6 @@
344
391
  min-width: 16px;
345
392
  height: 16px;
346
393
  min-height: 16px;
347
- margin-inline-end: 8px;
348
394
  }
349
395
 
350
396
  .cn-look-board .cn-action-buttons .button-vue .button-vue__icon:not(.cn-look-nextcloud *) svg {
@@ -379,7 +425,7 @@
379
425
  body ink onto every span (thematiq). */
380
426
  .cn-look-board .action-item.action-item--secondary .action-item__menutoggle.button-vue--secondary:not(.cn-look-nextcloud *) {
381
427
  --nldesign-color-on-surface: var(--color-main-text);
382
- border: 1px solid var(--color-border-dark);
428
+ border: 1px solid var(--cn-board-control-border);
383
429
  border-radius: var(--cn-board-control-radius);
384
430
  background: var(--color-main-background);
385
431
  color: var(--color-main-text);
@@ -1176,6 +1222,15 @@
1176
1222
  line-height: normal;
1177
1223
  }
1178
1224
 
1225
+ /* A neutral board tag ("Normaal", "Uit") is the soft text on the chip ground,
1226
+ not the main text on the darker background a Nextcloud tag takes.
1227
+ @spec openspec/changes/board-pill-tones/specs/board-pill-tones/spec.md#requirement-a-neutral-board-tag-is-soft-text-on-the-chip-ground */
1228
+ .cn-look-board .cn-status-badge--default:not(.cn-status-badge--solid):not(.cn-look-nextcloud *) {
1229
+ --cn-status-badge-ink: var(--cn-board-text-soft);
1230
+ background-color: var(--color-background-hover);
1231
+ color: var(--cn-status-badge-ink);
1232
+ }
1233
+
1179
1234
  /* A pill paints its own pairing of ink and fill. A theme that forces the body
1180
1235
  ink onto every span (thematiq's text rule, `!important` at id level) reads
1181
1236
  that ink from --nldesign-color-on-surface when the surface sets it, so the
@@ -1300,7 +1355,7 @@
1300
1355
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--nc-dashboard) .cn-widget-wrapper__title {
1301
1356
  font-size: var(--cn-board-heading-size, 17px);
1302
1357
  font-weight: 700;
1303
- line-height: 1.3;
1358
+ line-height: normal;
1304
1359
  }
1305
1360
 
1306
1361
  /* The board draws no rule under a dashboard card's title (DqMijnWerk,
@@ -1314,7 +1369,7 @@
1314
1369
  }
1315
1370
 
1316
1371
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--nc-dashboard):not(.cn-widget-wrapper--borderless) .cn-widget-wrapper__header {
1317
- padding: 20px var(--cn-board-dashboard-card-inset) 12px;
1372
+ padding: 20px var(--cn-board-dashboard-card-inset) calc(12px - var(--cn-board-first-line-leading, 0.15em));
1318
1373
  }
1319
1374
 
1320
1375
  /* ---- Record list on a dashboard card (PtDashboard) ---------------------- */
@@ -1509,6 +1564,24 @@
1509
1564
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-stats-block-widget--tiles-box {
1510
1565
  padding: 14px 22px 20px;
1511
1566
  }
1567
+
1568
+ /* ---- Matrix chart (DqProcesanalyse "Dagen per fase") -------------------- */
1569
+ /* The board sets the matrix at 14px and the font's normal line height: the
1570
+ column heads and the cell figures at 600, a cell 37px with its 10px
1571
+ padding. Nextcloud's 15px at 1.5 made each row 42.5px.
1572
+ @spec openspec/changes/board-matrix-cells/specs/board-matrix-cells/spec.md#requirement-a-board-matrix-takes-the-boards-type */
1573
+ .cn-look-board .cn-chart-widget__matrix:not(.cn-look-nextcloud *) {
1574
+ font-size: 14px;
1575
+ line-height: normal;
1576
+ }
1577
+
1578
+ .cn-look-board .cn-chart-widget__matrix:not(.cn-look-nextcloud *) .cn-chart-widget__matrix-head {
1579
+ font-weight: 600;
1580
+ }
1581
+
1582
+ .cn-look-board .cn-chart-widget__matrix:not(.cn-look-nextcloud *) .cn-chart-widget__matrix-cell:not(.cn-chart-widget__matrix-cell--current) {
1583
+ font-weight: 600;
1584
+ }
1512
1585
  /*
1513
1586
  * The board dialog (screens-dialog-parity, canon section 5).
1514
1587
  *
@@ -1531,7 +1604,7 @@
1531
1604
  --nldesign-component-dialog-border-radius: var(--cn-board-card-radius, 12px);
1532
1605
  --cn-dialog-width: 640px;
1533
1606
  --cn-dialog-danger: var(--color-error);
1534
- --cn-dialog-eyebrow-color: var(--color-primary-element-text, var(--color-main-text));
1607
+ --cn-dialog-eyebrow-color: var(--color-primary-element-light-text, var(--color-main-text));
1535
1608
  --cn-dialog-eyebrow-transform: none;
1536
1609
  --cn-dialog-eyebrow-tracking: 0;
1537
1610
  }
@@ -1597,6 +1670,7 @@
1597
1670
  }
1598
1671
 
1599
1672
  .cn-dialog-header__eyebrow {
1673
+ --nldesign-color-on-surface: var(--cn-dialog-eyebrow-color, var(--color-main-text));
1600
1674
  margin-bottom: 4px;
1601
1675
  font-size: 13px;
1602
1676
  font-weight: 700;
@@ -1612,13 +1686,24 @@
1612
1686
  color: var(--color-main-text);
1613
1687
  }
1614
1688
 
1689
+ /* The subtitle is a <p>, which the nldesign theme sizes and inks with
1690
+ `!important` through its paragraph tokens: the board's 14px muted line
1691
+ goes to those tokens too (DqOverdragen, DqDocumentGenereren). */
1615
1692
  .cn-dialog-header__subtitle {
1693
+ --nldesign-component-paragraph-font-size: 14px;
1694
+ --nldesign-component-paragraph-color: var(--color-text-maxcontrast);
1695
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
1616
1696
  margin: 4px 0 0;
1617
1697
  font-size: 14px;
1618
1698
  color: var(--color-text-maxcontrast);
1619
1699
  }
1620
1700
 
1621
- .cn-dialog-header__close {
1701
+ /* The close button is a 36px circle. NcButton sizes an icon-only button by
1702
+ --button-size with `!important`, so the size goes through that; the radius
1703
+ also goes to the nldesign theme's button radius token. */
1704
+ .cn-dialog-header .cn-dialog-header__close.button-vue {
1705
+ --button-size: 36px;
1706
+ --nldesign-component-button-border-radius: 50%;
1622
1707
  flex: 0 0 auto;
1623
1708
  width: 36px;
1624
1709
  min-width: 36px;
@@ -1658,6 +1743,28 @@
1658
1743
  border-radius: var(--cn-board-control-radius, 8px);
1659
1744
  }
1660
1745
 
1746
+ /* The footer buttons set 14px text, 16px in at both sides, and 18px when
1747
+ they carry an icon (DqOverdragen "Annuleren" and "Overdragen"). The padding
1748
+ goes through NcButton's --button-padding. The mask class and the doubled
1749
+ class outrank NcButton's text-only rule, `.button-vue[data-v-…]:has(…:empty)`
1750
+ (four classes, in a stylesheet a spawned dialog loads later), and the board
1751
+ look's general icon-and-label rule.
1752
+ @spec openspec/changes/board-dialog-controls/specs/board-dialog-controls/spec.md#requirement-a-board-dialog-draws-its-controls-as-the-boards-do */
1753
+ .modal-mask.cn-dialog-board .dialog__actions .button-vue.button-vue {
1754
+ --button-padding: 16px;
1755
+ font-size: 14px;
1756
+ }
1757
+
1758
+ .modal-mask.cn-dialog-board .dialog__actions .button-vue.button-vue:has(> .button-vue__wrapper > .button-vue__icon:not(:empty)):has(> .button-vue__wrapper > .button-vue__text:not(:empty)) {
1759
+ --button-padding: 18px;
1760
+ }
1761
+
1762
+ /* NcButton pads a text-only label 4px a side inside the button's own padding;
1763
+ the board's 16px is the whole inset. */
1764
+ .modal-mask.cn-dialog-board .dialog__actions .button-vue .button-vue__text.button-vue__text {
1765
+ padding-inline: 0;
1766
+ }
1767
+
1661
1768
  /* Cancel is an outlined secondary, never a text link. */
1662
1769
  .cn-dialog-board .dialog__actions .button-vue--vue-secondary,
1663
1770
  .cn-dialog-board .dialog__actions .button-vue--secondary {
@@ -1734,15 +1841,31 @@
1734
1841
  height: calc(var(--cn-field-height, 40px) + 2 * var(--border-width-input-focused, 2px));
1735
1842
  }
1736
1843
 
1844
+ /* The board draws the control's edge as a 1px border (DqOverdragen "Waarom de
1845
+ zaak verhuist", DqBesluit); NcInputField and NcTextArea draw it as a shadow.
1846
+ The colour is the one that meets WCAG's 3:1 for a control's edge, as the
1847
+ footer's secondary button. Focus keeps NcInputField's own ring, which
1848
+ carries `!important`. */
1737
1849
  .cn-dialog-board .dialog__content .input-field__input,
1738
1850
  .cn-dialog-board .dialog__content .input-field__input:hover:not([disabled]),
1739
1851
  .cn-dialog-board .dialog__content .textarea__input,
1740
1852
  .cn-dialog-board .dialog__content .textarea__input:hover:not([disabled]) {
1853
+ border: 1px solid var(--color-border-maxcontrast);
1741
1854
  border-radius: 8px;
1742
- box-shadow: 0 0 0 1px var(--color-border-dark);
1855
+ box-shadow: none;
1743
1856
  font-size: var(--cn-field-text-size, 15px);
1744
1857
  }
1745
1858
 
1859
+ /* A plain input an app puts in a board dialog (a date, a number) is the same
1860
+ 40px control; Nextcloud's core stylesheet makes it 34px. */
1861
+ .cn-dialog-board .dialog__content input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]):not([type=range]):not([type=color]):not([type=submit]):not([type=button]):not([type=reset]):not([type=image]):not(.input-field__input) {
1862
+ box-sizing: border-box;
1863
+ height: var(--cn-field-height, 40px);
1864
+ min-height: var(--cn-field-height, 40px);
1865
+ border: 1px solid var(--color-border-maxcontrast);
1866
+ border-radius: 8px;
1867
+ }
1868
+
1746
1869
  .cn-dialog-board .dialog__content .input-field:has(.input-field__label) .input-field__input:not(:focus)::placeholder,
1747
1870
  .cn-dialog-board .dialog__content .textarea__input:not(:focus)::placeholder {
1748
1871
  opacity: 1 !important;
@@ -2099,10 +2222,13 @@
2099
2222
  margin-inline-start: auto;
2100
2223
  padding: 1px 8px;
2101
2224
  border-radius: 10px;
2225
+ --nldesign-color-on-surface: var(--cn-board-text-soft, var(--color-main-text));
2102
2226
  background-color: var(--color-main-background);
2103
- color: var(--color-main-text);
2227
+ color: var(--cn-board-text-soft, var(--color-main-text));
2104
2228
  font-size: 12px;
2105
- font-weight: 400;
2229
+ font-weight: 700;
2230
+ /* 16px tall on its 1px pad (DqWerkbord's column counts). */
2231
+ line-height: 14px;
2106
2232
  }
2107
2233
 
2108
2234
  /* A column at its limit: the count in the error colour; "full" is said in words too. */
@@ -2474,7 +2600,7 @@
2474
2600
  height: var(--cn-board-control-height) !important;
2475
2601
  min-height: var(--cn-board-control-height) !important;
2476
2602
  padding: 0 14px !important;
2477
- border: 1px solid var(--color-border-dark) !important;
2603
+ border: 1px solid var(--cn-board-control-border) !important;
2478
2604
  border-radius: var(--cn-board-control-radius) !important;
2479
2605
  background: var(--color-main-background) !important;
2480
2606
  color: var(--color-main-text) !important;
@@ -2598,7 +2724,7 @@
2598
2724
  min-height: 38px;
2599
2725
  margin: 0;
2600
2726
  padding: 0 14px;
2601
- border: 1px solid var(--color-border-dark);
2727
+ border: 1px solid var(--cn-board-control-border);
2602
2728
  border-radius: 19px;
2603
2729
  background: var(--color-main-background);
2604
2730
  color: var(--color-main-text);
@@ -2633,9 +2759,12 @@
2633
2759
  color: var(--color-main-background);
2634
2760
  }
2635
2761
 
2636
- /* The count badge: grey on an idle chip, soft text colour on the selected one. */
2762
+ /* The count badge: grey on an idle chip, soft text colour on the selected one.
2763
+ Its ink also goes to --nldesign-color-on-surface, which a theme that forces
2764
+ the body ink onto every span (thematiq) reads. */
2637
2765
  .cn-look-board .cn-saved-views__chip .cn-saved-views__chip-count,
2638
2766
  .cn-look-board .cn-quick-filter-bar .cn-quick-filter-bar__count {
2767
+ --nldesign-color-on-surface: var(--cn-board-text-soft);
2639
2768
  min-width: 0;
2640
2769
  padding: 1px 7px;
2641
2770
  border: 0;
@@ -2644,22 +2773,25 @@
2644
2773
  color: var(--cn-board-text-soft);
2645
2774
  font-size: 12px;
2646
2775
  font-weight: 600;
2647
- line-height: 1.4;
2776
+ /* 16px tall on its 1px pad, as the boards draw it (DqTaken, DqWerkbord).
2777
+ @spec openspec/changes/board-pill-tones/specs/board-pill-tones/spec.md#requirement-a-board-count-is-16px-tall */
2778
+ line-height: 14px;
2648
2779
  }
2649
2780
 
2650
2781
  .cn-look-board .cn-saved-views__chip--selected .cn-saved-views__chip-count,
2651
- /* On the selected chip the count is a lighter bubble on the dark chip
2652
- (DqZaken: #3d4047 on #1b1c1d); --cn-board-text-soft resolves to the main
2653
- text, the chip's own colour, which hid the bubble. */
2782
+ /* On the selected chip the count is the soft ink as a lighter bubble on the
2783
+ dark chip (DqZaken: #3d4047 on #1b1c1d). */
2654
2784
  .cn-look-board .cn-quick-filter-bar .cn-quick-filter-bar__tab--active .cn-quick-filter-bar__count {
2655
2785
  --nldesign-color-on-surface: var(--color-primary-element-text);
2656
- background: color-mix(in srgb, var(--color-main-background) 15%, var(--color-main-text));
2786
+ background: var(--cn-board-text-soft);
2657
2787
  color: var(--color-primary-element-text);
2658
2788
  }
2659
2789
 
2660
2790
  /* Save view: a ghost button, 34px, radius 17, no border, on the light primary
2661
- tint, a 14px icon 6px before the label, on one line. */
2791
+ tint, a 14px icon 6px before the label, on one line. The label is a span,
2792
+ so its ink also goes to --nldesign-color-on-surface. */
2662
2793
  .cn-look-board .cn-saved-views__save .button-vue {
2794
+ --nldesign-color-on-surface: var(--color-primary-element-light-text);
2663
2795
  min-height: 34px;
2664
2796
  height: 34px;
2665
2797
  padding: 0 12px;
@@ -2700,9 +2832,10 @@
2700
2832
  @spec openspec/changes/board-toolbar-buttons-theme/specs/board-toolbar-buttons-theme/spec.md#requirement-board-toolbar-buttons-are-neutral-under-a-theme */
2701
2833
  .cn-look-board .cn-actions-bar:not(.cn-look-nextcloud *) {
2702
2834
  --nldesign-component-button-font-weight: 600;
2835
+ --nldesign-component-button-color: var(--color-main-text);
2703
2836
  --nldesign-component-button-secondary-action-color: var(--color-main-text);
2704
2837
  --nldesign-component-button-secondary-action-background-color: var(--color-main-background);
2705
- --nldesign-component-button-secondary-action-border-color: var(--color-border-dark);
2838
+ --nldesign-component-button-secondary-action-border-color: var(--cn-board-control-border);
2706
2839
  --nldesign-component-button-secondary-action-hover-background-color: var(--color-background-hover);
2707
2840
  }
2708
2841
 
@@ -2729,6 +2862,8 @@
2729
2862
  margin-inline-start: 6px;
2730
2863
  padding: 0 6px;
2731
2864
  border-radius: 10px;
2865
+ /* A theme that forces the body ink onto every span reads it from here. */
2866
+ --nldesign-color-on-surface: var(--color-primary-element-text);
2732
2867
  background: var(--color-primary-element);
2733
2868
  color: var(--color-primary-element-text);
2734
2869
  font-size: 12px;
@@ -2837,7 +2972,7 @@
2837
2972
  height: 40px;
2838
2973
  padding-block: 0;
2839
2974
  padding-inline: 38px 12px !important;
2840
- border: 1px solid var(--color-border-dark);
2975
+ border: 1px solid var(--cn-board-control-border);
2841
2976
  border-radius: 8px;
2842
2977
  font-size: 14px;
2843
2978
  }
@@ -2847,7 +2982,10 @@
2847
2982
  font-size: 14px;
2848
2983
  }
2849
2984
 
2985
+ /* An active filter: the light primary tint, its label (a span) in the tint's
2986
+ ink through --nldesign-color-on-surface too. */
2850
2987
  .cn-look-board .cn-actions-bar--board .cn-actions-bar__filter-chip {
2988
+ --nldesign-color-on-surface: var(--color-primary-element-light-text);
2851
2989
  display: inline-flex;
2852
2990
  align-items: center;
2853
2991
  gap: 6px;
@@ -2991,9 +3129,13 @@
2991
3129
  line-height: normal;
2992
3130
  }
2993
3131
 
3132
+ /* The sort button is the bare label, square (the boards draw no box round
3133
+ it); the funnel after it is a 22px button with a 4px radius. Both outrank
3134
+ the 8px element radius the table and Nextcloud's `button` rule give them. */
2994
3135
  .cn-look-board .cn-table-container--board .cn-data-table th .cn-table-header__sort {
2995
3136
  min-height: 0;
2996
3137
  height: auto;
3138
+ border-radius: 0;
2997
3139
  line-height: inherit;
2998
3140
  }
2999
3141
 
@@ -3049,6 +3191,7 @@
3049
3191
  min-width: 22px;
3050
3192
  height: 22px;
3051
3193
  min-height: 22px;
3194
+ border-radius: 4px;
3052
3195
  margin-inline-start: 4px;
3053
3196
  }
3054
3197
 
@@ -3214,7 +3357,7 @@
3214
3357
  height: 34px !important;
3215
3358
  min-height: 34px !important;
3216
3359
  padding: 0 !important;
3217
- border: 1px solid var(--color-border-dark) !important;
3360
+ border: 1px solid var(--cn-board-control-border) !important;
3218
3361
  border-radius: 8px !important;
3219
3362
  color: var(--cn-board-text-soft) !important;
3220
3363
  }
@@ -3257,6 +3400,8 @@
3257
3400
  margin-inline-start: auto;
3258
3401
  }
3259
3402
 
3403
+ /* A page link is a <button>: Nextcloud's `button` rule sets it bold, the
3404
+ boards set the links at the regular weight and only the current page at 600. */
3260
3405
  .cn-look-board .cn-pagination--board .cn-pagination__board-link {
3261
3406
  box-sizing: border-box;
3262
3407
  min-width: 34px;
@@ -3269,6 +3414,7 @@
3269
3414
  background: var(--color-main-background);
3270
3415
  color: var(--color-main-text);
3271
3416
  font-size: 14px;
3417
+ font-weight: 400;
3272
3418
  cursor: pointer;
3273
3419
  }
3274
3420
 
@@ -3689,6 +3835,56 @@
3689
3835
  font-size: 20px;
3690
3836
  font-weight: 700;
3691
3837
  }
3838
+
3839
+ /* ---- Side panel cards --------------------------------------------------- */
3840
+ /* A card beside the list is the board's side card (DqTeamwachtrij "Team
3841
+ vandaag", "Werkvoorraad per zaaktype"): no rule under the header, the
3842
+ title a 15px muted label on the card's 20px 22px inset, 12px above the
3843
+ body, 20px between cards. The wrapper drew the Nextcloud panel: a 14px
3844
+ dark title on a 12px 16px header over a rule, 16px between cards. The
3845
+ tone carries `!important` against a theme that colours every h3.
3846
+ @spec openspec/changes/board-index-side-panel-cards/specs/board-index-side-panel-cards/spec.md#requirement-a-board-index-side-panel-card-is-the-boards-side-card */
3847
+ .cn-look-board .cn-index-page-widgets--side-panel:not(.cn-look-nextcloud *) {
3848
+ gap: var(--cn-board-section-gap, 20px);
3849
+ }
3850
+
3851
+ .cn-look-board .cn-index-page-widgets--side-panel:not(.cn-look-nextcloud *) .cn-widget-wrapper__header {
3852
+ border-bottom: none;
3853
+ padding: 20px 22px 0;
3854
+ }
3855
+
3856
+ .cn-look-board .cn-index-page-widgets--side-panel:not(.cn-look-nextcloud *) .cn-widget-wrapper__title {
3857
+ color: var(--color-text-maxcontrast) !important;
3858
+ font-size: var(--cn-board-side-heading-size, 15px);
3859
+ font-weight: 600;
3860
+ line-height: normal;
3861
+ }
3862
+
3863
+ .cn-look-board .cn-index-page-widgets--side-panel:not(.cn-look-nextcloud *) .cn-widget-wrapper__content {
3864
+ padding: calc(12px - var(--cn-board-first-line-leading, 0.15em)) 22px 20px;
3865
+ }
3866
+
3867
+ .cn-look-board .cn-index-page-widgets--side-panel:not(.cn-look-nextcloud *) .cn-index-page-widgets__note {
3868
+ font-size: 13px;
3869
+ }
3870
+
3871
+ /* A record list drawn as a table (DqTeamwachtrij "Werkvoorraad per
3872
+ zaaktype") is the board's compact grid: a 13px muted header at regular
3873
+ weight, rows 8px apart, no rules between them. Line heights differ from
3874
+ the board's normal ones, so the cell padding sets the board's row pitch.
3875
+ One class more than the component's scoped rules, which load later.
3876
+ @spec openspec/changes/board-index-side-panel-cards/specs/board-index-side-panel-cards/spec.md#requirement-a-board-record-list-table-is-the-boards-compact-grid */
3877
+ .cn-look-board .cn-record-list--table .cn-record-list__table th {
3878
+ border-bottom: none;
3879
+ font-size: 13px;
3880
+ font-weight: 400;
3881
+ padding-block: 0 2px;
3882
+ }
3883
+
3884
+ .cn-look-board .cn-record-list--table .cn-record-list__table td {
3885
+ border-bottom: none;
3886
+ padding-block: 2px;
3887
+ }
3692
3888
  /* ========================================
3693
3889
  @conduction/nextcloud-vue — Table Styles
3694
3890
  ======================================== */
@@ -6421,11 +6617,17 @@ a.cn-kpi-card--board * {
6421
6617
  overflow-y: auto;
6422
6618
  }
6423
6619
 
6620
+ /* The list scrolls inside the side column and the card for the rows without
6621
+ a place stays under it, as the board draws it (DqZakenKaart). Scrolling the
6622
+ column as a whole pushed that card below a page's worth of rows. */
6424
6623
  .cn-index-page__map-list {
6425
6624
  display: flex;
6625
+ flex: 0 1 auto;
6426
6626
  flex-direction: column;
6627
+ min-height: 0;
6427
6628
  margin: 0;
6428
6629
  padding: 0;
6630
+ overflow-y: auto;
6429
6631
  border: 1px solid var(--color-border);
6430
6632
  border-radius: 10px;
6431
6633
  list-style: none;
@@ -6433,6 +6635,7 @@ a.cn-kpi-card--board * {
6433
6635
 
6434
6636
  .cn-index-page__map-item {
6435
6637
  display: flex;
6638
+ flex: none;
6436
6639
  gap: 12px;
6437
6640
  padding: 12px 14px;
6438
6641
  }
@@ -6471,11 +6674,22 @@ a.cn-kpi-card--board * {
6471
6674
  min-width: 0;
6472
6675
  }
6473
6676
 
6474
- .cn-index-page__map-title {
6677
+ /* The title is a button for the keyboard but reads as the row's title text.
6678
+ Nextcloud styles every `button:not(.button-vue, ...)` (specificity 0,2,1)
6679
+ as a 34px tinted pill with a 3px margin, which outranked a single class and
6680
+ turned each title into a blue block (DqZakenKaart rows 111px against 89).
6681
+ Three classes outrank it, and the box properties it sets are reset.
6682
+ @spec openspec/changes/map-list-title-button/specs/map-list-title-button/spec.md#requirement-a-map-list-title-reads-as-text-not-as-a-button */
6683
+ .cn-index-page__map-list .cn-index-page__map-item .cn-index-page__map-title {
6684
+ width: auto;
6685
+ height: auto;
6686
+ min-height: 0;
6475
6687
  margin: 0;
6476
6688
  padding: 0;
6477
6689
  border: 0;
6690
+ border-radius: 0;
6478
6691
  background: none;
6692
+ box-shadow: none;
6479
6693
  color: var(--color-main-text);
6480
6694
  font: inherit;
6481
6695
  font-size: 15px;
@@ -6485,6 +6699,12 @@ a.cn-kpi-card--board * {
6485
6699
  cursor: pointer;
6486
6700
  }
6487
6701
 
6702
+ .cn-index-page__map-list .cn-index-page__map-item .cn-index-page__map-title:hover,
6703
+ .cn-index-page__map-list .cn-index-page__map-item .cn-index-page__map-title:focus {
6704
+ background: none;
6705
+ color: var(--color-main-text);
6706
+ }
6707
+
6488
6708
  .cn-index-page__map-sub,
6489
6709
  .cn-index-page__map-due {
6490
6710
  color: var(--color-text-maxcontrast);
@@ -6500,6 +6720,7 @@ a.cn-kpi-card--board * {
6500
6720
 
6501
6721
  .cn-index-page__map-missing {
6502
6722
  display: flex;
6723
+ flex: none;
6503
6724
  flex-direction: column;
6504
6725
  align-items: flex-start;
6505
6726
  gap: 8px;
@@ -7945,6 +8166,12 @@ a.cn-kpi-card--board * {
7945
8166
  /* Card h2 and side heading. */
7946
8167
  --cn-board-heading-size: 17px;
7947
8168
  --cn-board-side-heading-size: 15px;
8169
+ /* The boards set text at the font's normal line height (1.2 for Fira
8170
+ Sans), Nextcloud at 1.5: a card body's first line carries this much
8171
+ half-leading above its glyphs that a board does not draw. A gap the
8172
+ boards measure from a title to the text under it is the board's value
8173
+ minus this. Resolved in the element that uses it. */
8174
+ --cn-board-first-line-leading: 0.15em;
7948
8175
  }
7949
8176
 
7950
8177
  /* ---- The header: two rows on the ground ------------------------------- */
@@ -8000,7 +8227,7 @@ a.cn-kpi-card--board * {
8000
8227
  height: var(--cn-board-control-height) !important;
8001
8228
  min-height: var(--cn-board-control-height) !important;
8002
8229
  padding: 0 14px !important;
8003
- border: 1px solid var(--color-border-dark) !important;
8230
+ border: 1px solid var(--cn-board-control-border) !important;
8004
8231
  border-radius: var(--cn-board-control-radius) !important;
8005
8232
  background: var(--color-main-background) !important;
8006
8233
  color: var(--color-main-text) !important;
@@ -8013,13 +8240,13 @@ a.cn-kpi-card--board * {
8013
8240
  background: var(--color-background-hover) !important;
8014
8241
  }
8015
8242
 
8016
- /* Each header icon is 16px with 8px to its label; NcButton draws 20px in a 30px slot. */
8243
+ /* Each header icon is 16px; NcButton draws 20px in a 30px slot. The 8px to
8244
+ the label is the board's icon-and-label gap (look-board.css). */
8017
8245
  .cn-look-board .cn-detail-page .cn-detail-page__header-actions > .button-vue--secondary .button-vue__icon {
8018
8246
  width: 16px;
8019
8247
  min-width: 16px;
8020
8248
  height: 16px;
8021
8249
  min-height: 16px;
8022
- margin-inline-end: 8px;
8023
8250
  }
8024
8251
 
8025
8252
  .cn-look-board .cn-detail-page .cn-detail-page__header-actions > .button-vue--secondary .button-vue__icon svg {
@@ -8027,6 +8254,17 @@ a.cn-kpi-card--board * {
8027
8254
  height: 16px;
8028
8255
  }
8029
8256
 
8257
+ /* Row 3: the Follow control under the breadcrumb, on the full width.
8258
+ @spec openspec/changes/board-follow-row/specs/board-follow-row/spec.md#requirement-the-board-follow-control-sits-under-the-breadcrumb */
8259
+ .cn-look-board .cn-detail-page__header-row3 {
8260
+ align-items: center;
8261
+ display: flex;
8262
+ flex: 1 0 100%;
8263
+ flex-wrap: wrap;
8264
+ gap: 8px;
8265
+ min-width: 0;
8266
+ }
8267
+
8030
8268
  /* Row 2: pills, breadcrumb, dot, meta, chips. */
8031
8269
  .cn-look-board .cn-detail-page__header-row2 {
8032
8270
  align-items: center;
@@ -8126,24 +8364,27 @@ a.cn-kpi-card--board * {
8126
8364
  widget's 4px pad is room for the 32px circles, which the bars variant does
8127
8365
  not draw), the label 8px under its bar and the date 8px under the label at
8128
8366
  the normal line height, open steps muted and the done and current ones in
8129
- the main text. Each hands its ink to --nldesign-color-on-surface, which a
8130
- theme that forces the body ink onto every span (thematiq) reads instead. */
8367
+ the main text. Each sets its ink as `color`, and also hands it to
8368
+ --nldesign-color-on-surface for a theme that still forces the body ink. */
8131
8369
  .cn-look-board .cn-stages-widget:has(> .cn-stages-widget__bars):not(.cn-look-nextcloud *) {
8132
8370
  padding: 0;
8133
8371
  }
8134
8372
 
8135
8373
  .cn-look-board .cn-stages-widget__bars .cn-stages-widget__bar-label:not(.cn-look-nextcloud *) {
8136
8374
  --nldesign-color-on-surface: var(--color-text-maxcontrast);
8375
+ color: var(--color-text-maxcontrast);
8137
8376
  line-height: normal;
8138
8377
  }
8139
8378
 
8140
8379
  .cn-look-board .cn-stages-widget__bars .cn-stages-widget__bar-step--done .cn-stages-widget__bar-label:not(.cn-look-nextcloud *),
8141
8380
  .cn-look-board .cn-stages-widget__bars .cn-stages-widget__bar-step--current .cn-stages-widget__bar-label:not(.cn-look-nextcloud *) {
8142
8381
  --nldesign-color-on-surface: var(--color-main-text);
8382
+ color: var(--color-main-text);
8143
8383
  }
8144
8384
 
8145
8385
  .cn-look-board .cn-stages-widget__bars .cn-stages-widget__bar-date:not(.cn-look-nextcloud *) {
8146
8386
  --nldesign-color-on-surface: var(--color-text-maxcontrast);
8387
+ color: var(--color-text-maxcontrast);
8147
8388
  line-height: normal;
8148
8389
  }
8149
8390
 
@@ -8184,14 +8425,14 @@ a.cn-kpi-card--board * {
8184
8425
  --nldesign-component-button-border-radius: 14px;
8185
8426
  --nldesign-component-button-secondary-action-color: var(--color-main-text);
8186
8427
  --nldesign-component-button-secondary-action-background-color: var(--color-main-background);
8187
- --nldesign-component-button-secondary-action-border-color: var(--color-border-dark);
8428
+ --nldesign-component-button-secondary-action-border-color: var(--cn-board-control-border);
8188
8429
  --nldesign-component-button-secondary-action-hover-background-color: var(--color-background-hover);
8189
8430
  box-sizing: border-box;
8190
8431
  height: 28px;
8191
8432
  min-height: 28px;
8192
8433
  min-width: 0;
8193
8434
  padding: 0 10px;
8194
- border: 1px solid var(--color-border-dark);
8435
+ border: 1px solid var(--cn-board-control-border);
8195
8436
  border-radius: 14px;
8196
8437
  background: var(--color-main-background);
8197
8438
  color: var(--color-main-text);
@@ -8281,13 +8522,15 @@ a.cn-kpi-card--board * {
8281
8522
  The nldesign theme sets every button's weight and radius with `!important`
8282
8523
  through its button tokens, which drew every tab bold with four rounded
8283
8524
  corners; the tab hands the board's values to those tokens. A tab is 37px
8284
- with or without a count (DqZaak), not 34px without one.
8525
+ with or without a count (DqZaak), not 34px without one. Its outline is
8526
+ the widget card's border, so tab and card meet in one line.
8527
+ @spec openspec/changes/board-tabs-widget-border/specs/board-tabs-widget-border/spec.md#requirement-board-folder-tabs-draw-the-widget-card-border
8285
8528
  @spec openspec/changes/board-tabs-theme/specs/board-tabs-theme/spec.md#requirement-board-folder-tabs-keep-the-boards-weight-shape-and-height-under-a-theme */
8286
8529
  .cn-look-board .cn-tabs--board .cn-tabs__nav-item {
8287
8530
  --nldesign-component-button-font-weight: 400;
8288
8531
  --nldesign-component-button-border-radius: 8px 8px 0 0;
8289
8532
  background-color: var(--color-background-dark);
8290
- border: 1px solid var(--color-border-dark);
8533
+ border: 1px solid var(--color-border);
8291
8534
  border-bottom: none;
8292
8535
  border-radius: 8px 8px 0 0;
8293
8536
  font-size: 14px;
@@ -8302,7 +8545,7 @@ a.cn-kpi-card--board * {
8302
8545
  --nldesign-component-button-font-weight: 700;
8303
8546
  background-color: var(--color-main-background);
8304
8547
  border-bottom: 1px solid var(--color-main-background);
8305
- border-top: 1px solid var(--color-border-dark);
8548
+ border-top: 1px solid var(--color-border);
8306
8549
  font-weight: 700;
8307
8550
  min-height: 38px;
8308
8551
  padding-bottom: 9px;
@@ -8329,13 +8572,14 @@ a.cn-kpi-card--board * {
8329
8572
 
8330
8573
  /* The Actions button at the end of the strip: at the top, 8px in from the
8331
8574
  end and 8px clear of the card, so the tabs, aligned to the bottom, sit 6px
8332
- lower than the button (DqZaak "Acties"). */
8575
+ lower than the button, 12px in at both sides (DqZaak "Acties"). */
8333
8576
  .cn-look-board .cn-tabs--board .cn-tabs__nav-end {
8334
8577
  align-self: flex-start;
8335
8578
  margin: 0 8px 8px 0;
8336
8579
  }
8337
8580
 
8338
8581
  .cn-look-board .cn-tabs--board .cn-tabs__nav-end .button-vue {
8582
+ --button-padding: 12px;
8339
8583
  min-height: 34px;
8340
8584
  block-size: 34px;
8341
8585
  }
@@ -8412,15 +8656,17 @@ a.cn-kpi-card--board * {
8412
8656
  .cn-look-board .cn-detail-card .cn-detail-card__title {
8413
8657
  font-size: var(--cn-board-heading-size);
8414
8658
  font-weight: 700;
8415
- line-height: 1.3;
8659
+ line-height: normal;
8416
8660
  }
8417
8661
 
8662
+ /* 12px from the title's glyphs to the first line's glyphs, as drawn.
8663
+ @spec openspec/changes/board-card-title-gap/specs/board-card-title-gap/spec.md#requirement-a-board-cards-body-starts-the-boards-gap-below-its-title */
8418
8664
  .cn-look-board .cn-detail-page .cn-widget-wrapper__content {
8419
- padding: 12px 22px 20px;
8665
+ padding: calc(12px - var(--cn-board-first-line-leading)) 22px 20px;
8420
8666
  }
8421
8667
 
8422
8668
  .cn-look-board .cn-detail-card .cn-detail-card__content {
8423
- padding: 12px 22px 20px;
8669
+ padding: calc(12px - var(--cn-board-first-line-leading)) 22px 20px;
8424
8670
  }
8425
8671
 
8426
8672
  /* A header-less card keeps the full 20px 22px. */
@@ -8428,13 +8674,18 @@ a.cn-kpi-card--board * {
8428
8674
  padding: var(--cn-board-card-padding);
8429
8675
  }
8430
8676
 
8431
- /* The data card: 200px columns, a 12px 24px gap, label over value, hairline. */
8432
- .cn-look-board .cn-object-data-widget__grid {
8677
+ /* The data card: 200px columns, a 12px 24px gap, label over value, hairline.
8678
+ Each selector holds one class more than the component's scoped rule
8679
+ (`.cn-object-data-widget__cell[data-v-...]`), which loads after this sheet:
8680
+ at equal specificity the cell kept its 8px top padding and the grid its 8px
8681
+ gap, so the first label sat 8px further below the card's title.
8682
+ @spec openspec/changes/board-card-title-gap/specs/board-card-title-gap/spec.md#requirement-the-data-cards-grid-keeps-the-boards-gap-and-cell-padding */
8683
+ .cn-look-board .cn-object-data-widget__grid-wrap .cn-object-data-widget__grid {
8433
8684
  font-size: 15px;
8434
8685
  gap: 12px 24px;
8435
8686
  }
8436
8687
 
8437
- .cn-look-board .cn-object-data-widget__cell {
8688
+ .cn-look-board .cn-object-data-widget__grid .cn-object-data-widget__cell {
8438
8689
  border-bottom: 1px solid var(--cn-board-hairline);
8439
8690
  gap: 2px;
8440
8691
  padding: 0 0 10px;
@@ -8482,7 +8733,7 @@ a.cn-kpi-card--board * {
8482
8733
  }
8483
8734
 
8484
8735
  .cn-look-board .cn-detail-page__side .cn-widget-wrapper__content {
8485
- padding: 10px 22px 20px;
8736
+ padding: calc(10px - var(--cn-board-first-line-leading)) 22px 20px;
8486
8737
  }
8487
8738
 
8488
8739
  /* A stat tile in a side card (DqZaak "Termijn") sits on the card's inset as
@@ -8599,21 +8850,24 @@ a.cn-kpi-card--board * {
8599
8850
  font-size: 13px;
8600
8851
  }
8601
8852
 
8602
- /* Done and open steps are muted, the current one in the main text. Each hands
8603
- its ink to --nldesign-color-on-surface, which a theme that forces the body
8604
- ink onto every li and span (thematiq) reads instead. */
8853
+ /* Done and open steps are muted, the current one in the main text. Each sets
8854
+ its ink as `color`, and also hands it to --nldesign-color-on-surface for a
8855
+ theme that still forces the body ink. */
8605
8856
  .cn-look-board .cn-next-step-card--board .cn-next-step-card__item,
8606
8857
  .cn-look-board .cn-next-step-card--board .cn-next-step-card__hint,
8607
8858
  .cn-look-board .cn-next-step-card--board .cn-next-step-card__after {
8608
8859
  --nldesign-color-on-surface: var(--color-text-maxcontrast);
8860
+ color: var(--color-text-maxcontrast);
8609
8861
  }
8610
8862
 
8611
8863
  .cn-look-board .cn-next-step-card--board .cn-next-step-card__item--current {
8612
8864
  --nldesign-color-on-surface: var(--color-main-text);
8865
+ color: var(--color-main-text);
8613
8866
  }
8614
8867
 
8615
8868
  .cn-look-board .cn-next-step-card--board .cn-next-step-card__item--current .cn-next-step-card__hint {
8616
8869
  --nldesign-color-on-surface: var(--color-text-maxcontrast);
8870
+ color: var(--color-text-maxcontrast);
8617
8871
  }
8618
8872
 
8619
8873
  /* ---- History: the activity tab ------------------------------------------ */
@@ -8659,7 +8913,7 @@ a.cn-kpi-card--board * {
8659
8913
  .cn-look-board .cn-activity-tab--board .cn-activity-tab__kind {
8660
8914
  align-items: center;
8661
8915
  background: var(--color-main-background);
8662
- border: 1px solid var(--color-border-dark);
8916
+ border: 1px solid var(--cn-board-control-border);
8663
8917
  border-radius: 18px;
8664
8918
  color: var(--color-main-text);
8665
8919
  cursor: pointer;
@@ -8934,7 +9188,7 @@ a.cn-kpi-card--board * {
8934
9188
  height: var(--cn-board-control-height) !important;
8935
9189
  min-height: var(--cn-board-control-height) !important;
8936
9190
  padding: 0 14px !important;
8937
- border: 1px solid var(--color-border-dark) !important;
9191
+ border: 1px solid var(--cn-board-control-border) !important;
8938
9192
  border-radius: var(--cn-board-control-radius) !important;
8939
9193
  background: var(--color-main-background) !important;
8940
9194
  color: var(--color-main-text) !important;
@@ -10475,7 +10729,7 @@ a.cn-kpi-card--board * {
10475
10729
  }
10476
10730
 
10477
10731
 
10478
- .cn-chart-widget[data-v-1c17a450] {
10732
+ .cn-chart-widget[data-v-784af9ea] {
10479
10733
  width: 100%;
10480
10734
  /* A chart FITS its container — it is never a scroll region. apexcharts
10481
10735
  sizes its SVG from the element it is mounted in, but it also enforces
@@ -10497,13 +10751,13 @@ a.cn-kpi-card--board * {
10497
10751
  takes what is left, so the chart is sized by the box rather than sizing it.
10498
10752
  `min-height: 0` drops the 100px floor — on a fixed-height surface a floor is
10499
10753
  the thing that produces the overflow it was meant to prevent. */
10500
- .cn-chart-widget--fit[data-v-1c17a450] {
10754
+ .cn-chart-widget--fit[data-v-784af9ea] {
10501
10755
  height: 100%;
10502
10756
  min-height: 0;
10503
10757
  display: flex;
10504
10758
  flex-direction: column;
10505
10759
  }
10506
- .cn-chart-widget__canvas[data-v-1c17a450] {
10760
+ .cn-chart-widget__canvas[data-v-784af9ea] {
10507
10761
  min-width: 0;
10508
10762
  max-width: 100%;
10509
10763
  /* Never a scroll region (see the root). `overflow-x: hidden` alone made
@@ -10516,14 +10770,14 @@ a.cn-kpi-card--board * {
10516
10770
  /* apexcharts writes an inline `width` onto its own wrapper from its measured
10517
10771
  minimum, which beats the container when the container is narrower. Cap the
10518
10772
  painted box so the inline width cannot push past the widget's border. */
10519
- .cn-chart-widget[data-v-1c17a450] .apexcharts-canvas,
10520
- .cn-chart-widget[data-v-1c17a450] .apexcharts-canvas svg {
10773
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-canvas,
10774
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-canvas svg {
10521
10775
  max-width: 100%;
10522
10776
  }
10523
10777
 
10524
10778
  /* The SVG is a block: as an inline box it sits on a line and adds the line's
10525
10779
  descender space under the chart. */
10526
- .cn-chart-widget[data-v-1c17a450] .apexcharts-canvas svg {
10780
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-canvas svg {
10527
10781
  display: block;
10528
10782
  }
10529
10783
 
@@ -10531,24 +10785,24 @@ a.cn-kpi-card--board * {
10531
10785
  would grow to its content, i.e. to the chart, and the percentage height would
10532
10786
  resolve against a box the chart itself defined. `overflow: hidden` keeps a
10533
10787
  sub-pixel rounding difference from reintroducing a scrollbar. */
10534
- .cn-chart-widget--fit .cn-chart-widget__canvas[data-v-1c17a450] {
10788
+ .cn-chart-widget--fit .cn-chart-widget__canvas[data-v-784af9ea] {
10535
10789
  flex: 1 1 0;
10536
10790
  min-height: 0;
10537
10791
  overflow: hidden;
10538
10792
  }
10539
- .cn-chart-widget__fallback[data-v-1c17a450] {
10793
+ .cn-chart-widget__fallback[data-v-784af9ea] {
10540
10794
  display: flex;
10541
10795
  align-items: center;
10542
10796
  justify-content: center;
10543
10797
  min-height: 150px;
10544
10798
  color: var(--color-text-maxcontrast);
10545
10799
  }
10546
- .cn-chart-widget__html[data-v-1c17a450] {
10800
+ .cn-chart-widget__html[data-v-784af9ea] {
10547
10801
  display: flex;
10548
10802
  flex-direction: column;
10549
10803
  gap: 12px;
10550
10804
  }
10551
- .cn-chart-widget__bar-list[data-v-1c17a450] {
10805
+ .cn-chart-widget__bar-list[data-v-784af9ea] {
10552
10806
  display: flex;
10553
10807
  flex-direction: column;
10554
10808
  gap: 10px;
@@ -10556,7 +10810,7 @@ a.cn-kpi-card--board * {
10556
10810
  margin: 0;
10557
10811
  padding: 0;
10558
10812
  }
10559
- .cn-chart-widget__bar-line[data-v-1c17a450] {
10813
+ .cn-chart-widget__bar-line[data-v-784af9ea] {
10560
10814
  align-items: center;
10561
10815
  background: none;
10562
10816
  border: 0;
@@ -10571,100 +10825,107 @@ a.cn-kpi-card--board * {
10571
10825
  text-align: start;
10572
10826
  width: 100%;
10573
10827
  }
10574
- .cn-chart-widget__bar-line--drill[data-v-1c17a450] {
10828
+ .cn-chart-widget__bar-line--drill[data-v-784af9ea] {
10575
10829
  border-radius: var(--border-radius-small, 4px);
10576
10830
  cursor: pointer;
10577
10831
  }
10578
- .cn-chart-widget__bar-line--drill:hover .cn-chart-widget__bar-label[data-v-1c17a450],
10579
- .cn-chart-widget__bar-line--drill:focus-visible .cn-chart-widget__bar-label[data-v-1c17a450] {
10832
+ .cn-chart-widget__bar-line--drill:hover .cn-chart-widget__bar-label[data-v-784af9ea],
10833
+ .cn-chart-widget__bar-line--drill:focus-visible .cn-chart-widget__bar-label[data-v-784af9ea] {
10580
10834
  text-decoration: underline;
10581
10835
  }
10582
- .cn-chart-widget__bar-label[data-v-1c17a450] {
10836
+ .cn-chart-widget__bar-label[data-v-784af9ea] {
10583
10837
  overflow: hidden;
10584
10838
  text-overflow: ellipsis;
10585
10839
  white-space: nowrap;
10586
10840
  }
10587
- .cn-chart-widget__bar-track[data-v-1c17a450] {
10841
+ .cn-chart-widget__bar-track[data-v-784af9ea] {
10588
10842
  background: var(--color-background-dark);
10589
10843
  border-radius: 4px;
10590
10844
  display: block;
10591
10845
  height: 14px;
10592
10846
  overflow: hidden;
10593
10847
  }
10594
- .cn-chart-widget__bar-fill[data-v-1c17a450] {
10848
+ .cn-chart-widget__bar-fill[data-v-784af9ea] {
10595
10849
  background: var(--color-primary-element);
10596
10850
  display: block;
10597
10851
  height: 100%;
10598
10852
  }
10599
- .cn-chart-widget__bar-value[data-v-1c17a450] {
10853
+ .cn-chart-widget__bar-value[data-v-784af9ea] {
10600
10854
  font-weight: 600;
10601
10855
  text-align: end;
10602
10856
  white-space: nowrap;
10603
10857
  }
10604
- .cn-chart-widget__footnote[data-v-1c17a450] {
10858
+ .cn-chart-widget__footnote[data-v-784af9ea] {
10605
10859
  color: var(--color-text-maxcontrast);
10606
10860
  margin: 0;
10607
10861
  }
10608
10862
 
10609
10863
  /* Under an ApexCharts plot the footnote is a sibling of the canvas, so it keeps
10610
10864
  its own line height while the canvas takes the rest of a fitted column. */
10611
- .cn-chart-widget > .cn-chart-widget__footnote[data-v-1c17a450] {
10865
+ .cn-chart-widget > .cn-chart-widget__footnote[data-v-784af9ea] {
10612
10866
  flex: 0 0 auto;
10613
10867
  margin-top: 8px;
10614
10868
  }
10615
- .cn-chart-widget__matrix[data-v-1c17a450] {
10869
+ .cn-chart-widget__matrix[data-v-784af9ea] {
10616
10870
  display: grid;
10617
10871
  gap: 4px;
10618
10872
  }
10619
- .cn-chart-widget__matrix-row[data-v-1c17a450] {
10873
+ .cn-chart-widget__matrix-row[data-v-784af9ea] {
10620
10874
  display: contents;
10621
10875
  }
10622
- .cn-chart-widget__matrix-head[data-v-1c17a450] {
10876
+ .cn-chart-widget__matrix-head[data-v-784af9ea] {
10877
+ --nldesign-color-on-surface: var(--color-text-maxcontrast);
10623
10878
  color: var(--color-text-maxcontrast);
10624
10879
  padding: 6px;
10625
10880
  }
10626
- .cn-chart-widget__matrix-label[data-v-1c17a450] {
10881
+ .cn-chart-widget__matrix-label[data-v-784af9ea] {
10627
10882
  padding: 10px 6px;
10628
10883
  }
10629
- .cn-chart-widget__matrix-cell[data-v-1c17a450] {
10884
+ .cn-chart-widget__matrix-cell[data-v-784af9ea] {
10630
10885
  border-radius: 6px;
10631
10886
  padding: 10px;
10632
10887
  text-align: center;
10633
10888
  }
10634
- .cn-chart-widget__matrix-cell--success[data-v-1c17a450] {
10889
+ .cn-chart-widget__matrix-cell--success[data-v-784af9ea] {
10635
10890
  background: var(--color-success-light, color-mix(in srgb, var(--color-success) 15%, var(--color-main-background)));
10636
10891
  }
10637
- .cn-chart-widget__matrix-cell--warning[data-v-1c17a450] {
10892
+ .cn-chart-widget__matrix-cell--warning[data-v-784af9ea] {
10638
10893
  background: var(--color-warning-light, color-mix(in srgb, var(--color-warning) 15%, var(--color-main-background)));
10639
10894
  }
10640
- .cn-chart-widget__matrix-cell--error[data-v-1c17a450] {
10895
+ .cn-chart-widget__matrix-cell--error[data-v-784af9ea] {
10641
10896
  background: var(--color-error-light, color-mix(in srgb, var(--color-error) 12%, var(--color-main-background)));
10642
10897
  }
10643
- .cn-chart-widget__matrix-cell--danger[data-v-1c17a450] {
10898
+ .cn-chart-widget__matrix-cell--danger[data-v-784af9ea] {
10644
10899
  background: color-mix(in srgb, var(--color-error) 25%, var(--color-main-background));
10645
10900
  }
10646
- .cn-chart-widget__matrix-cell--current[data-v-1c17a450] {
10901
+ .cn-chart-widget__matrix-cell--current[data-v-784af9ea] {
10647
10902
  font-weight: 700;
10648
10903
  outline: 3px solid var(--color-primary-element);
10649
10904
  outline-offset: -3px;
10650
10905
  }
10651
- .cn-chart-widget__matrix-cell--1[data-v-1c17a450] {
10906
+
10907
+ /* A cell is a span: its ink also goes to --nldesign-color-on-surface, which a
10908
+ theme that forces the body ink onto every span (thematiq) reads. Level 3
10909
+ leaves the theme's body ink in place: white on its tint is below 4.5:1. */
10910
+ .cn-chart-widget__matrix-cell--1[data-v-784af9ea] {
10911
+ --nldesign-color-on-surface: var(--color-primary-element-light-text);
10652
10912
  background: var(--color-primary-element-light);
10653
10913
  color: var(--color-primary-element-light-text);
10654
10914
  }
10655
- .cn-chart-widget__matrix-cell--2[data-v-1c17a450] {
10915
+ .cn-chart-widget__matrix-cell--2[data-v-784af9ea] {
10656
10916
  background: color-mix(in srgb, var(--color-primary-element) 30%, var(--color-main-background));
10657
10917
  color: var(--color-main-text);
10658
10918
  }
10659
- .cn-chart-widget__matrix-cell--3[data-v-1c17a450] {
10919
+ .cn-chart-widget__matrix-cell--3[data-v-784af9ea] {
10660
10920
  background: color-mix(in srgb, var(--color-primary-element) 65%, var(--color-main-background));
10661
10921
  color: var(--color-primary-element-text);
10662
10922
  }
10663
- .cn-chart-widget__matrix-cell--4[data-v-1c17a450] {
10923
+ .cn-chart-widget__matrix-cell--4[data-v-784af9ea] {
10924
+ --nldesign-color-on-surface: var(--color-primary-element-text);
10664
10925
  background: var(--color-primary-element);
10665
10926
  color: var(--color-primary-element-text);
10666
10927
  }
10667
- .cn-chart-widget__empty[data-v-1c17a450] {
10928
+ .cn-chart-widget__empty[data-v-784af9ea] {
10668
10929
  display: flex;
10669
10930
  align-items: center;
10670
10931
  justify-content: center;
@@ -10679,25 +10940,25 @@ a.cn-kpi-card--board * {
10679
10940
  content-sized case; in fit mode they take the leftover space and centre in it
10680
10941
  instead, since the floor would overflow a short tile. Declared after the base
10681
10942
  rules so the cascade order matches specificity (no-descending-specificity). */
10682
- .cn-chart-widget--fit .cn-chart-widget__empty[data-v-1c17a450],
10683
- .cn-chart-widget--fit .cn-chart-widget__fallback[data-v-1c17a450] {
10943
+ .cn-chart-widget--fit .cn-chart-widget__empty[data-v-784af9ea],
10944
+ .cn-chart-widget--fit .cn-chart-widget__fallback[data-v-784af9ea] {
10684
10945
  flex: 1 1 0;
10685
10946
  min-height: 0;
10686
10947
  }
10687
- .cn-chart-widget__error[data-v-1c17a450] {
10948
+ .cn-chart-widget__error[data-v-784af9ea] {
10688
10949
  font-size: 14px;
10689
10950
  margin: 0;
10690
10951
  }
10691
10952
 
10692
10953
  /* In-widget view switcher pills (views[] prop) — compact segmented row,
10693
10954
  mirroring the dashboard date-range pill styling. */
10694
- .cn-chart-widget__views[data-v-1c17a450] {
10955
+ .cn-chart-widget__views[data-v-784af9ea] {
10695
10956
  display: flex;
10696
10957
  gap: 4px;
10697
10958
  margin-bottom: 6px;
10698
10959
  justify-content: flex-end;
10699
10960
  }
10700
- .cn-chart-widget__view-pill[data-v-1c17a450] {
10961
+ .cn-chart-widget__view-pill[data-v-784af9ea] {
10701
10962
  padding: 2px 10px;
10702
10963
  border: 1px solid var(--color-border);
10703
10964
  border-radius: 999px;
@@ -10706,7 +10967,7 @@ a.cn-kpi-card--board * {
10706
10967
  font-size: 12px;
10707
10968
  cursor: pointer;
10708
10969
  }
10709
- .cn-chart-widget__view-pill--active[data-v-1c17a450] {
10970
+ .cn-chart-widget__view-pill--active[data-v-784af9ea] {
10710
10971
  background: var(--color-primary-element-light, #aad2ed);
10711
10972
  color: var(--color-main-text);
10712
10973
  border-color: var(--color-primary-element, #0082c9);
@@ -10735,8 +10996,8 @@ a.cn-kpi-card--board * {
10735
10996
  each override below therefore carries one more class than the apexcharts rule
10736
10997
  it replaces, and holds even without the scope attribute this block compiles
10737
10998
  with. */
10738
- .cn-chart-widget[data-v-1c17a450] .apexcharts-tooltip.apexcharts-theme-light,
10739
- .cn-chart-widget[data-v-1c17a450] .apexcharts-tooltip.apexcharts-theme-dark {
10999
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-tooltip.apexcharts-theme-light,
11000
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-tooltip.apexcharts-theme-dark {
10740
11001
  background: var(--color-main-background);
10741
11002
  border: 1px solid var(--color-border);
10742
11003
  color: var(--color-main-text);
@@ -10745,8 +11006,8 @@ a.cn-kpi-card--board * {
10745
11006
 
10746
11007
  /* The title row is the date/category header ("Aug 26"). Its own background is
10747
11008
  what made it unreadable rather than merely off-theme. */
10748
- .cn-chart-widget[data-v-1c17a450] .apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title,
10749
- .cn-chart-widget[data-v-1c17a450] .apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {
11009
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title,
11010
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {
10750
11011
  background: var(--color-background-hover);
10751
11012
  border-bottom: 1px solid var(--color-border);
10752
11013
  color: var(--color-main-text);
@@ -10755,8 +11016,8 @@ a.cn-kpi-card--board * {
10755
11016
  /* Crosshair axis tooltips. apexcharts puts light hex values on the BASE class
10756
11017
  here and only overrides them for its dark theme, so the base rule has to be
10757
11018
  replaced too — not just the theme variants. */
10758
- .cn-chart-widget[data-v-1c17a450] .apexcharts-xaxistooltip,
10759
- .cn-chart-widget[data-v-1c17a450] .apexcharts-yaxistooltip {
11019
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-xaxistooltip,
11020
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-yaxistooltip {
10760
11021
  background: var(--color-main-background);
10761
11022
  border: 1px solid var(--color-border);
10762
11023
  color: var(--color-main-text);
@@ -10765,55 +11026,55 @@ a.cn-kpi-card--board * {
10765
11026
  /* Their pointer arrows are two stacked triangles: `::before` paints the border
10766
11027
  edge, `::after` the fill. Both need the tokens the box above uses, or the
10767
11028
  arrow keeps the old palette and reads as a stray light wedge. */
10768
- .cn-chart-widget[data-v-1c17a450] .apexcharts-xaxistooltip-bottom::after,
10769
- .cn-chart-widget[data-v-1c17a450] .apexcharts-xaxistooltip-top::after {
11029
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-xaxistooltip-bottom::after,
11030
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-xaxistooltip-top::after {
10770
11031
  border-bottom-color: var(--color-main-background);
10771
11032
  border-top-color: var(--color-main-background);
10772
11033
  }
10773
- .cn-chart-widget[data-v-1c17a450] .apexcharts-xaxistooltip-bottom::before,
10774
- .cn-chart-widget[data-v-1c17a450] .apexcharts-xaxistooltip-top::before {
11034
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-xaxistooltip-bottom::before,
11035
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-xaxistooltip-top::before {
10775
11036
  border-bottom-color: var(--color-border);
10776
11037
  border-top-color: var(--color-border);
10777
11038
  }
10778
- .cn-chart-widget[data-v-1c17a450] .apexcharts-yaxistooltip-left::after,
10779
- .cn-chart-widget[data-v-1c17a450] .apexcharts-yaxistooltip-right::after {
11039
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-yaxistooltip-left::after,
11040
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-yaxistooltip-right::after {
10780
11041
  border-left-color: var(--color-main-background);
10781
11042
  border-right-color: var(--color-main-background);
10782
11043
  }
10783
- .cn-chart-widget[data-v-1c17a450] .apexcharts-yaxistooltip-left::before,
10784
- .cn-chart-widget[data-v-1c17a450] .apexcharts-yaxistooltip-right::before {
11044
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-yaxistooltip-left::before,
11045
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-yaxistooltip-right::before {
10785
11046
  border-left-color: var(--color-border);
10786
11047
  border-right-color: var(--color-border);
10787
11048
  }
10788
11049
 
10789
11050
  /* Toolbar menu — only reachable with `toolbar: true`, but the same defect: a
10790
11051
  hardcoded `#fff` panel under inherited near-white text. */
10791
- .cn-chart-widget[data-v-1c17a450] .apexcharts-menu {
11052
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-menu {
10792
11053
  background: var(--color-main-background);
10793
11054
  border: 1px solid var(--color-border);
10794
11055
  color: var(--color-main-text);
10795
11056
  }
10796
- .cn-chart-widget[data-v-1c17a450] .apexcharts-menu .apexcharts-menu-item:hover {
11057
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-menu .apexcharts-menu-item:hover {
10797
11058
  background: var(--color-background-hover);
10798
11059
  }
10799
11060
 
10800
11061
  /* Toolbar icons: `#6e8192` at rest and `#333` on hover, i.e. the hover state
10801
11062
  vanishes against a dark background. One selector per icon class, matching
10802
11063
  apexcharts' own list, to clear its (0,3,1) hover rules. */
10803
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-menu-icon svg,
10804
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-reset-icon svg,
10805
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-selection-icon svg,
10806
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-zoom-icon svg,
10807
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-zoomin-icon svg,
10808
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-zoomout-icon svg {
11064
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-menu-icon svg,
11065
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-reset-icon svg,
11066
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-selection-icon svg,
11067
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-zoom-icon svg,
11068
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-zoomin-icon svg,
11069
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-zoomout-icon svg {
10809
11070
  fill: var(--color-text-maxcontrast);
10810
11071
  }
10811
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-menu-icon:hover svg,
10812
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-reset-icon:hover svg,
10813
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-selection-icon:hover svg,
10814
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-zoom-icon:hover svg,
10815
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-zoomin-icon:hover svg,
10816
- .cn-chart-widget[data-v-1c17a450] .apexcharts-toolbar .apexcharts-zoomout-icon:hover svg {
11072
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-menu-icon:hover svg,
11073
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-reset-icon:hover svg,
11074
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-selection-icon:hover svg,
11075
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-zoom-icon:hover svg,
11076
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-zoomin-icon:hover svg,
11077
+ .cn-chart-widget[data-v-784af9ea] .apexcharts-toolbar .apexcharts-zoomout-icon:hover svg {
10817
11078
  fill: var(--color-main-text);
10818
11079
  }
10819
11080
 
@@ -12409,57 +12670,57 @@ svg.leaflet-image-layer.leaflet-interactive path {
12409
12670
  }
12410
12671
 
12411
12672
 
12412
- .cn-cell-renderer__actions[data-v-2d766cc2] {
12673
+ .cn-cell-renderer__actions[data-v-c1ba202c] {
12413
12674
  display: inline-flex;
12414
12675
  flex-wrap: wrap;
12415
12676
  gap: 8px;
12416
12677
  }
12417
- .cn-cell-renderer__icon-label[data-v-2d766cc2] {
12678
+ .cn-cell-renderer__icon-label[data-v-c1ba202c] {
12418
12679
  display: inline-flex;
12419
12680
  align-items: center;
12420
12681
  gap: 6px;
12421
12682
  font-weight: 600;
12422
12683
  }
12423
- .cn-cell-renderer__switch[data-v-2d766cc2] {
12684
+ .cn-cell-renderer__switch[data-v-c1ba202c] {
12424
12685
  display: inline-flex;
12425
12686
  }
12426
- .cn-cell-renderer__mono[data-v-2d766cc2] {
12687
+ .cn-cell-renderer__mono[data-v-c1ba202c] {
12427
12688
  font-family: monospace;
12428
12689
  font-size: 13px;
12429
12690
  color: var(--color-text-maxcontrast);
12430
12691
  }
12431
- .cn-cell-renderer--uuid[data-v-2d766cc2] {
12692
+ .cn-cell-renderer--uuid[data-v-c1ba202c] {
12432
12693
  font-family: monospace;
12433
12694
  font-size: 13px;
12434
12695
  color: var(--color-text-maxcontrast);
12435
12696
  }
12436
- .cn-cell-renderer--number[data-v-2d766cc2] {
12697
+ .cn-cell-renderer--number[data-v-c1ba202c] {
12437
12698
  font-variant-numeric: tabular-nums;
12438
12699
  }
12439
- .cn-cell-renderer--date[data-v-2d766cc2] {
12700
+ .cn-cell-renderer--date[data-v-c1ba202c] {
12440
12701
  white-space: nowrap;
12441
12702
  }
12442
- .cn-cell-renderer__dash[data-v-2d766cc2] {
12703
+ .cn-cell-renderer__dash[data-v-c1ba202c] {
12443
12704
  color: var(--color-text-maxcontrast);
12444
12705
  }
12445
- .cn-cell-renderer__avatar[data-v-2d766cc2] {
12706
+ .cn-cell-renderer__avatar[data-v-c1ba202c] {
12446
12707
  display: inline-flex;
12447
12708
  align-items: center;
12448
12709
  gap: 8px;
12449
12710
  max-width: 100%;
12450
12711
  vertical-align: middle;
12451
12712
  }
12452
- .cn-cell-renderer__avatar-picture[data-v-2d766cc2] {
12713
+ .cn-cell-renderer__avatar-picture[data-v-c1ba202c] {
12453
12714
  display: inline-flex;
12454
12715
  flex: none;
12455
12716
  }
12456
- .cn-cell-renderer__date-block[data-v-2d766cc2] {
12717
+ .cn-cell-renderer__date-block[data-v-c1ba202c] {
12457
12718
  display: inline-flex;
12458
12719
  align-items: center;
12459
12720
  gap: 12px;
12460
12721
  white-space: nowrap;
12461
12722
  }
12462
- .cn-cell-renderer__date-tile[data-v-2d766cc2] {
12723
+ .cn-cell-renderer__date-tile[data-v-c1ba202c] {
12463
12724
  display: flex;
12464
12725
  flex: 0 0 46px;
12465
12726
  flex-direction: column;
@@ -12469,26 +12730,26 @@ svg.leaflet-image-layer.leaflet-interactive path {
12469
12730
  border-radius: 8px;
12470
12731
  background-color: var(--color-background-dark);
12471
12732
  }
12472
- .cn-cell-renderer__date-day[data-v-2d766cc2] {
12733
+ .cn-cell-renderer__date-day[data-v-c1ba202c] {
12473
12734
  font-size: 17px;
12474
12735
  line-height: 1;
12475
12736
  }
12476
- .cn-cell-renderer__date-month[data-v-2d766cc2],
12477
- .cn-cell-renderer__date-time[data-v-2d766cc2] {
12737
+ .cn-cell-renderer__date-month[data-v-c1ba202c],
12738
+ .cn-cell-renderer__date-time[data-v-c1ba202c] {
12478
12739
  color: var(--color-text-maxcontrast);
12479
12740
  }
12480
- .cn-cell-renderer__date-month[data-v-2d766cc2] {
12741
+ .cn-cell-renderer__date-month[data-v-c1ba202c] {
12481
12742
  font-size: 12px;
12482
12743
  }
12483
- .cn-cell-renderer__date-lines[data-v-2d766cc2] {
12744
+ .cn-cell-renderer__date-lines[data-v-c1ba202c] {
12484
12745
  display: flex;
12485
12746
  flex-direction: column;
12486
12747
  gap: 2px;
12487
12748
  }
12488
- .cn-cell-renderer__date-weekday[data-v-2d766cc2] {
12749
+ .cn-cell-renderer__date-weekday[data-v-c1ba202c] {
12489
12750
  font-weight: 600;
12490
12751
  }
12491
- .cn-cell-renderer__avatar-initials[data-v-2d766cc2] {
12752
+ .cn-cell-renderer__avatar-initials[data-v-c1ba202c] {
12492
12753
  display: inline-flex;
12493
12754
  flex: none;
12494
12755
  align-items: center;
@@ -12500,12 +12761,12 @@ svg.leaflet-image-layer.leaflet-interactive path {
12500
12761
  font-weight: 700;
12501
12762
  line-height: 1;
12502
12763
  }
12503
- .cn-cell-renderer__avatar-text[data-v-2d766cc2] {
12764
+ .cn-cell-renderer__avatar-text[data-v-c1ba202c] {
12504
12765
  display: flex;
12505
12766
  flex-direction: column;
12506
12767
  min-width: 0;
12507
12768
  }
12508
- .cn-cell-renderer__avatar-name[data-v-2d766cc2] {
12769
+ .cn-cell-renderer__avatar-name[data-v-c1ba202c] {
12509
12770
  min-width: 0;
12510
12771
  overflow: hidden;
12511
12772
  text-overflow: ellipsis;
@@ -12515,7 +12776,7 @@ svg.leaflet-image-layer.leaflet-interactive path {
12515
12776
  font: inherit;
12516
12777
  color: inherit;
12517
12778
  }
12518
- .cn-cell-renderer__avatar-secondary[data-v-2d766cc2] {
12779
+ .cn-cell-renderer__avatar-secondary[data-v-c1ba202c] {
12519
12780
  min-width: 0;
12520
12781
  overflow: hidden;
12521
12782
  color: var(--color-text-maxcontrast);
@@ -12529,34 +12790,34 @@ svg.leaflet-image-layer.leaflet-interactive path {
12529
12790
 
12530
12791
  /* A date that matched a rule is also set in a heavier weight, so the signal
12531
12792
  does not rest on colour alone. */
12532
- .cn-cell-renderer__date--success[data-v-2d766cc2],
12533
- .cn-cell-renderer__date--warning[data-v-2d766cc2],
12534
- .cn-cell-renderer__date--error[data-v-2d766cc2],
12535
- .cn-cell-renderer__age--success[data-v-2d766cc2],
12536
- .cn-cell-renderer__age--warning[data-v-2d766cc2],
12537
- .cn-cell-renderer__age--error[data-v-2d766cc2] {
12793
+ .cn-cell-renderer__date--success[data-v-c1ba202c],
12794
+ .cn-cell-renderer__date--warning[data-v-c1ba202c],
12795
+ .cn-cell-renderer__date--error[data-v-c1ba202c],
12796
+ .cn-cell-renderer__age--success[data-v-c1ba202c],
12797
+ .cn-cell-renderer__age--warning[data-v-c1ba202c],
12798
+ .cn-cell-renderer__age--error[data-v-c1ba202c] {
12538
12799
  font-weight: 600;
12539
12800
  }
12540
- .cn-cell-renderer__age[data-v-2d766cc2] {
12801
+ .cn-cell-renderer__age[data-v-c1ba202c] {
12541
12802
  white-space: nowrap;
12542
12803
  }
12543
12804
 
12544
12805
  /* The progress cell (abstract-progress-cell): a 56 x 8 bar, the percentage
12545
12806
  8px beside it in the bar's tone, and an optional age badge after them, as
12546
12807
  PqLeads' Winkans column. The value is bold, so the tone is not the only signal. */
12547
- .cn-cell-renderer__progress[data-v-2d766cc2] {
12808
+ .cn-cell-renderer__progress[data-v-c1ba202c] {
12548
12809
  display: inline-flex;
12549
12810
  flex-wrap: wrap;
12550
12811
  align-items: center;
12551
12812
  gap: 4px 8px;
12552
12813
  }
12553
- .cn-cell-renderer__progress-line[data-v-2d766cc2] {
12814
+ .cn-cell-renderer__progress-line[data-v-c1ba202c] {
12554
12815
  display: inline-flex;
12555
12816
  align-items: center;
12556
12817
  gap: 8px;
12557
12818
  white-space: nowrap;
12558
12819
  }
12559
- .cn-cell-renderer__progress-bar[data-v-2d766cc2] {
12820
+ .cn-cell-renderer__progress-bar[data-v-c1ba202c] {
12560
12821
  display: inline-block;
12561
12822
  width: 56px;
12562
12823
  height: 8px;
@@ -12564,33 +12825,33 @@ svg.leaflet-image-layer.leaflet-interactive path {
12564
12825
  background: var(--color-background-dark);
12565
12826
  overflow: hidden;
12566
12827
  }
12567
- .cn-cell-renderer__progress-fill[data-v-2d766cc2] {
12828
+ .cn-cell-renderer__progress-fill[data-v-c1ba202c] {
12568
12829
  display: block;
12569
12830
  height: 100%;
12570
12831
  }
12571
- .cn-cell-renderer__progress-fill--success[data-v-2d766cc2] {
12832
+ .cn-cell-renderer__progress-fill--success[data-v-c1ba202c] {
12572
12833
  background: var(--color-element-success, var(--color-success));
12573
12834
  }
12574
- .cn-cell-renderer__progress-fill--warning[data-v-2d766cc2] {
12835
+ .cn-cell-renderer__progress-fill--warning[data-v-c1ba202c] {
12575
12836
  background: var(--color-element-warning, var(--color-warning));
12576
12837
  }
12577
- .cn-cell-renderer__progress-fill--error[data-v-2d766cc2] {
12838
+ .cn-cell-renderer__progress-fill--error[data-v-c1ba202c] {
12578
12839
  background: var(--color-element-error, var(--color-error));
12579
12840
  }
12580
- .cn-cell-renderer__progress-value[data-v-2d766cc2] {
12841
+ .cn-cell-renderer__progress-value[data-v-c1ba202c] {
12581
12842
  font-size: 14px;
12582
12843
  font-weight: 700;
12583
12844
  }
12584
- .cn-cell-renderer__progress-value--success[data-v-2d766cc2] {
12845
+ .cn-cell-renderer__progress-value--success[data-v-c1ba202c] {
12585
12846
  color: var(--color-text-success, var(--color-success-text));
12586
12847
  }
12587
- .cn-cell-renderer__progress-value--warning[data-v-2d766cc2] {
12848
+ .cn-cell-renderer__progress-value--warning[data-v-c1ba202c] {
12588
12849
  color: var(--color-text-warning, var(--color-warning-text));
12589
12850
  }
12590
- .cn-cell-renderer__progress-value--error[data-v-2d766cc2] {
12851
+ .cn-cell-renderer__progress-value--error[data-v-c1ba202c] {
12591
12852
  color: var(--color-text-error, var(--color-error-text));
12592
12853
  }
12593
- .cn-cell-renderer__progress-badge[data-v-2d766cc2] {
12854
+ .cn-cell-renderer__progress-badge[data-v-c1ba202c] {
12594
12855
  display: inline-block;
12595
12856
  padding: 3px 10px;
12596
12857
  border-radius: 12px;
@@ -12598,52 +12859,52 @@ svg.leaflet-image-layer.leaflet-interactive path {
12598
12859
  font-weight: 600;
12599
12860
  white-space: nowrap;
12600
12861
  }
12601
- .cn-cell-renderer__progress-badge--error[data-v-2d766cc2] {
12862
+ .cn-cell-renderer__progress-badge--error[data-v-c1ba202c] {
12602
12863
  color: var(--color-text-error, var(--color-error-text));
12603
12864
  background: var(--color-error-hover, var(--color-background-dark));
12604
12865
  background: color-mix(in srgb, var(--color-error) 12%, transparent);
12605
12866
  }
12606
- .cn-cell-renderer__progress-badge--warning[data-v-2d766cc2] {
12867
+ .cn-cell-renderer__progress-badge--warning[data-v-c1ba202c] {
12607
12868
  color: var(--color-text-warning, var(--color-warning-text));
12608
12869
  background: color-mix(in srgb, var(--color-warning) 14%, transparent);
12609
12870
  }
12610
- .cn-cell-renderer__progress-badge--success[data-v-2d766cc2] {
12871
+ .cn-cell-renderer__progress-badge--success[data-v-c1ba202c] {
12611
12872
  color: var(--color-text-success, var(--color-success-text));
12612
12873
  background: color-mix(in srgb, var(--color-success) 12%, transparent);
12613
12874
  }
12614
- .cn-cell-renderer__age--success[data-v-2d766cc2] {
12875
+ .cn-cell-renderer__age--success[data-v-c1ba202c] {
12615
12876
  color: var(--color-text-success, var(--color-success-text));
12616
12877
  }
12617
- .cn-cell-renderer__age--warning[data-v-2d766cc2] {
12878
+ .cn-cell-renderer__age--warning[data-v-c1ba202c] {
12618
12879
  color: var(--color-text-warning, var(--color-warning-text));
12619
12880
  }
12620
- .cn-cell-renderer__age--error[data-v-2d766cc2] {
12881
+ .cn-cell-renderer__age--error[data-v-c1ba202c] {
12621
12882
  color: var(--color-text-error, var(--color-error-text));
12622
12883
  }
12623
- .cn-cell-renderer__due--empty[data-v-2d766cc2] {
12884
+ .cn-cell-renderer__due--empty[data-v-c1ba202c] {
12624
12885
  color: var(--color-text-maxcontrast);
12625
12886
  }
12626
- .cn-cell-renderer__date--success[data-v-2d766cc2] {
12887
+ .cn-cell-renderer__date--success[data-v-c1ba202c] {
12627
12888
  color: var(--color-text-success, var(--color-success-text));
12628
12889
  }
12629
- .cn-cell-renderer__date--warning[data-v-2d766cc2] {
12890
+ .cn-cell-renderer__date--warning[data-v-c1ba202c] {
12630
12891
  color: var(--color-text-warning, var(--color-warning-text));
12631
12892
  }
12632
- .cn-cell-renderer__date--error[data-v-2d766cc2] {
12893
+ .cn-cell-renderer__date--error[data-v-c1ba202c] {
12633
12894
  color: var(--color-text-error, var(--color-error-text));
12634
12895
  }
12635
12896
 
12636
12897
  /* The text variant, not the fill: from Nextcloud 32 `--color-success` is a
12637
12898
  background colour and too pale for a 16px glyph on a light theme. */
12638
- .cn-cell-renderer__icon--success[data-v-2d766cc2] {
12899
+ .cn-cell-renderer__icon--success[data-v-c1ba202c] {
12639
12900
  color: var(--color-text-success, var(--color-success-text, var(--color-success)));
12640
12901
  }
12641
- .cn-cell-renderer__swatch-wrap[data-v-2d766cc2] {
12902
+ .cn-cell-renderer__swatch-wrap[data-v-c1ba202c] {
12642
12903
  display: inline-flex;
12643
12904
  align-items: center;
12644
12905
  gap: 8px;
12645
12906
  }
12646
- .cn-cell-renderer__swatch-dot[data-v-2d766cc2] {
12907
+ .cn-cell-renderer__swatch-dot[data-v-c1ba202c] {
12647
12908
  display: inline-block;
12648
12909
  width: 12px;
12649
12910
  height: 12px;
@@ -13998,29 +14259,37 @@ svg.leaflet-image-layer.leaflet-interactive path {
13998
14259
  }
13999
14260
 
14000
14261
 
14001
- .cn-search-select[data-v-6cd354af] {
14262
+ .cn-search-select[data-v-aaa45660] {
14002
14263
  position: relative;
14003
14264
  }
14004
14265
 
14266
+ /* The field takes the row: NcSelect is an inline block of at least 260px,
14267
+ which left the magnifier, placed at the row's end, outside the field
14268
+ (DqOverdragen "Nieuw team"). */
14269
+ .cn-search-select[data-v-aaa45660] .v-select {
14270
+ width: 100%;
14271
+ }
14272
+
14005
14273
  /* The magnifier sits where the chevron was: in the field, at its end. */
14006
- .cn-search-select__magnifier[data-v-6cd354af] {
14274
+ .cn-search-select__magnifier[data-v-aaa45660] {
14007
14275
  position: absolute;
14008
14276
  inset-inline-end: 12px;
14009
14277
  bottom: 0;
14010
14278
  height: var(--default-clickable-area, 34px);
14011
14279
  display: flex;
14012
14280
  align-items: center;
14281
+ z-index: 1;
14013
14282
  color: var(--color-text-maxcontrast);
14014
14283
  pointer-events: none;
14015
14284
  }
14016
- .cn-search-select[data-v-6cd354af] .vs__open-indicator,
14017
- .cn-search-select[data-v-6cd354af] .vs__open-indicator-button {
14285
+ .cn-search-select[data-v-aaa45660] .vs__open-indicator,
14286
+ .cn-search-select[data-v-aaa45660] .vs__open-indicator-button {
14018
14287
  display: none;
14019
14288
  }
14020
- .cn-search-select[data-v-6cd354af] .vs__actions {
14289
+ .cn-search-select[data-v-aaa45660] .vs__actions {
14021
14290
  padding-inline-end: 36px;
14022
14291
  }
14023
- .cn-search-select__row[data-v-6cd354af] {
14292
+ .cn-search-select__row[data-v-aaa45660] {
14024
14293
  display: flex;
14025
14294
  align-items: center;
14026
14295
  gap: 10px;
@@ -14028,7 +14297,7 @@ svg.leaflet-image-layer.leaflet-interactive path {
14028
14297
  min-width: 0;
14029
14298
  padding: 4px 0;
14030
14299
  }
14031
- .cn-search-select__lead[data-v-6cd354af] {
14300
+ .cn-search-select__lead[data-v-aaa45660] {
14032
14301
  flex: 0 0 32px;
14033
14302
  width: 32px;
14034
14303
  height: 32px;
@@ -14041,22 +14310,22 @@ svg.leaflet-image-layer.leaflet-interactive path {
14041
14310
  font-size: 13px;
14042
14311
  font-weight: 600;
14043
14312
  }
14044
- .cn-search-select__text[data-v-6cd354af] {
14313
+ .cn-search-select__text[data-v-aaa45660] {
14045
14314
  display: flex;
14046
14315
  flex-direction: column;
14047
14316
  flex: 1 1 auto;
14048
14317
  min-width: 0;
14049
14318
  }
14050
- .cn-search-select__name[data-v-6cd354af] {
14319
+ .cn-search-select__name[data-v-aaa45660] {
14051
14320
  font-weight: 600;
14052
14321
  overflow-wrap: anywhere;
14053
14322
  }
14054
- .cn-search-select__secondary[data-v-6cd354af] {
14323
+ .cn-search-select__secondary[data-v-aaa45660] {
14055
14324
  font-size: 13px;
14056
14325
  color: var(--color-text-maxcontrast);
14057
14326
  overflow-wrap: anywhere;
14058
14327
  }
14059
- .cn-search-select__check[data-v-6cd354af] {
14328
+ .cn-search-select__check[data-v-aaa45660] {
14060
14329
  flex: 0 0 auto;
14061
14330
  color: var(--color-primary-element);
14062
14331
  }
@@ -22784,7 +23053,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
22784
23053
 
22785
23054
 
22786
23055
  /* A select option breaks between words only, never inside one. */
22787
- .cn-form-dialog__option-swatch[data-v-699550cc] {
23056
+ .cn-form-dialog__option-swatch[data-v-5b0fdc60] {
22788
23057
  display: inline-block;
22789
23058
  width: 12px;
22790
23059
  height: 12px;
@@ -22793,10 +23062,10 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
22793
23062
  vertical-align: middle;
22794
23063
  box-shadow: inset 0 0 0 1px var(--color-border);
22795
23064
  }
22796
- .cn-form-dialog__option-group[data-v-699550cc] {
23065
+ .cn-form-dialog__option-group[data-v-5b0fdc60] {
22797
23066
  color: var(--color-text-maxcontrast);
22798
23067
  }
22799
- .cn-form-dialog__warning[data-v-699550cc] {
23068
+ .cn-form-dialog__warning[data-v-5b0fdc60] {
22800
23069
  grid-column: 1 / -1;
22801
23070
  margin: 4px 0 0;
22802
23071
  padding: 6px 10px;
@@ -22804,22 +23073,22 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
22804
23073
  background: var(--color-background-hover);
22805
23074
  color: var(--color-main-text);
22806
23075
  }
22807
- .cn-form-dialog__section-toggle[data-v-699550cc] {
23076
+ .cn-form-dialog__section-toggle[data-v-5b0fdc60] {
22808
23077
  all: unset;
22809
23078
  cursor: pointer;
22810
23079
  font: inherit;
22811
23080
  }
22812
- .cn-form-dialog__section-toggle[data-v-699550cc]::after {
23081
+ .cn-form-dialog__section-toggle[data-v-5b0fdc60]::after {
22813
23082
  content: ' ▾';
22814
23083
  }
22815
- .cn-form-dialog__section-toggle[aria-expanded='false'][data-v-699550cc]::after {
23084
+ .cn-form-dialog__section-toggle[aria-expanded='false'][data-v-5b0fdc60]::after {
22816
23085
  content: ' ▸';
22817
23086
  }
22818
- .cn-form-dialog__section-toggle[data-v-699550cc]:focus-visible {
23087
+ .cn-form-dialog__section-toggle[data-v-5b0fdc60]:focus-visible {
22819
23088
  outline: 2px solid var(--color-primary-element);
22820
23089
  outline-offset: 2px;
22821
23090
  }
22822
- .cn-form-dialog__option[data-v-699550cc] {
23091
+ .cn-form-dialog__option[data-v-5b0fdc60] {
22823
23092
  display: block;
22824
23093
  min-width: 0;
22825
23094
  white-space: normal;
@@ -22827,7 +23096,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
22827
23096
  word-break: normal;
22828
23097
  hyphens: manual;
22829
23098
  }
22830
- .cn-form-dialog__draft-actions[data-v-699550cc] {
23099
+ .cn-form-dialog__draft-actions[data-v-5b0fdc60] {
22831
23100
  display: flex;
22832
23101
  gap: 8px;
22833
23102
  margin-top: 8px;
@@ -22835,22 +23104,22 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
22835
23104
 
22836
23105
  /* The state is announced in WORDS, and the colour only repeats them. A
22837
23106
  reader who cannot see it still hears "Draft saved" (WCAG 2.2 SC 1.4.1). */
22838
- .cn-form-dialog__draft-state[data-v-699550cc] {
23107
+ .cn-form-dialog__draft-state[data-v-5b0fdc60] {
22839
23108
  align-self: center;
22840
23109
  color: var(--color-text-maxcontrast);
22841
23110
  font-size: 0.9em;
22842
23111
  margin-inline-end: auto;
22843
23112
  }
22844
- .cn-form-dialog__switch-wrapper[data-v-699550cc] {
23113
+ .cn-form-dialog__switch-wrapper[data-v-5b0fdc60] {
22845
23114
  display: flex;
22846
23115
  flex-direction: column;
22847
23116
  }
22848
- .cn-form-dialog__form[data-v-699550cc] {
23117
+ .cn-form-dialog__form[data-v-5b0fdc60] {
22849
23118
  display: flex;
22850
23119
  flex-direction: column;
22851
23120
  gap: 4px;
22852
23121
  }
22853
- .cn-form-dialog__field[data-v-699550cc] {
23122
+ .cn-form-dialog__field[data-v-5b0fdc60] {
22854
23123
  margin-bottom: 8px;
22855
23124
  }
22856
23125
 
@@ -22862,7 +23131,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
22862
23131
  from pushing its column past its share: a grid item's default `auto`
22863
23132
  minimum is its content, so without it one long option label widens the
22864
23133
  whole column and the two stop being equal. */
22865
- .cn-form-dialog__section[data-v-699550cc] {
23134
+ .cn-form-dialog__section[data-v-5b0fdc60] {
22866
23135
  margin: 12px 0 0;
22867
23136
  padding-top: 12px;
22868
23137
  border-top: 1px solid var(--color-border);
@@ -22871,44 +23140,44 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
22871
23140
  }
22872
23141
 
22873
23142
  /* The first heading opens the form: no rule above it. */
22874
- .cn-form-dialog__form .cn-form-dialog__section[data-v-699550cc]:first-of-type {
23143
+ .cn-form-dialog__form .cn-form-dialog__section[data-v-5b0fdc60]:first-of-type {
22875
23144
  margin-top: 0;
22876
23145
  padding-top: 0;
22877
23146
  border-top: 0;
22878
23147
  }
22879
- .cn-form-dialog__form--two-column[data-v-699550cc] {
23148
+ .cn-form-dialog__form--two-column[data-v-5b0fdc60] {
22880
23149
  display: grid;
22881
23150
  grid-template-columns: 1fr 1fr;
22882
23151
  column-gap: 16px;
22883
23152
  align-items: start;
22884
23153
  }
22885
- .cn-form-dialog__form--two-column[data-v-699550cc] > * {
23154
+ .cn-form-dialog__form--two-column[data-v-5b0fdc60] > * {
22886
23155
  min-width: 0;
22887
23156
  }
22888
23157
 
22889
23158
  /* Anything that is not a field (the form-level error note, the slots above
22890
23159
  and below the fields) spans the full width, so a note card never sits in
22891
23160
  a half-width column beside an input. */
22892
- .cn-form-dialog__form--two-column[data-v-699550cc] > :not(.cn-form-dialog__field),
22893
- .cn-form-dialog__form--two-column > .cn-form-dialog__field--wide[data-v-699550cc] {
23161
+ .cn-form-dialog__form--two-column[data-v-5b0fdc60] > :not(.cn-form-dialog__field),
23162
+ .cn-form-dialog__form--two-column > .cn-form-dialog__field--wide[data-v-5b0fdc60] {
22894
23163
  grid-column: 1 / -1;
22895
23164
  }
22896
23165
 
22897
23166
  /* A narrow viewport gets the single column back. Two columns of roughly
22898
23167
  150px each are worse than one readable one. */
22899
23168
  @media (max-width: 700px) {
22900
- .cn-form-dialog__form--two-column[data-v-699550cc] {
23169
+ .cn-form-dialog__form--two-column[data-v-5b0fdc60] {
22901
23170
  display: block;
22902
23171
  }
22903
23172
  }
22904
- .cn-form-dialog__textarea-wrapper[data-v-699550cc],
22905
- .cn-form-dialog__select-wrapper[data-v-699550cc],
22906
- .cn-form-dialog__json-wrapper[data-v-699550cc] {
23173
+ .cn-form-dialog__textarea-wrapper[data-v-5b0fdc60],
23174
+ .cn-form-dialog__select-wrapper[data-v-5b0fdc60],
23175
+ .cn-form-dialog__json-wrapper[data-v-5b0fdc60] {
22907
23176
  display: flex;
22908
23177
  flex-direction: column;
22909
23178
  gap: 4px;
22910
23179
  }
22911
- .cn-form-dialog__label[data-v-699550cc] {
23180
+ .cn-form-dialog__label[data-v-5b0fdc60] {
22912
23181
  font-weight: 600;
22913
23182
  font-size: 0.9em;
22914
23183
  color: var(--color-main-text);
@@ -22916,10 +23185,10 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
22916
23185
 
22917
23186
  /* Cross-app semantic reference (ADR-048) whose provider isn't installed —
22918
23187
  rendered disabled; the wrapper carries the mouse-over tooltip. */
22919
- .cn-form-dialog__semantic-unresolved[data-v-699550cc] {
23188
+ .cn-form-dialog__semantic-unresolved[data-v-5b0fdc60] {
22920
23189
  cursor: not-allowed;
22921
23190
  }
22922
- .cn-form-dialog__textarea[data-v-699550cc] {
23191
+ .cn-form-dialog__textarea[data-v-5b0fdc60] {
22923
23192
  width: 100%;
22924
23193
  min-height: 80px;
22925
23194
  padding: 8px;
@@ -22931,22 +23200,22 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
22931
23200
  font-size: inherit;
22932
23201
  resize: vertical;
22933
23202
  }
22934
- .cn-form-dialog__textarea[data-v-699550cc]:focus {
23203
+ .cn-form-dialog__textarea[data-v-5b0fdc60]:focus {
22935
23204
  border-color: var(--color-primary-element);
22936
23205
  outline: none;
22937
23206
  }
22938
- .cn-form-dialog__textarea[data-v-699550cc]:disabled {
23207
+ .cn-form-dialog__textarea[data-v-5b0fdc60]:disabled {
22939
23208
  opacity: 0.5;
22940
23209
  cursor: not-allowed;
22941
23210
  }
22942
- .cn-form-dialog__helper[data-v-699550cc] {
23211
+ .cn-form-dialog__helper[data-v-5b0fdc60] {
22943
23212
  font-size: 0.85em;
22944
23213
  color: var(--color-text-maxcontrast);
22945
23214
  }
22946
- .cn-form-dialog__helper--error[data-v-699550cc] {
23215
+ .cn-form-dialog__helper--error[data-v-5b0fdc60] {
22947
23216
  color: var(--color-error);
22948
23217
  }
22949
- .cn-form-dialog__dynamic-loading[data-v-699550cc] {
23218
+ .cn-form-dialog__dynamic-loading[data-v-5b0fdc60] {
22950
23219
  display: flex;
22951
23220
  align-items: center;
22952
23221
  gap: 8px;
@@ -27053,7 +27322,7 @@ to { background-position: -200% 0;
27053
27322
  }
27054
27323
 
27055
27324
 
27056
- .cn-object-card[data-v-b7ffa14e] {
27325
+ .cn-object-card[data-v-56a9e471] {
27057
27326
  display: flex;
27058
27327
  gap: 12px;
27059
27328
  padding: 16px;
@@ -27063,80 +27332,80 @@ to { background-position: -200% 0;
27063
27332
  cursor: pointer;
27064
27333
  transition: box-shadow 0.2s ease, border-color 0.2s ease;
27065
27334
  }
27066
- .cn-object-card[data-v-b7ffa14e]:hover {
27335
+ .cn-object-card[data-v-56a9e471]:hover {
27067
27336
  border-color: var(--color-primary-element);
27068
27337
  box-shadow: 0 2px 8px var(--color-box-shadow);
27069
27338
  }
27070
- .cn-object-card--selected[data-v-b7ffa14e] {
27339
+ .cn-object-card--selected[data-v-56a9e471] {
27071
27340
  border-color: var(--color-primary-element);
27072
27341
  background: var(--color-primary-element-light);
27073
27342
  }
27074
27343
 
27075
27344
  /* The 4px start border takes 3px of padding, so the content stays put. */
27076
- .cn-object-card.cn-object-card--accent[data-v-b7ffa14e] {
27345
+ .cn-object-card.cn-object-card--accent[data-v-56a9e471] {
27077
27346
  border-inline-start-width: 4px;
27078
27347
  padding-inline-start: 13px;
27079
27348
  }
27080
- .cn-object-card.cn-object-card--accent-success[data-v-b7ffa14e] {
27349
+ .cn-object-card.cn-object-card--accent-success[data-v-56a9e471] {
27081
27350
  border-inline-start-color: var(--color-element-success);
27082
27351
  }
27083
- .cn-object-card.cn-object-card--accent-warning[data-v-b7ffa14e] {
27352
+ .cn-object-card.cn-object-card--accent-warning[data-v-56a9e471] {
27084
27353
  border-inline-start-color: var(--color-element-warning);
27085
27354
  }
27086
- .cn-object-card.cn-object-card--accent-error[data-v-b7ffa14e] {
27355
+ .cn-object-card.cn-object-card--accent-error[data-v-56a9e471] {
27087
27356
  border-inline-start-color: var(--color-element-error);
27088
27357
  }
27089
- .cn-object-card.cn-object-card--accent-info[data-v-b7ffa14e] {
27358
+ .cn-object-card.cn-object-card--accent-info[data-v-56a9e471] {
27090
27359
  border-inline-start-color: var(--color-element-info);
27091
27360
  }
27092
- .cn-object-card.cn-object-card--accent-primary[data-v-b7ffa14e] {
27361
+ .cn-object-card.cn-object-card--accent-primary[data-v-56a9e471] {
27093
27362
  border-inline-start-color: var(--color-primary-element);
27094
27363
  }
27095
- .cn-object-card__accent-icon[data-v-b7ffa14e] {
27364
+ .cn-object-card__accent-icon[data-v-56a9e471] {
27096
27365
  display: inline-flex;
27097
27366
  vertical-align: -2px;
27098
27367
  margin-inline-end: 4px;
27099
27368
  }
27100
- .cn-object-card--accent-success .cn-object-card__accent-icon[data-v-b7ffa14e] {
27369
+ .cn-object-card--accent-success .cn-object-card__accent-icon[data-v-56a9e471] {
27101
27370
  color: var(--color-text-success);
27102
27371
  }
27103
- .cn-object-card--accent-warning .cn-object-card__accent-icon[data-v-b7ffa14e] {
27372
+ .cn-object-card--accent-warning .cn-object-card__accent-icon[data-v-56a9e471] {
27104
27373
  color: var(--color-text-warning);
27105
27374
  }
27106
- .cn-object-card--accent-error .cn-object-card__accent-icon[data-v-b7ffa14e] {
27375
+ .cn-object-card--accent-error .cn-object-card__accent-icon[data-v-56a9e471] {
27107
27376
  color: var(--color-text-error);
27108
27377
  }
27109
- .cn-object-card--accent-info .cn-object-card__accent-icon[data-v-b7ffa14e] {
27378
+ .cn-object-card--accent-info .cn-object-card__accent-icon[data-v-56a9e471] {
27110
27379
  color: var(--color-element-info);
27111
27380
  }
27112
- .cn-object-card--accent-primary .cn-object-card__accent-icon[data-v-b7ffa14e] {
27381
+ .cn-object-card--accent-primary .cn-object-card__accent-icon[data-v-56a9e471] {
27113
27382
  color: var(--color-primary-element);
27114
27383
  }
27115
- .cn-object-card__checkbox[data-v-b7ffa14e] {
27384
+ .cn-object-card__checkbox[data-v-56a9e471] {
27116
27385
  flex-shrink: 0;
27117
27386
  padding-top: 2px;
27118
27387
  }
27119
- .cn-object-card__content[data-v-b7ffa14e] {
27388
+ .cn-object-card__content[data-v-56a9e471] {
27120
27389
  flex: 1;
27121
27390
  min-width: 0;
27122
27391
  }
27123
- .cn-object-card__header[data-v-b7ffa14e] {
27392
+ .cn-object-card__header[data-v-56a9e471] {
27124
27393
  display: flex;
27125
27394
  gap: 12px;
27126
27395
  align-items: flex-start;
27127
27396
  }
27128
- .cn-object-card__image[data-v-b7ffa14e] {
27397
+ .cn-object-card__image[data-v-56a9e471] {
27129
27398
  width: 48px;
27130
27399
  height: 48px;
27131
27400
  border-radius: var(--border-radius);
27132
27401
  object-fit: cover;
27133
27402
  flex-shrink: 0;
27134
27403
  }
27135
- .cn-object-card__title-area[data-v-b7ffa14e] {
27404
+ .cn-object-card__title-area[data-v-56a9e471] {
27136
27405
  flex: 1;
27137
27406
  min-width: 0;
27138
27407
  }
27139
- .cn-object-card__title[data-v-b7ffa14e] {
27408
+ .cn-object-card__title[data-v-56a9e471] {
27140
27409
  margin: 0;
27141
27410
  font-size: 16px;
27142
27411
  font-weight: 600;
@@ -27145,16 +27414,16 @@ to { background-position: -200% 0;
27145
27414
  text-overflow: ellipsis;
27146
27415
  white-space: nowrap;
27147
27416
  }
27148
- .cn-object-card__description[data-v-b7ffa14e] {
27417
+ .cn-object-card__description[data-v-56a9e471] {
27149
27418
  margin: 4px 0 0;
27150
27419
  font-size: 13px;
27151
27420
  color: var(--color-text-maxcontrast);
27152
27421
  line-height: 1.4;
27153
27422
  }
27154
- .cn-object-card__badges[data-v-b7ffa14e] {
27423
+ .cn-object-card__badges[data-v-56a9e471] {
27155
27424
  margin-top: 8px;
27156
27425
  }
27157
- .cn-object-card__metadata[data-v-b7ffa14e] {
27426
+ .cn-object-card__metadata[data-v-56a9e471] {
27158
27427
  display: grid;
27159
27428
  grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
27160
27429
  gap: 8px;
@@ -27162,19 +27431,19 @@ to { background-position: -200% 0;
27162
27431
  padding-top: 12px;
27163
27432
  border-top: 1px solid var(--color-border);
27164
27433
  }
27165
- .cn-object-card__meta-item[data-v-b7ffa14e] {
27434
+ .cn-object-card__meta-item[data-v-56a9e471] {
27166
27435
  display: flex;
27167
27436
  flex-direction: column;
27168
27437
  gap: 2px;
27169
27438
  }
27170
- .cn-object-card__meta-label[data-v-b7ffa14e] {
27439
+ .cn-object-card__meta-label[data-v-56a9e471] {
27171
27440
  font-size: 11px;
27172
27441
  font-weight: 500;
27173
27442
  color: var(--color-text-maxcontrast);
27174
27443
  text-transform: uppercase;
27175
27444
  letter-spacing: 0.3px;
27176
27445
  }
27177
- .cn-object-card__actions[data-v-b7ffa14e] {
27446
+ .cn-object-card__actions[data-v-56a9e471] {
27178
27447
  flex-shrink: 0;
27179
27448
  }
27180
27449
 
@@ -27550,7 +27819,7 @@ button.cn-stepper__step[data-v-776581d4] {
27550
27819
  }
27551
27820
 
27552
27821
 
27553
- .cn-detail-page__catalog-action[data-v-40e8f009] {
27822
+ .cn-detail-page__catalog-action[data-v-5b39e961] {
27554
27823
  align-items: center;
27555
27824
  background: var(--color-primary-element-light);
27556
27825
  border: 0;
@@ -27566,19 +27835,43 @@ button.cn-stepper__step[data-v-776581d4] {
27566
27835
  padding: 0 14px;
27567
27836
  white-space: nowrap;
27568
27837
  }
27569
- .cn-detail-page__catalog-note[data-v-40e8f009] {
27838
+
27839
+ /* A leaf card in a narrow cell keeps its title and count: the title row
27840
+ wraps and the actions move under it instead of squeezing the title out. */
27841
+ .cn-detail-page__leaf-card[data-v-5b39e961] .cn-widget-wrapper__header {
27842
+ flex-wrap: wrap;
27843
+ }
27844
+ .cn-detail-page__leaf-card[data-v-5b39e961] .cn-widget-wrapper__header-left {
27845
+ flex: 1 0 auto;
27846
+ }
27847
+
27848
+ /* The count beside a card title: the grey 20px badge of the tab strip. */
27849
+ .cn-detail-page__catalog-count[data-v-5b39e961] {
27850
+ background-color: var(--color-border);
27851
+ border-radius: 10px;
27852
+ box-sizing: border-box;
27853
+ color: var(--color-main-text);
27854
+ display: inline-block;
27855
+ font-size: 12px;
27856
+ font-weight: 600;
27857
+ line-height: 20px;
27858
+ min-width: 20px;
27859
+ padding: 0 6px;
27860
+ text-align: center;
27861
+ }
27862
+ .cn-detail-page__catalog-note[data-v-5b39e961] {
27570
27863
  color: var(--color-text-maxcontrast);
27571
27864
  font-size: 14px;
27572
27865
  white-space: nowrap;
27573
27866
  }
27574
- .cn-detail-widget-host[data-v-40e8f009],
27575
- .cn-detail-widget-host[data-v-40e8f009] > * {
27867
+ .cn-detail-widget-host[data-v-5b39e961],
27868
+ .cn-detail-widget-host[data-v-5b39e961] > * {
27576
27869
  height: 100%;
27577
27870
  }
27578
27871
 
27579
27872
  /* A bare host is a tab panel's body: it fills the panel and lets the panel
27580
27873
  scroll, rather than growing a second scroll region of its own. */
27581
- .cn-detail-widget-host--bare[data-v-40e8f009] {
27874
+ .cn-detail-widget-host--bare[data-v-5b39e961] {
27582
27875
  min-height: 0;
27583
27876
  }
27584
27877
 
@@ -39027,10 +39320,13 @@ to {
39027
39320
  margin-inline-start: auto;
39028
39321
  padding: 1px 8px;
39029
39322
  border-radius: 10px;
39323
+ --nldesign-color-on-surface: var(--cn-board-text-soft, var(--color-main-text));
39030
39324
  background-color: var(--color-main-background);
39031
- color: var(--color-main-text);
39325
+ color: var(--cn-board-text-soft, var(--color-main-text));
39032
39326
  font-size: 12px;
39033
- font-weight: 400;
39327
+ font-weight: 700;
39328
+ /* 16px tall on its 1px pad (DqWerkbord's column counts). */
39329
+ line-height: 14px;
39034
39330
  }
39035
39331
 
39036
39332
  /* A column at its limit: the count in the error colour; "full" is said in words too. */
@@ -39341,21 +39637,21 @@ to {
39341
39637
  opacity: 0.45;
39342
39638
  }
39343
39639
 
39344
- .cn-board-view__columns[data-v-4b0d3015] {
39640
+ .cn-board-view__columns[data-v-45db9bd1] {
39345
39641
  display: flex;
39346
39642
  gap: 12px;
39347
39643
  overflow-x: auto;
39348
39644
  align-items: flex-start;
39349
39645
  }
39350
39646
 
39351
- .cn-board-view__column[data-v-4b0d3015] {
39647
+ .cn-board-view__column[data-v-45db9bd1] {
39352
39648
  flex: 0 0 260px;
39353
39649
  background-color: var(--color-background-hover);
39354
39650
  border-radius: var(--border-radius-large);
39355
39651
  padding: 8px;
39356
39652
  }
39357
39653
 
39358
- .cn-board-view__column-header[data-v-4b0d3015] {
39654
+ .cn-board-view__column-header[data-v-45db9bd1] {
39359
39655
  display: flex;
39360
39656
  justify-content: space-between;
39361
39657
  gap: 8px;
@@ -39363,13 +39659,13 @@ to {
39363
39659
  margin: 0 0 8px;
39364
39660
  }
39365
39661
 
39366
- .cn-board-view__count[data-v-4b0d3015],
39367
- .cn-board-view__empty[data-v-4b0d3015],
39368
- .cn-board-view__unusable[data-v-4b0d3015] {
39662
+ .cn-board-view__count[data-v-45db9bd1],
39663
+ .cn-board-view__empty[data-v-45db9bd1],
39664
+ .cn-board-view__unusable[data-v-45db9bd1] {
39369
39665
  color: var(--color-text-maxcontrast);
39370
39666
  }
39371
39667
 
39372
- .cn-board-view__card[data-v-4b0d3015] {
39668
+ .cn-board-view__card[data-v-45db9bd1] {
39373
39669
  display: block;
39374
39670
  background-color: var(--color-main-background);
39375
39671
  border: 1px solid var(--color-border);
@@ -39378,29 +39674,29 @@ to {
39378
39674
  margin-bottom: 8px;
39379
39675
  }
39380
39676
 
39381
- .cn-board-view__card-field[data-v-4b0d3015] {
39677
+ .cn-board-view__card-field[data-v-45db9bd1] {
39382
39678
  display: block;
39383
39679
  }
39384
39680
 
39385
39681
  /* A late card: an edge in the error colour, drawn as an inset shadow so the
39386
39682
  card keeps its size and its rounded corners. The label below carries the
39387
39683
  meaning; the edge only helps a sighted reader find it. */
39388
- .cn-board-view__card--overdue[data-v-4b0d3015] {
39684
+ .cn-board-view__card--overdue[data-v-45db9bd1] {
39389
39685
  border-color: var(--color-error);
39390
39686
  box-shadow: inset 3px 0 0 var(--color-error);
39391
39687
  }
39392
39688
 
39393
- .cn-board-view__due[data-v-4b0d3015] {
39689
+ .cn-board-view__due[data-v-45db9bd1] {
39394
39690
  display: block;
39395
39691
  font-size: 0.85em;
39396
39692
  font-weight: 700;
39397
39693
  }
39398
39694
 
39399
- .cn-board-view__due--overdue[data-v-4b0d3015] {
39695
+ .cn-board-view__due--overdue[data-v-45db9bd1] {
39400
39696
  color: var(--color-error-text, var(--color-error));
39401
39697
  }
39402
39698
 
39403
- .cn-board-view__due--soon[data-v-4b0d3015] {
39699
+ .cn-board-view__due--soon[data-v-45db9bd1] {
39404
39700
  color: var(--color-warning-text, var(--color-main-text));
39405
39701
  font-weight: 600;
39406
39702
  }
@@ -39409,7 +39705,7 @@ to {
39409
39705
  * The card's opening control. The cursor and the focus ring live here now,
39410
39706
  * on the thing that actually does something, rather than on the box.
39411
39707
  */
39412
- .cn-board-view__card-open[data-v-4b0d3015] {
39708
+ .cn-board-view__card-open[data-v-45db9bd1] {
39413
39709
  background: none;
39414
39710
  border: none;
39415
39711
  padding: 0;
@@ -39418,12 +39714,12 @@ to {
39418
39714
  font-size: 0.8rem;
39419
39715
  }
39420
39716
 
39421
- .cn-board-view__card-open[data-v-4b0d3015]:focus-visible {
39717
+ .cn-board-view__card-open[data-v-45db9bd1]:focus-visible {
39422
39718
  outline: 2px solid var(--color-primary-element);
39423
39719
  outline-offset: 2px;
39424
39720
  }
39425
39721
 
39426
- .cn-board-view__lane-header[data-v-4b0d3015] {
39722
+ .cn-board-view__lane-header[data-v-45db9bd1] {
39427
39723
  background: none;
39428
39724
  border: none;
39429
39725
  font-weight: bold;
@@ -39432,21 +39728,21 @@ to {
39432
39728
  color: var(--color-main-text);
39433
39729
  }
39434
39730
 
39435
- .cn-board-view__move-label[data-v-4b0d3015] {
39731
+ .cn-board-view__move-label[data-v-45db9bd1] {
39436
39732
  color: var(--color-text-maxcontrast);
39437
39733
  font-size: 0.8rem;
39438
39734
  }
39439
39735
 
39440
- .cn-board-view__refusal[data-v-4b0d3015] {
39736
+ .cn-board-view__refusal[data-v-45db9bd1] {
39441
39737
  color: var(--color-error);
39442
39738
  }
39443
39739
 
39444
- .cn-board-view__count--full[data-v-4b0d3015] {
39740
+ .cn-board-view__count--full[data-v-45db9bd1] {
39445
39741
  color: var(--color-error-text, var(--color-error));
39446
39742
  font-weight: 600;
39447
39743
  }
39448
39744
 
39449
- .cn-card-grid__grid[data-v-1c5a3f43] {
39745
+ .cn-card-grid__grid[data-v-57518930] {
39450
39746
  display: grid;
39451
39747
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
39452
39748
  gap: 16px;
@@ -39458,15 +39754,15 @@ to {
39458
39754
  down with a large blank gap above them. Collapse those empty cells so the
39459
39755
  remaining cards start at the top. A comment-only node (`v-if` false) still
39460
39756
  matches `:empty` per the CSS spec, so this catches the v-if-hidden case. */
39461
- .cn-card-grid__item[data-v-1c5a3f43]:empty {
39757
+ .cn-card-grid__item[data-v-57518930]:empty {
39462
39758
  display: none;
39463
39759
  }
39464
- .cn-card-grid__loading[data-v-1c5a3f43] {
39760
+ .cn-card-grid__loading[data-v-57518930] {
39465
39761
  display: flex;
39466
39762
  justify-content: center;
39467
39763
  padding: 40px;
39468
39764
  }
39469
- .cn-card-grid__empty[data-v-1c5a3f43] {
39765
+ .cn-card-grid__empty[data-v-57518930] {
39470
39766
  padding: 40px 20px;
39471
39767
  text-align: center;
39472
39768
  }
@@ -41817,12 +42113,12 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
41817
42113
  }
41818
42114
 
41819
42115
 
41820
- .cn-action-dialog[data-v-0bb28fd1] {
42116
+ .cn-action-dialog[data-v-5293ec77] {
41821
42117
  display: flex;
41822
42118
  flex-direction: column;
41823
42119
  gap: 16px;
41824
42120
  }
41825
- .cn-action-dialog__summary[data-v-0bb28fd1] {
42121
+ .cn-action-dialog__summary[data-v-5293ec77] {
41826
42122
  display: flex;
41827
42123
  align-items: center;
41828
42124
  gap: 10px;
@@ -41830,13 +42126,13 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
41830
42126
  border: 1px solid var(--color-border);
41831
42127
  border-radius: var(--border-radius-large, 8px);
41832
42128
  }
41833
- .cn-action-dialog__summary-text[data-v-0bb28fd1] {
42129
+ .cn-action-dialog__summary-text[data-v-5293ec77] {
41834
42130
  display: flex;
41835
42131
  flex: 1 1 auto;
41836
42132
  flex-direction: column;
41837
42133
  min-width: 0;
41838
42134
  }
41839
- .cn-action-dialog__badge[data-v-0bb28fd1] {
42135
+ .cn-action-dialog__badge[data-v-5293ec77] {
41840
42136
  padding: 3px 10px;
41841
42137
  border-radius: 12px;
41842
42138
  background: var(--color-background-dark);
@@ -41844,74 +42140,95 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
41844
42140
  font-weight: 600;
41845
42141
  white-space: nowrap;
41846
42142
  }
41847
- .cn-action-dialog__title[data-v-0bb28fd1] {
42143
+ .cn-action-dialog__title[data-v-5293ec77] {
41848
42144
  margin: 0 0 8px;
41849
- font-size: 15px;
41850
- font-weight: 700;
42145
+ font-size: 14px;
42146
+ font-weight: 600;
41851
42147
  }
41852
- .cn-action-dialog__facts[data-v-0bb28fd1] {
42148
+
42149
+ /* Facts in columns of at least 200px, each a label over its value above a
42150
+ hairline (DqArchiveren "Bewaring volgens het zaaktype"). */
42151
+ .cn-action-dialog__facts[data-v-5293ec77] {
41853
42152
  display: grid;
41854
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
41855
- gap: 8px 16px;
42153
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
42154
+ gap: 12px 24px;
41856
42155
  margin: 0;
41857
42156
  }
41858
- .cn-action-dialog__facts dt[data-v-0bb28fd1] {
42157
+ .cn-action-dialog__fact[data-v-5293ec77] {
42158
+ display: flex;
42159
+ flex-direction: column;
42160
+ gap: 3px;
42161
+ padding-bottom: 10px;
42162
+ border-bottom: 1px solid var(--color-border);
42163
+ }
42164
+ .cn-action-dialog__facts dt[data-v-5293ec77] {
41859
42165
  color: var(--color-text-maxcontrast);
41860
42166
  font-size: 13px;
41861
42167
  }
41862
- .cn-action-dialog__facts dd[data-v-0bb28fd1] {
42168
+ .cn-action-dialog__facts dd[data-v-5293ec77] {
41863
42169
  margin: 0;
42170
+ font-size: 15px;
42171
+ font-weight: 500;
41864
42172
  }
41865
- .cn-action-dialog__checks[data-v-0bb28fd1] {
42173
+
42174
+ /* Checklist rows divided by hairlines, the detail at the row's end
42175
+ (DqArchiveren "Klaar om te archiveren"). */
42176
+ .cn-action-dialog__checks[data-v-5293ec77] {
41866
42177
  display: flex;
41867
42178
  flex-direction: column;
41868
- gap: 8px;
41869
42179
  margin: 0;
41870
42180
  padding: 0;
41871
42181
  list-style: none;
41872
42182
  }
41873
- .cn-action-dialog__check[data-v-0bb28fd1] {
42183
+ .cn-action-dialog__check[data-v-5293ec77] {
41874
42184
  display: flex;
41875
42185
  flex-wrap: wrap;
41876
42186
  align-items: center;
41877
- gap: 8px;
42187
+ gap: 2px 12px;
42188
+ padding: 10px 0;
42189
+ border-top: 1px solid var(--color-border);
42190
+ font-size: 15px;
42191
+ }
42192
+ .cn-action-dialog__check-label[data-v-5293ec77] {
42193
+ flex: 1 1 auto;
42194
+ font-weight: 600;
41878
42195
  }
41879
- .cn-action-dialog__check-icon[data-v-0bb28fd1] {
42196
+ .cn-action-dialog__check-icon[data-v-5293ec77] {
41880
42197
  color: var(--color-text-maxcontrast);
41881
42198
  }
41882
- .cn-action-dialog__check-icon--met[data-v-0bb28fd1] {
42199
+ .cn-action-dialog__check-icon--met[data-v-5293ec77] {
41883
42200
  color: var(--color-success-text, var(--color-success));
41884
42201
  }
41885
- .cn-action-dialog__muted[data-v-0bb28fd1] {
42202
+ .cn-action-dialog__muted[data-v-5293ec77] {
41886
42203
  color: var(--color-text-maxcontrast);
41887
42204
  font-size: 14px;
41888
42205
  }
41889
- .cn-action-dialog__field[data-v-0bb28fd1] {
42206
+ .cn-action-dialog__field[data-v-5293ec77] {
41890
42207
  display: flex;
41891
42208
  flex-direction: column;
41892
42209
  gap: 4px;
41893
42210
  }
41894
- .cn-action-dialog__error[data-v-0bb28fd1] {
42211
+ .cn-action-dialog__error[data-v-5293ec77] {
41895
42212
  margin: 0;
41896
42213
  color: var(--color-error-text, var(--color-error));
41897
42214
  }
41898
42215
 
41899
42216
 
41900
- .cn-assign-dialog[data-v-9921b726] {
42217
+ .cn-assign-dialog[data-v-45153be8] {
41901
42218
  display: flex;
41902
42219
  flex-direction: column;
41903
42220
  gap: 18px;
41904
42221
  }
41905
- .cn-assign-dialog__field[data-v-9921b726] {
42222
+ .cn-assign-dialog__field[data-v-45153be8] {
41906
42223
  display: flex;
41907
42224
  flex-direction: column;
41908
42225
  gap: 6px;
41909
42226
  }
41910
- .cn-assign-dialog__hint[data-v-9921b726] {
42227
+ .cn-assign-dialog__hint[data-v-45153be8] {
41911
42228
  font-size: 13px;
41912
42229
  color: var(--color-text-maxcontrast);
41913
42230
  }
41914
- .cn-assign-dialog__toggle[data-v-9921b726] {
42231
+ .cn-assign-dialog__toggle[data-v-45153be8] {
41915
42232
  display: flex;
41916
42233
  flex-direction: column;
41917
42234
  gap: 2px;
@@ -41919,17 +42236,17 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
41919
42236
  border: 1px solid var(--color-border-dark);
41920
42237
  border-radius: var(--border-radius-large, 8px);
41921
42238
  }
41922
- .cn-assign-dialog__toggle--on[data-v-9921b726] {
42239
+ .cn-assign-dialog__toggle--on[data-v-45153be8] {
41923
42240
  border: 2px solid var(--color-primary-element);
41924
42241
  background: var(--color-primary-element-light);
41925
42242
  }
41926
- .cn-assign-dialog__toggle-title[data-v-9921b726] {
42243
+ .cn-assign-dialog__toggle-title[data-v-45153be8] {
41927
42244
  font-weight: 600;
41928
42245
  }
41929
- .cn-assign-dialog__toggle-note[data-v-9921b726] {
42246
+ .cn-assign-dialog__toggle-note[data-v-45153be8] {
41930
42247
  padding-inline-start: 44px;
41931
42248
  }
41932
- .cn-assign-dialog__error[data-v-9921b726] {
42249
+ .cn-assign-dialog__error[data-v-45153be8] {
41933
42250
  margin: 0;
41934
42251
  color: var(--color-error-text, var(--color-error));
41935
42252
  }
@@ -43898,6 +44215,16 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
43898
44215
  }
43899
44216
 
43900
44217
 
44218
+ .cn-party-picker__refusal[data-v-7202e5ff] {
44219
+ margin: 4px 0 0;
44220
+ color: var(--color-error-text, var(--color-error));
44221
+ }
44222
+ .cn-party-picker__unavailable[data-v-7202e5ff] {
44223
+ margin: 4px 0 0;
44224
+ color: var(--color-text-maxcontrast);
44225
+ }
44226
+
44227
+
43901
44228
  .cn-address-search[data-v-5c8ae3f1] {
43902
44229
  width: 100%;
43903
44230
  }
@@ -44434,7 +44761,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
44434
44761
  }
44435
44762
 
44436
44763
 
44437
- .cn-nc-dashboard-list__error[data-v-3c7adfed] {
44764
+ .cn-nc-dashboard-list__error[data-v-0cba0c1a] {
44438
44765
  margin: 0;
44439
44766
  padding: 8px 0;
44440
44767
  color: var(--color-text-maxcontrast);