@eeacms/volto-eea-design-system 0.7.3 → 0.8.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 (34) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/package.json +1 -1
  3. package/src/ui/Card/AvatarGrid/AvatarGrid.jsx +25 -13
  4. package/src/ui/Card/AvatarGrid/AvatarGrid.stories.jsx +33 -13
  5. package/src/ui/Card/Card.stories.jsx +173 -77
  6. package/src/ui/Card/IconCard/IconCard.stories.jsx +195 -0
  7. package/src/ui/Card/PublicationCard.stories.jsx +15 -3
  8. package/src/ui/Card/RelatedContent/RelatedContent.jsx +30 -8
  9. package/src/ui/Card/RelatedContent/RelatedContent.stories.jsx +20 -0
  10. package/src/ui/Card/RoundedCard.stories.jsx +46 -20
  11. package/src/ui/Footer/Contact.jsx +11 -7
  12. package/src/ui/Footer/Footer.jsx +1 -1
  13. package/src/ui/Footer/FooterActions.jsx +24 -7
  14. package/src/ui/Footer/FooterHeader.jsx +1 -1
  15. package/src/ui/Footer/FooterSites.jsx +22 -10
  16. package/src/ui/Footer/SubFooter.jsx +42 -38
  17. package/src/ui/Header/HeaderMenuPopUp.js +63 -47
  18. package/theme/themes/eea/assets/images/Footer/Extras/footervisual.svg +2041 -1731
  19. package/theme/themes/eea/collections/breadcrumb.overrides +4 -0
  20. package/theme/themes/eea/collections/breadcrumb.variables +1 -1
  21. package/theme/themes/eea/extras/banner.less +0 -8
  22. package/theme/themes/eea/extras/custom.overrides +4 -1
  23. package/theme/themes/eea/extras/footer.less +93 -59
  24. package/theme/themes/eea/extras/footer.variables +31 -34
  25. package/theme/themes/eea/extras/header.less +13 -4
  26. package/theme/themes/eea/extras/header.variables +7 -4
  27. package/theme/themes/eea/globals/site.overrides +20 -0
  28. package/theme/themes/eea/globals/site.variables +9 -8
  29. package/theme/themes/eea/globals/utilities.less +6 -1
  30. package/theme/themes/eea/tokens/fonts.less +18 -17
  31. package/theme/themes/eea/views/card.overrides +179 -123
  32. package/theme/themes/eea/views/card.variables +34 -33
  33. package/theme/themes/eea/views/item.overrides +15 -1
  34. package/theme/themes/eea/views/item.variables +5 -2
@@ -27,6 +27,24 @@
27
27
  }
28
28
  }
29
29
 
30
+ .ui.cards > .card > i.icon,
31
+ .ui.cards > .card > a > i.icon,
32
+ .ui.card > i.icon,
33
+ .ui.card > a > i.icon {
34
+ color: @iconColor;
35
+ }
36
+
37
+ .ui.cards > .card > .content > *:not(:last-child),
38
+ .ui.card > .content > *:not(:last-child) {
39
+ margin-bottom: @cardContentMarginBottom;
40
+ }
41
+
42
+ .ui.card .meta {
43
+ display: flex;
44
+ justify-content: space-between;
45
+ }
46
+
47
+
30
48
  .ui.card .meta > .category {
31
49
  font-size: @metaFontSize;
32
50
  }
@@ -61,7 +79,8 @@
61
79
  Primary
62
80
  *******************************/
63
81
 
64
- .ui.card.primary {
82
+ .ui.card.primary:not(.inverted),
83
+ .ui.card.primary:not(.inverted) .image {
65
84
  background: @primaryBackground;
66
85
  }
67
86
 
@@ -69,6 +88,10 @@
69
88
  color: @primaryHeaderColor;
70
89
  }
71
90
 
91
+ .ui.card.primary > i.icon,
92
+ .ui.card.primary > a > i.icon,
93
+ .ui.card.primary > .content a,
94
+ .ui.card.primary > .content a:hover,
72
95
  .ui.card.primary > .content > .description {
73
96
  color: @primaryDescriptionColor;
74
97
  }
@@ -81,18 +104,40 @@
81
104
  }
82
105
  }
83
106
 
