@conduction/nextcloud-vue 2.90.0 → 2.92.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +10 -5
  2. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  3. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  4. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  5. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +15 -1
  6. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  7. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +1 -1
  8. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  9. package/dist/esm/components/CnDialog/CnDialog.vue2.js +1 -1
  10. package/dist/esm/components/CnDialog/CnDialog.vue2.js.map +1 -1
  11. package/dist/esm/components/CnDialog/CnDialog.vue3.js.map +1 -1
  12. package/dist/esm/components/CnDialogHeader/CnDialogHeader.vue2.js +1 -1
  13. package/dist/esm/components/CnDialogHeader/CnDialogHeader.vue2.js.map +1 -1
  14. package/dist/esm/components/CnDialogHeader/CnDialogHeader.vue3.js.map +1 -1
  15. package/dist/esm/components/CnFormDialog/CnFormDialog.vue.js +1 -1
  16. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +18 -10
  17. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  18. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +16 -8
  19. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  20. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js +1 -1
  21. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js +16 -1
  22. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js.map +1 -1
  23. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js +1 -1
  24. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js.map +1 -1
  25. package/dist/esm/components/CnLinkCardsPage/CnLinkCardsPage.vue.js +1 -1
  26. package/dist/esm/components/CnLinkCardsPage/CnLinkCardsPage.vue2.js +156 -3
  27. package/dist/esm/components/CnLinkCardsPage/CnLinkCardsPage.vue2.js.map +1 -1
  28. package/dist/esm/components/CnLinkCardsPage/CnLinkCardsPage.vue3.js +168 -52
  29. package/dist/esm/components/CnLinkCardsPage/CnLinkCardsPage.vue3.js.map +1 -1
  30. package/dist/esm/components/CnModuleCard/CnModuleCard.vue.js +9 -0
  31. package/dist/esm/components/CnModuleCard/CnModuleCard.vue.js.map +1 -0
  32. package/dist/esm/components/CnModuleCard/CnModuleCard.vue2.js +83 -0
  33. package/dist/esm/components/CnModuleCard/CnModuleCard.vue2.js.map +1 -0
  34. package/dist/esm/components/CnModuleCard/CnModuleCard.vue3.js +119 -0
  35. package/dist/esm/components/CnModuleCard/CnModuleCard.vue3.js.map +1 -0
  36. package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue.js +1 -1
  37. package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue2.js +6 -3
  38. package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue2.js.map +1 -1
  39. package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue3.js.map +1 -1
  40. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  41. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +33 -2
  42. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  43. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  44. package/dist/esm/components/CnTextWidget/CnTextWidget.vue.js +1 -1
  45. package/dist/esm/components/CnTextWidget/CnTextWidget.vue2.js +63 -4
  46. package/dist/esm/components/CnTextWidget/CnTextWidget.vue2.js.map +1 -1
  47. package/dist/esm/components/CnTextWidget/CnTextWidget.vue3.js +19 -2
  48. package/dist/esm/components/CnTextWidget/CnTextWidget.vue3.js.map +1 -1
  49. package/dist/esm/index.js +2 -0
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/l10n/en.json.js +22 -1
  52. package/dist/esm/l10n/en.json.js.map +1 -1
  53. package/dist/esm/l10n/nl.json.js +21 -1
  54. package/dist/esm/l10n/nl.json.js.map +1 -1
  55. package/dist/esm/library-style.js +1 -1
  56. package/dist/esm/nextcloud-vue.css +328 -114
  57. package/dist/esm/utils/boardDate.js +35 -1
  58. package/dist/esm/utils/boardDate.js.map +1 -1
  59. package/dist/esm/utils/fillTemplate.js +12 -3
  60. package/dist/esm/utils/fillTemplate.js.map +1 -1
  61. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  62. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  63. package/dist/nextcloud-vue.cjs.js +11569 -10871
  64. package/dist/nextcloud-vue.cjs.js.map +2 -2
  65. package/dist/nextcloud-vue.css +328 -114
  66. package/l10n/en.json +22 -1
  67. package/l10n/nl.json +21 -1
  68. package/package.json +1 -1
  69. package/src/components/CnDataTable/CnDataTable.vue +10 -5
  70. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +16 -2
  71. package/src/components/CnDialog/CnDialog.vue +1 -1
  72. package/src/components/CnDialog/index.js +7 -0
  73. package/src/components/CnDialogHeader/CnDialogHeader.vue +1 -1
  74. package/src/components/CnDialogHeader/index.js +7 -0
  75. package/src/components/CnFormDialog/CnFormDialog.md +1 -0
  76. package/src/components/CnFormDialog/CnFormDialog.vue +13 -0
  77. package/src/components/CnIndexPage/CnIndexPageWidgets.vue +17 -2
  78. package/src/components/CnLinkCardsPage/CnLinkCardsPage.vue +338 -5
  79. package/src/components/CnModuleCard/CnModuleCard.vue +258 -0
  80. package/src/components/CnObjectSidebar/CnObjectSidebar.vue +6 -3
  81. package/src/components/CnTabsWidget/CnTabsWidget.vue +33 -2
  82. package/src/components/CnTextWidget/CnTextWidget.vue +89 -4
  83. package/src/components/index.js +2 -0
  84. package/src/index.js +2 -0
  85. package/src/schemas/app-manifest-v2.schema.json +59 -2
  86. package/src/utils/boardDate.js +34 -0
  87. package/src/utils/fillTemplate.js +12 -3
  88. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -20692,7 +20692,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20692
20692
 
20693
20693
 
20694
20694
  /* A select option breaks between words only, never inside one. */
