@kitconcept/volto-light-theme 8.0.0-alpha.2 → 8.0.0-alpha.20

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 (103) hide show
  1. package/.changelog.draft +3 -4
  2. package/CHANGELOG.md +226 -0
  3. package/locales/de/LC_MESSAGES/volto.po +30 -115
  4. package/locales/en/LC_MESSAGES/volto.po +30 -115
  5. package/locales/es/LC_MESSAGES/volto.po +31 -116
  6. package/locales/eu/LC_MESSAGES/volto.po +58 -124
  7. package/locales/pt_BR/LC_MESSAGES/volto.po +38 -123
  8. package/locales/volto.pot +31 -116
  9. package/package.json +18 -15
  10. package/src/__mocks__/semantic-ui-react.ts +31 -0
  11. package/src/components/Blocks/Block/Edit.jsx +14 -6
  12. package/src/components/Blocks/Block/EditBlockWrapper.jsx +9 -3
  13. package/src/components/Blocks/Block/ErrorBoundary.test.tsx +55 -0
  14. package/src/components/Blocks/Block/ErrorBoundary.tsx +92 -0
  15. package/src/components/Blocks/Block/ErrorBoundaryMessage.tsx +66 -0
  16. package/src/components/Blocks/EventCalendar/Search/components/EventTemplate.tsx +1 -1
  17. package/src/components/Blocks/Image/Edit.jsx +1 -0
  18. package/src/components/Blocks/Listing/DefaultTemplate.jsx +12 -6
  19. package/src/components/Blocks/Listing/GridTemplate.jsx +16 -7
  20. package/src/components/Blocks/Listing/ListingBody.jsx +4 -1
  21. package/src/components/Blocks/Listing/SummaryTemplate.jsx +16 -7
  22. package/src/components/Blocks/Teaser/DefaultBody.tsx +25 -5
  23. package/src/components/Blocks/schema.ts +69 -0
  24. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +128 -0
  25. package/src/components/Breadcrumbs/Breadcrumbs.tsx +117 -0
  26. package/src/components/Caption/Caption.test.tsx +31 -0
  27. package/src/components/Caption/{Caption.jsx → Caption.tsx} +14 -21
  28. package/src/components/Footer/ColumnLinks.tsx +2 -2
  29. package/src/components/Footer/slots/Colophon.tsx +13 -1
  30. package/src/components/Footer/slots/CoreFooter.tsx +4 -2
  31. package/src/components/Header/Header.tsx +3 -3
  32. package/src/components/LanguageSelector/LanguageSelector.tsx +91 -0
  33. package/src/components/MobileNavigation/MobileNavigation.jsx +11 -9
  34. package/src/components/Navigation/Navigation.test.tsx +176 -0
  35. package/src/components/Navigation/{Navigation.jsx → Navigation.tsx} +77 -37
  36. package/src/components/StickyMenu/MobileCarouselArrowButton.tsx +81 -0
  37. package/src/components/StickyMenu/MobileStickyMenu.tsx +76 -0
  38. package/src/components/Summary/DefaultSummary.tsx +10 -3
  39. package/src/components/Summary/EventSummary.tsx +10 -3
  40. package/src/components/Summary/FileSummary.tsx +10 -3
  41. package/src/components/Summary/NewsItemSummary.tsx +10 -3
  42. package/src/components/Summary/PersonSummary.tsx +10 -3
  43. package/src/components/Summary/Summary.stories.tsx +46 -30
  44. package/src/components/Tags/Tags.test.tsx +71 -0
  45. package/src/components/Tags/{Tags.jsx → Tags.tsx} +9 -25
  46. package/src/components/Theme/EventView.jsx +4 -4
  47. package/src/components/Theme/NewsItemView.jsx +4 -4
  48. package/src/components/Theme/RenderBlocks.jsx +45 -37
  49. package/src/components/Theme/RenderBlocksV2.jsx +51 -20
  50. package/src/components/Widgets/ColorSwatch.stories.tsx +197 -0
  51. package/src/components/Widgets/ColorSwatch.test.tsx +188 -0
  52. package/src/components/Widgets/ColorSwatch.tsx +77 -39
  53. package/src/components/Widgets/SoftTextWidget.tsx +129 -0
  54. package/src/components/Widgets/SoftTextareaWidget.tsx +118 -0
  55. package/src/components/Widgets/ThemeColorSwatch.tsx +5 -9
  56. package/src/config/blocks.tsx +21 -29
  57. package/src/config/slots.ts +7 -0
  58. package/src/config/widgets.ts +5 -9
  59. package/src/customizations/volto/components/manage/DragDropList/DragDropList.jsx +263 -0
  60. package/src/customizations/volto/components/theme/LanguageSelector/LanguageSelector.tsx +10 -0
  61. package/src/helpers/styleDefinitions.test.tsx +30 -0
  62. package/src/helpers/styleDefinitions.ts +49 -0
  63. package/src/icons/block_icn_accordion.svg +0 -0
  64. package/src/icons/block_icn_grid.svg +0 -0
  65. package/src/internalChecks.test.ts +94 -0
  66. package/src/primitives/Card/Card.stories.tsx +4 -1
  67. package/src/primitives/Card/Card.test.tsx +11 -33
  68. package/src/primitives/Card/Card.tsx +33 -43
  69. package/src/primitives/IconLinkList.tsx +53 -52
  70. package/src/theme/_bgcolor-blocks-layout.scss +43 -45
  71. package/src/theme/_content.scss +12 -13
  72. package/src/theme/_export_import.scss +94 -0
  73. package/src/theme/_footer.scss +64 -19
  74. package/src/theme/_header.scss +21 -4
  75. package/src/theme/_insets.scss +1 -1
  76. package/src/theme/_layout.scss +34 -15
  77. package/src/theme/_mobile-sticky-menu.scss +92 -0
  78. package/src/theme/_search-page.scss +249 -0
  79. package/src/theme/_typo-custom.scss +16 -5
  80. package/src/theme/_variables.scss +19 -4
  81. package/src/theme/_widgets.scss +15 -27
  82. package/src/theme/blocks/_accordion.scss +11 -4
  83. package/src/theme/blocks/_grid.scss +9 -77
  84. package/src/theme/blocks/_listing.scss +60 -126
  85. package/src/theme/blocks/_search.scss +3 -4
  86. package/src/theme/blocks/_table.scss +1 -0
  87. package/src/theme/blocks/_teaser.scss +7 -117
  88. package/src/theme/blocks/error-boundary.scss +11 -0
  89. package/src/theme/card.scss +107 -70
  90. package/src/theme/main.scss +5 -0
  91. package/src/theme/notfound.scss +27 -0
  92. package/src/theme/person.scss +28 -12
  93. package/src/theme/sticky-menu.scss +7 -5
  94. package/src/types.d.ts +1 -0
  95. package/vitest.config.mjs +4 -0
  96. package/razzle.extend.js +0 -38
  97. package/src/components/Blocks/schema.js +0 -44
  98. package/src/components/Breadcrumbs/Breadcrumbs.jsx +0 -118
  99. package/src/components/Widgets/AlignWidget.tsx +0 -84
  100. package/src/components/Widgets/BlockAlignment.tsx +0 -88
  101. package/src/components/Widgets/BlockWidth.tsx +0 -101
  102. package/src/components/Widgets/Buttons.tsx +0 -144
  103. package/src/components/Widgets/Size.tsx +0 -78