84
- .ui.card.primary > .content > .meta {
107
+ .ui.card.primary > .content > .meta,
108
+ .ui.card.primary > .content > .meta a {
85
109
  color: @primaryMetaColor;
86
110
  }
87
111
 
112
+ /* Inverted */
113
+ .ui.card.primary.inverted > i.icon,
114
+ .ui.card.primary.inverted > .content * {
115
+ color: @invertedPrimaryContentColor;
116
+ }
117
+
118
+ .ui.card.primary.inverted > a > i.icon,
119
+ .ui.card.primary.inverted > .content a,
120
+ .ui.card.primary.inverted > .extra.content a:not(.ui) {
121
+ color: @invertedPrimaryContentColor;
122
+
123
+ &:hover {
124
+ color: @invertedPrimaryColorHover;
125
+ }
126
+ }
127
+
88
128
  /*******************************
89
129
  Secondary
90
130
  *******************************/
91
131
 
92
- .ui.card.secondary {
132
+ .ui.card.secondary:not(.inverted),
133
+ .ui.card.secondary:not(.inverted) .image {
93
134
  background: @secondaryBackground;
94
135
  }
95
136
 
137
+ .ui.card.secondary > i.icon,
138
+ .ui.card.secondary > a > i.icon,
139
+ .ui.card.secondary > .content a,
140
+ .ui.card.secondary > .content a:hover,
96
141
  .ui.card.secondary > .content > .header {
97
142
  color: @secondaryHeaderColor;
98
143
  }
@@ -109,18 +154,40 @@
109
154
  }
110
155
  }
111
156
 
112
- .ui.card.secondary > .content > .meta {
157
+ .ui.card.secondary > .content > .meta,
158
+ .ui.card.secondary > .content > .meta a {
113
159
  color: @secondaryMetaColor;
114
160
  }
115
161
 
162
+ /* Inverted */
163
+ .ui.card.secondary.inverted > i.icon,
164
+ .ui.card.secondary.inverted > .content * {
165
+ color: @invertedSecondaryContentColor;
166
+ }
167
+
168
+ .ui.card.secondary.inverted > a > i.icon,
169
+ .ui.card.secondary.inverted > .content a,
170
+ .ui.card.secondary.inverted > .extra.content a:not(.ui) {
171
+ color: @invertedSecondaryContentColor;
172
+
173
+ &:hover {
174
+ color: @invertedSecondaryColorHover;
175
+ }
176
+ }
177
+
116
178
  /*******************************
117
179
  Tertiary
118
180
  *******************************/
119
181
 
120
- .ui.card.tertiary {
182
+ .ui.card.tertiary:not(.inverted),
183
+ .ui.card.tertiary:not(.inverted) .image {
121
184
  background: @tertiaryBackground;
122
185
  }
123
186
 
187
+ .ui.card.tertiary > i.icon,
188
+ .ui.card.tertiary > a > i.icon,
189
+ .ui.card.tertiary > .content a,
190
+ .ui.card.tertiary > .content a:hover,
124
191
  .ui.card.tertiary > .content > .header {
125
192
  color: @tertiaryHeaderColor;
126
193
  }
@@ -137,10 +204,27 @@
137
204
  }
138
205
  }
139
206
 
140
- .ui.card.tertiary > .content > .meta {
207
+ .ui.card.tertiary > .content > .meta,
208
+ .ui.card.tertiary > .content > .meta a {
141
209
  color: @tertiaryMetaColor;
142
210
  }
143
211
 
212
+ /* Inverted */
213
+ .ui.card.tertiary.inverted > i.icon,
214
+ .ui.card.tertiary.inverted > .content * {
215
+ color: @invertedTertiaryContentColor;
216
+ }
217
+
218
+ .ui.card.tertiary.inverted > a > i.icon,
219
+ .ui.card.tertiary.inverted > .content a,
220
+ .ui.card.tertiary.inverted > .extra.content a:not(.ui) {
221
+ color: @invertedTertiaryContentColor;
222
+
223
+ &:hover {
224
+ color: @invertedTertiaryColorHover;
225
+ }
226
+ }
227
+
144
228
  /*******************************
145
229
  Rounded Card
146
230
  *******************************/
@@ -151,18 +235,23 @@
151
235
  }
152
236
 
153
237
  .ui.card.rounded {
154
- width: @roundedWidth;
238
+ padding-top: @iconCardPaddingTop;
155
239
  border: none;
156
240
 
157
- .content {
241
+ .image {
242
+ display: flex;
158
243
  justify-content: center;
159
- border-top: none;
160
244
 
161
- .image {
162
- display: flex;
163
- justify-content: center;
164
- background-color: @white;
245
+ img {
246
+ width: @roundedImageWidth;
247
+ height: @roundedImageHeight;
248
+ border-radius: @roundedImageBorderRadius;
165
249
  }
250
+ }
251
+
252
+ .content {
253
+ justify-content: center;
254
+ border-top: none;
166
255
 
167
256
  .header {
168
257
  margin-bottom: @roundedContentTitleMarginBottom;
@@ -173,53 +262,12 @@
173
262
 
174
263
  .description {
175
264
  text-align: center;
265
+ font-size: @roundedMetadataFontSize;
266
+ font-weight: @roundedMetadataFontWeight;
176
267
  }
177
268
  }
178
269
  }
179
270
 
180
- .ui.card.rounded.big {
181
- .image {
182
- display: flex;
183
- justify-content: center;
184
- background-color: @white;
185
-
186
- img {
187
- width: @roundedBigImageWidth;
188
- height: @roundedBigImageHeight;
189
- border-radius: 50%;
190
- }
191
- }
192
-
193
- .description {
194
- font-size: @roundedBigMetadataFontSize;
195
- font-weight: @roundedBigMetadataFontWeight;
196
- }
197
- }
198
-
199
- .ui.rounded.small {
200
- .image {
201
- display: flex;
202
- justify-content: center;
203
- background-color: @white;
204
-
205
- img {
206
- display: flex;
207
- width: @roundedSmallImageWidth;
208
- height: @roundedSmallImageHeight;
209
- border-radius: @roundedImageBorderRadius;
210
- }
211
- }
212
-
213
- .header {
214
- color: @roundedSmallTitleColor;
215
- }
216
-
217
- .description {
218
- font-size: @roundedSmallMetadataFontSize;
219
- font-weight: @roundedSmallMetadataFontWeight;
220
- }
221
- }
222
-
223
271
  /*******************************
224
272
  Publication Card
225
273
  *******************************/
@@ -239,7 +287,8 @@
239
287
  padding: @cardContentPadding;
240
288
  background-color: @publicationCardDescriptionColor;
241
289
 
242
- .meta {
290
+ .meta,
291
+ .meta a {
243
292
  color: @publicationCardtextColor;
244
293
  font-size: @cardMetaFontSize;
245
294
  font-weight: @cardMetaTagFontWeight;
@@ -306,35 +355,14 @@
306
355
  .cards-carousel {
307
356
  position: relative;
308
357
 
309
- .ui.button.icon.slider-arrow {
310
- padding: @carouselButtonPadding;
311
- display: none;
312
-
313
- .active, &:focus, &:hover {
314
- background: transparent;
315
- }
316
-
317
- .icon {
318
- color: @carouselButtonIconColor;
319
- font-size: @carouselButtonIconFontSize;
320
- }
321
- }
322
-
323
- .slick-arrow {
324
- display: block !important;
325
- }
326
-
327
- .slick-prev,
328
- .slick-next {
329
- display: none !important;
330
- }
331
-
332
358
  .slick-list {
333
- margin: 0 -0.75em !important;
359
+ margin: @slickListMargin;
334
360
  }
335
361
 
336
362
  .slick-track {
337
363
  display: flex;
364
+ gap: @slickTrackGap;
365
+ margin: @slickTrackMargin;
338
366
  }
339
367
 
340
368
  .slick-slide {
@@ -342,69 +370,97 @@
342
370
  height: auto;
343
371
  flex: 1;
344
372
  flex-direction: column;
345
- padding: 15px 0.75em !important;
346
373
 
347
374
  > div {
348
375
  height: 100%;
349
376
  }
350
377
  }
378
+ }
351
379
 
352
- .slider-arrow {
353
- position: absolute;
354
- top: 50%;
355
- bottom: auto;
356
- display: block;
357
- padding: 0;
358
- border: none;
380
+ /* Carousel arrows */
381
+ .cards-carousel .ui.button.icon.slider-arrow {
382
+ padding: @carouselButtonPadding;
383
+
384
+ .active, &:focus, &:hover {
359
385
  background: transparent;
360
- cursor: pointer;
361
- outline: none;
362
- transform: translate(0, -50%);
363
386
  }
364
387
 
365
- .prev-arrow {
366
- right: auto;
367
- left: @carouselButtonDistance;
388
+ &:focus-visible {
389
+ outline: auto;
368
390
  }
369
391
 
370
- .next-arrow {
371
- right: @carouselButtonDistance;
372
- left: auto;
392
+ .icon {
393
+ color: @carouselButtonIconColor;
394
+ font-size: @carouselButtonIconFontSize;
395
+ opacity: @carouselButtonIconOpacity;
396
+ padding-top: @carouselButtonPaddingTop;
397
+ width: auto;
373
398
  }
399
+ }
374
400
 
375
- .slick-dots {
376
- position: relative;
377
- bottom: unset;
378
- }
401
+ .cards-carousel .slider-arrow {
402
+ position: absolute;
403
+ top: 50%;
404
+ bottom: auto;
405
+ padding: 0;
406
+ border: none;
407
+ background: transparent;
408
+ cursor: pointer;
409
+ outline: none;
410
+ transform: translate(0, -50%);
411
+ }
379
412
 
380
- .slick-dots li button:before {
381
- background-color: @carouselDotsBackgroundColor;
382
- color: transparent;
383
- border: @carouselDotsBorder;
384
- border-radius: @carouselDotsBorderRadius;
385
- opacity: @carouselDotsOpacity;
386
- width: @mobileCarouselDotsWidth;
387
- height: @mobileCarouselDotsHeight;
388
- }
413
+ .cards-carousel .prev-arrow {
414
+ right: auto;
415
+ left: @carouselButtonDistance;
416
+ }
389
417
 
390
- .slick-dots li.slick-active button:before {
391
- background-color: @carouselDotsActiveBackgroundColor;
392
- color: transparent;
418
+ .cards-carousel .next-arrow {
419
+ right: @carouselButtonDistance;
420
+ left: auto;
421
+ }
393
422
 
394
- }
423
+ /* Custom carousel pagination bullets */
424
+ .cards-carousel .slick-dots li button:before {
425
+ background-color: @carouselDotsBackgroundColor;
426
+ color: transparent;
427
+ border: @carouselDotsBorder;
428
+ border-radius: @carouselDotsBorderRadius;
429
+ opacity: @carouselDotsOpacity;
430
+ width: @mobileCarouselDotsWidth;
431
+ height: @mobileCarouselDotsHeight;
432
+ }
433
+
434
+ .cards-carousel .slick-dots li.slick-active button:before {
435
+ background-color: @carouselDotsActiveBackgroundColor;
436
+ color: transparent;
395
437
  }
396
438
 
439
+ .slick-dots li button:focus-visible {
440
+ outline: black;
441
+ outline-style: auto;
442
+ }
397
443
 
398
444
  @media only screen and (min-width: @computerBreakpoint) {
399
- .cards-carousel {
445
+ .cards-carousel .slick-dots li button:before {
446
+ width: inherit;
447
+ height: inherit;
448
+ }
449
+ }
400
450
 
401
- .ui.button.icon.slider-arrow {
402
- display: block;
403
- }
451
+ /*******************************
452
+ Icon Card
453
+ *******************************/
404
454
 
405
- .slick-dots li button:before {
406
- width: inherit;
407
- height: inherit;
455
+ .ui.card.icon {
456
+ padding-top: @iconCardPaddingTop;
457
+ .content {
458
+ border-top: none;
459
+ .header {
460
+ word-break: break-word;
408
461
  }
409
462
  }
410
- }
463
+ .icon {
464
+ margin: auto;
465
+ }
466
+ }
@@ -53,7 +53,7 @@
53
53
  /* Image */
54
54
  @cardImageHeight: 200px;
55
55
  @cardImageOverflow: hidden;
56
- @imageBackground: @transparentBlack;
56
+ @imageBackground: transparent;
57
57
  @imagePadding: 0em;
58
58
  @imageBorder: none;
59
59
  @imageBoxShadow: none;
@@ -62,6 +62,7 @@
62
62
  @imageWidth: 100%;
63
63
  @imageObjectFit: cover;
64
64
  @imageObjectPosition: center;
65
+ @iconColor: @tertiaryColor;
65
66
 
66
67
  /* Content */
67
68
  @contentDivider: @borderWidth solid @internalBorderColor;
@@ -72,6 +73,7 @@
72
73
  @contentBorderRadius: 0em;
73
74
  @contentBoxShadow: none;
74
75
  @contentBorder: none;
76
+ @cardContentMarginBottom: @rem-space-4;
75
77
 
76
78
 
77
79
  /* Header */
@@ -79,7 +81,7 @@
79
81
  @headerFontWeight: @bold;
80
82
  @headerFontSize: 1.125rem;
81
83
  @headerLineHeightOffset: -(@lineHeight - 1em) / 2;
82
- @headerColor: inherit;
84
+ @headerColor: @tertiaryColor;
83
85
 
84
86
  /* Metadata */
85
87
  @metaFontSize: @relativeMedium;
@@ -87,6 +89,7 @@
87
89
  @metaColor: @tertiaryColor;
88
90
 
89
91
  /* Icons */
92
+ @iconCardPaddingTop: @rem-space-4;
90
93
  @actionOpacity: 0.75;
91
94
  @actionHoverOpacity: 1;
92
95
  @actionTransition: color @defaultDuration @defaultEasing;
@@ -107,12 +110,12 @@
107
110
  @headerLinkColor: @headerColor;
108
111
  @headerLinkHoverColor: @linkHoverColor;
109
112
 
110
- @metaLinkColor: @lightTextColor;
111
- @metaLinkHoverColor: @textColor;
113
+ @metaLinkColor: @deepBlue;
114
+ @metaLinkHoverColor: @deepBlue;
112
115
 
113
116
  /* Description */
114
- @descriptionDistance: 0.5em;
115
- @descriptionColor: inherit;
117
+ @descriptionDistance: 0;
118
+ @descriptionColor: @tertiaryColor;
116
119
 
117
120
  /* Content Image */
118
121
  @contentImageWidth: '';
@@ -238,6 +241,8 @@
238
241
  @primaryExtraLinkColor: @white;
239
242
  @primaryExtraLinkHoverColor: @white;
240
243
  @primaryMetaColor: @white;
244
+ @invertedPrimaryContentColor: @primaryColor;
245
+ @invertedPrimaryColorHover: @primaryColorHover;
241
246
 
242
247
  /*******************************
243
248
  Secondary
@@ -248,44 +253,33 @@
248
253
  @secondaryExtraLinkColor: @white;
249
254
  @secondaryExtraLinkHoverColor: @white;
250
255
  @secondaryMetaColor: @white;
256
+ @invertedSecondaryContentColor: @secondaryColor;
257
+ @invertedSecondaryColorHover: @secondaryColorHover;
251
258
 
252
259
  /*******************************
253
260
  Tertiary
254
261
  *******************************/
255
- @tertiaryBackground: #3D5265;
262
+ @tertiaryBackground: @tertiaryColor;
256
263
  @tertiaryHeaderColor: @white;
257
264
  @tertiaryDescriptionColor: @white;
258
265
  @tertiaryExtraLinkColor: @white;
259
266
  @tertiaryExtraLinkHoverColor: @white;
260
267
  @tertiaryMetaColor: @white;
268
+ @invertedTertiaryContentColor: @tertiaryColor;
269
+ @invertedTertiaryColorHover: @tertiaryColorHover;
261
270
 
262
271
  /*******************************
263
272
  Rounded Card
264
273
  *******************************/
265
274
  /* Global */
266
- @roundedWidth : 100%;
267
- @roundedWrapperWidth : 100%;
268
- @roundedWrapperGap : @largeGap;
269
- @roundedContentWrapperWidth : 100%;
270
275
  @roundedImageBorderRadius : @circularRadius;
271
- @roundedContentTitleMarginBottom : 0;
272
- @roundedImageWrapperWidth : 100%;
273
- @roundedImageBackgroundSize : cover;
276
+ @roundedContentTitleMarginBottom : @rem-space-2;
274
277
  @roundedContentTitleFontWeight : @bold;
275
- @roundedContentTitleFontSize : 1.25rem;
276
-
277
- /* Big */
278
- @roundedBigImageHeight : 173px;
279
- @roundedBigImageWidth : 173px;
280
- @roundedBigMetadataFontSize : 1.25rem;
281
- @roundedBigMetadataFontWeight : @normal;
282
-
283
- /* Small */
284
- @roundedSmallImageHeight : 150px;
285
- @roundedSmallImageWidth : 150px;
286
- @roundedSmallTitleColor : @secondaryColor;
287
- @roundedSmallMetadataFontSize : 1rem;
288
- @roundedSmallMetadataFontWeight : 300;
278
+ @roundedContentTitleFontSize : @font-size-3;
279
+ @roundedImageHeight : 173px;
280
+ @roundedImageWidth : 173px;
281
+ @roundedMetadataFontSize : @font-size-1;
282
+ @roundedMetadataFontWeight : @normal;
289
283
 
290
284
  /*******************************
291
285
  Publication Card
@@ -307,8 +301,8 @@
307
301
  @cardContentPadding: 20px;
308
302
  @cardContentMaxHeight: 135px;
309
303
  @mobileCardContentHeight: 135px;
310
- @tabletCardContentMaxHeight: 110px;
311
- @tabletCardContentHeight: 110px;
304
+ @tabletCardContentMaxHeight: 120px;
305
+ @tabletCardContentHeight: 120px;
312
306
 
313
307
  /* Description */
314
308
  @cardDescriptionTextLineClampMobile: 3;
@@ -327,14 +321,15 @@
327
321
  /* Title */
328
322
  @carouselTitleFontWeight: 700;
329
323
  @carouselTitleMargin: 0;
330
- @carouselTitleColor: @deepBlue;
324
+ @carouselTitleColor: @tertiaryColor;
331
325
 
332
326
  /* Button */
333
327
  @carouselButtonPadding: 0;
334
- @carouselButtonIconColor: @black;
328
+ @carouselButtonIconColor: @tertiaryColor;
335
329
  @carouselButtonIconFontSize: 3.125rem;
330
+ @carouselButtonIconOpacity: 1;
336
331
  @carouselButtonDistance: -3.5rem;
337
-
332
+ @carouselButtonPaddingTop: @rem-space-4;
338
333
 
339
334
  /* Dots */
340
335
  @carouselDotsFontSize: 0.75rem;
@@ -346,4 +341,10 @@
346
341
  @mobileCarouselDotsWidth: 0.875rem;
347
342
  @mobileCarouselDotsHeight: 0.875rem;
348
343
 
344
+ /* Slick wrapper */
345
+ @slickListMargin: 0 -0.75em;
346
+ @slickTrackGap: 1.25rem;
347
+ @slickTrackMargin: 1rem 0;
348
+
349
+
349
350
 
@@ -97,12 +97,26 @@
97
97
  margin-bottom: 0;
98
98
  }
99
99
 
100
+ // Stackable items that have image above content
101
+ .ui.items.row .item.stackable {
102
+ display: grid;
103
+
104
+ .image {
105
+ margin: auto;
106
+ }
107
+
108
+ .content {
109
+ padding-left: @stackableContentPaddingLeft;
110
+ padding-top: @stackableContentPaddingTop;
111
+ }
112
+ }
113
+
100
114
  @media only screen and (max-width: @largestMobileScreen) {
101
115
  .ui.items.row > .item {
102
116
  flex-direction: row;
103
117
  }
104
118
 
105
- .ui.items.row > .item > .image + .content {
119
+ .ui.items.row > .item:not(.stackable) > .image + .content {
106
120
  padding: 0em 0em 0em @mobileContentImageDistance;
107
121
  }
108
122
  }
@@ -155,10 +155,13 @@
155
155
  @dividedFirstLastMargin: 0em;
156
156
  @dividedFirstLastPadding: 0em;
157
157
 
158
-
159
- /* Unstackable */
158
+ /* Unstackable items */
160
159
  @unstackableMobileImageWidth: 125px;
161
160
 
161
+ /* Stackable item */
162
+ @stackableContentPaddingTop: @rem-space-4;
163
+ @stackableContentPaddingLeft: 0;
164
+
162
165
  /* Row */
163
166
  @mobileRowItemMargin : 1rem 0;
164
167
  @tabletRowItemMargin : 1.5rem 0;