@conduction/nextcloud-vue 2.56.0-beta.34 → 2.56.0-beta.36

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 (155) hide show
  1. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
  2. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +1 -1
  3. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
  4. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
  5. package/dist/esm/components/CnBodySections/CnBodySections.vue.js +1 -1
  6. package/dist/esm/components/CnBodySections/CnBodySections.vue2.js +22 -1
  7. package/dist/esm/components/CnBodySections/CnBodySections.vue2.js.map +1 -1
  8. package/dist/esm/components/CnBodySections/CnBodySections.vue3.js.map +1 -1
  9. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue.js +1 -1
  10. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js +47 -4
  11. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js.map +1 -1
  12. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js.map +1 -1
  13. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue.js +1 -1
  14. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +239 -3
  15. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
  16. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js +5 -5
  17. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
  18. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  19. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +5 -0
  20. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  21. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  22. package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue.js +1 -1
  23. package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue2.js +1 -1
  24. package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue2.js.map +1 -1
  25. package/dist/esm/components/CnDeltaWidget/CnDeltaWidget.vue3.js.map +1 -1
  26. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +203 -4
  27. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  28. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  29. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +1 -1
  30. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +38 -1
  31. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
  32. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +45 -5
  33. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
  34. package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue.js +1 -1
  35. package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue2.js +1 -1
  36. package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue2.js.map +1 -1
  37. package/dist/esm/components/CnGaugeWidget/CnGaugeWidget.vue3.js.map +1 -1
  38. package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue2.js +29 -6
  39. package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue2.js.map +1 -1
  40. package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue3.js.map +1 -1
  41. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
  42. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +126 -2
  43. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  44. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +24 -2
  45. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  46. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  47. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +37 -2
  48. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  49. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  50. package/dist/esm/components/CnReportsPage/CnReportsPage.vue.js +1 -1
  51. package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js +135 -2
  52. package/dist/esm/components/CnReportsPage/CnReportsPage.vue2.js.map +1 -1
  53. package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js +95 -43
  54. package/dist/esm/components/CnReportsPage/CnReportsPage.vue3.js.map +1 -1
  55. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue.js +1 -1
  56. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +72 -5
  57. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
  58. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js +33 -8
  59. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
  60. package/dist/esm/components/CnStatWidget/CnStatWidget.vue.js +1 -1
  61. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +1 -1
  62. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  63. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  64. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue.js +1 -1
  65. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +17 -2
  66. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
  67. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +1 -1
  68. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
  69. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  70. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +33 -3
  71. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  72. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  73. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue.js +1 -1
  74. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js +16 -0
  75. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js.map +1 -1
  76. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue3.js.map +1 -1
  77. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue.js +1 -1
  78. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js +2 -1
  79. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js.map +1 -1
  80. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js.map +1 -1
  81. package/dist/esm/dialogs/CnTransitionInputDialog.vue.js +1 -1
  82. package/dist/esm/dialogs/CnTransitionInputDialog.vue2.js +68 -6
  83. package/dist/esm/dialogs/CnTransitionInputDialog.vue2.js.map +1 -1
  84. package/dist/esm/dialogs/CnTransitionInputDialog.vue3.js +133 -105
  85. package/dist/esm/dialogs/CnTransitionInputDialog.vue3.js.map +1 -1
  86. package/dist/esm/index.js +1 -0
  87. package/dist/esm/index.js.map +1 -1
  88. package/dist/esm/l10n/en.json.js +16 -1
  89. package/dist/esm/l10n/en.json.js.map +1 -1
  90. package/dist/esm/l10n/nl.json.js +38 -1
  91. package/dist/esm/l10n/nl.json.js.map +1 -1
  92. package/dist/esm/library-style.js +1 -1
  93. package/dist/esm/nextcloud-vue.css +525 -318
  94. package/dist/esm/utils/buildManifest.js +37 -3
  95. package/dist/esm/utils/buildManifest.js.map +1 -1
  96. package/dist/esm/utils/detailWidgetVisibility.js +149 -0
  97. package/dist/esm/utils/detailWidgetVisibility.js.map +1 -0
  98. package/dist/esm/utils/formatMetric.js +39 -3
  99. package/dist/esm/utils/formatMetric.js.map +1 -1
  100. package/dist/esm/utils/gridStack.js +40 -1
  101. package/dist/esm/utils/gridStack.js.map +1 -1
  102. package/dist/esm/utils/humaniseKey.js +41 -0
  103. package/dist/esm/utils/humaniseKey.js.map +1 -0
  104. package/dist/esm/utils/notificationRuleLabel.js +6 -23
  105. package/dist/esm/utils/notificationRuleLabel.js.map +1 -1
  106. package/dist/esm/utils/resolveManifestTokens.js +1 -0
  107. package/dist/esm/utils/resolveManifestTokens.js.map +1 -1
  108. package/dist/esm/utils/sentinelTokens.js +9 -0
  109. package/dist/esm/utils/sentinelTokens.js.map +1 -1
  110. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  111. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  112. package/dist/nextcloud-vue.cjs.js +2250 -708
  113. package/dist/nextcloud-vue.cjs.js.map +2 -2
  114. package/dist/nextcloud-vue.css +525 -318
  115. package/l10n/en.json +16 -1
  116. package/l10n/nl.json +38 -1
  117. package/package.json +1 -1
  118. package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +1 -1
  119. package/src/components/CnBodySections/CnBodySections.vue +22 -1
  120. package/src/components/CnCountdownWidget/CnCountdownWidget.vue +47 -4
  121. package/src/components/CnDashboardGrid/CnDashboardGrid.vue +244 -8
  122. package/src/components/CnDashboardPage/CnDashboardPage.vue +5 -0
  123. package/src/components/CnDeltaWidget/CnDeltaWidget.vue +1 -1
  124. package/src/components/CnDetailPage/CnDetailPage.md +2 -0
  125. package/src/components/CnDetailPage/CnDetailPage.vue +203 -4
  126. package/src/components/CnFieldListWidget/CnFieldListWidget.vue +63 -1
  127. package/src/components/CnGaugeWidget/CnGaugeWidget.vue +1 -1
  128. package/src/components/CnInteractionFormWidget/CnInteractionFormWidget.vue +29 -6
  129. package/src/components/CnObjectDataWidget/CnObjectDataWidget.md +1 -1
  130. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +154 -5
  131. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +37 -2
  132. package/src/components/CnReportsPage/CnReportsPage.vue +179 -1
  133. package/src/components/CnStagesWidget/CnStagesWidget.vue +103 -6
  134. package/src/components/CnStatWidget/CnStatWidget.vue +1 -1
  135. package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +34 -3
  136. package/src/components/CnTabsWidget/CnTabsWidget.vue +33 -3
  137. package/src/components/CnWalkthrough/CnWalkthrough.vue +16 -0
  138. package/src/components/CnWeekStripWidget/CnWeekStripWidget.vue +2 -1
  139. package/src/css/form-field.css +14 -0
  140. package/src/css/form-widget.css +11 -0
  141. package/src/css/kpi-card.css +13 -0
  142. package/src/css/look-board-reports.css +58 -0
  143. package/src/css/look-board.css +31 -0
  144. package/src/dialogs/CnTransitionInputDialog.vue +87 -7
  145. package/src/index.js +2 -0
  146. package/src/schemas/app-manifest-v2.schema.json +23 -2
  147. package/src/utils/buildManifest.js +36 -2
  148. package/src/utils/detailWidgetVisibility.js +145 -0
  149. package/src/utils/formatMetric.js +38 -2
  150. package/src/utils/gridStack.js +39 -0
  151. package/src/utils/humaniseKey.js +38 -0
  152. package/src/utils/notificationRuleLabel.js +5 -23
  153. package/src/utils/resolveManifestTokens.js +1 -0
  154. package/src/utils/sentinelTokens.js +9 -0
  155. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -683,6 +683,18 @@
683
683
  font-weight: 600;
684
684
  }
685
685
 
686
+ /* ---- Dashboard card titles --------------------------------------------- */
687
+ /* A card's title on a dashboard (and on the widgets under a reports page) is
688
+ the board's card h2: 17px weight 700 (boards PqMijnWerk, DcRapportages and
689
+ the app dashboards; `--cn-board-heading-size`, as on a detail page's cards).
690
+ The wrapper's own 14px weight 600 stays for the Nextcloud look, and the
691
+ native-dashboard chrome keeps its 20px. */
692
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-widget-wrapper:not(.cn-widget-wrapper--nc-dashboard) .cn-widget-wrapper__title {
693
+ font-size: var(--cn-board-heading-size, 17px);
694
+ font-weight: 700;
695
+ line-height: 1.3;
696
+ }
697
+
686
698
  /* ---- Record list on a dashboard card (PtDashboard) ---------------------- */
687
699
  /* The dashboard's card body is flush, so the rows carry their own inset: the
688
700
  board's card pads 24px at the sides and each row 14px, a soft hairline
@@ -769,6 +781,25 @@
769
781
  .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__chevron {
770
782
  display: none;
771
783
  }
784
+
785
+ /* ---- Week strip (DqMijnWerk "Termijnen deze week") ---------------------- */
786
+ /* The days wrap inside the card instead of scrolling sideways: a row holds
787
+ as many days of at least 120px as the card fits, and the rest go to the
788
+ next row (dossiq at 1100 wide held 680px of days in a 494px card and
789
+ scrolled; now three days and two). 120px keeps a case title's words whole;
790
+ five 88px days fitted one row but broke "Bezwaar" mid-word. A card wide
791
+ enough for the week draws it as before, one row of equal columns. The
792
+ day's head wraps its "today" badge under the label when the day is
793
+ narrow.
794
+ @spec openspec/changes/board-week-strip-fits/specs/week-strip-board-look/spec.md#requirement-a-board-week-strip-fits-its-card */
795
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__days {
796
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 120px), 1fr));
797
+ min-width: 0;
798
+ }
799
+
800
+ .cn-look-board .cn-week-strip:not(.cn-look-nextcloud *) .cn-week-strip__head {
801
+ flex-wrap: wrap;
802
+ }
772
803
  /*
773
804
  * The board dialog (screens-dialog-parity, canon section 5).
774
805
  *
@@ -1157,6 +1188,20 @@
1157
1188
  .cn-look-board .cn-form-page__footer .cn-form-page__primary {
1158
1189
  margin-inline-start: auto;
1159
1190
  }
1191
+
1192
+ /* A Nextcloud text area or text field with its label inside the field hides
1193
+ its placeholder until the field takes focus, so the label and the
1194
+ placeholder are never drawn over each other. A theme that forces every
1195
+ placeholder visible (thematiq's nldesign system sets
1196
+ `::placeholder { opacity: 1 !important }`) drew both: the dossiq DqTaak
1197
+ notes field read "Een notitie toevoegen" over "Wat heb je gevonden, wie heb
1198
+ je gebeld?". Under the board look the placeholder stays hidden at rest, as
1199
+ Nextcloud intends; a field with its label outside keeps its placeholder.
1200
+ @spec openspec/changes/board-field-label-over-placeholder/specs/form-field-board-look/spec.md#requirement-a-field-label-and-its-placeholder-are-never-drawn-over-each-other */
1201
+ .cn-look-board .textarea__input:not(:focus, .textarea__input--label-outside)::placeholder,
1202
+ .cn-look-board .input-field:not(.input-field--label-outside) .input-field__input:not(:focus)::placeholder {
1203
+ opacity: 0 !important;
1204
+ }
1160
1205
  /*
1161
1206
  * The board (screens-kanban-parity, canon section 8).
1162
1207
  *
@@ -3923,6 +3968,19 @@ a.cn-kpi-card--stacked:focus-visible {
3923
3968
  color: var(--color-main-text);
3924
3969
  }
3925
3970
 
3971
+ /* A board tile whose label wraps grows into its cell instead of clipping its
3972
+ own last line. dossiq's "Afgehandeld deze maand" at 1100 wide held 129px of
3973
+ content in a 114px tile and lost its caption's bottom. The tile still fills
3974
+ a cell it fits (`min-height: 100%`), so every tile that fits keeps its
3975
+ size; one that does not takes the height of its content, and the card-fit
3976
+ cell's `safe center` keeps its top in view.
3977
+ @spec openspec/changes/board-stat-tile-grows/specs/stat-tile-board-look/spec.md#requirement-a-board-stat-tile-shows-all-its-lines */
3978
+ .cn-kpi-card--board.cn-kpi-card--stacked {
3979
+ flex: 0 0 auto;
3980
+ height: auto;
3981
+ min-height: 100%;
3982
+ }
3983
+
3926
3984
  .cn-kpi-card--board.cn-kpi-card--stacked .cn-kpi-card__caption-line,
3927
3985
  .cn-kpi-card--board.cn-kpi-card--stacked .cn-stats-block__count-label {
3928
3986
  font-size: 13px;
@@ -4176,6 +4234,7 @@ a.cn-kpi-card--board * {
4176
4234
  }
4177
4235
 
4178
4236
  .cn-form-widget__textarea {
4237
+ box-sizing: border-box;
4179
4238
  width: 100%;
4180
4239
  min-height: 80px;
4181
4240
  padding: 8px;
@@ -4197,6 +4256,16 @@ a.cn-kpi-card--board * {
4197
4256
  color: var(--color-error);
4198
4257
  margin: 0;
4199
4258
  }
4259
+
4260
+ /* A select takes its field's width, however narrow the card. NcSelect is at
4261
+ least 260px wide on its own, so in pipelinq's 234px "Nieuw contactmoment"
4262
+ card at 1100 wide the channel and client selects ran 40px past the card's
4263
+ edge. The client picker (CnResourceSelect) is an NcSelect too.
4264
+ @spec openspec/changes/interaction-form-fits-and-reads-dutch/specs/interaction-form-widget/spec.md#requirement-the-interaction-form-fits-its-card-and-reads-in-the-readers-language */
4265
+ .cn-form-widget .v-select.select {
4266
+ min-width: 0;
4267
+ width: 100%;
4268
+ }
4200
4269
  /* ========================================
4201
4270
  @conduction/nextcloud-vue — Detail Grid & Layout Utility Styles
4202
4271
  ======================================== */
@@ -7086,6 +7155,64 @@ a.cn-kpi-card--board * {
7086
7155
  .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-dashboard-page {
7087
7156
  padding: 0;
7088
7157
  }
7158
+
7159
+ /* The widget area draws no panel of its own (board DcRapportages: the
7160
+ highlighted report's card sits straight on the page ground). A theme's
7161
+ catch-all for anything named like a widget (nldesign's element overrides:
7162
+ `[class*="widget"]:not([class*="widget__"]):not(#header *)`, an id
7163
+ specificity no class rule outranks) painted `__widgets` white, hence the
7164
+ `!important`. */
7165
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__widgets {
7166
+ background: transparent !important;
7167
+ }
7168
+
7169
+ /* The grid insets every card by its 12px margin (CnDashboardPage's default
7170
+ `gridMargin`); the page padding already places the area, so the card's
7171
+ edges line up with the report cards above it. */
7172
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__widgets .cn-dashboard-grid {
7173
+ width: calc(100% + 24px);
7174
+ margin: -12px;
7175
+ }
7176
+
7177
+ /* A report card is a link, but its title and description read as text, as on
7178
+ the board: no underline, whatever a theme does to links. */
7179
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card,
7180
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__card * {
7181
+ text-decoration: none !important;
7182
+ }
7183
+
7184
+ /* The header buttons beside the title (screens-reports-header-buttons, board
7185
+ DcRapportages "Downloaden"): the board's 40px button with a grey border on
7186
+ the main background, the primary one in the primary fill, as on the index
7187
+ header. `!important` holds them under a theme that restyles every button
7188
+ (nldesign). The buildiq square keeps its own rule. */
7189
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header-buttons > .button-vue--secondary {
7190
+ height: var(--cn-board-control-height) !important;
7191
+ min-height: var(--cn-board-control-height) !important;
7192
+ padding: 0 14px !important;
7193
+ border: 1px solid var(--color-border-dark) !important;
7194
+ border-radius: var(--cn-board-control-radius) !important;
7195
+ background: var(--color-main-background) !important;
7196
+ color: var(--color-main-text) !important;
7197
+ }
7198
+
7199
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header-buttons > .button-vue--secondary:hover {
7200
+ background: var(--color-background-hover) !important;
7201
+ }
7202
+
7203
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header-buttons > .button-vue--primary {
7204
+ height: var(--cn-board-control-height) !important;
7205
+ min-height: var(--cn-board-control-height) !important;
7206
+ padding: 0 16px !important;
7207
+ border: 0 !important;
7208
+ border-radius: var(--cn-board-control-radius) !important;
7209
+ background: var(--color-primary-element) !important;
7210
+ color: var(--color-primary-element-text) !important;
7211
+ }
7212
+
7213
+ .cn-look-board .cn-reports-page:not(.cn-look-nextcloud *) .cn-reports-page__header-buttons > .button-vue--primary:hover {
7214
+ background: var(--color-primary-element-hover) !important;
7215
+ }
7089
7216
  /* CnReferencePreview — a reference that shows what it points at. */
7090
7217
 
7091
7218
  .cn-reference-preview {
@@ -9006,10 +9133,10 @@ a.cn-kpi-card--board * {
9006
9133
  }
9007
9134
 
9008
9135
 
9009
- .cn-countdown-widget__value[data-v-17598258] {
9136
+ .cn-countdown-widget__value[data-v-5546e71c] {
9010
9137
  white-space: nowrap;
9011
9138
  }
9012
- .cn-countdown-widget__sub[data-v-17598258] {
9139
+ .cn-countdown-widget__sub[data-v-5546e71c] {
9013
9140
  color: var(--color-text-maxcontrast);
9014
9141
  font-size: 0.85em;
9015
9142
  }
@@ -12478,41 +12605,41 @@ a.cn-analytics-card__title[data-v-f3ca7b06]:hover {
12478
12605
  }
12479
12606
 
12480
12607
 
12481
- .cn-audit-card__list[data-v-b6134724] {
12608
+ .cn-audit-card__list[data-v-280a5ace] {
12482
12609
  list-style: none;
12483
12610
  margin: 0;
12484
12611
  padding: 0;
12485
12612
  }
12486
- .cn-audit-card__row[data-v-b6134724] {
12613
+ .cn-audit-card__row[data-v-280a5ace] {
12487
12614
  padding: 6px 0;
12488
12615
  border-bottom: 1px solid var(--color-border);
12489
12616
  }
12490
- .cn-audit-card__row[data-v-b6134724]:last-child {
12617
+ .cn-audit-card__row[data-v-280a5ace]:last-child {
12491
12618
  border-bottom: none;
12492
12619
  }
12493
- .cn-audit-card__row-head[data-v-b6134724] {
12620
+ .cn-audit-card__row-head[data-v-280a5ace] {
12494
12621
  display: flex;
12495
12622
  justify-content: space-between;
12496
12623
  gap: 8px;
12497
12624
  }
12498
- .cn-audit-card__action[data-v-b6134724] {
12625
+ .cn-audit-card__action[data-v-280a5ace] {
12499
12626
  color: var(--color-main-text);
12500
12627
  }
12501
- .cn-audit-card__when[data-v-b6134724] {
12628
+ .cn-audit-card__when[data-v-280a5ace] {
12502
12629
  color: var(--color-text-maxcontrast);
12503
12630
  font-size: 0.85em;
12504
12631
  white-space: nowrap;
12505
12632
  }
12506
- .cn-audit-card__row-body[data-v-b6134724] {
12633
+ .cn-audit-card__row-body[data-v-280a5ace] {
12507
12634
  color: var(--color-text-maxcontrast);
12508
12635
  font-size: 0.9em;
12509
12636
  }
12510
- .cn-audit-card__empty[data-v-b6134724] {
12637
+ .cn-audit-card__empty[data-v-280a5ace] {
12511
12638
  color: var(--color-text-maxcontrast);
12512
12639
  text-align: center;
12513
12640
  padding: 12px 0;
12514
12641
  }
12515
- .cn-audit-card__show-all[data-v-b6134724] {
12642
+ .cn-audit-card__show-all[data-v-280a5ace] {
12516
12643
  background: none;
12517
12644
  border: none;
12518
12645
  color: var(--color-primary-element);
@@ -12520,7 +12647,7 @@ a.cn-analytics-card__title[data-v-f3ca7b06]:hover {
12520
12647
  padding: 4px 0;
12521
12648
  font: inherit;
12522
12649
  }
12523
- .cn-audit-card__show-all[data-v-b6134724]:hover {
12650
+ .cn-audit-card__show-all[data-v-280a5ace]:hover {
12524
12651
  text-decoration: underline;
12525
12652
  }
12526
12653
 
@@ -21221,22 +21348,22 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21221
21348
  }
21222
21349
 
21223
21350
 
21224
- .cn-transition-input[data-v-ac83f832] {
21351
+ .cn-transition-input[data-v-457532e4] {
21225
21352
  display: flex;
21226
21353
  flex-direction: column;
21227
21354
  gap: 12px;
21228
21355
  padding: 4px 0;
21229
21356
  }
21230
- .cn-transition-input__error[data-v-ac83f832] {
21357
+ .cn-transition-input__error[data-v-457532e4] {
21231
21358
  margin: 0;
21232
21359
  color: var(--color-error-text, var(--color-error));
21233
21360
  }
21234
- .cn-transition-input__field-error[data-v-ac83f832] {
21361
+ .cn-transition-input__field-error[data-v-457532e4] {
21235
21362
  margin: 4px 0 0;
21236
21363
  font-size: 0.9em;
21237
21364
  color: var(--color-error-text, var(--color-error));
21238
21365
  }
21239
- .cn-transition-input__object[data-v-ac83f832] {
21366
+ .cn-transition-input__object[data-v-457532e4] {
21240
21367
  border: 1px solid var(--color-border);
21241
21368
  border-radius: var(--border-radius);
21242
21369
  padding: 8px 12px;
@@ -21244,11 +21371,11 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21244
21371
  flex-direction: column;
21245
21372
  gap: 8px;
21246
21373
  }
21247
- .cn-transition-input__label[data-v-ac83f832] {
21374
+ .cn-transition-input__label[data-v-457532e4] {
21248
21375
  display: block;
21249
21376
  margin-bottom: 4px;
21250
21377
  }
21251
- .cn-transition-input__field--refused[data-v-ac83f832] {
21378
+ .cn-transition-input__field--refused[data-v-457532e4] {
21252
21379
  border-inline-start: 2px solid var(--color-error);
21253
21380
  padding-inline-start: 8px;
21254
21381
  }
@@ -21590,7 +21717,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21590
21717
  }
21591
21718
 
21592
21719
 
21593
- .cn-stages-widget[data-v-a394760a] {
21720
+ .cn-stages-widget[data-v-3946def5] {
21594
21721
  display: flex;
21595
21722
  flex-direction: column;
21596
21723
  gap: 8px;
@@ -21600,12 +21727,19 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21600
21727
  tile rather than a strip of 32px circles. */
21601
21728
  padding: 4px;
21602
21729
  }
21603
- .cn-stages-widget__loading[data-v-a394760a] {
21730
+ .cn-stages-widget__loading[data-v-3946def5] {
21604
21731
  display: flex;
21605
21732
  justify-content: center;
21606
21733
  padding: 8px 0;
21607
21734
  }
21608
- .cn-stages-widget__notice[data-v-a394760a] {
21735
+
21736
+ /* The stage a running move leads to: a small spinner before its label. */
21737
+ .cn-stages-widget__moving[data-v-3946def5] {
21738
+ display: inline-flex;
21739
+ vertical-align: middle;
21740
+ margin-inline-end: 4px;
21741
+ }
21742
+ .cn-stages-widget__notice[data-v-3946def5] {
21609
21743
  margin: 0;
21610
21744
  color: var(--color-text-maxcontrast);
21611
21745
  }
@@ -21614,7 +21748,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21614
21748
  REFUSALS no longer come through here: they are a tooltip, a note card and a
21615
21749
  screen-reader node, which is why there is no colour variant of this rule.
21616
21750
  The rules for the two coloured states are NcNoteCard's own. */
21617
- .cn-stages-widget__reason[data-v-a394760a] {
21751
+ .cn-stages-widget__reason[data-v-3946def5] {
21618
21752
  display: block;
21619
21753
  margin-top: 2px;
21620
21754
  font-size: 0.8em;
@@ -21625,7 +21759,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21625
21759
  /* The bars variant: equal columns, a thin bar per step. Theme hooks:
21626
21760
  --cn-stages-bar-height, --cn-stages-bar-radius, --cn-stages-bar-done,
21627
21761
  --cn-stages-bar-current, --cn-stages-bar-todo. */
21628
- .cn-stages-widget__bars[data-v-a394760a] {
21762
+ .cn-stages-widget__bars[data-v-3946def5] {
21629
21763
  display: grid;
21630
21764
  grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
21631
21765
  grid-auto-flow: column;
@@ -21634,25 +21768,25 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21634
21768
  padding: 0;
21635
21769
  list-style: none;
21636
21770
  }
21637
- .cn-stages-widget__bar-step[data-v-a394760a] {
21771
+ .cn-stages-widget__bar-step[data-v-3946def5] {
21638
21772
  display: flex;
21639
21773
  flex-direction: column;
21640
21774
  gap: 8px;
21641
21775
  min-width: 0;
21642
21776
  }
21643
- .cn-stages-widget__bar[data-v-a394760a] {
21777
+ .cn-stages-widget__bar[data-v-3946def5] {
21644
21778
  display: block;
21645
21779
  height: var(--cn-stages-bar-height, 6px);
21646
21780
  border-radius: var(--cn-stages-bar-radius, 3px);
21647
21781
  background: var(--cn-stages-bar-todo, var(--color-border));
21648
21782
  }
21649
- .cn-stages-widget__bar-step--done .cn-stages-widget__bar[data-v-a394760a] {
21783
+ .cn-stages-widget__bar-step--done .cn-stages-widget__bar[data-v-3946def5] {
21650
21784
  background: var(--cn-stages-bar-done, var(--color-primary-element));
21651
21785
  }
21652
- .cn-stages-widget__bar-step--current .cn-stages-widget__bar[data-v-a394760a] {
21786
+ .cn-stages-widget__bar-step--current .cn-stages-widget__bar[data-v-3946def5] {
21653
21787
  background: var(--cn-stages-bar-current, var(--color-error));
21654
21788
  }
21655
- .cn-stages-widget__bar-label[data-v-a394760a] {
21789
+ .cn-stages-widget__bar-label[data-v-3946def5] {
21656
21790
  display: block;
21657
21791
  margin: 0;
21658
21792
  padding: 0;
@@ -21673,7 +21807,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
21673
21807
  about 12px below the current one, which is a <span>. Zeroed here so all
21674
21808
  labels sit 8px under their bar, as the board draws them. The visually
21675
21809
  hidden "(current step)" is absolutely positioned and takes no space. */
21676
- button.cn-stages-widget__bar-label[data-v-a394760a] {
21810
+ button.cn-stages-widget__bar-label[data-v-3946def5] {
21677
21811
  min-height: 0;
21678
21812
  height: auto;
21679
21813
  line-height: inherit;
@@ -21689,7 +21823,7 @@ button.cn-stages-widget__bar-label[data-v-a394760a] {
21689
21823
  of ending in an ellipsis. Only !important beats !important; this selector is
21690
21824
  the more specific of the two. Without such a theme nothing changes: these
21691
21825
  are the values the base rule already sets. */
21692
- button.cn-stages-widget__bar-label.cn-stages-widget__bar-label[data-v-a394760a] {
21826
+ button.cn-stages-widget__bar-label.cn-stages-widget__bar-label[data-v-3946def5] {
21693
21827
  min-width: 0 !important;
21694
21828
  margin: 0 !important;
21695
21829
  padding: 0 !important;
@@ -21698,29 +21832,29 @@ button.cn-stages-widget__bar-label.cn-stages-widget__bar-label[data-v-a394760a]
21698
21832
  text-overflow: ellipsis !important;
21699
21833
  white-space: nowrap !important;
21700
21834
  }
21701
- button.cn-stages-widget__bar-label[aria-disabled="true"][data-v-a394760a] {
21835
+ button.cn-stages-widget__bar-label[aria-disabled="true"][data-v-3946def5] {
21702
21836
  cursor: not-allowed;
21703
21837
  }
21704
- button.cn-stages-widget__bar-label[data-v-a394760a]:focus-visible {
21838
+ button.cn-stages-widget__bar-label[data-v-3946def5]:focus-visible {
21705
21839
  outline: 2px solid var(--color-primary-element);
21706
21840
  outline-offset: 2px;
21707
21841
  border-radius: var(--border-radius-small, 4px);
21708
21842
  }
21709
- .cn-stages-widget__bar-step--done .cn-stages-widget__bar-label[data-v-a394760a] {
21843
+ .cn-stages-widget__bar-step--done .cn-stages-widget__bar-label[data-v-3946def5] {
21710
21844
  color: var(--color-main-text);
21711
21845
  font-weight: 600;
21712
21846
  }
21713
- .cn-stages-widget__bar-step--current .cn-stages-widget__bar-label[data-v-a394760a] {
21847
+ .cn-stages-widget__bar-step--current .cn-stages-widget__bar-label[data-v-3946def5] {
21714
21848
  color: var(--color-main-text);
21715
21849
  font-weight: 700;
21716
21850
  }
21717
- .cn-stages-widget__bar-date[data-v-a394760a] {
21851
+ .cn-stages-widget__bar-date[data-v-3946def5] {
21718
21852
  font-size: 12px;
21719
21853
  color: var(--color-text-maxcontrast);
21720
21854
  }
21721
21855
 
21722
21856
  /* Text for screen readers only. */
21723
- .cn-stages-widget__sr-only[data-v-a394760a] {
21857
+ .cn-stages-widget__sr-only[data-v-3946def5] {
21724
21858
  position: absolute;
21725
21859
  width: 1px;
21726
21860
  height: 1px;
@@ -22207,6 +22341,19 @@ a.cn-kpi-card--stacked:focus-visible {
22207
22341
  color: var(--color-main-text);
22208
22342
  }
22209
22343
 
22344
+ /* A board tile whose label wraps grows into its cell instead of clipping its
22345
+ own last line. dossiq's "Afgehandeld deze maand" at 1100 wide held 129px of
22346
+ content in a 114px tile and lost its caption's bottom. The tile still fills
22347
+ a cell it fits (`min-height: 100%`), so every tile that fits keeps its
22348
+ size; one that does not takes the height of its content, and the card-fit
22349
+ cell's `safe center` keeps its top in view.
22350
+ @spec openspec/changes/board-stat-tile-grows/specs/stat-tile-board-look/spec.md#requirement-a-board-stat-tile-shows-all-its-lines */
22351
+ .cn-kpi-card--board.cn-kpi-card--stacked {
22352
+ flex: 0 0 auto;
22353
+ height: auto;
22354
+ min-height: 100%;
22355
+ }
22356
+
22210
22357
  .cn-kpi-card--board.cn-kpi-card--stacked .cn-kpi-card__caption-line,
22211
22358
  .cn-kpi-card--board.cn-kpi-card--stacked .cn-stats-block__count-label {
22212
22359
  font-size: 13px;
@@ -22629,7 +22776,7 @@ a.cn-kpi-card--board * {
22629
22776
 
22630
22777
  /* The title row carries an optional range select beside the label, which the
22631
22778
  canonical `__title` (a plain truncating heading) does not account for. */
22632
- .cn-stat-widget__label[data-v-644c38a1] {
22779
+ .cn-stat-widget__label[data-v-6f90b30c] {
22633
22780
  display: flex;
22634
22781
  align-items: center;
22635
22782
  justify-content: space-between;
@@ -22639,14 +22786,14 @@ a.cn-kpi-card--board * {
22639
22786
 
22640
22787
  /* Stacked tile: the label and its range select centre over the number rather
22641
22788
  than spreading to the card's edges. */
22642
- .cn-kpi-card--vertical .cn-stat-widget__label[data-v-644c38a1] {
22789
+ .cn-kpi-card--vertical .cn-stat-widget__label[data-v-6f90b30c] {
22643
22790
  justify-content: center;
22644
22791
  width: auto;
22645
22792
  }
22646
22793
 
22647
22794
  /* Sized down to sit inside the label row without pushing the tile taller —
22648
22795
  the tile's height is fixed by its grid cell (ADR-062). */
22649
- .cn-stat-widget__range[data-v-644c38a1] {
22796
+ .cn-stat-widget__range[data-v-6f90b30c] {
22650
22797
  flex: 0 0 auto;
22651
22798
  max-width: 50%;
22652
22799
  padding: 0 4px;
@@ -22658,15 +22805,15 @@ a.cn-kpi-card--board * {
22658
22805
  font-weight: normal;
22659
22806
  cursor: pointer;
22660
22807
  }
22661
- .cn-stat-widget__range[data-v-644c38a1]:hover,
22662
- .cn-stat-widget__range[data-v-644c38a1]:focus-visible {
22808
+ .cn-stat-widget__range[data-v-6f90b30c]:hover,
22809
+ .cn-stat-widget__range[data-v-6f90b30c]:focus-visible {
22663
22810
  background: var(--color-background-hover);
22664
22811
  color: var(--color-main-text);
22665
22812
  }
22666
22813
 
22667
22814
  /* Badge mode: the pill takes the value's place in the row. Sized to the
22668
22815
  card's label scale so it sits in the row without pushing the tile taller. */
22669
- .cn-stat-widget__badge[data-v-644c38a1] {
22816
+ .cn-stat-widget__badge[data-v-6f90b30c] {
22670
22817
  flex: 0 1 auto;
22671
22818
  min-width: 0;
22672
22819
  max-width: 100%;
@@ -22678,7 +22825,7 @@ a.cn-kpi-card--board * {
22678
22825
  /* The denominator of a "value / limit" pair. Deliberately quieter and smaller
22679
22826
  than the value: the tile's subject is what the number IS, not what it is
22680
22827
  allowed to reach. Shares the value's `nowrap` so the pair never breaks. */
22681
- .cn-stat-widget__limit[data-v-644c38a1] {
22828
+ .cn-stat-widget__limit[data-v-6f90b30c] {
22682
22829
  flex: 0 0 auto;
22683
22830
  font-size: var(--cn-kpi-value-size-compact, 1.25rem);
22684
22831
  font-weight: var(--cn-kpi-title-weight, 600);
@@ -22686,7 +22833,7 @@ a.cn-kpi-card--board * {
22686
22833
  color: var(--cn-kpi-label-color, var(--color-text-maxcontrast));
22687
22834
  white-space: nowrap;
22688
22835
  }
22689
- .cn-stat-widget__trend[data-v-644c38a1] {
22836
+ .cn-stat-widget__trend[data-v-6f90b30c] {
22690
22837
  display: inline-flex;
22691
22838
  align-items: center;
22692
22839
  gap: 2px;
@@ -22699,7 +22846,7 @@ a.cn-kpi-card--board * {
22699
22846
  error dash is literally a `cn-kpi-card__value`, and two components showing
22700
22847
  the same failure at two different sizes is the drift this consolidation
22701
22848
  exists to remove. Only the colour differs: a failure is not a number. */
22702
- .cn-stat-widget__error[data-v-644c38a1] {
22849
+ .cn-stat-widget__error[data-v-6f90b30c] {
22703
22850
  font-size: var(--cn-kpi-value-size, 2rem);
22704
22851
  font-weight: var(--cn-kpi-value-weight, 700);
22705
22852
  line-height: var(--cn-kpi-value-line, 1.1);
@@ -22739,81 +22886,97 @@ a.cn-kpi-card--board * {
22739
22886
  * modes render this root, so both collapse. The bug was found on a
22740
22887
  * single-entry stats-block.
22741
22888
  */
22742
- .cn-stats-block-widget[data-v-c1220134] {
22889
+ .cn-stats-block-widget[data-v-4341e971] {
22743
22890
  flex: 1 1 auto;
22744
22891
  min-width: 0;
22745
22892
  width: 100%;
22746
22893
  }
22747
- .cn-stats-block-widget--multi[data-v-c1220134] {
22894
+ .cn-stats-block-widget--multi[data-v-4341e971] {
22748
22895
  display: flex;
22749
22896
  flex-direction: column;
22750
22897
  gap: var(--cn-kpi-stack-gap, 12px);
22751
22898
  }
22752
22899
 
22753
22900
  /* Rows layout: the board's "label left, number right" card body. */
22754
- .cn-stats-block-widget--rows[data-v-c1220134] {
22901
+ .cn-stats-block-widget--rows[data-v-4341e971] {
22755
22902
  display: flex;
22756
22903
  flex-direction: column;
22757
22904
  gap: 12px;
22758
22905
  box-sizing: border-box;
22759
22906
  padding: 20px 22px;
22760
22907
  }
22761
- .cn-stats-block-widget__rows-title[data-v-c1220134] {
22908
+ .cn-stats-block-widget__rows-title[data-v-4341e971] {
22762
22909
  margin: 0;
22763
22910
  font-size: 15px;
22764
22911
  font-weight: 600;
22765
22912
  color: var(--color-text-maxcontrast);
22766
22913
  }
22767
- .cn-stats-block-widget--grid[data-v-c1220134] {
22914
+
22915
+ /* `width: 100%` plus this padding overflowed the card by 48px: the last
22916
+ column ran past the card's right edge (visible once the tiles have a box). */
22917
+ .cn-stats-block-widget--grid[data-v-4341e971] {
22918
+ box-sizing: border-box;
22768
22919
  padding: 4px 24px 20px;
22769
22920
  }
22770
- .cn-stats-block-widget__grid[data-v-c1220134] {
22921
+ .cn-stats-block-widget__grid[data-v-4341e971] {
22771
22922
  display: grid;
22772
22923
  grid-template-columns: repeat(var(--cn-stats-block-columns, 2), minmax(0, 1fr));
22773
22924
  gap: 16px 20px;
22774
22925
  }
22775
22926
 
22776
22927
  /* A tile in the grid is a part of the card, not a card: no box, no inset. */
22777
- .cn-stats-block-widget__grid-stat[data-v-c1220134] {
22928
+ .cn-stats-block-widget__grid-stat[data-v-4341e971] {
22778
22929
  padding: 0;
22779
22930
  min-width: 0;
22780
22931
  }
22781
- .cn-stats-block-widget__rows[data-v-c1220134] {
22932
+
22933
+ /* `tiles: "box"`: each tile on a grey ground of its own (board DcRapportages,
22934
+ "Vergaderingen en efficiëntie"), 12px apart. */
22935
+ .cn-stats-block-widget--tiles-box .cn-stats-block-widget__grid[data-v-4341e971] {
22936
+ gap: 12px;
22937
+ }
22938
+ .cn-stats-block-widget--tiles-box .cn-stats-block-widget__grid-stat[data-v-4341e971] {
22939
+ box-sizing: border-box;
22940
+ padding: 14px 16px;
22941
+ border-radius: 10px;
22942
+ background: var(--color-background-hover);
22943
+ }
22944
+ .cn-stats-block-widget__rows[data-v-4341e971] {
22782
22945
  display: flex;
22783
22946
  flex-direction: column;
22784
22947
  gap: 8px;
22785
22948
  margin: 0;
22786
22949
  font-size: 14px;
22787
22950
  }
22788
- .cn-stats-block-widget__row[data-v-c1220134] {
22951
+ .cn-stats-block-widget__row[data-v-4341e971] {
22789
22952
  display: flex;
22790
22953
  align-items: baseline;
22791
22954
  justify-content: space-between;
22792
22955
  gap: 16px;
22793
22956
  }
22794
- .cn-stats-block-widget__row-label[data-v-c1220134] {
22957
+ .cn-stats-block-widget__row-label[data-v-4341e971] {
22795
22958
  min-width: 0;
22796
22959
  margin: 0;
22797
22960
  overflow: hidden;
22798
22961
  text-overflow: ellipsis;
22799
22962
  }
22800
- .cn-stats-block-widget__row-value[data-v-c1220134] {
22963
+ .cn-stats-block-widget__row-value[data-v-4341e971] {
22801
22964
  flex: none;
22802
22965
  margin: 0;
22803
22966
  font-size: 17px;
22804
22967
  font-weight: 700;
22805
22968
  text-align: right;
22806
22969
  }
22807
- .cn-stats-block-widget__row-value--success[data-v-c1220134] {
22970
+ .cn-stats-block-widget__row-value--success[data-v-4341e971] {
22808
22971
  color: var(--color-text-success, var(--color-success-text));
22809
22972
  }
22810
- .cn-stats-block-widget__row-value--warning[data-v-c1220134] {
22973
+ .cn-stats-block-widget__row-value--warning[data-v-4341e971] {
22811
22974
  color: var(--color-text-warning, var(--color-warning-text));
22812
22975
  }
22813
- .cn-stats-block-widget__row-value--error[data-v-c1220134] {
22976
+ .cn-stats-block-widget__row-value--error[data-v-4341e971] {
22814
22977
  color: var(--color-text-error, var(--color-error-text));
22815
22978
  }
22816
- .cn-stats-block-widget__row-value--primary[data-v-c1220134] {
22979
+ .cn-stats-block-widget__row-value--primary[data-v-4341e971] {
22817
22980
  color: var(--color-primary-element);
22818
22981
  }
22819
22982
 
@@ -23018,7 +23181,7 @@ a.cn-kpi-card--board * {
23018
23181
  }
23019
23182
 
23020
23183
 
23021
- .cn-object-data-widget__image[data-v-59ab12e6] {
23184
+ .cn-object-data-widget__image[data-v-324e1a00] {
23022
23185
  max-width: 100%;
23023
23186
  max-height: 160px;
23024
23187
  border-radius: 8px;
@@ -23026,33 +23189,33 @@ a.cn-kpi-card--board * {
23026
23189
  }
23027
23190
 
23028
23191
  /* Shimmering placeholder while a relation's display name resolves. */
23029
- .cn-object-data-widget__skeleton[data-v-59ab12e6] {
23192
+ .cn-object-data-widget__skeleton[data-v-324e1a00] {
23030
23193
  display: inline-block;
23031
23194
  width: 90px;
23032
23195
  height: 1em;
23033
23196
  border-radius: 4px;
23034
23197
  background: linear-gradient(90deg, var(--color-background-dark) 25%, var(--color-background-hover) 50%, var(--color-background-dark) 75%);
23035
23198
  background-size: 200% 100%;
23036
- animation: cn-odw-shimmer-59ab12e6 1.2s ease-in-out infinite;
23199
+ animation: cn-odw-shimmer-324e1a00 1.2s ease-in-out infinite;
23037
23200
  }
23038
- @keyframes cn-odw-shimmer-59ab12e6 {
23201
+ @keyframes cn-odw-shimmer-324e1a00 {
23039
23202
  from { background-position: 200% 0;
23040
23203
  }
23041
23204
  to { background-position: -200% 0;
23042
23205
  }
23043
23206
  }
23044
23207
  @media (prefers-reduced-motion: reduce) {
23045
- .cn-object-data-widget__skeleton[data-v-59ab12e6] { animation: none;
23208
+ .cn-object-data-widget__skeleton[data-v-324e1a00] { animation: none;
23046
23209
  }
23047
23210
  }
23048
- .cn-object-data-widget__grid[data-v-59ab12e6] {
23211
+ .cn-object-data-widget__grid[data-v-324e1a00] {
23049
23212
  display: grid;
23050
23213
  gap: calc(2 * var(--default-grid-baseline, 4px)) calc(4 * var(--default-grid-baseline, 4px));
23051
23214
  }
23052
- .cn-object-data-widget__toggle[data-v-59ab12e6] {
23215
+ .cn-object-data-widget__toggle[data-v-324e1a00] {
23053
23216
  margin-top: 4px;
23054
23217
  }
23055
- .cn-object-data-widget__cell[data-v-59ab12e6] {
23218
+ .cn-object-data-widget__cell[data-v-324e1a00] {
23056
23219
  display: flex;
23057
23220
  flex-direction: column;
23058
23221
  gap: 2px;
@@ -23060,12 +23223,12 @@ to { background-position: -200% 0;
23060
23223
  border-bottom: 1px solid var(--color-border-dark);
23061
23224
  min-width: 0;
23062
23225
  }
23063
- .cn-object-data-widget__label[data-v-59ab12e6] {
23226
+ .cn-object-data-widget__label[data-v-324e1a00] {
23064
23227
  font-size: 0.85em;
23065
23228
  color: var(--color-text-maxcontrast);
23066
23229
  font-weight: 500;
23067
23230
  }
23068
- .cn-object-data-widget__value[data-v-59ab12e6] {
23231
+ .cn-object-data-widget__value[data-v-324e1a00] {
23069
23232
  font-size: 1em;
23070
23233
  color: var(--color-main-text);
23071
23234
  overflow-wrap: anywhere;
@@ -23079,24 +23242,24 @@ to { background-position: -200% 0;
23079
23242
  which drew a horizontal scrollbar under every data widget in a tab (dossiq's
23080
23243
  case page, Data tab). The end padding drops by the same 4px so the text and
23081
23244
  the edit icon sit where they sat. */
23082
- .cn-object-data-widget__value--editable[data-v-59ab12e6] {
23245
+ .cn-object-data-widget__value--editable[data-v-324e1a00] {
23083
23246
  cursor: pointer;
23084
23247
  border-radius: var(--border-radius);
23085
23248
  padding: 4px 20px 4px 4px;
23086
23249
  margin: -4px 0 -4px -4px;
23087
23250
  }
23088
- .cn-object-data-widget__value--editable[data-v-59ab12e6]:hover {
23251
+ .cn-object-data-widget__value--editable[data-v-324e1a00]:hover {
23089
23252
  background: var(--color-background-dark);
23090
23253
  }
23091
- .cn-object-data-widget__value--editable[data-v-59ab12e6]:focus-visible {
23254
+ .cn-object-data-widget__value--editable[data-v-324e1a00]:focus-visible {
23092
23255
  outline: 2px solid var(--color-primary-element);
23093
23256
  outline-offset: 2px;
23094
23257
  }
23095
- .cn-object-data-widget__value--empty[data-v-59ab12e6] {
23258
+ .cn-object-data-widget__value--empty[data-v-324e1a00] {
23096
23259
  color: var(--color-text-maxcontrast);
23097
23260
  font-style: italic;
23098
23261
  }
23099
- .cn-object-data-widget__edit-icon[data-v-59ab12e6] {
23262
+ .cn-object-data-widget__edit-icon[data-v-324e1a00] {
23100
23263
  position: absolute;
23101
23264
  right: 4px;
23102
23265
  top: 50%;
@@ -23105,21 +23268,21 @@ to { background-position: -200% 0;
23105
23268
  opacity: 0;
23106
23269
  transition: opacity 0.15s ease;
23107
23270
  }
23108
- .cn-object-data-widget__value--editable:hover .cn-object-data-widget__edit-icon[data-v-59ab12e6],
23109
- .cn-object-data-widget__value--editable:focus-visible .cn-object-data-widget__edit-icon[data-v-59ab12e6] {
23271
+ .cn-object-data-widget__value--editable:hover .cn-object-data-widget__edit-icon[data-v-324e1a00],
23272
+ .cn-object-data-widget__value--editable:focus-visible .cn-object-data-widget__edit-icon[data-v-324e1a00] {
23110
23273
  opacity: 1;
23111
23274
  }
23112
- .cn-object-data-widget__editor[data-v-59ab12e6] {
23275
+ .cn-object-data-widget__editor[data-v-324e1a00] {
23113
23276
  display: flex;
23114
23277
  flex-direction: column;
23115
23278
  gap: 4px;
23116
23279
  }
23117
- .cn-object-data-widget__editor-actions[data-v-59ab12e6] {
23280
+ .cn-object-data-widget__editor-actions[data-v-324e1a00] {
23118
23281
  display: flex;
23119
23282
  gap: 2px;
23120
23283
  justify-content: flex-end;
23121
23284
  }
23122
- .cn-object-data-widget__textarea[data-v-59ab12e6] {
23285
+ .cn-object-data-widget__textarea[data-v-324e1a00] {
23123
23286
  width: 100%;
23124
23287
  min-height: 80px;
23125
23288
  padding: 8px;
@@ -23131,11 +23294,11 @@ to { background-position: -200% 0;
23131
23294
  font-size: inherit;
23132
23295
  resize: vertical;
23133
23296
  }
23134
- .cn-object-data-widget__textarea[data-v-59ab12e6]:focus {
23297
+ .cn-object-data-widget__textarea[data-v-324e1a00]:focus {
23135
23298
  border-color: var(--color-primary-element);
23136
23299
  outline: none;
23137
23300
  }
23138
- .cn-object-data-widget__empty[data-v-59ab12e6] {
23301
+ .cn-object-data-widget__empty[data-v-324e1a00] {
23139
23302
  color: var(--color-text-maxcontrast);
23140
23303
  font-style: italic;
23141
23304
  padding: calc(2 * var(--default-grid-baseline, 4px));
@@ -23143,16 +23306,16 @@ to { background-position: -200% 0;
23143
23306
 
23144
23307
  /* Compact inline table for array-of-objects values. Dense + unstyled-simple;
23145
23308
  fits the card and participates in the whole-row overflow handling. */
23146
- .cn-object-data-widget__mini-table-wrap[data-v-59ab12e6] {
23309
+ .cn-object-data-widget__mini-table-wrap[data-v-324e1a00] {
23147
23310
  max-width: 100%;
23148
23311
  }
23149
- .cn-object-data-widget__mini-table[data-v-59ab12e6] {
23312
+ .cn-object-data-widget__mini-table[data-v-324e1a00] {
23150
23313
  width: 100%;
23151
23314
  border-collapse: collapse;
23152
23315
  font-size: 0.9em;
23153
23316
  }
23154
- .cn-object-data-widget__mini-table th[data-v-59ab12e6],
23155
- .cn-object-data-widget__mini-table td[data-v-59ab12e6] {
23317
+ .cn-object-data-widget__mini-table th[data-v-324e1a00],
23318
+ .cn-object-data-widget__mini-table td[data-v-324e1a00] {
23156
23319
  text-align: start;
23157
23320
  padding: 2px 8px 2px 0;
23158
23321
  border-bottom: 1px solid var(--color-border);
@@ -23163,23 +23326,23 @@ to { background-position: -200% 0;
23163
23326
  cell, and the card 8px wider than its cell (pipelinq's ticket page). */
23164
23327
  white-space: normal;
23165
23328
  }
23166
- .cn-object-data-widget__mini-table th[data-v-59ab12e6] {
23329
+ .cn-object-data-widget__mini-table th[data-v-324e1a00] {
23167
23330
  color: var(--color-text-maxcontrast);
23168
23331
  font-weight: 500;
23169
23332
  }
23170
- .cn-object-data-widget__more[data-v-59ab12e6] {
23333
+ .cn-object-data-widget__more[data-v-324e1a00] {
23171
23334
  margin-top: 2px;
23172
23335
  font-size: 0.85em;
23173
23336
  color: var(--color-text-maxcontrast);
23174
23337
  }
23175
23338
 
23176
23339
  /* Comma-less chip row for array-of-scalars values. */
23177
- .cn-object-data-widget__chips[data-v-59ab12e6] {
23340
+ .cn-object-data-widget__chips[data-v-324e1a00] {
23178
23341
  display: flex;
23179
23342
  flex-wrap: wrap;
23180
23343
  gap: 4px;
23181
23344
  }
23182
- .cn-object-data-widget__chip[data-v-59ab12e6] {
23345
+ .cn-object-data-widget__chip[data-v-324e1a00] {
23183
23346
  padding: 1px 8px;
23184
23347
  border-radius: 12px;
23185
23348
  background: var(--color-background-dark);
@@ -23187,27 +23350,37 @@ to { background-position: -200% 0;
23187
23350
  }
23188
23351
 
23189
23352
  /* Key: value definition list for a single plain-object value. */
23190
- .cn-object-data-widget__deflist[data-v-59ab12e6] {
23353
+ .cn-object-data-widget__deflist[data-v-324e1a00] {
23191
23354
  display: grid;
23192
23355
  grid-template-columns: auto 1fr;
23193
23356
  gap: 2px 8px;
23194
23357
  margin: 0;
23195
23358
  }
23196
- .cn-object-data-widget__deflist dt[data-v-59ab12e6] {
23359
+ .cn-object-data-widget__deflist dt[data-v-324e1a00] {
23197
23360
  color: var(--color-text-maxcontrast);
23198
23361
  font-size: 0.9em;
23199
23362
  }
23200
- .cn-object-data-widget__deflist dd[data-v-59ab12e6] {
23363
+ .cn-object-data-widget__deflist dd[data-v-324e1a00] {
23201
23364
  margin: 0;
23202
23365
  overflow-wrap: anywhere;
23203
23366
  }
23204
23367
 
23368
+ /* A long description keeps its own paragraphs. Set on an inline span with no
23369
+ surrounding template whitespace, so only the value's own line breaks show. */
23370
+ .cn-object-data-widget__deflist-text[data-v-324e1a00] {
23371
+ white-space: pre-wrap;
23372
+ }
23373
+ .cn-object-data-widget__deflist--nested[data-v-324e1a00] {
23374
+ padding-inline-start: 8px;
23375
+ border-inline-start: 2px solid var(--color-border);
23376
+ }
23377
+
23205
23378
  /* Responsive: collapse to single column on narrow widths */
23206
23379
  @media (max-width: 600px) {
23207
- .cn-object-data-widget__grid[data-v-59ab12e6] {
23380
+ .cn-object-data-widget__grid[data-v-324e1a00] {
23208
23381
  grid-template-columns: 1fr !important;
23209
23382
  }
23210
- .cn-object-data-widget__cell[data-v-59ab12e6] {
23383
+ .cn-object-data-widget__cell[data-v-324e1a00] {
23211
23384
  grid-column: span 1 !important;
23212
23385
  grid-row: span 1 !important;
23213
23386
  }
@@ -24919,7 +25092,7 @@ button.cn-stepper__step[data-v-776581d4] {
24919
25092
 
24920
25093
 
24921
25094
  /* A stack (`widgetIds`): the panel's widget, then cards 20px apart. */
24922
- .cn-tabs-widget__stack[data-v-9ccd8dee] {
25095
+ .cn-tabs-widget__stack[data-v-0ad78042] {
24923
25096
  display: flex;
24924
25097
  flex-direction: column;
24925
25098
  gap: 20px;
@@ -24928,19 +25101,19 @@ button.cn-stepper__step[data-v-776581d4] {
24928
25101
  /* A gridded stack (`columns` / `layout` on the tab): 12 columns, widgets wrap
24929
25102
  onto the next row, a row's cards as tall as the tallest. Narrow, it is the
24930
25103
  plain stack again. */
24931
- .cn-tabs-widget__stack--grid[data-v-9ccd8dee] {
25104
+ .cn-tabs-widget__stack--grid[data-v-0ad78042] {
24932
25105
  display: grid;
24933
25106
  grid-template-columns: repeat(12, minmax(0, 1fr));
24934
25107
  align-items: stretch;
24935
25108
  }
24936
- .cn-tabs-widget__stack--grid[data-v-9ccd8dee] > * {
25109
+ .cn-tabs-widget__stack--grid[data-v-0ad78042] > * {
24937
25110
  min-width: 0;
24938
25111
  }
24939
25112
  @media (max-width: 700px) {
24940
- .cn-tabs-widget__stack--grid[data-v-9ccd8dee] {
25113
+ .cn-tabs-widget__stack--grid[data-v-0ad78042] {
24941
25114
  grid-template-columns: minmax(0, 1fr);
24942
25115
  }
24943
- .cn-tabs-widget__stack--grid[data-v-9ccd8dee] > * {
25116
+ .cn-tabs-widget__stack--grid[data-v-0ad78042] > * {
24944
25117
  grid-column: auto !important;
24945
25118
  }
24946
25119
  }
@@ -24974,7 +25147,7 @@ button.cn-stepper__step[data-v-776581d4] {
24974
25147
  `!important` or on load order this library does not control. The same
24975
25148
  technique, for the same reason, is used on `.cn-tabs__nav .cn-tabs__nav-item`
24976
25149
  in CnTabs to beat Nextcloud's own button margin. */
24977
- .cn-tabs-widget.cn-tabs-widget[data-v-9ccd8dee] {
25150
+ .cn-tabs-widget.cn-tabs-widget[data-v-0ad78042] {
24978
25151
  background-color: transparent;
24979
25152
  border: 0;
24980
25153
  border-radius: 0;
@@ -24998,12 +25171,12 @@ button.cn-stepper__step[data-v-776581d4] {
24998
25171
  below it: the rule ran straight on to the widget's edge and read as a
24999
25172
  border sticking out past a rounded corner (Ruben, 2026-09-13). Ending it
25000
25173
  where the curve begins makes the rule and the curve one continuous edge. */
25001
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__bar {
25174
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__bar {
25002
25175
  border-bottom: none;
25003
25176
  padding: 0;
25004
25177
  position: relative;
25005
25178
  }
25006
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__bar::after {
25179
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__bar::after {
25007
25180
  border-bottom: 1px solid var(--color-border);
25008
25181
  content: '';
25009
25182
  inset-block-end: 0;
@@ -25016,11 +25189,11 @@ button.cn-stepper__step[data-v-776581d4] {
25016
25189
  own background-coloured bottom edge, which only works if it paints ABOVE the
25017
25190
  pseudo-element: a positioned pseudo-element otherwise paints over every
25018
25191
  in-flow sibling, rule included. */
25019
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__nav-item--active {
25192
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__nav-item--active {
25020
25193
  position: relative;
25021
25194
  z-index: 1;
25022
25195
  }
25023
- .cn-tabs-widget__tabs[data-v-9ccd8dee] {
25196
+ .cn-tabs-widget__tabs[data-v-0ad78042] {
25024
25197
  display: flex;
25025
25198
  flex-direction: column;
25026
25199
  /* Grow to the widget's height, so the panel fills the grid cell the
@@ -25038,7 +25211,7 @@ button.cn-stepper__step[data-v-776581d4] {
25038
25211
  the open tab, but padding sits inside the painted box — only a margin would
25039
25212
  have opened that gap, and a zero top put every panel's content against the
25040
25213
  strip. */
25041
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__content {
25214
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__content {
25042
25215
  background-color: var(--color-main-background);
25043
25216
  /* Three sides only: the bar's rule (redrawn above, stopping at the corner)
25044
25217
  is this sheet's top edge, and the open tab erases the slice of it
@@ -25058,7 +25231,7 @@ button.cn-stepper__step[data-v-776581d4] {
25058
25231
  overflow: auto;
25059
25232
  padding: 12px;
25060
25233
  }
25061
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tab {
25234
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tab {
25062
25235
  height: 100%;
25063
25236
  }
25064
25237
 
@@ -25066,15 +25239,15 @@ button.cn-stepper__step[data-v-776581d4] {
25066
25239
  (margin 0 -16px -16px). The panel of a tab pads 12px, so on a tab that
25067
25240
  holds the list directly the footer stuck out 4px on the right and at the
25068
25241
  bottom and made the panel scroll. It bleeds exactly the panel's padding. */
25069
- .cn-tabs-widget__tabs[data-v-9ccd8dee] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
25242
+ .cn-tabs-widget__tabs[data-v-0ad78042] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
25070
25243
  margin: auto -12px -12px;
25071
25244
  }
25072
- .cn-tabs-widget__title[data-v-9ccd8dee] {
25245
+ .cn-tabs-widget__title[data-v-0ad78042] {
25073
25246
  align-items: center;
25074
25247
  display: inline-flex;
25075
25248
  gap: 6px;
25076
25249
  }
25077
- .cn-tabs-widget__title-icon[data-v-9ccd8dee] {
25250
+ .cn-tabs-widget__title-icon[data-v-0ad78042] {
25078
25251
  flex: 0 0 auto;
25079
25252
  }
25080
25253
 
@@ -25098,18 +25271,18 @@ button.cn-stepper__step[data-v-776581d4] {
25098
25271
  }
25099
25272
 
25100
25273
 
25101
- .cn-week-strip[data-v-b6c5e274] {
25274
+ .cn-week-strip[data-v-27a717bd] {
25102
25275
  width: 100%;
25103
25276
  }
25104
25277
 
25105
25278
  /* `content.inset: true`: the board's inset inside the card (zuiddrecht-pixel-
25106
25279
  gaps-3). A dashboard renders its widgets flush, so without it the strip ran
25107
25280
  from card edge to card edge. Theme hook: --cn-widget-board-inset. */
25108
- .cn-week-strip--inset[data-v-b6c5e274] {
25281
+ .cn-week-strip--inset[data-v-27a717bd] {
25109
25282
  box-sizing: border-box;
25110
25283
  padding: var(--cn-widget-board-inset, 16px 24px 22px);
25111
25284
  }
25112
- .cn-week-strip__state[data-v-b6c5e274] {
25285
+ .cn-week-strip__state[data-v-27a717bd] {
25113
25286
  display: flex;
25114
25287
  align-items: center;
25115
25288
  gap: 8px;
@@ -25117,15 +25290,15 @@ button.cn-stepper__step[data-v-776581d4] {
25117
25290
  padding: 12px 4px;
25118
25291
  color: var(--color-text-maxcontrast);
25119
25292
  }
25120
- .cn-week-strip__scroll[data-v-b6c5e274] {
25293
+ .cn-week-strip__scroll[data-v-27a717bd] {
25121
25294
  overflow-x: auto;
25122
25295
  border-radius: var(--border-radius-large, 8px);
25123
25296
  }
25124
- .cn-week-strip__scroll[data-v-b6c5e274]:focus-visible {
25297
+ .cn-week-strip__scroll[data-v-27a717bd]:focus-visible {
25125
25298
  outline: 2px solid var(--color-primary-element);
25126
25299
  outline-offset: 2px;
25127
25300
  }
25128
- .cn-week-strip__days[data-v-b6c5e274] {
25301
+ .cn-week-strip__days[data-v-27a717bd] {
25129
25302
  display: grid;
25130
25303
  grid-template-columns: repeat(var(--cn-week-strip-columns, 5), minmax(128px, 1fr));
25131
25304
  gap: 10px;
@@ -25135,7 +25308,7 @@ button.cn-stepper__step[data-v-776581d4] {
25135
25308
  padding: 0;
25136
25309
  list-style: none;
25137
25310
  }
25138
- .cn-week-strip__day[data-v-b6c5e274] {
25311
+ .cn-week-strip__day[data-v-27a717bd] {
25139
25312
  display: flex;
25140
25313
  flex-direction: column;
25141
25314
  gap: 8px;
@@ -25145,11 +25318,11 @@ button.cn-stepper__step[data-v-776581d4] {
25145
25318
  border-radius: var(--border-radius-large, 8px);
25146
25319
  background: var(--color-background-hover);
25147
25320
  }
25148
- .cn-week-strip__day--today[data-v-b6c5e274] {
25321
+ .cn-week-strip__day--today[data-v-27a717bd] {
25149
25322
  border-color: var(--color-primary-element);
25150
25323
  background: var(--color-primary-element-light);
25151
25324
  }
25152
- .cn-week-strip__head[data-v-b6c5e274] {
25325
+ .cn-week-strip__head[data-v-27a717bd] {
25153
25326
  display: flex;
25154
25327
  align-items: center;
25155
25328
  justify-content: space-between;
@@ -25158,7 +25331,7 @@ button.cn-stepper__step[data-v-776581d4] {
25158
25331
  font-weight: 600;
25159
25332
  color: var(--color-main-text);
25160
25333
  }
25161
- .cn-week-strip__today[data-v-b6c5e274] {
25334
+ .cn-week-strip__today[data-v-27a717bd] {
25162
25335
  padding: 1px 8px;
25163
25336
  border-radius: var(--border-radius-pill, 10px);
25164
25337
  background: var(--color-primary-element);
@@ -25166,7 +25339,7 @@ button.cn-stepper__step[data-v-776581d4] {
25166
25339
  font-size: 0.85em;
25167
25340
  font-weight: 700;
25168
25341
  }
25169
- .cn-week-strip__items[data-v-b6c5e274] {
25342
+ .cn-week-strip__items[data-v-27a717bd] {
25170
25343
  display: flex;
25171
25344
  flex-direction: column;
25172
25345
  gap: 6px;
@@ -25174,7 +25347,7 @@ button.cn-stepper__step[data-v-776581d4] {
25174
25347
  padding: 0;
25175
25348
  list-style: none;
25176
25349
  }
25177
- .cn-week-strip__item[data-v-b6c5e274] {
25350
+ .cn-week-strip__item[data-v-27a717bd] {
25178
25351
  display: flex;
25179
25352
  flex-direction: column;
25180
25353
  gap: 4px;
@@ -25185,41 +25358,41 @@ button.cn-stepper__step[data-v-776581d4] {
25185
25358
  color: var(--color-main-text);
25186
25359
  text-decoration: none;
25187
25360
  }
25188
- .cn-week-strip__item--link[data-v-b6c5e274]:hover {
25361
+ .cn-week-strip__item--link[data-v-27a717bd]:hover {
25189
25362
  border-color: var(--color-primary-element);
25190
25363
  }
25191
- .cn-week-strip__item--link[data-v-b6c5e274]:focus-visible {
25364
+ .cn-week-strip__item--link[data-v-27a717bd]:focus-visible {
25192
25365
  outline: 2px solid var(--color-primary-element);
25193
25366
  outline-offset: 2px;
25194
25367
  }
25195
25368
 
25196
25369
  /* The edge is drawn inside the box, so a late item is as wide as the others. */
25197
- .cn-week-strip__item--late[data-v-b6c5e274] {
25370
+ .cn-week-strip__item--late[data-v-27a717bd] {
25198
25371
  border-color: var(--color-element-error, var(--color-error));
25199
25372
  box-shadow: inset 3px 0 0 0 var(--color-element-error, var(--color-error));
25200
25373
  }
25201
- .cn-week-strip__title[data-v-b6c5e274] {
25374
+ .cn-week-strip__title[data-v-27a717bd] {
25202
25375
  font-size: 0.95em;
25203
25376
  line-height: 1.3;
25204
25377
  overflow-wrap: anywhere;
25205
25378
  }
25206
- .cn-week-strip__meta[data-v-b6c5e274] {
25379
+ .cn-week-strip__meta[data-v-27a717bd] {
25207
25380
  font-size: 0.85em;
25208
25381
  color: var(--color-text-maxcontrast);
25209
25382
  overflow-wrap: anywhere;
25210
25383
  }
25211
- .cn-week-strip__late[data-v-b6c5e274] {
25384
+ .cn-week-strip__late[data-v-27a717bd] {
25212
25385
  font-size: 0.8em;
25213
25386
  font-weight: 600;
25214
25387
  color: var(--color-text-error, var(--color-error-text));
25215
25388
  }
25216
- .cn-week-strip__empty[data-v-b6c5e274] {
25389
+ .cn-week-strip__empty[data-v-27a717bd] {
25217
25390
  font-size: 0.9em;
25218
25391
  color: var(--color-text-maxcontrast);
25219
25392
  }
25220
25393
 
25221
25394
  /* "+N more" under a capped day: a quiet text control, 24px high to click. */
25222
- .cn-week-strip__more[data-v-b6c5e274] {
25395
+ .cn-week-strip__more[data-v-27a717bd] {
25223
25396
  align-self: flex-start;
25224
25397
  min-height: 24px;
25225
25398
  margin: 0;
@@ -25234,10 +25407,10 @@ button.cn-stepper__step[data-v-776581d4] {
25234
25407
  text-decoration: none;
25235
25408
  cursor: pointer;
25236
25409
  }
25237
- .cn-week-strip__more[data-v-b6c5e274]:hover {
25410
+ .cn-week-strip__more[data-v-27a717bd]:hover {
25238
25411
  text-decoration: underline;
25239
25412
  }
25240
- .cn-week-strip__more[data-v-b6c5e274]:focus-visible {
25413
+ .cn-week-strip__more[data-v-27a717bd]:focus-visible {
25241
25414
  outline: 2px solid var(--color-primary-element);
25242
25415
  outline-offset: 2px;
25243
25416
  }
@@ -28483,7 +28656,7 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28483
28656
 
28484
28657
  /* The percentage-change chip beside the value. Tinted good/bad at runtime from
28485
28658
  * `goodDirection`, so the colour is an inline style, not a class. */
28486
- .cn-delta-widget__delta[data-v-66680dc6] {
28659
+ .cn-delta-widget__delta[data-v-ee481872] {
28487
28660
  display: inline-flex;
28488
28661
  align-items: center;
28489
28662
  gap: 2px;
@@ -28494,7 +28667,7 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28494
28667
  /* The dash shown when the number could not be fetched. It stands where the
28495
28668
  * value stands, so it takes the value's size and weight — only the colour
28496
28669
  * differs, because a failure is not a number. */
28497
- .cn-delta-widget__error[data-v-66680dc6] {
28670
+ .cn-delta-widget__error[data-v-ee481872] {
28498
28671
  font-size: var(--cn-kpi-value-size, 2rem);
28499
28672
  font-weight: var(--cn-kpi-value-weight, 700);
28500
28673
  line-height: var(--cn-kpi-value-line, 1.1);
@@ -28525,7 +28698,7 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28525
28698
  }
28526
28699
 
28527
28700
 
28528
- .cn-gauge-widget[data-v-0ac8e0e8] {
28701
+ .cn-gauge-widget[data-v-006ab8f8] {
28529
28702
  display: flex;
28530
28703
  flex-direction: column;
28531
28704
  gap: 8px;
@@ -28533,58 +28706,58 @@ tr.file-picker__row td.row-name[data-v-1f96131b] {
28533
28706
  }
28534
28707
 
28535
28708
  /* Whole-tile click target when the widget declares a `route`/`link`. */
28536
- .cn-gauge-widget--linked[data-v-0ac8e0e8] {
28709
+ .cn-gauge-widget--linked[data-v-006ab8f8] {
28537
28710
  cursor: pointer;
28538
28711
  text-decoration: none;
28539
28712
  color: inherit;
28540
28713
  border-radius: var(--border-radius-large, 8px);
28541
28714
  transition: background-color 0.1s ease-in-out;
28542
28715
  }
28543
- .cn-gauge-widget--linked[data-v-0ac8e0e8]:hover {
28716
+ .cn-gauge-widget--linked[data-v-006ab8f8]:hover {
28544
28717
  background-color: var(--color-background-hover);
28545
28718
  }
28546
- .cn-gauge-widget--linked[data-v-0ac8e0e8]:focus-visible {
28719
+ .cn-gauge-widget--linked[data-v-006ab8f8]:focus-visible {
28547
28720
  outline: 2px solid var(--color-primary-element);
28548
28721
  outline-offset: 2px;
28549
28722
  }
28550
- .cn-gauge-widget__head[data-v-0ac8e0e8] {
28723
+ .cn-gauge-widget__head[data-v-006ab8f8] {
28551
28724
  display: flex;
28552
28725
  align-items: baseline;
28553
28726
  justify-content: space-between;
28554
28727
  gap: 8px;
28555
28728
  }
28556
- .cn-gauge-widget__label[data-v-0ac8e0e8] {
28729
+ .cn-gauge-widget__label[data-v-006ab8f8] {
28557
28730
  font-size: 0.95em;
28558
28731
  font-weight: 600;
28559
28732
  color: var(--color-main-text);
28560
28733
  }
28561
- .cn-gauge-widget__pct[data-v-0ac8e0e8] {
28734
+ .cn-gauge-widget__pct[data-v-006ab8f8] {
28562
28735
  font-size: 1.2em;
28563
28736
  font-weight: 700;
28564
28737
  }
28565
- .cn-gauge-widget__track[data-v-0ac8e0e8] {
28738
+ .cn-gauge-widget__track[data-v-006ab8f8] {
28566
28739
  width: 100%;
28567
28740
  height: 10px;
28568
28741
  border-radius: 5px;
28569
28742
  background: var(--color-background-dark);
28570
28743
  overflow: hidden;
28571
28744
  }
28572
- .cn-gauge-widget__fill[data-v-0ac8e0e8] {
28745
+ .cn-gauge-widget__fill[data-v-006ab8f8] {
28573
28746
  height: 100%;
28574
28747
  border-radius: 5px;
28575
28748
  transition: width 0.3s ease;
28576
28749
  }
28577
- .cn-gauge-widget__foot[data-v-0ac8e0e8] {
28750
+ .cn-gauge-widget__foot[data-v-006ab8f8] {
28578
28751
  display: flex;
28579
28752
  align-items: baseline;
28580
28753
  gap: 6px;
28581
28754
  font-size: 0.9em;
28582
28755
  }
28583
- .cn-gauge-widget__value[data-v-0ac8e0e8] {
28756
+ .cn-gauge-widget__value[data-v-006ab8f8] {
28584
28757
  font-weight: 700;
28585
28758
  color: var(--color-main-text);
28586
28759
  }
28587
- .cn-gauge-widget__target[data-v-0ac8e0e8] {
28760
+ .cn-gauge-widget__target[data-v-006ab8f8] {
28588
28761
  color: var(--color-text-maxcontrast);
28589
28762
  }
28590
28763
 
@@ -29144,34 +29317,34 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29144
29317
  }
29145
29318
 
29146
29319
 
29147
- .cn-field-list-widget[data-v-7d90316d] {
29320
+ .cn-field-list-widget[data-v-643f1dd6] {
29148
29321
  display: flex;
29149
29322
  flex-direction: column;
29150
29323
  gap: 12px;
29151
29324
  min-width: 0;
29152
29325
  }
29153
- .cn-field-list-widget__rows[data-v-7d90316d] {
29326
+ .cn-field-list-widget__rows[data-v-643f1dd6] {
29154
29327
  list-style: none;
29155
29328
  margin: 0;
29156
29329
  padding: 0;
29157
29330
  display: flex;
29158
29331
  flex-direction: column;
29159
29332
  }
29160
- .cn-field-list-widget__row[data-v-7d90316d] {
29333
+ .cn-field-list-widget__row[data-v-643f1dd6] {
29161
29334
  padding: 10px 0;
29162
29335
  border-top: 1px solid var(--color-border);
29163
29336
  }
29164
- .cn-field-list-widget__row[data-v-7d90316d]:first-child {
29337
+ .cn-field-list-widget__row[data-v-643f1dd6]:first-child {
29165
29338
  border-top: none;
29166
29339
  padding-top: 0;
29167
29340
  }
29168
- .cn-field-list-widget__line[data-v-7d90316d] {
29341
+ .cn-field-list-widget__line[data-v-643f1dd6] {
29169
29342
  display: flex;
29170
29343
  align-items: center;
29171
29344
  gap: 12px;
29172
29345
  min-width: 0;
29173
29346
  }
29174
- .cn-field-list-widget__avatar[data-v-7d90316d] {
29347
+ .cn-field-list-widget__avatar[data-v-643f1dd6] {
29175
29348
  flex: 0 0 auto;
29176
29349
  display: inline-flex;
29177
29350
  align-items: center;
@@ -29184,64 +29357,69 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29184
29357
  font-size: 12px;
29185
29358
  font-weight: 700;
29186
29359
  }
29187
- .cn-field-list-widget__main[data-v-7d90316d] {
29360
+ .cn-field-list-widget__main[data-v-643f1dd6] {
29188
29361
  display: flex;
29189
29362
  flex-direction: column;
29190
29363
  flex: 1 1 auto;
29191
29364
  min-width: 0;
29192
29365
  }
29193
- .cn-field-list-widget__title[data-v-7d90316d] {
29366
+ .cn-field-list-widget__title[data-v-643f1dd6] {
29194
29367
  font-weight: 600;
29195
29368
  overflow-wrap: anywhere;
29196
29369
  }
29197
- .cn-field-list-widget__meta[data-v-7d90316d],
29198
- .cn-field-list-widget__aside[data-v-7d90316d],
29199
- .cn-field-list-widget__detail[data-v-7d90316d],
29200
- .cn-field-list-widget__hint[data-v-7d90316d],
29201
- .cn-field-list-widget__empty[data-v-7d90316d] {
29370
+ .cn-field-list-widget__meta[data-v-643f1dd6],
29371
+ .cn-field-list-widget__aside[data-v-643f1dd6],
29372
+ .cn-field-list-widget__detail[data-v-643f1dd6],
29373
+ .cn-field-list-widget__hint[data-v-643f1dd6],
29374
+ .cn-field-list-widget__empty[data-v-643f1dd6] {
29202
29375
  color: var(--color-text-maxcontrast);
29203
29376
  }
29204
- .cn-field-list-widget__meta[data-v-7d90316d],
29205
- .cn-field-list-widget__aside[data-v-7d90316d],
29206
- .cn-field-list-widget__detail[data-v-7d90316d] {
29377
+ .cn-field-list-widget__meta[data-v-643f1dd6],
29378
+ .cn-field-list-widget__aside[data-v-643f1dd6],
29379
+ .cn-field-list-widget__copies[data-v-643f1dd6] {
29380
+ display: flex;
29381
+ flex-wrap: wrap;
29382
+ gap: 4px;
29383
+ }
29384
+ .cn-field-list-widget__detail[data-v-643f1dd6] {
29207
29385
  font-size: 13px;
29208
29386
  }
29209
- .cn-field-list-widget__aside[data-v-7d90316d] {
29387
+ .cn-field-list-widget__aside[data-v-643f1dd6] {
29210
29388
  white-space: nowrap;
29211
29389
  }
29212
- .cn-field-list-widget__detail[data-v-7d90316d],
29213
- .cn-field-list-widget__hint[data-v-7d90316d],
29214
- .cn-field-list-widget__empty[data-v-7d90316d] {
29390
+ .cn-field-list-widget__detail[data-v-643f1dd6],
29391
+ .cn-field-list-widget__hint[data-v-643f1dd6],
29392
+ .cn-field-list-widget__empty[data-v-643f1dd6] {
29215
29393
  margin: 4px 0 0;
29216
29394
  overflow-wrap: anywhere;
29217
29395
  }
29218
- .cn-field-list-widget__add[data-v-7d90316d] {
29396
+ .cn-field-list-widget__add[data-v-643f1dd6] {
29219
29397
  display: flex;
29220
29398
  flex-wrap: wrap;
29221
29399
  align-items: flex-end;
29222
29400
  gap: 8px 12px;
29223
29401
  }
29224
- .cn-field-list-widget__add[data-v-7d90316d] > * {
29402
+ .cn-field-list-widget__add[data-v-643f1dd6] > * {
29225
29403
  flex: 1 1 180px;
29226
29404
  }
29227
- .cn-field-list-widget__add > button[data-v-7d90316d] {
29405
+ .cn-field-list-widget__add > button[data-v-643f1dd6] {
29228
29406
  flex: 0 0 auto;
29229
29407
  }
29230
- .cn-field-list-widget__toolbar[data-v-7d90316d] {
29408
+ .cn-field-list-widget__toolbar[data-v-643f1dd6] {
29231
29409
  display: flex;
29232
29410
  justify-content: flex-end;
29233
29411
  }
29234
- .cn-field-list-widget__table-wrap[data-v-7d90316d] {
29412
+ .cn-field-list-widget__table-wrap[data-v-643f1dd6] {
29235
29413
  display: flex;
29236
29414
  flex-direction: column;
29237
29415
  gap: 12px;
29238
29416
  overflow-x: auto;
29239
29417
  }
29240
- .cn-field-list-widget__table[data-v-7d90316d] {
29418
+ .cn-field-list-widget__table[data-v-643f1dd6] {
29241
29419
  width: 100%;
29242
29420
  border-collapse: collapse;
29243
29421
  }
29244
- .cn-field-list-widget__th[data-v-7d90316d] {
29422
+ .cn-field-list-widget__th[data-v-643f1dd6] {
29245
29423
  padding: 8px 12px;
29246
29424
  text-align: start;
29247
29425
  font-size: 13px;
@@ -29250,27 +29428,27 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29250
29428
  color: var(--color-text-maxcontrast);
29251
29429
  background: var(--color-background-hover);
29252
29430
  }
29253
- .cn-field-list-widget__th--menu[data-v-7d90316d],
29254
- .cn-field-list-widget__td--menu[data-v-7d90316d] {
29431
+ .cn-field-list-widget__th--menu[data-v-643f1dd6],
29432
+ .cn-field-list-widget__td--menu[data-v-643f1dd6] {
29255
29433
  width: 1%;
29256
29434
  text-align: end;
29257
29435
  }
29258
- .cn-field-list-widget__tr[data-v-7d90316d] {
29436
+ .cn-field-list-widget__tr[data-v-643f1dd6] {
29259
29437
  border-top: 1px solid var(--cn-board-hairline, var(--color-border));
29260
29438
  }
29261
- .cn-field-list-widget__td[data-v-7d90316d] {
29439
+ .cn-field-list-widget__td[data-v-643f1dd6] {
29262
29440
  padding: 10px 12px;
29263
29441
  vertical-align: middle;
29264
29442
  overflow-wrap: anywhere;
29265
29443
  }
29266
- .cn-field-list-widget__sr[data-v-7d90316d] {
29444
+ .cn-field-list-widget__sr[data-v-643f1dd6] {
29267
29445
  position: absolute;
29268
29446
  width: 1px;
29269
29447
  height: 1px;
29270
29448
  overflow: hidden;
29271
29449
  clip-path: inset(50%);
29272
29450
  }
29273
- .cn-field-list-widget__band[data-v-7d90316d] {
29451
+ .cn-field-list-widget__band[data-v-643f1dd6] {
29274
29452
  display: flex;
29275
29453
  flex-wrap: wrap;
29276
29454
  align-items: center;
@@ -29757,27 +29935,27 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29757
29935
  }
29758
29936
 
29759
29937
 
29760
- .cn-record-list__list[data-v-519e7f1c] {
29938
+ .cn-record-list__list[data-v-bc186ef8] {
29761
29939
  list-style: none;
29762
29940
  margin: 0;
29763
29941
  padding: 0;
29764
29942
  }
29765
- .cn-record-list__empty[data-v-519e7f1c],
29766
- .cn-record-list__error[data-v-519e7f1c] {
29943
+ .cn-record-list__empty[data-v-bc186ef8],
29944
+ .cn-record-list__error[data-v-bc186ef8] {
29767
29945
  color: var(--color-text-maxcontrast);
29768
29946
  margin: 0;
29769
29947
  }
29770
- .cn-record-list__loading[data-v-519e7f1c] {
29948
+ .cn-record-list__loading[data-v-bc186ef8] {
29771
29949
  display: flex;
29772
29950
  justify-content: center;
29773
29951
  padding: 8px 0;
29774
29952
  }
29775
29953
 
29776
29954
  /* rows */
29777
- .cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-519e7f1c] {
29955
+ .cn-record-list--rows .cn-record-list__item + .cn-record-list__item[data-v-bc186ef8] {
29778
29956
  border-top: 1px solid var(--color-border);
29779
29957
  }
29780
- .cn-record-list__row[data-v-519e7f1c] {
29958
+ .cn-record-list__row[data-v-bc186ef8] {
29781
29959
  align-items: center;
29782
29960
  color: var(--color-main-text);
29783
29961
  display: flex;
@@ -29785,11 +29963,11 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29785
29963
  padding: 12px 0;
29786
29964
  text-decoration: none;
29787
29965
  }
29788
- .cn-record-list__row--link:hover .cn-record-list__title[data-v-519e7f1c],
29789
- .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-519e7f1c] {
29966
+ .cn-record-list__row--link:hover .cn-record-list__title[data-v-bc186ef8],
29967
+ .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-bc186ef8] {
29790
29968
  text-decoration: underline;
29791
29969
  }
29792
- .cn-record-list__avatar[data-v-519e7f1c] {
29970
+ .cn-record-list__avatar[data-v-bc186ef8] {
29793
29971
  align-items: center;
29794
29972
  background: var(--color-background-hover);
29795
29973
  border-radius: 50%;
@@ -29802,67 +29980,67 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29802
29980
  justify-content: center;
29803
29981
  width: 36px;
29804
29982
  }
29805
- .cn-record-list__main[data-v-519e7f1c] {
29983
+ .cn-record-list__main[data-v-bc186ef8] {
29806
29984
  display: flex;
29807
29985
  flex: 1 1 auto;
29808
29986
  flex-direction: column;
29809
29987
  gap: 2px;
29810
29988
  min-width: 0;
29811
29989
  }
29812
- .cn-record-list__title[data-v-519e7f1c] {
29990
+ .cn-record-list__title[data-v-bc186ef8] {
29813
29991
  font-size: 15px;
29814
29992
  font-weight: 700;
29815
29993
  }
29816
- .cn-record-list__meta[data-v-519e7f1c] {
29994
+ .cn-record-list__meta[data-v-bc186ef8] {
29817
29995
  color: var(--color-text-maxcontrast);
29818
29996
  font-size: 13px;
29819
29997
  }
29820
- .cn-record-list__aside[data-v-519e7f1c] {
29998
+ .cn-record-list__aside[data-v-bc186ef8] {
29821
29999
  align-items: center;
29822
30000
  display: flex;
29823
30001
  flex: none;
29824
30002
  gap: 16px;
29825
30003
  }
29826
- .cn-record-list__trailing[data-v-519e7f1c] {
30004
+ .cn-record-list__trailing[data-v-bc186ef8] {
29827
30005
  font-size: 14px;
29828
30006
  white-space: nowrap;
29829
30007
  }
29830
- .cn-record-list__due[data-v-519e7f1c] {
30008
+ .cn-record-list__due[data-v-bc186ef8] {
29831
30009
  font-size: 14px;
29832
30010
  white-space: nowrap;
29833
30011
  }
29834
- .cn-record-list__due--danger[data-v-519e7f1c] {
30012
+ .cn-record-list__due--danger[data-v-bc186ef8] {
29835
30013
  color: var(--color-text-error, var(--color-error-text));
29836
30014
  font-weight: 600;
29837
30015
  }
29838
- .cn-record-list__due--empty[data-v-519e7f1c] {
30016
+ .cn-record-list__due--empty[data-v-bc186ef8] {
29839
30017
  color: var(--color-text-maxcontrast);
29840
30018
  }
29841
- .cn-record-list__row--action[data-v-519e7f1c] {
30019
+ .cn-record-list__row--action[data-v-bc186ef8] {
29842
30020
  flex-wrap: wrap;
29843
30021
  gap: 8px 16px;
29844
30022
  padding: 14px 0;
29845
30023
  }
29846
- .cn-record-list__row--action .cn-record-list__main[data-v-519e7f1c] {
30024
+ .cn-record-list__row--action .cn-record-list__main[data-v-bc186ef8] {
29847
30025
  flex: 1 1 280px;
29848
30026
  gap: 3px;
29849
30027
  }
29850
- .cn-record-list__title--link[data-v-519e7f1c] {
30028
+ .cn-record-list__title--link[data-v-bc186ef8] {
29851
30029
  color: var(--color-main-text);
29852
30030
  text-decoration: underline;
29853
30031
  }
29854
- .cn-record-list__pills[data-v-519e7f1c] {
30032
+ .cn-record-list__pills[data-v-bc186ef8] {
29855
30033
  display: flex;
29856
30034
  flex: 0 0 120px;
29857
30035
  gap: 6px;
29858
30036
  justify-content: flex-end;
29859
30037
  }
29860
- .cn-record-list__due--column[data-v-519e7f1c] {
30038
+ .cn-record-list__due--column[data-v-bc186ef8] {
29861
30039
  flex: 0 0 96px;
29862
30040
  font-size: 13px;
29863
30041
  text-align: end;
29864
30042
  }
29865
- .cn-record-list__action[data-v-519e7f1c] {
30043
+ .cn-record-list__action[data-v-bc186ef8] {
29866
30044
  align-items: center;
29867
30045
  background: var(--color-primary-element-light);
29868
30046
  border: 0;
@@ -29879,26 +30057,26 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29879
30057
  padding: 0 14px;
29880
30058
  text-decoration: none;
29881
30059
  }
29882
- .cn-record-list__action[data-v-519e7f1c]:hover,
29883
- .cn-record-list__action[data-v-519e7f1c]:focus-visible {
30060
+ .cn-record-list__action[data-v-bc186ef8]:hover,
30061
+ .cn-record-list__action[data-v-bc186ef8]:focus-visible {
29884
30062
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
29885
30063
  }
29886
- .cn-record-list__chevron[data-v-519e7f1c] {
30064
+ .cn-record-list__chevron[data-v-bc186ef8] {
29887
30065
  color: var(--color-text-maxcontrast);
29888
30066
  flex: none;
29889
30067
  }
29890
30068
 
29891
30069
  /* feed */
29892
- .cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-519e7f1c] {
30070
+ .cn-record-list--feed .cn-record-list__item + .cn-record-list__item[data-v-bc186ef8] {
29893
30071
  border-top: 1px solid var(--color-border);
29894
30072
  }
29895
- .cn-record-list__feed-row[data-v-519e7f1c] {
30073
+ .cn-record-list__feed-row[data-v-bc186ef8] {
29896
30074
  align-items: flex-start;
29897
30075
  display: flex;
29898
30076
  gap: 14px;
29899
30077
  padding: 12px 0;
29900
30078
  }
29901
- .cn-record-list__feed-icon[data-v-519e7f1c] {
30079
+ .cn-record-list__feed-icon[data-v-bc186ef8] {
29902
30080
  align-items: center;
29903
30081
  background: var(--color-primary-element-light);
29904
30082
  border-radius: 50%;
@@ -29909,25 +30087,25 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-33d38
29909
30087
  justify-content: center;
29910
30088
  width: 36px;
29911
30089
  }
29912
- .cn-record-list__text[data-v-519e7f1c] {
30090
+ .cn-record-list__text[data-v-bc186ef8] {
29913
30091
  font-size: 15px;
29914
30092
  }
29915
- .cn-record-list--feed .cn-record-list__main[data-v-519e7f1c] {
30093
+ .cn-record-list--feed .cn-record-list__main[data-v-bc186ef8] {
29916
30094
  color: var(--color-main-text);
29917
30095
  text-decoration: none;
29918
30096
  }
29919
30097
 
29920
30098
  /* inline */
29921
- .cn-record-list__inline-row[data-v-519e7f1c] {
30099
+ .cn-record-list__inline-row[data-v-bc186ef8] {
29922
30100
  padding: 4px 0;
29923
30101
  }
29924
- .cn-record-list__label[data-v-519e7f1c] {
30102
+ .cn-record-list__label[data-v-bc186ef8] {
29925
30103
  margin-inline-end: 4px;
29926
30104
  }
29927
- .cn-record-list__inline-title[data-v-519e7f1c] {
30105
+ .cn-record-list__inline-title[data-v-bc186ef8] {
29928
30106
  color: var(--color-main-text);
29929
30107
  }
29930
- a.cn-record-list__inline-title[data-v-519e7f1c] {
30108
+ a.cn-record-list__inline-title[data-v-bc186ef8] {
29931
30109
  color: var(--color-primary-element);
29932
30110
  text-decoration: underline;
29933
30111
  }
@@ -30247,6 +30425,7 @@ a.cn-record-list__inline-title[data-v-519e7f1c] {
30247
30425
  }
30248
30426
 
30249
30427
  .cn-form-widget__textarea {
30428
+ box-sizing: border-box;
30250
30429
  width: 100%;
30251
30430
  min-height: 80px;
30252
30431
  padding: 8px;
@@ -30269,6 +30448,16 @@ a.cn-record-list__inline-title[data-v-519e7f1c] {
30269
30448
  margin: 0;
30270
30449
  }
30271
30450
 
30451
+ /* A select takes its field's width, however narrow the card. NcSelect is at
30452
+ least 260px wide on its own, so in pipelinq's 234px "Nieuw contactmoment"
30453
+ card at 1100 wide the channel and client selects ran 40px past the card's
30454
+ edge. The client picker (CnResourceSelect) is an NcSelect too.
30455
+ @spec openspec/changes/interaction-form-fits-and-reads-dutch/specs/interaction-form-widget/spec.md#requirement-the-interaction-form-fits-its-card-and-reads-in-the-readers-language */
30456
+ .cn-form-widget .v-select.select {
30457
+ min-width: 0;
30458
+ width: 100%;
30459
+ }
30460
+
30272
30461
 
30273
30462
  .cn-banner-form[data-v-0c839173] {
30274
30463
  display: flex;
@@ -36684,24 +36873,24 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
36684
36873
  }
36685
36874
 
36686
36875
 
36687
- .cn-walkthrough[data-v-165ee49b] {
36876
+ .cn-walkthrough[data-v-34991bbf] {
36688
36877
  position: fixed;
36689
36878
  inset: 0;
36690
36879
  pointer-events: none;
36691
36880
  }
36692
- .cn-walkthrough__live[data-v-165ee49b] {
36881
+ .cn-walkthrough__live[data-v-34991bbf] {
36693
36882
  position: absolute;
36694
36883
  width: 1px;
36695
36884
  height: 1px;
36696
36885
  overflow: hidden;
36697
36886
  clip-path: inset(50%);
36698
36887
  }
36699
- .cn-walkthrough__dim[data-v-165ee49b] {
36888
+ .cn-walkthrough__dim[data-v-34991bbf] {
36700
36889
  position: fixed;
36701
36890
  background: var(--color-modal-background, rgba(0, 0, 0, 0.5));
36702
36891
  pointer-events: auto;
36703
36892
  }
36704
- .cn-walkthrough__dim--full[data-v-165ee49b] {
36893
+ .cn-walkthrough__dim--full[data-v-34991bbf] {
36705
36894
  inset: 0;
36706
36895
  }
36707
36896
 
@@ -36710,16 +36899,16 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
36710
36899
  underneath (see the template comment). */
36711
36900
  /* Lets the step's own task through — and therefore cannot be clicked to
36712
36901
  dismiss; ESC, the close button and Back/Finish remain (see the template). */
36713
- .cn-walkthrough__dim--passthrough[data-v-165ee49b] {
36902
+ .cn-walkthrough__dim--passthrough[data-v-34991bbf] {
36714
36903
  pointer-events: none;
36715
36904
  }
36716
- .cn-walkthrough__ring[data-v-165ee49b] {
36905
+ .cn-walkthrough__ring[data-v-34991bbf] {
36717
36906
  position: fixed;
36718
36907
  border-radius: var(--border-radius-large, 8px);
36719
36908
  box-shadow: 0 0 0 2px var(--color-primary-element, #0082c9);
36720
36909
  pointer-events: none;
36721
36910
  }
36722
- .cn-walkthrough__card[data-v-165ee49b] {
36911
+ .cn-walkthrough__card[data-v-34991bbf] {
36723
36912
  position: fixed;
36724
36913
  width: 320px;
36725
36914
  max-width: calc(100vw - 24px);
@@ -36730,11 +36919,11 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
36730
36919
  padding: 16px;
36731
36920
  pointer-events: auto;
36732
36921
  }
36733
- .cn-walkthrough__card--docked[data-v-165ee49b] {
36922
+ .cn-walkthrough__card--docked[data-v-34991bbf] {
36734
36923
  inset-block-end: 16px;
36735
36924
  inset-inline-start: 16px;
36736
36925
  }
36737
- .cn-walkthrough__close[data-v-165ee49b] {
36926
+ .cn-walkthrough__close[data-v-34991bbf] {
36738
36927
  /* !important beats NcButton's own `position: relative`, which would otherwise
36739
36928
  leave the close button in-flow at the card's top-left. */
36740
36929
  position: absolute !important;
@@ -36743,37 +36932,37 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
36743
36932
  inset-inline-start: auto;
36744
36933
  z-index: 1;
36745
36934
  }
36746
- .cn-walkthrough__counter[data-v-165ee49b] {
36935
+ .cn-walkthrough__counter[data-v-34991bbf] {
36747
36936
  font-size: 0.8125rem;
36748
36937
  color: var(--color-text-maxcontrast);
36749
36938
  margin-bottom: 4px;
36750
36939
  /* Keep the counter/title clear of the absolutely-positioned close button. */
36751
36940
  padding-inline-end: 32px;
36752
36941
  }
36753
- .cn-walkthrough__title[data-v-165ee49b] {
36942
+ .cn-walkthrough__title[data-v-34991bbf] {
36754
36943
  margin: 0 0 6px;
36755
36944
  font-size: 1.1rem;
36756
36945
  }
36757
- .cn-walkthrough__body[data-v-165ee49b] {
36946
+ .cn-walkthrough__body[data-v-34991bbf] {
36758
36947
  margin: 0 0 8px;
36759
36948
  }
36760
- .cn-walkthrough__task[data-v-165ee49b] {
36949
+ .cn-walkthrough__task[data-v-34991bbf] {
36761
36950
  margin: 0 0 8px;
36762
36951
  padding: 8px;
36763
36952
  background: var(--color-primary-element-light, var(--color-background-hover));
36764
36953
  border-radius: var(--border-radius, 4px);
36765
36954
  font-weight: 600;
36766
36955
  }
36767
- .cn-walkthrough__task-icon[data-v-165ee49b] {
36956
+ .cn-walkthrough__task-icon[data-v-34991bbf] {
36768
36957
  margin-inline-end: 4px;
36769
36958
  }
36770
- .cn-walkthrough__actions[data-v-165ee49b] {
36959
+ .cn-walkthrough__actions[data-v-34991bbf] {
36771
36960
  display: flex;
36772
36961
  align-items: center;
36773
36962
  gap: 8px;
36774
36963
  margin-top: 8px;
36775
36964
  }
36776
- .cn-walkthrough__spacer[data-v-165ee49b] {
36965
+ .cn-walkthrough__spacer[data-v-34991bbf] {
36777
36966
  flex: 1 1 auto;
36778
36967
  }
36779
36968
 
@@ -37355,41 +37544,41 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37355
37544
  }
37356
37545
 
37357
37546
 
37358
- .cn-body-sections[data-v-19a0caa4] {
37547
+ .cn-body-sections[data-v-44324dca] {
37359
37548
  display: flex;
37360
37549
  flex-direction: column;
37361
37550
  gap: 16px;
37362
37551
  width: 100%;
37363
37552
  }
37364
- .cn-body-sections--grid[data-v-19a0caa4] {
37553
+ .cn-body-sections--grid[data-v-44324dca] {
37365
37554
  display: grid;
37366
37555
  grid-template-columns: repeat(12, 1fr);
37367
37556
  gap: 16px;
37368
37557
  }
37369
- .cn-body-sections__section[data-v-19a0caa4] {
37558
+ .cn-body-sections__section[data-v-44324dca] {
37370
37559
  min-width: 0;
37371
37560
  }
37372
37561
 
37373
37562
  /* Same card as the grid's widgets, so a section reads as one of them. */
37374
- .cn-body-sections__section--card[data-v-19a0caa4] {
37563
+ .cn-body-sections__section--card[data-v-44324dca] {
37375
37564
  padding: 12px 16px 16px;
37376
37565
  background: var(--color-main-background);
37377
37566
  border: 1px solid var(--color-border);
37378
37567
  border-radius: var(--border-radius-large, 8px);
37379
37568
  }
37380
- .cn-body-sections__section--card > .cn-body-sections__title[data-v-19a0caa4] {
37569
+ .cn-body-sections__section--card > .cn-body-sections__title[data-v-44324dca] {
37381
37570
  margin: 0 -16px 12px;
37382
37571
  padding: 0 16px 12px;
37383
37572
  font-size: 14px;
37384
37573
  border-bottom: 1px solid var(--color-border);
37385
37574
  }
37386
- .cn-body-sections__title[data-v-19a0caa4] {
37575
+ .cn-body-sections__title[data-v-44324dca] {
37387
37576
  margin: 0 0 8px;
37388
37577
  font-size: 16px;
37389
37578
  font-weight: 600;
37390
37579
  color: var(--color-main-text);
37391
37580
  }
37392
- .cn-body-sections__error[data-v-19a0caa4] {
37581
+ .cn-body-sections__error[data-v-44324dca] {
37393
37582
  padding: 12px 16px;
37394
37583
  border: 1px solid var(--color-border);
37395
37584
  border-radius: var(--border-radius-large, 12px);
@@ -37399,17 +37588,17 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37399
37588
  }
37400
37589
 
37401
37590
 
37402
- .cn-dashboard-grid[data-v-29653a76] {
37591
+ .cn-dashboard-grid[data-v-a91998fc] {
37403
37592
  width: 100%;
37404
37593
  min-height: 200px;
37405
37594
  }
37406
- .grid-stack[data-v-29653a76] {
37595
+ .grid-stack[data-v-a91998fc] {
37407
37596
  background: transparent;
37408
37597
  }
37409
37598
 
37410
37599
  /* Screen-reader-only text: the keyboard key map and the live region. Kept in
37411
37600
  the layout (not `display: none`) so assistive tech still reads it. */
37412
- .cn-dashboard-grid__sr-only[data-v-29653a76] {
37601
+ .cn-dashboard-grid__sr-only[data-v-a91998fc] {
37413
37602
  position: absolute;
37414
37603
  width: 1px;
37415
37604
  height: 1px;
@@ -37424,7 +37613,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37424
37613
  /* Grid items become tab stops in edit mode — give them a visible focus ring
37425
37614
  that satisfies WCAG 2.1 SC 2.4.7 without relying on the widget's own
37426
37615
  styling. `outline-offset` keeps the ring outside the rounded card. */
37427
- .grid-stack-item[data-v-29653a76]:focus-visible {
37616
+ .grid-stack-item[data-v-a91998fc]:focus-visible {
37428
37617
  outline: 2px solid var(--color-primary-element, #0082c9);
37429
37618
  outline-offset: 2px;
37430
37619
  border-radius: var(--border-radius-container-large, 16px);
@@ -37436,19 +37625,19 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37436
37625
  cell never shrank: "Waiting for me" stayed a tall card around one row. In
37437
37626
  such a cell the child takes its own height. A cell without the key keeps
37438
37627
  the filling child. */
37439
- .cn-dashboard-grid__item--fit[data-v-29653a76] > .grid-stack-item-content > * {
37628
+ .cn-dashboard-grid__item--fit[data-v-a91998fc] > .grid-stack-item-content > * {
37440
37629
  height: auto;
37441
37630
  }
37442
- [data-v-29653a76] .grid-stack-item-content {
37631
+ [data-v-a91998fc] .grid-stack-item-content {
37443
37632
  background: var(--color-main-background);
37444
37633
  border: none;
37445
37634
  box-shadow: none;
37446
37635
  overflow: hidden;
37447
37636
  }
37448
- [data-v-29653a76] .grid-stack-item-content:has(.cn-widget-wrapper--borderless) {
37637
+ [data-v-a91998fc] .grid-stack-item-content:has(.cn-widget-wrapper--borderless) {
37449
37638
  background: transparent;
37450
37639
  }
37451
- [data-v-29653a76] .grid-stack-placeholder > .placeholder-content {
37640
+ [data-v-a91998fc] .grid-stack-placeholder > .placeholder-content {
37452
37641
  background: var(--color-primary-element-light);
37453
37642
  border: 2px dashed var(--color-primary-element);
37454
37643
  border-radius: var(--border-radius-large);
@@ -37716,7 +37905,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37716
37905
  }
37717
37906
 
37718
37907
 
37719
- .cn-dashboard-page[data-v-4475ac48] {
37908
+ .cn-dashboard-page[data-v-4abdd0ae] {
37720
37909
  padding: 20px;
37721
37910
  max-width: 1800px;
37722
37911
  /* Centre the leftover space once the cap engages, so a wide screen shows
@@ -37730,7 +37919,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37730
37919
  overflow-y: auto;
37731
37920
  box-sizing: border-box;
37732
37921
  }
37733
- .cn-dashboard-page__header[data-v-4475ac48] {
37922
+ .cn-dashboard-page__header[data-v-4abdd0ae] {
37734
37923
  display: flex;
37735
37924
  justify-content: space-between;
37736
37925
  align-items: flex-start;
@@ -37742,21 +37931,21 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37742
37931
  room. Only the HEADER shifts right — body widgets keep full width. */
37743
37932
  padding-inline-start: 56px;
37744
37933
  }
37745
- .cn-dashboard-page__header-left[data-v-4475ac48] {
37934
+ .cn-dashboard-page__header-left[data-v-4abdd0ae] {
37746
37935
  min-width: 0;
37747
37936
  }
37748
- .cn-dashboard-page__title-row[data-v-4475ac48] {
37937
+ .cn-dashboard-page__title-row[data-v-4abdd0ae] {
37749
37938
  display: flex;
37750
37939
  align-items: center;
37751
37940
  flex-wrap: wrap;
37752
37941
  gap: 12px;
37753
37942
  }
37754
- .cn-dashboard-page__title[data-v-4475ac48] {
37943
+ .cn-dashboard-page__title[data-v-4abdd0ae] {
37755
37944
  margin: 0;
37756
37945
  font-size: 20px;
37757
37946
  font-weight: 700;
37758
37947
  }
37759
- .cn-dashboard-page__description[data-v-4475ac48] {
37948
+ .cn-dashboard-page__description[data-v-4abdd0ae] {
37760
37949
  margin: 4px 0 0;
37761
37950
  font-size: 14px;
37762
37951
  color: var(--color-text-maxcontrast);
@@ -37764,19 +37953,19 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37764
37953
 
37765
37954
  /* Board look (screens-dashboard-parity): h1 28/700, a 15px grey subtitle 6px
37766
37955
  under it, and 40px buttons with a 10px gap. */
37767
- .cn-dashboard-page--board .cn-dashboard-page__title[data-v-4475ac48] {
37956
+ .cn-dashboard-page--board .cn-dashboard-page__title[data-v-4abdd0ae] {
37768
37957
  font-size: 28px;
37769
37958
  font-weight: 700;
37770
37959
  line-height: 1.2;
37771
37960
  }
37772
- .cn-dashboard-page--board .cn-dashboard-page__description[data-v-4475ac48] {
37961
+ .cn-dashboard-page--board .cn-dashboard-page__description[data-v-4abdd0ae] {
37773
37962
  margin: 6px 0 0;
37774
37963
  font-size: 15px;
37775
37964
  }
37776
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4475ac48] {
37965
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4abdd0ae] {
37777
37966
  gap: 10px;
37778
37967
  }
37779
- .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4475ac48] .button-vue {
37968
+ .cn-dashboard-page--board .cn-dashboard-page__header-actions[data-v-4abdd0ae] .button-vue {
37780
37969
  min-height: var(--cn-board-control-height, 40px);
37781
37970
  height: var(--cn-board-control-height, 40px);
37782
37971
  }
@@ -37784,17 +37973,17 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37784
37973
  /* The switch row under the header (screens-dashboard-greeting-header): the
37785
37974
  view switch left, the `viewLinks` pills right (DqMijnWerk: pills 34px high,
37786
37975
  radius 17, 13px/600, a 14px icon, primary light on primary deep). */
37787
- .cn-dashboard-page__switch-row[data-v-4475ac48] {
37976
+ .cn-dashboard-page__switch-row[data-v-4abdd0ae] {
37788
37977
  display: flex;
37789
37978
  flex-wrap: wrap;
37790
37979
  align-items: center;
37791
37980
  gap: 10px;
37792
37981
  margin-bottom: var(--cn-board-section-gap, 20px);
37793
37982
  }
37794
- .cn-dashboard-page__switch-row-spacer[data-v-4475ac48] {
37983
+ .cn-dashboard-page__switch-row-spacer[data-v-4abdd0ae] {
37795
37984
  flex: 1 1 auto;
37796
37985
  }
37797
- .cn-dashboard-page__view-link[data-v-4475ac48] {
37986
+ .cn-dashboard-page__view-link[data-v-4abdd0ae] {
37798
37987
  display: inline-flex;
37799
37988
  align-items: center;
37800
37989
  gap: 6px;
@@ -37808,36 +37997,36 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37808
37997
  white-space: nowrap;
37809
37998
  text-decoration: none !important;
37810
37999
  }
37811
- .cn-dashboard-page__view-link[data-v-4475ac48]:hover {
38000
+ .cn-dashboard-page__view-link[data-v-4abdd0ae]:hover {
37812
38001
  background: var(--color-primary-element-light-hover, var(--color-primary-element-light));
37813
38002
  }
37814
- .cn-dashboard-page__view-link[data-v-4475ac48]:focus-visible {
38003
+ .cn-dashboard-page__view-link[data-v-4abdd0ae]:focus-visible {
37815
38004
  outline: 2px solid var(--color-main-text);
37816
38005
  outline-offset: 2px;
37817
38006
  }
37818
- .cn-dashboard-page__view-link-icon[data-v-4475ac48] {
38007
+ .cn-dashboard-page__view-link-icon[data-v-4abdd0ae] {
37819
38008
  display: inline-flex;
37820
38009
  }
37821
38010
 
37822
38011
  /* The period group, in a row of its own between the header and the KPI row. */
37823
- .cn-dashboard-page__date-range--segmented[data-v-4475ac48] {
38012
+ .cn-dashboard-page__date-range--segmented[data-v-4abdd0ae] {
37824
38013
  margin-bottom: 16px;
37825
38014
  }
37826
- .cn-dashboard-page__date-segmented[data-v-4475ac48] {
38015
+ .cn-dashboard-page__date-segmented[data-v-4abdd0ae] {
37827
38016
  display: flex;
37828
38017
  align-items: center;
37829
38018
  gap: 8px;
37830
38019
  }
37831
38020
 
37832
38021
  /* The KPI row above the grid: tiles are cells of the auto-fit grid. */
37833
- .cn-dashboard-page__kpi-row[data-v-4475ac48] {
38022
+ .cn-dashboard-page__kpi-row[data-v-4abdd0ae] {
37834
38023
  margin-bottom: var(--cn-board-section-gap, 16px);
37835
38024
  }
37836
- .cn-dashboard-page__kpi-cell[data-v-4475ac48] {
38025
+ .cn-dashboard-page__kpi-cell[data-v-4abdd0ae] {
37837
38026
  display: flex;
37838
38027
  min-width: 0;
37839
38028
  }
37840
- .cn-dashboard-page__kpi-cell[data-v-4475ac48] > * {
38029
+ .cn-dashboard-page__kpi-cell[data-v-4abdd0ae] > * {
37841
38030
  flex: 1 1 auto;
37842
38031
  min-width: 0;
37843
38032
  }
@@ -37850,7 +38039,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37850
38039
  scoped chip rules then silently don't match and the chip collapses into
37851
38040
  NcActions' ~30px icon slot (text wraps to "Last / 30 / days"). The
37852
38041
  data-testid is stable across chunks, so those rules match regardless. */
37853
- .cn-dashboard-page__header-actions[data-v-4475ac48] {
38042
+ .cn-dashboard-page__header-actions[data-v-4abdd0ae] {
37854
38043
  display: flex;
37855
38044
  align-items: center;
37856
38045
  gap: 8px;
@@ -37866,19 +38055,19 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37866
38055
 
37867
38056
  /* Date-range header band. Kept compact so it doesn't open a tall gap
37868
38057
  above the grid; the pills variant is a single tidy toggle row. */
37869
- .cn-dashboard-page__date-range[data-v-4475ac48] {
38058
+ .cn-dashboard-page__date-range[data-v-4abdd0ae] {
37870
38059
  margin-bottom: 12px;
37871
38060
  }
37872
- .cn-dashboard-page__date-range--pills[data-v-4475ac48] {
38061
+ .cn-dashboard-page__date-range--pills[data-v-4abdd0ae] {
37873
38062
  margin-bottom: 8px;
37874
38063
  }
37875
- .cn-dashboard-page__date-pills[data-v-4475ac48] {
38064
+ .cn-dashboard-page__date-pills[data-v-4abdd0ae] {
37876
38065
  display: flex;
37877
38066
  align-items: center;
37878
38067
  flex-wrap: wrap;
37879
38068
  gap: 6px;
37880
38069
  }
37881
- .cn-dashboard-page__date-pill[data-v-4475ac48] {
38070
+ .cn-dashboard-page__date-pill[data-v-4abdd0ae] {
37882
38071
  display: inline-flex;
37883
38072
  align-items: center;
37884
38073
  padding: 5px 14px;
@@ -37893,77 +38082,77 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37893
38082
  cursor: pointer;
37894
38083
  transition: background-color 100ms ease, border-color 100ms ease, color 100ms ease;
37895
38084
  }
37896
- .cn-dashboard-page__date-pill[data-v-4475ac48]:hover {
38085
+ .cn-dashboard-page__date-pill[data-v-4abdd0ae]:hover {
37897
38086
  background: var(--color-background-hover);
37898
38087
  }
37899
- .cn-dashboard-page__date-pill[data-v-4475ac48]:focus-visible {
38088
+ .cn-dashboard-page__date-pill[data-v-4abdd0ae]:focus-visible {
37900
38089
  outline: 2px solid var(--color-primary-element);
37901
38090
  outline-offset: 2px;
37902
38091
  }
37903
- .cn-dashboard-page__date-pill--active[data-v-4475ac48] {
38092
+ .cn-dashboard-page__date-pill--active[data-v-4abdd0ae] {
37904
38093
  background: var(--color-primary-element);
37905
38094
  border-color: var(--color-primary-element);
37906
38095
  color: var(--color-primary-element-text);
37907
38096
  }
37908
- .cn-dashboard-page__date-pill--active[data-v-4475ac48]:hover {
38097
+ .cn-dashboard-page__date-pill--active[data-v-4abdd0ae]:hover {
37909
38098
  background: var(--color-primary-element-hover, var(--color-primary-element));
37910
38099
  }
37911
38100
 
37912
38101
  /* The custom-range pill is de-emphasised — dashed outline, muted text —
37913
38102
  so it reads as an escape hatch rather than a primary option. */
37914
- .cn-dashboard-page__date-pill--custom[data-v-4475ac48] {
38103
+ .cn-dashboard-page__date-pill--custom[data-v-4abdd0ae] {
37915
38104
  border-style: dashed;
37916
38105
  color: var(--color-text-maxcontrast);
37917
38106
  }
37918
- .cn-dashboard-page__date-pill-custom[data-v-4475ac48] .action-item__menutoggle {
38107
+ .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .action-item__menutoggle {
37919
38108
  min-width: 0;
37920
38109
  min-height: 0;
37921
38110
  padding: 0;
37922
38111
  background: transparent;
37923
38112
  border: none;
37924
38113
  }
37925
- .cn-dashboard-page__date-pill-custom[data-v-4475ac48] .button-vue,
37926
- .cn-dashboard-page__date-pill-custom[data-v-4475ac48] .button-vue__wrapper,
37927
- .cn-dashboard-page__date-pill-custom[data-v-4475ac48] .button-vue__icon {
38114
+ .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .button-vue,
38115
+ .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .button-vue__wrapper,
38116
+ .cn-dashboard-page__date-pill-custom[data-v-4abdd0ae] .button-vue__icon {
37928
38117
  width: auto !important;
37929
38118
  min-width: 0 !important;
37930
38119
  overflow: visible !important;
37931
38120
  }
37932
- .cn-dashboard-page__empty[data-v-4475ac48] {
38121
+ .cn-dashboard-page__empty[data-v-4abdd0ae] {
37933
38122
  padding: 60px 20px;
37934
38123
  }
37935
38124
 
37936
38125
  /* The page's view switch on a page without a header row: at the end of its
37937
38126
  own row, above the grids, where the header would have put it. */
37938
- .cn-dashboard-page__view-switch[data-v-4475ac48] {
38127
+ .cn-dashboard-page__view-switch[data-v-4abdd0ae] {
37939
38128
  display: flex;
37940
38129
  justify-content: flex-end;
37941
38130
  margin-bottom: 12px;
37942
38131
  }
37943
38132
 
37944
38133
  /* A view the switch shows with nothing to draw. */
37945
- .cn-page-view-region--empty[data-v-4475ac48] {
38134
+ .cn-page-view-region--empty[data-v-4abdd0ae] {
37946
38135
  padding: 40px 20px;
37947
38136
  }
37948
- .cn-dashboard-page__page-filters[data-v-4475ac48] {
38137
+ .cn-dashboard-page__page-filters[data-v-4abdd0ae] {
37949
38138
  display: flex;
37950
38139
  flex-wrap: wrap;
37951
38140
  gap: 16px;
37952
38141
  align-items: flex-end;
37953
38142
  margin-bottom: 12px;
37954
38143
  }
37955
- .cn-dashboard-page__page-filter[data-v-4475ac48] {
38144
+ .cn-dashboard-page__page-filter[data-v-4abdd0ae] {
37956
38145
  display: flex;
37957
38146
  flex-direction: column;
37958
38147
  gap: 4px;
37959
38148
  min-width: 200px;
37960
38149
  }
37961
- .cn-dashboard-page__page-filter-label[data-v-4475ac48] {
38150
+ .cn-dashboard-page__page-filter-label[data-v-4abdd0ae] {
37962
38151
  font-size: 0.85em;
37963
38152
  font-weight: 600;
37964
38153
  color: var(--color-text-maxcontrast);
37965
38154
  }
37966
- .cn-dashboard-page__widget-edit[data-v-4475ac48] {
38155
+ .cn-dashboard-page__widget-edit[data-v-4abdd0ae] {
37967
38156
  position: absolute;
37968
38157
  top: 4px;
37969
38158
  inset-inline-end: 4px;
@@ -37982,8 +38171,8 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37982
38171
  and centre the card. */
37983
38172
  /* `safe` centre so an overflowing tile does not spill out of the top, where
37984
38173
  flex overflow cannot be scrolled back to. Same as detail-page.css. */
37985
- .cn-dashboard-page__card-fit[data-v-4475ac48] .cn-widget-wrapper__content,
37986
- .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-4475ac48] .cn-widget-wrapper__content {
38174
+ .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-widget-wrapper__content,
38175
+ .cn-dashboard-page__card-fit.cn-widget-wrapper--flush[data-v-4abdd0ae] .cn-widget-wrapper__content {
37987
38176
  overflow: hidden;
37988
38177
  display: flex;
37989
38178
  flex-direction: column;
@@ -37999,7 +38188,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
37999
38188
  shows up as a scrollbar the user has to drag to see the whole graph. Same
38000
38189
  shape as the card-fit rule above, minus the padding: chart tiles render
38001
38190
  `flush`, and apexcharts already draws its own margins. */
38002
- .cn-dashboard-page__chart-fit[data-v-4475ac48] .cn-widget-wrapper__content {
38191
+ .cn-dashboard-page__chart-fit[data-v-4abdd0ae] .cn-widget-wrapper__content {
38003
38192
  overflow: hidden;
38004
38193
  display: flex;
38005
38194
  flex-direction: column;
@@ -38009,13 +38198,13 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38009
38198
  /* Card content (stat / gauge / delta) must fit the tile width: let the
38010
38199
  widget shrink and its value/label truncate instead of pushing past the
38011
38200
  tile edge (the horizontal clip on long currency values). */
38012
- .cn-dashboard-page__card-fit[data-v-4475ac48] .cn-stat-widget,
38013
- .cn-dashboard-page__card-fit[data-v-4475ac48] .cn-gauge-widget,
38014
- .cn-dashboard-page__card-fit[data-v-4475ac48] .cn-delta-widget {
38201
+ .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-stat-widget,
38202
+ .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-gauge-widget,
38203
+ .cn-dashboard-page__card-fit[data-v-4abdd0ae] .cn-delta-widget {
38015
38204
  min-width: 0;
38016
38205
  max-width: 100%;
38017
38206
  }
38018
- .cn-dashboard-page__unknown[data-v-4475ac48] {
38207
+ .cn-dashboard-page__unknown[data-v-4abdd0ae] {
38019
38208
  display: flex;
38020
38209
  align-items: center;
38021
38210
  justify-content: center;
@@ -38026,29 +38215,29 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38026
38215
  }
38027
38216
 
38028
38217
  /* widget-ref content items */
38029
- .cn-dashboard-page__content[data-v-4475ac48] {
38218
+ .cn-dashboard-page__content[data-v-4abdd0ae] {
38030
38219
  display: flex;
38031
38220
  flex-direction: column;
38032
38221
  gap: 16px;
38033
38222
  }
38034
- .cn-dashboard-page__content-item[data-v-4475ac48] {
38223
+ .cn-dashboard-page__content-item[data-v-4abdd0ae] {
38035
38224
  width: 100%;
38036
38225
  }
38037
38226
  /* On a phone (screens-dashboard-phone) the touch targets of a board dashboard
38038
38227
  are 44px: the widget Actions menu and the KPI tiles. */
38039
38228
  @media (max-width: 640px) {
38040
- .cn-dashboard-page--board[data-v-4475ac48] .cn-widget-wrapper__actions .action-item__menutoggle,
38041
- .cn-dashboard-page--board[data-v-4475ac48] .cn-widget-wrapper__actions .button-vue {
38229
+ .cn-dashboard-page--board[data-v-4abdd0ae] .cn-widget-wrapper__actions .action-item__menutoggle,
38230
+ .cn-dashboard-page--board[data-v-4abdd0ae] .cn-widget-wrapper__actions .button-vue {
38042
38231
  min-height: 44px;
38043
38232
  }
38044
- .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-4475ac48] {
38233
+ .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-4abdd0ae] {
38045
38234
  min-height: 44px;
38046
38235
  }
38047
38236
  }
38048
38237
 
38049
38238
  /* What a registry widget reports for its card header (`header` event): the
38050
38239
  note beside the link ("3 in total") and one action, as on a detail page. */
38051
- .cn-dashboard-page__widget-count[data-v-4475ac48] {
38240
+ .cn-dashboard-page__widget-count[data-v-4abdd0ae] {
38052
38241
  align-self: center;
38053
38242
  padding: 1px 8px;
38054
38243
  border-radius: 10px;
@@ -38057,13 +38246,13 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38057
38246
  font-size: 13px;
38058
38247
  font-weight: 600;
38059
38248
  }
38060
- .cn-dashboard-page__widget-note[data-v-4475ac48] {
38249
+ .cn-dashboard-page__widget-note[data-v-4abdd0ae] {
38061
38250
  align-self: center;
38062
38251
  color: var(--color-text-maxcontrast);
38063
38252
  font-size: 14px;
38064
38253
  white-space: nowrap;
38065
38254
  }
38066
- .cn-dashboard-page__widget-action[data-v-4475ac48] {
38255
+ .cn-dashboard-page__widget-action[data-v-4abdd0ae] {
38067
38256
  display: inline-flex;
38068
38257
  align-items: center;
38069
38258
  align-self: center;
@@ -38079,7 +38268,7 @@ button.cn-object-calendar__overflow[data-v-2735e5ef] {
38079
38268
  white-space: nowrap;
38080
38269
  cursor: pointer;
38081
38270
  }
38082
- .cn-dashboard-page__widget-action[data-v-4475ac48]:focus-visible {
38271
+ .cn-dashboard-page__widget-action[data-v-4abdd0ae]:focus-visible {
38083
38272
  outline: 2px solid var(--color-primary-element);
38084
38273
  outline-offset: 2px;
38085
38274
  }
@@ -40413,33 +40602,51 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40413
40602
  }
40414
40603
 
40415
40604
 
40416
- .cn-reports-page[data-v-7629715a] {
40605
+ .cn-reports-page[data-v-327b60f8] {
40417
40606
  padding: 16px;
40418
40607
  }
40419
40608
 
40420
40609
  /* Clear the Nextcloud navigation toggle button (44px wide, absolutely
40421
40610
  positioned at the left edge of .app-content) plus 12px breathing room, as
40422
40611
  CnPageHeader does. Only the header shifts; the body keeps the full width. */
40423
- .cn-reports-page__header[data-v-7629715a] {
40612
+ .cn-reports-page__header[data-v-327b60f8] {
40424
40613
  padding-inline-start: 56px;
40425
40614
  }
40426
- .cn-reports-page__title[data-v-7629715a] {
40615
+ .cn-reports-page__title[data-v-327b60f8] {
40427
40616
  margin: 0 0 4px;
40428
40617
  }
40429
- .cn-reports-page__description[data-v-7629715a] {
40618
+ .cn-reports-page__heading-row[data-v-327b60f8] {
40619
+ display: flex;
40620
+ flex-wrap: wrap;
40621
+ align-items: flex-start;
40622
+ justify-content: space-between;
40623
+ gap: 12px 24px;
40624
+ }
40625
+ .cn-reports-page__heading-row .cn-reports-page__title[data-v-327b60f8] {
40626
+ flex: 1 1 320px;
40627
+ min-width: 0;
40628
+ }
40629
+ .cn-reports-page__header-buttons[data-v-327b60f8] {
40630
+ display: flex;
40631
+ flex: none;
40632
+ flex-wrap: wrap;
40633
+ align-items: center;
40634
+ gap: 10px;
40635
+ }
40636
+ .cn-reports-page__description[data-v-327b60f8] {
40430
40637
  margin: 0 0 16px;
40431
40638
  color: var(--color-text-maxcontrast);
40432
40639
  }
40433
- .cn-reports-page__filter[data-v-7629715a] {
40640
+ .cn-reports-page__filter[data-v-327b60f8] {
40434
40641
  display: flex;
40435
40642
  align-items: center;
40436
40643
  gap: 8px;
40437
40644
  margin-bottom: 16px;
40438
40645
  }
40439
- .cn-reports-page__filter-select[data-v-7629715a] {
40646
+ .cn-reports-page__filter-select[data-v-327b60f8] {
40440
40647
  min-width: 220px;
40441
40648
  }
40442
- .cn-reports-page__grid[data-v-7629715a] {
40649
+ .cn-reports-page__grid[data-v-327b60f8] {
40443
40650
  display: grid;
40444
40651
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
40445
40652
  gap: 12px;
@@ -40447,7 +40654,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40447
40654
  margin: 0;
40448
40655
  padding: 0;
40449
40656
  }
40450
- .cn-reports-page__card[data-v-7629715a] {
40657
+ .cn-reports-page__card[data-v-327b60f8] {
40451
40658
  display: flex;
40452
40659
  flex-direction: column;
40453
40660
  gap: 4px;
@@ -40458,22 +40665,22 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40458
40665
  color: inherit;
40459
40666
  text-decoration: none;
40460
40667
  }
40461
- .cn-reports-page__card[data-v-7629715a]:hover,
40462
- .cn-reports-page__card[data-v-7629715a]:focus {
40668
+ .cn-reports-page__card[data-v-327b60f8]:hover,
40669
+ .cn-reports-page__card[data-v-327b60f8]:focus {
40463
40670
  background-color: var(--color-background-hover);
40464
40671
  }
40465
- .cn-reports-page__card-title[data-v-7629715a] {
40672
+ .cn-reports-page__card-title[data-v-327b60f8] {
40466
40673
  font-weight: bold;
40467
40674
  }
40468
- .cn-reports-page__card-description[data-v-7629715a],
40469
- .cn-reports-page__card-category[data-v-7629715a] {
40675
+ .cn-reports-page__card-description[data-v-327b60f8],
40676
+ .cn-reports-page__card-category[data-v-327b60f8] {
40470
40677
  color: var(--color-text-maxcontrast);
40471
40678
  font-size: 0.9em;
40472
40679
  }
40473
- .cn-reports-page__empty[data-v-7629715a] {
40680
+ .cn-reports-page__empty[data-v-327b60f8] {
40474
40681
  color: var(--color-text-maxcontrast);
40475
40682
  }
40476
- .cn-reports-page__widgets[data-v-7629715a] {
40683
+ .cn-reports-page__widgets[data-v-327b60f8] {
40477
40684
  margin-top: 20px;
40478
40685
  }
40479
40686