20695
- .cn-form-dialog__option[data-v-67b5cfd5] {
20695
+ .cn-form-dialog__option[data-v-b7ff10cc] {
20696
20696
  display: block;
20697
20697
  min-width: 0;
20698
20698
  white-space: normal;
@@ -20700,7 +20700,7 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20700
20700
  word-break: normal;
20701
20701
  hyphens: manual;
20702
20702
  }
20703
- .cn-form-dialog__draft-actions[data-v-67b5cfd5] {
20703
+ .cn-form-dialog__draft-actions[data-v-b7ff10cc] {
20704
20704
  display: flex;
20705
20705
  gap: 8px;
20706
20706
  margin-top: 8px;
@@ -20708,22 +20708,22 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20708
20708
 
20709
20709
  /* The state is announced in WORDS, and the colour only repeats them. A
20710
20710
  reader who cannot see it still hears "Draft saved" (WCAG 2.2 SC 1.4.1). */
20711
- .cn-form-dialog__draft-state[data-v-67b5cfd5] {
20711
+ .cn-form-dialog__draft-state[data-v-b7ff10cc] {
20712
20712
  align-self: center;
20713
20713
  color: var(--color-text-maxcontrast);
20714
20714
  font-size: 0.9em;
20715
20715
  margin-inline-end: auto;
20716
20716
  }
20717
- .cn-form-dialog__switch-wrapper[data-v-67b5cfd5] {
20717
+ .cn-form-dialog__switch-wrapper[data-v-b7ff10cc] {
20718
20718
  display: flex;
20719
20719
  flex-direction: column;
20720
20720
  }
20721
- .cn-form-dialog__form[data-v-67b5cfd5] {
20721
+ .cn-form-dialog__form[data-v-b7ff10cc] {
20722
20722
  display: flex;
20723
20723
  flex-direction: column;
20724
20724
  gap: 4px;
20725
20725
  }
20726
- .cn-form-dialog__field[data-v-67b5cfd5] {
20726
+ .cn-form-dialog__field[data-v-b7ff10cc] {
20727
20727
  margin-bottom: 8px;
20728
20728
  }
20729
20729
 
@@ -20735,39 +20735,39 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20735
20735
  from pushing its column past its share: a grid item's default `auto`
20736
20736
  minimum is its content, so without it one long option label widens the
20737
20737
  whole column and the two stop being equal. */
20738
- .cn-form-dialog__form--two-column[data-v-67b5cfd5] {
20738
+ .cn-form-dialog__form--two-column[data-v-b7ff10cc] {
20739
20739
  display: grid;
20740
20740
  grid-template-columns: 1fr 1fr;
20741
20741
  column-gap: 16px;
20742
20742
  align-items: start;
20743
20743
  }
20744
- .cn-form-dialog__form--two-column[data-v-67b5cfd5] > * {
20744
+ .cn-form-dialog__form--two-column[data-v-b7ff10cc] > * {
20745
20745
  min-width: 0;
20746
20746
  }
20747
20747
 
20748
20748
  /* Anything that is not a field (the form-level error note, the slots above
20749
20749
  and below the fields) spans the full width, so a note card never sits in
20750
20750
  a half-width column beside an input. */
20751
- .cn-form-dialog__form--two-column[data-v-67b5cfd5] > :not(.cn-form-dialog__field),
20752
- .cn-form-dialog__form--two-column > .cn-form-dialog__field--wide[data-v-67b5cfd5] {
20751
+ .cn-form-dialog__form--two-column[data-v-b7ff10cc] > :not(.cn-form-dialog__field),
20752
+ .cn-form-dialog__form--two-column > .cn-form-dialog__field--wide[data-v-b7ff10cc] {
20753
20753
  grid-column: 1 / -1;
20754
20754
  }
20755
20755
 
20756
20756
  /* A narrow viewport gets the single column back. Two columns of roughly
20757
20757
  150px each are worse than one readable one. */
20758
20758
  @media (max-width: 700px) {
20759
- .cn-form-dialog__form--two-column[data-v-67b5cfd5] {
20759
+ .cn-form-dialog__form--two-column[data-v-b7ff10cc] {
20760
20760
  display: block;
20761
20761
  }
20762
20762
  }
20763
- .cn-form-dialog__textarea-wrapper[data-v-67b5cfd5],
20764
- .cn-form-dialog__select-wrapper[data-v-67b5cfd5],
20765
- .cn-form-dialog__json-wrapper[data-v-67b5cfd5] {
20763
+ .cn-form-dialog__textarea-wrapper[data-v-b7ff10cc],
20764
+ .cn-form-dialog__select-wrapper[data-v-b7ff10cc],
20765
+ .cn-form-dialog__json-wrapper[data-v-b7ff10cc] {
20766
20766
  display: flex;
20767
20767
  flex-direction: column;
20768
20768
  gap: 4px;
20769
20769
  }
20770
- .cn-form-dialog__label[data-v-67b5cfd5] {
20770
+ .cn-form-dialog__label[data-v-b7ff10cc] {
20771
20771
  font-weight: 600;
20772
20772
  font-size: 0.9em;
20773
20773
  color: var(--color-main-text);
@@ -20775,10 +20775,10 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20775
20775
 
20776
20776
  /* Cross-app semantic reference (ADR-048) whose provider isn't installed —
20777
20777
  rendered disabled; the wrapper carries the mouse-over tooltip. */
20778
- .cn-form-dialog__semantic-unresolved[data-v-67b5cfd5] {
20778
+ .cn-form-dialog__semantic-unresolved[data-v-b7ff10cc] {
20779
20779
  cursor: not-allowed;
20780
20780
  }
20781
- .cn-form-dialog__textarea[data-v-67b5cfd5] {
20781
+ .cn-form-dialog__textarea[data-v-b7ff10cc] {
20782
20782
  width: 100%;
20783
20783
  min-height: 80px;
20784
20784
  padding: 8px;
@@ -20790,22 +20790,22 @@ a.cn-xwiki-card__title[data-v-1a6b61fd]:hover {
20790
20790
  font-size: inherit;
20791
20791
  resize: vertical;
20792
20792
  }
20793
- .cn-form-dialog__textarea[data-v-67b5cfd5]:focus {
20793
+ .cn-form-dialog__textarea[data-v-b7ff10cc]:focus {
20794
20794
  border-color: var(--color-primary-element);
20795
20795
  outline: none;
20796
20796
  }
20797
- .cn-form-dialog__textarea[data-v-67b5cfd5]:disabled {
20797
+ .cn-form-dialog__textarea[data-v-b7ff10cc]:disabled {
20798
20798
  opacity: 0.5;
20799
20799
  cursor: not-allowed;
20800
20800
  }
20801
- .cn-form-dialog__helper[data-v-67b5cfd5] {
20801
+ .cn-form-dialog__helper[data-v-b7ff10cc] {
20802
20802
  font-size: 0.85em;
20803
20803
  color: var(--color-text-maxcontrast);
20804
20804
  }
20805
- .cn-form-dialog__helper--error[data-v-67b5cfd5] {
20805
+ .cn-form-dialog__helper--error[data-v-b7ff10cc] {
20806
20806
  color: var(--color-error);
20807
20807
  }
20808
- .cn-form-dialog__dynamic-loading[data-v-67b5cfd5] {
20808
+ .cn-form-dialog__dynamic-loading[data-v-b7ff10cc] {
20809
20809
  display: flex;
20810
20810
  align-items: center;
20811
20811
  gap: 8px;
@@ -24381,12 +24381,12 @@ to { background-position: -200% 0;
24381
24381
  }
24382
24382
 
24383
24383
 
24384
- .cn-text-widget[data-v-2d4184ef] {
24384
+ .cn-text-widget[data-v-f00a6820] {
24385
24385
  width: 100%;
24386
24386
  height: 100%;
24387
24387
  }
24388
- .cn-text-widget__content[data-v-2d4184ef],
24389
- .cn-text-widget__placeholder[data-v-2d4184ef] {
24388
+ .cn-text-widget__content[data-v-f00a6820],
24389
+ .cn-text-widget__placeholder[data-v-f00a6820] {
24390
24390
  /* Safety net — ensures long URLs / words inside the sanitised HTML wrap
24391
24391
  rather than overflowing horizontally. */
24392
24392
  overflow-wrap: break-word;
@@ -24397,13 +24397,13 @@ to { background-position: -200% 0;
24397
24397
  server CSS styles bare <em> as muted (var(--color-text-maxcontrast)) and can
24398
24398
  drop the italic, so `_x_` / `**_x_**` looked greyed-out and non-italic. Force
24399
24399
  italic <em> / bold <strong> that inherit the widget's own text colour. */
24400
- .cn-text-widget[data-v-2d4184ef] em,
24401
- .cn-text-widget[data-v-2d4184ef] i {
24400
+ .cn-text-widget[data-v-f00a6820] em,
24401
+ .cn-text-widget[data-v-f00a6820] i {
24402
24402
  font-style: italic;
24403
24403
  color: inherit;
24404
24404
  }
24405
- .cn-text-widget[data-v-2d4184ef] strong,
24406
- .cn-text-widget[data-v-2d4184ef] b {
24405
+ .cn-text-widget[data-v-f00a6820] strong,
24406
+ .cn-text-widget[data-v-f00a6820] b {
24407
24407
  font-weight: bold;
24408
24408
  color: inherit;
24409
24409
  }
@@ -24411,24 +24411,24 @@ to { background-position: -200% 0;
24411
24411
  /* Nextcloud's server CSS strips list markers/indent (`list-style: none`,
24412
24412
  no padding), so rendered `<ul>`/`<ol>` looked like plain text. Restore
24413
24413
  bullets/numbers and indentation, including nested levels. */
24414
- .cn-text-widget[data-v-2d4184ef] ul,
24415
- .cn-text-widget[data-v-2d4184ef] ol {
24414
+ .cn-text-widget[data-v-f00a6820] ul,
24415
+ .cn-text-widget[data-v-f00a6820] ol {
24416
24416
  margin: 4px 0;
24417
24417
  padding-left: 1.5em;
24418
24418
  }
24419
- .cn-text-widget[data-v-2d4184ef] ul {
24419
+ .cn-text-widget[data-v-f00a6820] ul {
24420
24420
  list-style: disc outside;
24421
24421
  }
24422
- .cn-text-widget[data-v-2d4184ef] ol {
24422
+ .cn-text-widget[data-v-f00a6820] ol {
24423
24423
  list-style: decimal outside;
24424
24424
  }
24425
- .cn-text-widget[data-v-2d4184ef] ul ul {
24425
+ .cn-text-widget[data-v-f00a6820] ul ul {
24426
24426
  list-style-type: circle;
24427
24427
  }
24428
- .cn-text-widget[data-v-2d4184ef] ul ul ul {
24428
+ .cn-text-widget[data-v-f00a6820] ul ul ul {
24429
24429
  list-style-type: square;
24430
24430
  }
24431
- .cn-text-widget[data-v-2d4184ef] li {
24431
+ .cn-text-widget[data-v-f00a6820] li {
24432
24432
  display: list-item;
24433
24433
  }
24434
24434
 
@@ -24436,84 +24436,97 @@ to { background-position: -200% 0;
24436
24436
  back to the ~14px body size while h2 stayed 1.8em), leaving them oddly
24437
24437
  scaled. Apply a consistent em-based scale that grows with the widget's own
24438
24438
  font size. */
24439
- .cn-text-widget[data-v-2d4184ef] h1 {
24439
+ .cn-text-widget[data-v-f00a6820] h1 {
24440
24440
  font-size: 2em;
24441
24441
  }
24442
- .cn-text-widget[data-v-2d4184ef] h2 {
24442
+ .cn-text-widget[data-v-f00a6820] h2 {
24443
24443
  font-size: 1.5em;
24444
24444
  }
24445
- .cn-text-widget[data-v-2d4184ef] h3 {
24445
+ .cn-text-widget[data-v-f00a6820] h3 {
24446
24446
  font-size: 1.25em;
24447
24447
  }
24448
- .cn-text-widget[data-v-2d4184ef] h4 {
24448
+ .cn-text-widget[data-v-f00a6820] h4 {
24449
24449
  font-size: 1.1em;
24450
24450
  }
24451
- .cn-text-widget[data-v-2d4184ef] h5 {
24451
+ .cn-text-widget[data-v-f00a6820] h5 {
24452
24452
  font-size: 1em;
24453
24453
  }
24454
- .cn-text-widget[data-v-2d4184ef] h6 {
24454
+ .cn-text-widget[data-v-f00a6820] h6 {
24455
24455
  font-size: 0.85em;
24456
24456
  }
24457
- .cn-text-widget__content--markdown[data-v-2d4184ef] h1,
24458
- .cn-text-widget__content--markdown[data-v-2d4184ef] h2,
24459
- .cn-text-widget__content--markdown[data-v-2d4184ef] h3,
24460
- .cn-text-widget__content--markdown[data-v-2d4184ef] h4,
24461
- .cn-text-widget__content--markdown[data-v-2d4184ef] h5,
24462
- .cn-text-widget__content--markdown[data-v-2d4184ef] h6 {
24457
+ .cn-text-widget__content--markdown[data-v-f00a6820] h1,
24458
+ .cn-text-widget__content--markdown[data-v-f00a6820] h2,
24459
+ .cn-text-widget__content--markdown[data-v-f00a6820] h3,
24460
+ .cn-text-widget__content--markdown[data-v-f00a6820] h4,
24461
+ .cn-text-widget__content--markdown[data-v-f00a6820] h5,
24462
+ .cn-text-widget__content--markdown[data-v-f00a6820] h6 {
24463
24463
  margin: 8px 0 4px;
24464
24464
  font-weight: 600;
24465
24465
  line-height: 1.3;
24466
24466
  }
24467
- .cn-text-widget__content--markdown[data-v-2d4184ef] p,
24468
- .cn-text-widget__content--markdown[data-v-2d4184ef] ul,
24469
- .cn-text-widget__content--markdown[data-v-2d4184ef] ol,
24470
- .cn-text-widget__content--markdown[data-v-2d4184ef] blockquote {
24467
+ .cn-text-widget__content--markdown[data-v-f00a6820] p,
24468
+ .cn-text-widget__content--markdown[data-v-f00a6820] ul,
24469
+ .cn-text-widget__content--markdown[data-v-f00a6820] ol,
24470
+ .cn-text-widget__content--markdown[data-v-f00a6820] blockquote {
24471
24471
  margin: 4px 0;
24472
24472
  }
24473
- .cn-text-widget__content--markdown[data-v-2d4184ef] code {
24473
+ .cn-text-widget__content--markdown[data-v-f00a6820] code {
24474
24474
  padding: 1px 4px;
24475
24475
  border-radius: 3px;
24476
24476
  background: var(--color-background-hover);
24477
24477
  font-family: var(--font-monospace, monospace);
24478
24478
  font-size: 0.95em;
24479
24479
  }
24480
- .cn-text-widget__content--markdown[data-v-2d4184ef] pre {
24480
+ .cn-text-widget__content--markdown[data-v-f00a6820] pre {
24481
24481
  padding: 8px;
24482
24482
  border-radius: var(--border-radius);
24483
24483
  background: var(--color-background-hover);
24484
24484
  overflow: auto;
24485
24485
  }
24486
- .cn-text-widget__content--markdown[data-v-2d4184ef] pre code {
24486
+ .cn-text-widget__content--markdown[data-v-f00a6820] pre code {
24487
24487
  padding: 0;
24488
24488
  background: transparent;
24489
24489
  }
24490
- .cn-text-widget__content--markdown[data-v-2d4184ef] blockquote {
24490
+ .cn-text-widget__content--markdown[data-v-f00a6820] blockquote {
24491
24491
  padding-left: 8px;
24492
24492
  border-left: 3px solid var(--color-border);
24493
24493
  color: var(--color-text-maxcontrast);
24494
24494
  }
24495
- .cn-text-widget__content--markdown[data-v-2d4184ef] table {
24495
+ .cn-text-widget__content--markdown[data-v-f00a6820] table {
24496
24496
  border-collapse: collapse;
24497
24497
  margin: 4px 0;
24498
24498
  }
24499
- .cn-text-widget__content--markdown[data-v-2d4184ef] th,
24500
- .cn-text-widget__content--markdown[data-v-2d4184ef] td {
24499
+ .cn-text-widget__content--markdown[data-v-f00a6820] th,
24500
+ .cn-text-widget__content--markdown[data-v-f00a6820] td {
24501
24501
  padding: 4px 8px;
24502
24502
  border: 1px solid var(--color-border);
24503
24503
  }
24504
- .cn-text-widget__table[data-v-2d4184ef] {
24504
+ .cn-text-widget__table[data-v-f00a6820] {
24505
24505
  border-collapse: collapse;
24506
24506
  width: 100%;
24507
24507
  }
24508
- .cn-text-widget__table th[data-v-2d4184ef],
24509
- .cn-text-widget__table td[data-v-2d4184ef] {
24508
+ .cn-text-widget__table th[data-v-f00a6820],
24509
+ .cn-text-widget__table td[data-v-f00a6820] {
24510
24510
  overflow-wrap: break-word;
24511
24511
  vertical-align: top;
24512
24512
  }
24513
- .cn-text-widget__cell-placeholder[data-v-2d4184ef] {
24513
+ .cn-text-widget__cell-placeholder[data-v-f00a6820] {
24514
24514
  color: var(--color-text-maxcontrast);
24515
24515
  font-style: italic;
24516
24516
  }
24517
+ .cn-text-widget__link[data-v-f00a6820] {
24518
+ display: inline-flex;
24519
+ align-items: center;
24520
+ gap: 2px;
24521
+ font-size: 14px;
24522
+ font-weight: 600;
24523
+ color: var(--color-primary-element);
24524
+ text-decoration: none;
24525
+ }
24526
+ .cn-text-widget__link[data-v-f00a6820]:hover,
24527
+ .cn-text-widget__link[data-v-f00a6820]:focus-visible {
24528
+ text-decoration: underline;
24529
+ }
24517
24530
 
24518
24531
 
24519
24532
  .cn-timeline-widget[data-v-091aa98d] {
@@ -25077,7 +25090,7 @@ button.cn-stepper__step[data-v-776581d4] {
25077
25090
  }
25078
25091
 
25079
25092
 
25080
- .cn-detail-page__catalog-action[data-v-e7ff148e] {
25093
+ .cn-detail-page__catalog-action[data-v-47b3ec9e] {
25081
25094
  align-items: center;
25082
25095
  background: var(--color-primary-element-light);
25083
25096
  border: 0;
@@ -25093,19 +25106,19 @@ button.cn-stepper__step[data-v-776581d4] {
25093
25106
  padding: 0 14px;
25094
25107
  white-space: nowrap;
25095
25108
  }
25096
- .cn-detail-page__catalog-note[data-v-e7ff148e] {
25109
+ .cn-detail-page__catalog-note[data-v-47b3ec9e] {
25097
25110
  color: var(--color-text-maxcontrast);
25098
25111
  font-size: 14px;
25099
25112
  white-space: nowrap;
25100
25113
  }
25101
- .cn-detail-widget-host[data-v-e7ff148e],
25102
- .cn-detail-widget-host[data-v-e7ff148e] > * {
25114
+ .cn-detail-widget-host[data-v-47b3ec9e],
25115
+ .cn-detail-widget-host[data-v-47b3ec9e] > * {
25103
25116
  height: 100%;
25104
25117
  }
25105
25118
 
25106
25119
  /* A bare host is a tab panel's body: it fills the panel and lets the panel
25107
25120
  scroll, rather than growing a second scroll region of its own. */
25108
- .cn-detail-widget-host--bare[data-v-e7ff148e] {
25121
+ .cn-detail-widget-host--bare[data-v-47b3ec9e] {
25109
25122
  min-height: 0;
25110
25123
  }
25111
25124
 
@@ -25432,7 +25445,7 @@ button.cn-stepper__step[data-v-776581d4] {
25432
25445
 
25433
25446
 
25434
25447
  /* A stack (`widgetIds`): the panel's widget, then cards 20px apart. */
25435
- .cn-tabs-widget__stack[data-v-f554c922] {
25448
+ .cn-tabs-widget__stack[data-v-febbfc68] {
25436
25449
  display: flex;
25437
25450
  flex-direction: column;
25438
25451
  gap: 20px;
@@ -25441,19 +25454,19 @@ button.cn-stepper__step[data-v-776581d4] {
25441
25454
  /* A gridded stack (`columns` / `layout` on the tab): 12 columns, widgets wrap
25442
25455
  onto the next row, a row's cards as tall as the tallest. Narrow, it is the
25443
25456
  plain stack again. */
25444
- .cn-tabs-widget__stack--grid[data-v-f554c922] {
25457
+ .cn-tabs-widget__stack--grid[data-v-febbfc68] {
25445
25458
  display: grid;
25446
25459
  grid-template-columns: repeat(12, minmax(0, 1fr));
25447
25460
  align-items: stretch;
25448
25461
  }
25449
- .cn-tabs-widget__stack--grid[data-v-f554c922] > * {
25462
+ .cn-tabs-widget__stack--grid[data-v-febbfc68] > * {
25450
25463
  min-width: 0;
25451
25464
  }
25452
25465
  @media (max-width: 700px) {
25453
- .cn-tabs-widget__stack--grid[data-v-f554c922] {
25466
+ .cn-tabs-widget__stack--grid[data-v-febbfc68] {
25454
25467
  grid-template-columns: minmax(0, 1fr);
25455
25468
  }
25456
- .cn-tabs-widget__stack--grid[data-v-f554c922] > * {
25469
+ .cn-tabs-widget__stack--grid[data-v-febbfc68] > * {
25457
25470
  grid-column: auto !important;
25458
25471
  }
25459
25472
  }
@@ -25487,7 +25500,7 @@ button.cn-stepper__step[data-v-776581d4] {
25487
25500
  `!important` or on load order this library does not control. The same
25488
25501
  technique, for the same reason, is used on `.cn-tabs__nav .cn-tabs__nav-item`
25489
25502
  in CnTabs to beat Nextcloud's own button margin. */
25490
- .cn-tabs-widget.cn-tabs-widget[data-v-f554c922] {
25503
+ .cn-tabs-widget.cn-tabs-widget[data-v-febbfc68] {
25491
25504
  background-color: transparent;
25492
25505
  border: 0;
25493
25506
  border-radius: 0;
@@ -25511,12 +25524,12 @@ button.cn-stepper__step[data-v-776581d4] {
25511
25524
  below it: the rule ran straight on to the widget's edge and read as a
25512
25525
  border sticking out past a rounded corner (Ruben, 2026-09-13). Ending it
25513
25526
  where the curve begins makes the rule and the curve one continuous edge. */
25514
- .cn-tabs-widget__tabs[data-v-f554c922] .cn-tabs__bar {
25527
+ .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__bar {
25515
25528
  border-bottom: none;
25516
25529
  padding: 0;
25517
25530
  position: relative;
25518
25531
  }
25519
- .cn-tabs-widget__tabs[data-v-f554c922] .cn-tabs__bar::after {
25532
+ .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__bar::after {
25520
25533
  border-bottom: 1px solid var(--color-border);
25521
25534
  content: '';
25522
25535
  inset-block-end: 0;
@@ -25529,11 +25542,11 @@ button.cn-stepper__step[data-v-776581d4] {
25529
25542
  own background-coloured bottom edge, which only works if it paints ABOVE the
25530
25543
  pseudo-element: a positioned pseudo-element otherwise paints over every
25531
25544
  in-flow sibling, rule included. */
25532
- .cn-tabs-widget__tabs[data-v-f554c922] .cn-tabs__nav-item--active {
25545
+ .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__nav-item--active {
25533
25546
  position: relative;
25534
25547
  z-index: 1;
25535
25548
  }
25536
- .cn-tabs-widget__tabs[data-v-f554c922] {
25549
+ .cn-tabs-widget__tabs[data-v-febbfc68] {
25537
25550
  display: flex;
25538
25551
  flex-direction: column;
25539
25552
  /* Grow to the widget's height, so the panel fills the grid cell the
@@ -25551,7 +25564,7 @@ button.cn-stepper__step[data-v-776581d4] {
25551
25564
  the open tab, but padding sits inside the painted box — only a margin would
25552
25565
  have opened that gap, and a zero top put every panel's content against the
25553
25566
  strip. */
25554
- .cn-tabs-widget__tabs[data-v-f554c922] .cn-tabs__content {
25567
+ .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__content {
25555
25568
  background-color: var(--color-main-background);
25556
25569
  /* Three sides only: the bar's rule (redrawn above, stopping at the corner)
25557
25570
  is this sheet's top edge, and the open tab erases the slice of it
@@ -25571,7 +25584,7 @@ button.cn-stepper__step[data-v-776581d4] {
25571
25584
  overflow: auto;
25572
25585
  padding: 12px;
25573
25586
  }
25574
- .cn-tabs-widget__tabs[data-v-f554c922] .cn-tab {
25587
+ .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tab {
25575
25588
  height: 100%;
25576
25589
  }
25577
25590
 
@@ -25579,13 +25592,13 @@ button.cn-stepper__step[data-v-776581d4] {
25579
25592
  (margin 0 -16px -16px). The panel of a tab pads 12px, so on a tab that
25580
25593
  holds the list directly the footer stuck out 4px on the right and at the
25581
25594
  bottom and made the panel scroll. It bleeds exactly the panel's padding. */
25582
- .cn-tabs-widget__tabs[data-v-f554c922] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
25595
+ .cn-tabs-widget__tabs[data-v-febbfc68] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
25583
25596
  margin: auto -12px -12px;
25584
25597
  }
25585
25598
 
25586
25599
  /* The open panel's header link, beside the strip. Same look and theme hooks
25587
25600
  as a card header link (CnWidgetWrapper). */
25588
- .cn-tabs-widget__header-link[data-v-f554c922] {
25601
+ .cn-tabs-widget__header-link[data-v-febbfc68] {
25589
25602
  align-self: center;
25590
25603
  padding: 0 calc(1 * var(--default-grid-baseline));
25591
25604
  color: var(--color-primary-element);
@@ -25594,21 +25607,21 @@ button.cn-stepper__step[data-v-776581d4] {
25594
25607
  text-decoration: none;
25595
25608
  white-space: nowrap;
25596
25609
  }
25597
- .cn-tabs-widget__header-link[data-v-f554c922]:hover,
25598
- .cn-tabs-widget__header-link[data-v-f554c922]:focus-visible {
25610
+ .cn-tabs-widget__header-link[data-v-febbfc68]:hover,
25611
+ .cn-tabs-widget__header-link[data-v-febbfc68]:focus-visible {
25599
25612
  text-decoration: underline;
25600
25613
  }
25601
- .cn-tabs-widget__header-link[data-v-f554c922]:focus-visible {
25614
+ .cn-tabs-widget__header-link[data-v-febbfc68]:focus-visible {
25602
25615
  outline: 2px solid var(--color-primary-element);
25603
25616
  outline-offset: 2px;
25604
25617
  border-radius: var(--border-radius-small, 4px);
25605
25618
  }
25606
- .cn-tabs-widget__title[data-v-f554c922] {
25619
+ .cn-tabs-widget__title[data-v-febbfc68] {
25607
25620
  align-items: center;
25608
25621
  display: inline-flex;
25609
25622
  gap: 6px;
25610
25623
  }
25611
- .cn-tabs-widget__title-icon[data-v-f554c922] {
25624
+ .cn-tabs-widget__title-icon[data-v-febbfc68] {
25612
25625
  flex: 0 0 auto;
25613
25626
  }
25614
25627
 
@@ -36057,14 +36070,14 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
36057
36070
  }
36058
36071
 
36059
36072
 
36060
- .cn-index-page-widgets--stat-row[data-v-5e716bba] {
36073
+ .cn-index-page-widgets--stat-row[data-v-319129cb] {
36061
36074
  margin-bottom: var(--cn-board-section-gap, 20px);
36062
36075
  }
36063
- .cn-index-page-widgets__cell[data-v-5e716bba] {
36076
+ .cn-index-page-widgets__cell[data-v-319129cb] {
36064
36077
  display: flex;
36065
36078
  min-width: 0;
36066
36079
  }
36067
- .cn-index-page-widgets__cell[data-v-5e716bba] > * {
36080
+ .cn-index-page-widgets__cell[data-v-319129cb] > * {
36068
36081
  flex: 1 1 auto;
36069
36082
  min-width: 0;
36070
36083
  }
@@ -36072,7 +36085,7 @@ button.cn-object-calendar__overflow[data-v-e1c69ee2] {
36072
36085
  /* The side panel column (DqTeamwachtrij: 300px, 16px between cards). Its
36073
36086
  place beside the toolbar and the list is set by CnIndexPage
36074
36087
  (`cn-index-page--with-side-panel`, index-page.css). */
36075
- .cn-index-page-widgets--side-panel[data-v-5e716bba] {
36088
+ .cn-index-page-widgets--side-panel[data-v-319129cb] {
36076
36089
  display: flex;
36077
36090
  flex-direction: column;
36078
36091
  gap: 16px;
@@ -40772,10 +40785,10 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
40772
40785
  * let the strip scroll horizontally once they no longer fit. `flex-basis: 0`
40773
40786
  * + equal grow keeps every tab the same width whether the row fits or scrolls.
40774
40787
  * Apps with longer labels can widen the floor via --cn-sidebar-tab-min-width. */
40775
- [data-v-8b218df0] .app-sidebar-tabs__nav {
40788
+ [data-v-09402703] .app-sidebar-tabs__nav {
40776
40789
  overflow-x: auto;
40777
40790
  }
40778
- [data-v-8b218df0] .app-sidebar-tabs__nav .app-sidebar-tabs__tab {
40791
+ [data-v-09402703] .app-sidebar-tabs__nav .app-sidebar-tabs__tab {
40779
40792
  flex-grow: 1;
40780
40793
  flex-shrink: 0;
40781
40794
  flex-basis: 0;
@@ -41332,7 +41345,104 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
41332
41345
  }
41333
41346
 
41334
41347
 
41335
- .cn-link-cards-page[data-v-4d8cf2f8] {
41348
+ .cn-module-card[data-v-7cd47118] {
41349
+ display: flex;
41350
+ flex-direction: column;
41351
+ gap: 12px;
41352
+ padding: 20px;
41353
+ border: 1px solid var(--color-border);
41354
+ border-radius: var(--border-radius-container-large, 12px);
41355
+ background: var(--color-main-background);
41356
+ }
41357
+ .cn-module-card__head[data-v-7cd47118] {
41358
+ display: flex;
41359
+ align-items: center;
41360
+ gap: 12px;
41361
+ }
41362
+ .cn-module-card__icon[data-v-7cd47118] {
41363
+ display: flex;
41364
+ flex: none;
41365
+ align-items: center;
41366
+ justify-content: center;
41367
+ width: 42px;
41368
+ height: 42px;
41369
+ border-radius: var(--border-radius-large, 10px);
41370
+ background: var(--color-primary-element-light);
41371
+ color: var(--color-primary-element-light-text, var(--color-primary-element));
41372
+ }
41373
+ .cn-module-card__title[data-v-7cd47118] {
41374
+ flex: 1 1 auto;
41375
+ margin: 0;
41376
+ font-size: 17px;
41377
+ font-weight: 700;
41378
+ }
41379
+ .cn-module-card__state[data-v-7cd47118] {
41380
+ flex: none;
41381
+ }
41382
+ .cn-module-card__description[data-v-7cd47118] {
41383
+ margin: 0;
41384
+ font-size: 15px;
41385
+ line-height: 1.5;
41386
+ }
41387
+ .cn-module-card__pages-line[data-v-7cd47118] {
41388
+ font-size: 13px;
41389
+ color: var(--color-text-maxcontrast);
41390
+ }
41391
+ .cn-module-card__pages[data-v-7cd47118] {
41392
+ display: flex;
41393
+ flex-wrap: wrap;
41394
+ gap: 6px 12px;
41395
+ margin: 0;
41396
+ padding: 0;
41397
+ list-style: none;
41398
+ font-size: 14px;
41399
+ }
41400
+ .cn-module-card__page[data-v-7cd47118] {
41401
+ font-weight: 600;
41402
+ color: var(--color-primary-element);
41403
+ }
41404
+ .cn-module-card__footer[data-v-7cd47118] {
41405
+ display: flex;
41406
+ flex-wrap: wrap;
41407
+ align-items: center;
41408
+ gap: 8px 14px;
41409
+ margin-top: auto;
41410
+ padding-top: 4px;
41411
+ }
41412
+ .cn-module-card__open[data-v-7cd47118] {
41413
+ display: inline-flex;
41414
+ align-items: center;
41415
+ gap: 6px;
41416
+ box-sizing: border-box;
41417
+ height: 36px;
41418
+ padding: 0 14px;
41419
+ font-size: 14px;
41420
+ font-weight: 600;
41421
+ text-decoration: none;
41422
+ }
41423
+ .cn-module-card__open[data-v-7cd47118] {
41424
+ border: 1px solid var(--color-border-dark);
41425
+ border-radius: var(--border-radius-element, 8px);
41426
+ background: var(--color-main-background);
41427
+ color: var(--color-main-text);
41428
+ }
41429
+ .cn-module-card__icon--off[data-v-7cd47118] {
41430
+ background: var(--color-background-dark);
41431
+ color: var(--color-main-text);
41432
+ }
41433
+ .cn-module-card__settings[data-v-7cd47118] {
41434
+ font-size: 13px;
41435
+ color: var(--color-text-maxcontrast);
41436
+ }
41437
+ .cn-module-card__open[data-v-7cd47118]:focus-visible,
41438
+ .cn-module-card__settings a[data-v-7cd47118]:focus-visible,
41439
+ .cn-module-card__page[data-v-7cd47118]:focus-visible {
41440
+ outline: 2px solid var(--color-primary-element);
41441
+ outline-offset: 2px;
41442
+ }
41443
+
41444
+
41445
+ .cn-link-cards-page[data-v-1a155b6c] {
41336
41446
  display: flex;
41337
41447
  flex-direction: column;
41338
41448
  gap: calc(6 * var(--default-grid-baseline));
@@ -41342,24 +41452,24 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
41342
41452
  /* Clear the Nextcloud navigation toggle button (44px wide, absolutely
41343
41453
  positioned at the left edge of .app-content) plus 12px breathing room, as
41344
41454
  CnPageHeader does. Only the header shifts; the cards keep the full width. */
41345
- .cn-link-cards-page__header[data-v-4d8cf2f8] {
41455
+ .cn-link-cards-page__header[data-v-1a155b6c] {
41346
41456
  padding-inline-start: 56px;
41347
41457
  }
41348
- .cn-link-cards-page__title[data-v-4d8cf2f8] {
41458
+ .cn-link-cards-page__title[data-v-1a155b6c] {
41349
41459
  margin: 0 0 var(--default-grid-baseline);
41350
41460
  }
41351
- .cn-link-cards-page__description[data-v-4d8cf2f8],
41352
- .cn-link-cards-page__empty[data-v-4d8cf2f8] {
41461
+ .cn-link-cards-page__description[data-v-1a155b6c],
41462
+ .cn-link-cards-page__empty[data-v-1a155b6c] {
41353
41463
  color: var(--color-text-maxcontrast);
41354
41464
  margin: 0;
41355
41465
  max-width: 70ch;
41356
41466
  }
41357
- .cn-link-cards-page__group[data-v-4d8cf2f8] {
41467
+ .cn-link-cards-page__group[data-v-1a155b6c] {
41358
41468
  display: flex;
41359
41469
  flex-direction: column;
41360
41470
  gap: calc(3 * var(--default-grid-baseline));
41361
41471
  }
41362
- .cn-link-cards-page__caption[data-v-4d8cf2f8] {
41472
+ .cn-link-cards-page__caption[data-v-1a155b6c] {
41363
41473
  color: var(--color-text-maxcontrast);
41364
41474
  font-size: 0.85em;
41365
41475
  font-weight: 600;
@@ -41367,7 +41477,7 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
41367
41477
  margin: 0;
41368
41478
  text-transform: uppercase;
41369
41479
  }
41370
- .cn-link-cards-page__grid[data-v-4d8cf2f8] {
41480
+ .cn-link-cards-page__grid[data-v-1a155b6c] {
41371
41481
  display: grid;
41372
41482
  gap: calc(3 * var(--default-grid-baseline));
41373
41483
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
@@ -41375,10 +41485,10 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
41375
41485
  margin: 0;
41376
41486
  padding: 0;
41377
41487
  }
41378
- .cn-link-cards-page__cell[data-v-4d8cf2f8] {
41488
+ .cn-link-cards-page__cell[data-v-1a155b6c] {
41379
41489
  display: flex;
41380
41490
  }
41381
- .cn-link-cards-page__card[data-v-4d8cf2f8] {
41491
+ .cn-link-cards-page__card[data-v-1a155b6c] {
41382
41492
  align-items: flex-start;
41383
41493
  background: var(--color-main-background);
41384
41494
  border: 1px solid var(--color-border-dark);
@@ -41397,34 +41507,34 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
41397
41507
  underline !important }`, specificity 0,0,1). Among `!important` rules the
41398
41508
  higher specificity wins, so this class rule has to carry it too; without it
41399
41509
  the label and the description both rendered underlined on a live Nextcloud. */
41400
- .cn-link-cards-page__card[data-v-4d8cf2f8],
41401
- .cn-link-cards-page__card[data-v-4d8cf2f8]:hover,
41402
- .cn-link-cards-page__card[data-v-4d8cf2f8]:focus,
41403
- .cn-link-cards-page__card[data-v-4d8cf2f8]:active {
41510
+ .cn-link-cards-page__card[data-v-1a155b6c],
41511
+ .cn-link-cards-page__card[data-v-1a155b6c]:hover,
41512
+ .cn-link-cards-page__card[data-v-1a155b6c]:focus,
41513
+ .cn-link-cards-page__card[data-v-1a155b6c]:active {
41404
41514
  text-decoration: none !important;
41405
41515
  }
41406
41516
 
41407
41517
  /* Hover moves the whole card: border, background and a soft lift. */
41408
- .cn-link-cards-page__card[data-v-4d8cf2f8]:hover {
41518
+ .cn-link-cards-page__card[data-v-1a155b6c]:hover {
41409
41519
  background: var(--color-background-hover);
41410
41520
  border-color: var(--color-primary-element);
41411
41521
  box-shadow: 0 2px 6px var(--color-box-shadow);
41412
41522
  }
41413
41523
  @media (prefers-reduced-motion: reduce) {
41414
- .cn-link-cards-page__card[data-v-4d8cf2f8] {
41524
+ .cn-link-cards-page__card[data-v-1a155b6c] {
41415
41525
  transition: none;
41416
41526
  }
41417
41527
  }
41418
- .cn-link-cards-page__card[data-v-4d8cf2f8]:focus-visible {
41528
+ .cn-link-cards-page__card[data-v-1a155b6c]:focus-visible {
41419
41529
  border-color: var(--color-primary-element);
41420
41530
  outline: 2px solid var(--color-primary-element);
41421
41531
  outline-offset: 2px;
41422
41532
  }
41423
- .cn-link-cards-page__icon[data-v-4d8cf2f8] {
41533
+ .cn-link-cards-page__icon[data-v-1a155b6c] {
41424
41534
  color: var(--color-primary-element);
41425
41535
  flex: none;
41426
41536
  }
41427
- .cn-link-cards-page__body[data-v-4d8cf2f8] {
41537
+ .cn-link-cards-page__body[data-v-1a155b6c] {
41428
41538
  display: flex;
41429
41539
  flex-direction: column;
41430
41540
  gap: var(--default-grid-baseline);
@@ -41434,18 +41544,122 @@ a.cn-integration-card__title[data-v-093a874d]:hover {
41434
41544
  /* The label is the card's title. Its colour is set here, on the span, because
41435
41545
  a theme may force its link colour on the `a` itself; an inherited link
41436
41546
  colour made the title read as a hyperlink. */
41437
- .cn-link-cards-page__label[data-v-4d8cf2f8] {
41547
+ .cn-link-cards-page__label[data-v-1a155b6c] {
41438
41548
  color: var(--color-main-text);
41439
41549
  font-size: 1.05em;
41440
41550
  font-weight: 700;
41441
41551
  line-height: 1.3;
41442
41552
  overflow-wrap: anywhere;
41443
41553
  }
41444
- .cn-link-cards-page__card-description[data-v-4d8cf2f8] {
41554
+ .cn-link-cards-page__card-description[data-v-1a155b6c] {
41445
41555
  color: var(--color-text-maxcontrast);
41446
41556
  font-size: 0.9em;
41447
41557
  line-height: 1.4;
41448
41558
  }
41559
+ .cn-link-cards-page__group--list[data-v-1a155b6c] {
41560
+ padding: 20px 22px;
41561
+ border: 1px solid var(--color-border);
41562
+ border-radius: var(--border-radius-container-large, 12px);
41563
+ background: var(--color-main-background);
41564
+ gap: 6px;
41565
+ }
41566
+ .cn-link-cards-page__group--list .cn-link-cards-page__caption[data-v-1a155b6c] {
41567
+ margin: 0 0 8px;
41568
+ color: var(--color-main-text);
41569
+ font-size: 17px;
41570
+ font-weight: 700;
41571
+ letter-spacing: normal;
41572
+ text-transform: none;
41573
+ }
41574
+ .cn-link-cards-page__list[data-v-1a155b6c] {
41575
+ margin: 0;
41576
+ padding: 0;
41577
+ list-style: none;
41578
+ }
41579
+ .cn-link-cards-page__row[data-v-1a155b6c] {
41580
+ display: flex;
41581
+ align-items: center;
41582
+ gap: 12px;
41583
+ padding: 10px 0;
41584
+ border-top: 1px solid var(--color-background-dark);
41585
+ color: var(--color-main-text);
41586
+ }
41587
+ .cn-link-cards-page__row[data-v-1a155b6c],
41588
+ .cn-link-cards-page__row[data-v-1a155b6c]:hover,
41589
+ .cn-link-cards-page__row[data-v-1a155b6c]:focus,
41590
+ .cn-link-cards-page__row[data-v-1a155b6c]:active {
41591
+ text-decoration: none !important;
41592
+ }
41593
+ .cn-link-cards-page__row[data-v-1a155b6c]:focus-visible {
41594
+ outline: 2px solid var(--color-primary-element);
41595
+ outline-offset: 2px;
41596
+ }
41597
+ .cn-link-cards-page__row-icon[data-v-1a155b6c] {
41598
+ display: flex;
41599
+ flex: none;
41600
+ align-items: center;
41601
+ justify-content: center;
41602
+ width: 34px;
41603
+ height: 34px;
41604
+ border-radius: var(--border-radius-element, 8px);
41605
+ background: var(--color-background-dark);
41606
+ }
41607
+ .cn-link-cards-page__row-body[data-v-1a155b6c] {
41608
+ display: flex;
41609
+ flex: 1 1 auto;
41610
+ flex-direction: column;
41611
+ gap: 2px;
41612
+ min-width: 0;
41613
+ }
41614
+ .cn-link-cards-page__row-label[data-v-1a155b6c] {
41615
+ font-size: 15px;
41616
+ font-weight: 600;
41617
+ }
41618
+ .cn-link-cards-page__row-description[data-v-1a155b6c] {
41619
+ font-size: 13px;
41620
+ color: var(--color-text-maxcontrast);
41621
+ }
41622
+ .cn-link-cards-page__row-trailing[data-v-1a155b6c] {
41623
+ flex: none;
41624
+ color: var(--color-text-maxcontrast);
41625
+ }
41626
+ .cn-link-cards-page__modules[data-v-1a155b6c] {
41627
+ display: flex;
41628
+ flex-direction: column;
41629
+ gap: 14px;
41630
+ }
41631
+ .cn-link-cards-page__modules-head[data-v-1a155b6c] {
41632
+ display: flex;
41633
+ flex-wrap: wrap;
41634
+ justify-content: space-between;
41635
+ align-items: baseline;
41636
+ gap: 8px;
41637
+ }
41638
+ .cn-link-cards-page__modules-title[data-v-1a155b6c] {
41639
+ margin: 0;
41640
+ font-size: 20px;
41641
+ font-weight: 700;
41642
+ }
41643
+ .cn-link-cards-page__modules-count[data-v-1a155b6c] {
41644
+ font-size: 14px;
41645
+ color: var(--color-text-maxcontrast);
41646
+ }
41647
+ .cn-link-cards-page__modules-grid[data-v-1a155b6c] {
41648
+ display: grid;
41649
+ grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
41650
+ gap: 16px;
41651
+ }
41652
+ .cn-link-cards-page__modules-note[data-v-1a155b6c] {
41653
+ display: flex;
41654
+ align-items: flex-start;
41655
+ gap: 8px;
41656
+ margin: 0;
41657
+ font-size: 14px;
41658
+ color: var(--color-text-maxcontrast);
41659
+ }
41660
+ .cn-link-cards-page__modules-note-icon[data-v-1a155b6c] {
41661
+ flex: none;
41662
+ }
41449
41663
 
41450
41664
 
41451
41665
  /* NcDialog supplies the padding and the heading (via `name`); this div keeps only