@@ -15,79 +15,70 @@
15
15
  .block-editor-search,
16
16
  .block.rssBlock,
17
17
  .block-editor-rssBlock {
18
- &.next--has--same--backgroundColor.next--is--same--block-type,
19
- &.next--is--__button {
20
- .listing-item:last-child {
21
- padding-bottom: 40px !important;
22
- border-bottom: 1px solid vas(--theme-font-color, black);
18
+ .items {
19
+ padding: 0;
20
+ margin: 0;
21
+ & + .pagination-wrapper {
22
+ margin-top: $spacing-xlarge;
23
+ @container (max-width: #{$largest-mobile-screen}) {
24
+ margin-top: $spacing-large;
25
+ }
26
+ }
27
+ &:not(:has(+ .pagination-wrapper)) {
28
+ .listing-item:last-child {
29
+ padding-bottom: 0;
30
+ border-bottom: none;
31
+ margin-bottom: 0;
32
+
33
+ .card-inner {
34
+ padding-bottom: 0;
35
+ }
36
+ }
23
37
  }
24
38
  }
25
39
 
26
- .items + .pagination-wrapper {
27
- margin-top: 80px;
28
- @container (max-width: #{$largest-mobile-screen}) {
29
- margin-top: 60px;
40
+ &.next--has--same--backgroundColor.next--is--same--block-type:not(
41
+ :last-child
42
+ ),
43
+ &.next--is--__button {
44
+ .items > .listing-item:last-child {
45
+ border-bottom: 1px solid var(--theme-font-color, black);
46
+ }
47
+ }
48
+ &.next--is--__button {
49
+ margin-bottom: 0 !important;
50
+ .listing-item:last-child {
51
+ padding-bottom: $spacing-medium !important;
30
52
  }
31
53
  }
32
54
 
33
55
  .listing-item {
34
- padding-bottom: 40px !important;
35
56
  border-bottom: 1px solid $black;
36
57
  margin-bottom: 40px;
58
+ .card-summary {
59
+ padding: 0;
37
60
 
38
- a.external {
39
- .listing-body h2:after {
40
- @include external-link-icon();
61
+ p:empty {
62
+ display: none;
41
63
  }
42
64
  }
43
65
 
44
- &:last-child {
45
- padding-bottom: 0 !important;
46
- border-bottom: none !important;
47
- margin-bottom: 0;
48
- }
49
-
50
66
  img {
51
67
  object-fit: cover;
52
68
  }
53
- }
54
-
55
- h2.headline {
56
- @container (max-width: #{$default-container-width + 2 * 20px}) {
57
- margin-right: 20px !important;
58
- margin-left: 20px !important;
59
- }
60
- }
61
69
 
62
- // Default variation
63
- &.default,
64
- & .default-variation {
65
- .headline {
66
- @include block-title();
70
+ .card-inner a {
71
+ display: inline;
67
72
  }
68
73
 
69
- .listing-item {
70
- .card-summary {
71
- padding-top: unset;
72
- padding-bottom: unset;
73
- }
74
- .headline {
75
- margin-bottom: 20px;
76
- letter-spacing: 1px;
77
- text-transform: uppercase;
78
- @include headtitle1();
79
- }
80
- h2 {
81
- margin-top: 0;
82
- margin-bottom: $spacing-medium;
83
- @include text-heading-h2();
84
- }
85
- p {
86
- margin-bottom: 0;
87
- @include body-text();
88
- }
89
- p:empty {
90
- display: none;
74
+ .title {
75
+ display: block;
76
+ margin-top: 0;
77
+ margin-bottom: $spacing-medium !important;
78
+ @include text-heading-h2();
79
+ @container (max-width: #{$largest-mobile-screen}) {
80
+ @include text-heading-h3();
81
+ margin-bottom: $spacing-small;
91
82
  }
92
83
  }
93
84
  }
@@ -96,44 +87,21 @@
96
87
  &.summary,
97
88
  & .summary-variation {
98
89
  .listing-item {
99
- padding-top: 0 !important;
100
-
101
90
  .card {
102
- width: 100%;
103
91
  .card-inner .image-wrapper {
104
92
  flex: 0 0 220px;
105
93
  img {
94
+ width: 220px;
106
95
  max-width: 100%;
96
+ height: min-content;
97
+ @container (max-width: #{$largest-mobile-screen}) {
98
+ width: 100%;
99
+ min-width: 335px;
100
+ margin-bottom: $spacing-small;
101
+ }
107
102
  }
108
103
  }
109
104
  }
110
-
111
- img {
112
- width: 220px;
113
- height: min-content;
114
- aspect-ratio: var(--image-aspect-ratio, $aspect-ratio) !important;
115
- @container (max-width: #{$largest-mobile-screen}) {
116
- width: 100%;
117
- min-width: 335px;
118
- margin-bottom: 20px;
119
- }
120
- }
121
- .headline {
122
- margin-bottom: 20px;
123
- letter-spacing: 1px;
124
- text-transform: uppercase;
125
- @include headtitle1();
126
- }
127
- h3 {
128
- margin-top: 0 !important;
129
- margin-bottom: 40px !important;
130
- color: $black;
131
- @include text-heading-h2();
132
- @container (max-width: #{$largest-mobile-screen}) {
133
- @include text-heading-h3();
134
- margin-bottom: 20px !important;
135
- }
136
- }
137
105
  }
138
106
  }
139
107
 
@@ -155,15 +123,10 @@
155
123
  flex-direction: column;
156
124
 
157
125
  .listing-item {
158
- padding-bottom: 20px !important;
126
+ padding-bottom: $spacing-small !important;
159
127
  }
160
128
  }
161
129
  }
162
- .headline {
163
- @include block-title();
164
- margin-right: 0 !important;
165
- margin-left: 0 !important;
166
- }
167
130
  .listing-item {
168
131
  align-items: normal;
169
132
  border-bottom: none;
@@ -204,35 +167,16 @@
204
167
  .card-inner {
205
168
  .image-wrapper {
206
169
  img {
207
- width: 100%;
208
170
  margin: 0;
209
- aspect-ratio: var(--image-aspect-ratio, $aspect-ratio) !important;
210
171
  }
211
172
  }
212
173
  .card-summary {
213
- padding: 0 $spacing-small $spacing-medium $spacing-small;
214
- margin-top: $spacing-medium;
215
-
216
- .headline {
217
- padding: 0 !important;
218
- margin-bottom: $spacing-small;
219
- letter-spacing: 1px;
220
- text-transform: uppercase;
221
- @include headtitle1();
222
- @include word-break();
223
- }
174
+ padding: $spacing-medium $spacing-small 0 $spacing-small;
224
175
 
225
- h2 {
226
- margin: 0 0 $spacing-small 0;
176
+ .title {
177
+ margin: 0 0 $spacing-small 0 !important;
227
178
  @include text-heading-h3();
228
179
  }
229
- p {
230
- margin-bottom: 0;
231
- @include body-text();
232
- }
233
- p:empty {
234
- display: none;
235
- }
236
180
  }
237
181
  }
238
182
  }
@@ -455,19 +399,9 @@
455
399
  #page-edit .block-editor-listing.has--backgroundColor--grey,
456
400
  .block.listing.has--backgroundColor--grey {
457
401
  background-color: $lightgrey;
402
+ }
458
403
 
459
- &.grid {
460
- .listing-item {
461
- .card-container {
462
- background-color: $white;
463
- }
464
- }
465
- }
466
- .block.listing.grid {
467
- .listing-item {
468
- .card-container {
469
- background-color: $white;
470
- }
471
- }
472
- }
404
+ .listing-item .headline span:not(:last-child)::after {
405
+ margin: 0 10px;
406
+ content: '|';
473
407
  }
@@ -2,11 +2,10 @@
2
2
  #page-add,
3
3
  #page-edit {
4
4
  .block.search {
5
+ &.next--has--same--backgroundColor.next--is--same--block-type {
6
+ margin-bottom: $spacing-xlarge;
7
+ }
5
8
  &.grid {
6
- .card-container > img {
7
- width: 100% !important;
8
- }
9
-
10
9
  .listing-item:last-child {
11
10
  padding-bottom: 0;
12
11
  border-bottom: none;
@@ -13,6 +13,7 @@
13
13
  th {
14
14
  padding: $spacing-small;
15
15
  border-color: #c1c1c1;
16
+ border-bottom: none;
16
17
  background: $darkGrey;
17
18
  color: $white;
18
19
  p {
@@ -1,8 +1,3 @@
1
- // Override the Image component `aspect-ratio`
2
- .teaser-item .image-wrapper img {
3
- aspect-ratio: var(--image-aspect-ratio, $aspect-ratio) !important;
4
- }
5
-
6
1
  // Block Teaser Standalone
7
2
  #page-document .block.teaser {
8
3
  @include vertical-space-teaser();
@@ -19,123 +14,18 @@
19
14
  }
20
15
  }
21
16
 
22
- a.external {
23
- .card-summary h2:after {
24
- @include external-link-icon();
25
- }
26
- }
27
-
28
- .teaser-item:not(.placeholder) {
29
- align-items: start;
30
- padding-bottom: 40px; // same as vertical spacing in margin-bottom
31
- border-bottom: 1px solid $black;
32
- }
33
-
34
- .image-wrapper {
35
- width: 100%;
36
- }
37
-
38
- &.has--align--left,
39
- &.has--align--right {
40
- .card-inner {
41
- padding-bottom: 40px;
42
- }
43
-
44
- .teaser-item.default {
45
- display: flex;
46
-
47
- .image-wrapper {
48
- align-self: flex-start;
49
- }
50
-
51
- @media only screen and (max-width: $largest-mobile-screen) {
52
- flex-direction: column !important;
53
- }
54
- }
55
- }
56
-
57
- &.has--align--left {
58
- .teaser-item.default {
59
- flex-direction: row;
60
-
61
- .image-wrapper {
62
- margin-right: 20px;
63
-
64
- @media only screen and (max-width: $largest-mobile-screen) {
65
- margin-right: 0;
66
- margin-bottom: 26px;
67
- }
68
- }
69
- }
70
- }
71
-
72
- &.has--align--right {
73
- .teaser-item.default {
74
- flex-direction: row-reverse;
75
-
76
- .image-wrapper {
77
- margin-right: 0px;
78
- margin-left: 20px;
79
-
80
- @media only screen and (max-width: $largest-mobile-screen) {
81
- margin-bottom: 26px;
82
- margin-left: 0;
83
- }
84
- }
85
- }
86
- }
87
-
88
- &.has--align--center {
89
- .teaser-item.default {
90
- display: block;
91
- a {
92
- display: block;
93
- }
94
-
95
- .image-wrapper {
96
- margin-bottom: 26px;
97
- @container (max-width: #{$largest-mobile-screen}) {
98
- margin: 0 0 20px 0 !important;
99
- }
100
- }
101
- }
102
- }
103
-
104
- .card-summary {
105
- .headline {
106
- margin-bottom: 20px;
107
- letter-spacing: 1px;
108
- text-transform: uppercase;
109
- @include headtitle1();
110
- }
111
- h2 {
112
- margin-top: 0;
113
- margin-bottom: 20px;
114
- @include text-heading-h2();
115
- @container (max-width: #{$largest-mobile-screen}) {
116
- @include text-heading-h3();
117
- margin-bottom: 20px;
118
- }
119
- }
120
- p {
121
- margin: 0;
122
- @include body-text();
123
- }
124
- }
125
-
126
17
  &.is--last--of--block-type,
127
18
  &.next--has--different--backgroundColor {
128
- .card-inner,
129
- .teaser-item.default {
19
+ .card-inner {
130
20
  padding-bottom: 0;
131
21
  border-bottom: none;
132
22
  }
133
- &.next--is--__button {
134
- .card-inner,
135
- .teaser-item.default {
136
- padding-bottom: 40px;
137
- border-bottom: 1px solid;
138
- }
23
+ }
24
+ &.next--is--__button {
25
+ margin-bottom: 0 !important;
26
+ .card-inner {
27
+ padding-bottom: $spacing-medium;
28
+ border-bottom: 1px solid;
139
29
  }
140
30
  }
141
31
  }
@@ -0,0 +1,11 @@
1
+ .block-error-boundary {
2
+ padding: 10px;
3
+ border: 2px dashed red;
4
+ background-color: #ffe6e6;
5
+ }
6
+
7
+ .block-error-boundary .title {
8
+ margin-bottom: 5px;
9
+ color: red;
10
+ font-weight: bold;
11
+ }
@@ -1,24 +1,27 @@
1
1
  .card {
2
+ // Base
2
3
  position: relative;
4
+ width: 100%;
3
5
  transition: box-shadow 0.15s ease;
4
- }
5
6
 
6
- .card:has(> a):hover,
7
- .card:has(> a):focus-within {
8
- cursor: pointer;
9
- }
7
+ &:has(.card-primary-link) {
8
+ cursor: pointer;
10
9
 
11
- .card a {
12
- inset: 0; /* top:0 right:0 bottom:0 left:0 */
13
- text-decoration: none; /* remove default underline */
14
- }
10
+ // Primary card link stretched via ::after pseudo-element
11
+ .card-summary .card-primary-link {
12
+ color: inherit;
13
+ font: inherit;
15
14
 
16
- .card .card-summary,
17
- .card .card-summary * {
18
- user-select: text; /* explicit for clarity */
19
- }
15
+ &::after {
16
+ position: absolute;
17
+ z-index: 0;
18
+ content: '';
19
+ inset: 0;
20
+ }
21
+ }
22
+ }
20
23
 
21
- .card {
24
+ // Image
22
25
  .image-wrapper {
23
26
  width: 100%;
24
27
 
@@ -30,48 +33,66 @@
30
33
  aspect-ratio: var(--image-aspect-ratio, $aspect-ratio) !important;
31
34
  }
32
35
  }
36
+ &:not(.contained) .card-inner {
37
+ padding-bottom: $spacing-medium;
33
38
 
34
- .card-summary {
35
- padding-top: 40px;
36
- padding-bottom: 40px;
39
+ @container (max-width: #{$largest-mobile-screen}) {
40
+ padding-top: 0;
41
+ }
42
+ }
43
+ .previous--has--different--backgroundColor & .card-inner {
44
+ padding-top: 0;
45
+ }
37
46
 
47
+ // Summary
48
+ :not(.has--align--left, .has--align--right) > & .card-summary {
49
+ padding-top: $spacing-medium;
50
+ }
51
+ .card-summary {
52
+ @container (max-width: #{$largest-mobile-screen}) {
53
+ padding-top: $spacing-small !important;
54
+ }
38
55
  .headline {
39
- margin-bottom: 20px;
56
+ margin-bottom: $spacing-small;
40
57
  letter-spacing: 1px;
41
58
  text-transform: uppercase;
42
59
  @include headtitle1();
43
60
  }
44
- h2 {
61
+
62
+ .title {
45
63
  margin-top: 0;
46
- margin-bottom: 20px;
64
+ margin-bottom: $spacing-small !important; // Override margin from volto
47
65
  @include text-heading-h2();
66
+
48
67
  @container (max-width: #{$largest-mobile-screen}) {
49
68
  @include text-heading-h3();
50
- margin-bottom: 20px;
69
+ margin-bottom: $spacing-small;
51
70
  }
52
71
  }
72
+
53
73
  p {
54
74
  margin: 0;
55
75
  @include body-text();
76
+
77
+ &:empty {
78
+ display: none;
79
+ }
56
80
  }
57
81
  }
58
- }
59
-
60
- // Variants
61
- // // Contained
62
- .card {
63
- .contained & .card-inner {
64
- background: var(--theme-high-contrast-color);
82
+ // Additional links within the card
83
+ a:not(.card-primary-link) {
84
+ position: relative;
85
+ z-index: 1;
86
+ cursor: pointer;
65
87
  }
66
88
 
89
+ // Contained
67
90
  .contained & .card-summary {
68
- padding-right: 20px;
69
- padding-left: 20px;
91
+ padding-right: $spacing-small;
92
+ padding-left: $spacing-small;
70
93
  }
71
- }
72
94
 
73
- // // Side-aligned
74
- .card {
95
+ // Side-aligned
75
96
  .has--align--left:not(.contained) &,
76
97
  .has--align--right:not(.contained) & {
77
98
  .card-inner {
@@ -80,84 +101,60 @@
80
101
  .image-wrapper {
81
102
  flex: 1 1 50%;
82
103
 
83
- @media only screen and (max-width: $largest-mobile-screen) {
84
- margin-right: 0;
85
- margin-bottom: 26px;
104
+ @container (max-width: #{$largest-mobile-screen}) {
105
+ margin: 0;
86
106
  }
87
107
  }
88
108
 
89
109
  .card-summary {
90
- // width: 50%;
91
110
  flex: 1 1 50%;
92
- padding: 0;
111
+ // padding: 0;
93
112
  }
94
113
  }
95
114
  }
96
115
 
97
116
  .has--align--left:not(.contained) & {
98
117
  .image-wrapper {
99
- margin-right: 20px;
118
+ margin-right: $spacing-small;
100
119
  }
101
120
  }
102
121
 
103
- .has--align--right & {
122
+ .has--align--right:not(.contained) & {
104
123
  .card-inner {
105
124
  flex-direction: row-reverse;
106
125
  }
107
126
 
108
127
  .image-wrapper {
109
- margin-right: 0px;
110
- margin-left: 20px;
128
+ margin-right: 0;
129
+ margin-left: $spacing-small;
111
130
  }
112
131
  }
113
- }
114
132
 
115
- @container (max-width: #{$largest-mobile-screen}) {
116
- .card {
133
+ @container (max-width: #{$largest-mobile-screen}) {
117
134
  .has--align--left:not(.contained) &,
118
135
  .has--align--right:not(.contained) & {
119
136
  .card-inner {
120
137
  display: block;
121
138
  }
139
+
122
140
  .image-wrapper {
123
141
  margin-right: 0;
124
142
  margin-left: 0;
125
143
  }
126
144
  }
127
145
  }
128
- }
129
-
130
- // Heading sizes
131
- @container (min-width: #{$largest-mobile-screen}) {
132
- .card {
133
- .card-summary {
134
- .one & h2 {
135
- margin-bottom: 40px !important;
136
- @include text-heading-h2();
137
- }
138
- .two & h2,
139
- .three & h2 {
140
- @include text-heading-h3();
141
- }
142
- .four & h2 {
143
- @include text-heading-h4();
144
- }
145
- }
146
- }
147
- }
148
146
 
149
- // Listing
150
- .card {
147
+ // Listing
151
148
  .card-listing & .card-inner {
152
149
  display: flex;
153
150
 
154
151
  .image-wrapper {
155
152
  flex: 0 1 var(--card-listing-image-size, 220px);
156
- margin-right: 20px;
153
+ margin-right: $spacing-small;
157
154
 
158
- @media only screen and (max-width: $largest-mobile-screen) {
155
+ @container (max-width: #{$largest-mobile-screen}) {
159
156
  margin-right: 0;
160
- margin-bottom: 26px;
157
+ margin-bottom: $spacing-small;
161
158
  }
162
159
  }
163
160
 
@@ -167,3 +164,43 @@
167
164
  }
168
165
  }
169
166
  }
167
+
168
+ // Cards in columns
169
+ @container (min-width: #{$largest-mobile-screen}) {
170
+ .card {
171
+ .card-inner {
172
+ .one & {
173
+ .card-summary {
174
+ padding-top: $spacing-medium;
175
+ }
176
+ .title {
177
+ margin-bottom: $spacing-medium !important; // Override margin from volto
178
+ @include text-heading-h2();
179
+ }
180
+ }
181
+
182
+ .two &,
183
+ .three & {
184
+ .card-summary {
185
+ padding-top: $spacing-medium;
186
+ }
187
+ .title {
188
+ @include text-heading-h3();
189
+ }
190
+ }
191
+
192
+ .four & {
193
+ .card-summary {
194
+ padding-top: $spacing-small;
195
+ }
196
+ padding-bottom: $spacing-small;
197
+ .headline {
198
+ @include headtitle2();
199
+ }
200
+ .title {
201
+ @include text-heading-h4();
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }