mtrl 0.5.2 → 0.5.3

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 (69) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.js +1 -1
  3. package/dist/package.json +1 -1
  4. package/dist/styles.css +1 -1
  5. package/package.json +3 -2
  6. package/src/styles/abstract/_base.scss +2 -0
  7. package/src/styles/abstract/_config.scss +28 -0
  8. package/src/styles/abstract/_functions.scss +124 -0
  9. package/src/styles/abstract/_mixins.scss +401 -0
  10. package/src/styles/abstract/_theme.scss +269 -0
  11. package/src/styles/abstract/_variables.scss +338 -0
  12. package/src/styles/base/_reset.scss +86 -0
  13. package/src/styles/base/_typography.scss +155 -0
  14. package/src/styles/components/_badge.scss +183 -0
  15. package/src/styles/components/_bottom-app-bar.scss +103 -0
  16. package/src/styles/components/_button.scss +756 -0
  17. package/src/styles/components/_card.scss +401 -0
  18. package/src/styles/components/_carousel.scss +645 -0
  19. package/src/styles/components/_checkbox.scss +231 -0
  20. package/src/styles/components/_chips.scss +639 -0
  21. package/src/styles/components/_datepicker.scss +358 -0
  22. package/src/styles/components/_dialog.scss +259 -0
  23. package/src/styles/components/_divider.scss +57 -0
  24. package/src/styles/components/_extended-fab.scss +309 -0
  25. package/src/styles/components/_fab.scss +244 -0
  26. package/src/styles/components/_list.scss +774 -0
  27. package/src/styles/components/_menu.scss +245 -0
  28. package/src/styles/components/_navigation-mobile.scss +244 -0
  29. package/src/styles/components/_navigation-system.scss +151 -0
  30. package/src/styles/components/_navigation.scss +407 -0
  31. package/src/styles/components/_progress.scss +101 -0
  32. package/src/styles/components/_radios.scss +187 -0
  33. package/src/styles/components/_search.scss +306 -0
  34. package/src/styles/components/_segmented-button.scss +227 -0
  35. package/src/styles/components/_select.scss +274 -0
  36. package/src/styles/components/_sheet.scss +236 -0
  37. package/src/styles/components/_slider.scss +264 -0
  38. package/src/styles/components/_snackbar.scss +211 -0
  39. package/src/styles/components/_switch.scss +305 -0
  40. package/src/styles/components/_tabs.scss +421 -0
  41. package/src/styles/components/_textfield.scss +1024 -0
  42. package/src/styles/components/_timepicker.scss +451 -0
  43. package/src/styles/components/_tooltip.scss +241 -0
  44. package/src/styles/components/_top-app-bar.scss +225 -0
  45. package/src/styles/main.scss +129 -0
  46. package/src/styles/themes/_autumn.scss +105 -0
  47. package/src/styles/themes/_base-theme.scss +85 -0
  48. package/src/styles/themes/_baseline.scss +173 -0
  49. package/src/styles/themes/_bluekhaki.scss +125 -0
  50. package/src/styles/themes/_brownbeige.scss +125 -0
  51. package/src/styles/themes/_browngreen.scss +125 -0
  52. package/src/styles/themes/_forest.scss +77 -0
  53. package/src/styles/themes/_greenbeige.scss +125 -0
  54. package/src/styles/themes/_index.scss +19 -0
  55. package/src/styles/themes/_material.scss +125 -0
  56. package/src/styles/themes/_ocean.scss +77 -0
  57. package/src/styles/themes/_sageivory.scss +125 -0
  58. package/src/styles/themes/_spring.scss +77 -0
  59. package/src/styles/themes/_summer.scss +87 -0
  60. package/src/styles/themes/_sunset.scss +60 -0
  61. package/src/styles/themes/_tealcaramel.scss +125 -0
  62. package/src/styles/themes/_winter.scss +77 -0
  63. package/src/styles/utilities/_colors.scss +154 -0
  64. package/src/styles/utilities/_flexbox.scss +194 -0
  65. package/src/styles/utilities/_layout.scss +665 -0
  66. package/src/styles/utilities/_ripple.scss +79 -0
  67. package/src/styles/utilities/_spacing.scss +139 -0
  68. package/src/styles/utilities/_typography.scss +178 -0
  69. package/src/styles/utilities/_visibility.scss +142 -0
@@ -0,0 +1,665 @@
1
+ // src/styles/utilities/_layout.scss
2
+ @use '../abstract/base' as base;
3
+ @use '../abstract/variables' as v;
4
+ @use '../abstract/mixins' as m;
5
+ @use 'sass:map';
6
+ @use 'sass:list';
7
+ @use 'sass:math';
8
+
9
+ $prefix: base.$prefix;
10
+ $layout: '#{$prefix}-layout';
11
+
12
+ // Common gap sizes for layout components
13
+ $gap-sizes: (
14
+ '0': 0,
15
+ '1': 4px,
16
+ '2': 8px,
17
+ '3': 12px,
18
+ '4': 16px,
19
+ '5': 20px,
20
+ '6': 24px,
21
+ '8': 32px,
22
+ '10': 40px,
23
+ '12': 48px
24
+ );
25
+
26
+ // Default layout properties
27
+ $defaults: (
28
+ 'gap': 16px,
29
+ 'stack-gap': 16px,
30
+ 'row-gap': 16px,
31
+ 'grid-gap': 16px,
32
+ 'grid-min': 200px,
33
+ 'grid-columns': 12,
34
+ 'breakpoints': (
35
+ 'xs': 0,
36
+ 'sm': 600px,
37
+ 'md': 960px,
38
+ 'lg': 1280px,
39
+ 'xl': 1920px
40
+ )
41
+ );
42
+
43
+ // ----------------------------------------
44
+ // Base layout styles
45
+ // ----------------------------------------
46
+
47
+ // Container - centers content with max-width
48
+ .#{$layout} {
49
+ width: 100%;
50
+ margin-left: auto;
51
+ margin-right: auto;
52
+ padding-left: map.get($defaults, 'gap');
53
+ padding-right: map.get($defaults, 'gap');
54
+ box-sizing: border-box;
55
+
56
+ // Different container sizes
57
+ &--sm {
58
+ max-width: 600px;
59
+ }
60
+
61
+ &--md {
62
+ max-width: 960px;
63
+ }
64
+
65
+ &--lg {
66
+ max-width: 1280px;
67
+ }
68
+
69
+ &--xl {
70
+ max-width: 1920px;
71
+ }
72
+
73
+ &--fluid {
74
+ max-width: 100%;
75
+ }
76
+
77
+ // Mobile padding adjustments
78
+ @media (max-width: map.get(map.get($defaults, 'breakpoints'), 'sm') - 1px) {
79
+ padding-left: 12px;
80
+ padding-right: 12px;
81
+ }
82
+
83
+ // Mobile width options
84
+ &--mobile-narrow {
85
+ @media (max-width: map.get(map.get($defaults, 'breakpoints'), 'sm') - 1px) {
86
+ max-width: 90%;
87
+ }
88
+ }
89
+
90
+ &--mobile-full {
91
+ @media (max-width: map.get(map.get($defaults, 'breakpoints'), 'sm') - 1px) {
92
+ padding-left: 0;
93
+ padding-right: 0;
94
+ }
95
+ }
96
+ }
97
+
98
+ // ----------------------------------------
99
+ // Stack Layout (Vertical)
100
+ // ----------------------------------------
101
+
102
+ .#{$layout}--stack {
103
+ display: flex;
104
+ flex-direction: column;
105
+ width: 100%;
106
+ gap: map.get($defaults, 'stack-gap');
107
+
108
+ // Stack alignment
109
+ &-start {
110
+ align-items: flex-start;
111
+ }
112
+
113
+ &-center {
114
+ align-items: center;
115
+ }
116
+
117
+ &-end {
118
+ align-items: flex-end;
119
+ }
120
+
121
+ &-stretch {
122
+ align-items: stretch;
123
+ }
124
+
125
+ // Stack distribution (for multi-item stacks)
126
+ &-justify-start {
127
+ justify-content: flex-start;
128
+ }
129
+
130
+ &-justify-center {
131
+ justify-content: center;
132
+ }
133
+
134
+ &-justify-end {
135
+ justify-content: flex-end;
136
+ }
137
+
138
+ &-justify-between {
139
+ justify-content: space-between;
140
+ }
141
+
142
+ &-justify-around {
143
+ justify-content: space-around;
144
+ }
145
+
146
+ // Stack spacing
147
+ @each $name, $size in $gap-sizes {
148
+ &-gap-#{$name} {
149
+ gap: $size;
150
+ }
151
+ }
152
+ }
153
+
154
+ // ----------------------------------------
155
+ // Row Layout (Horizontal)
156
+ // ----------------------------------------
157
+
158
+ .#{$layout}--row {
159
+ display: flex;
160
+ width: 100%;
161
+ gap: map.get($defaults, 'row-gap');
162
+
163
+ // Auto-stack on mobile by default
164
+ flex-direction: column;
165
+
166
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
167
+ flex-direction: row;
168
+ flex-wrap: wrap;
169
+ }
170
+
171
+ // Row alignment
172
+ &-start {
173
+ align-items: flex-start;
174
+ }
175
+
176
+ &-center {
177
+ align-items: center;
178
+ }
179
+
180
+ &-end {
181
+ align-items: flex-end;
182
+ }
183
+
184
+ &-stretch {
185
+ align-items: stretch;
186
+ }
187
+
188
+ // Row distribution
189
+ &-justify-start {
190
+ justify-content: flex-start;
191
+ }
192
+
193
+ &-justify-center {
194
+ justify-content: center;
195
+ }
196
+
197
+ &-justify-end {
198
+ justify-content: flex-end;
199
+ }
200
+
201
+ &-justify-between {
202
+ justify-content: space-between;
203
+ }
204
+
205
+ &-justify-around {
206
+ justify-content: space-around;
207
+ }
208
+
209
+ &-justify-evenly {
210
+ justify-content: space-evenly;
211
+ }
212
+
213
+ // Row wrapping
214
+ &-nowrap {
215
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
216
+ flex-wrap: nowrap;
217
+ overflow-x: auto;
218
+ }
219
+ }
220
+
221
+ &-wrap-reverse {
222
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
223
+ flex-wrap: wrap-reverse;
224
+ }
225
+ }
226
+
227
+ // Add option to override auto-stacking for specific cases
228
+ &-no-stack {
229
+ flex-direction: row;
230
+ flex-wrap: wrap;
231
+ }
232
+
233
+ // Row spacing
234
+ @each $name, $size in $gap-sizes {
235
+ &-gap-#{$name} {
236
+ gap: $size;
237
+ }
238
+ }
239
+
240
+ // Row items - full width on mobile, equal width on larger screens
241
+ > * {
242
+ width: 100%; // Full width on mobile
243
+
244
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
245
+ flex: 1 1 0%; // Equal width on larger screens
246
+ }
247
+ }
248
+
249
+ // Auto width items
250
+ > .#{$layout}__item--auto {
251
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
252
+ flex: 0 0 auto;
253
+ width: auto;
254
+ }
255
+ }
256
+
257
+ // Fixed width items - full width on mobile
258
+ @for $i from 1 through 12 {
259
+ > .#{$layout}__item--#{$i} {
260
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
261
+ flex: 0 0 auto;
262
+ width: calc(#{math.div($i, 12) * 100%} - (#{map.get($defaults, 'row-gap')} * #{math.div(12 - $i, 12)}));
263
+ }
264
+ }
265
+ }
266
+
267
+ // Responsive width items
268
+ @each $bp, $width in map.get($defaults, 'breakpoints') {
269
+ @if $bp != 'xs' {
270
+ @for $i from 1 through 12 {
271
+ > .#{$layout}__item--#{$bp}-#{$i} {
272
+ @media (min-width: $width) {
273
+ flex: 0 0 auto;
274
+ width: calc(#{math.div($i, 12) * 100%} - (#{map.get($defaults, 'row-gap')} * #{math.div(12 - $i, 12)}));
275
+ }
276
+ }
277
+ }
278
+ }
279
+ }
280
+
281
+ // Row items in a no-stack row
282
+ &-no-stack {
283
+ > * {
284
+ flex: 1 1 0%;
285
+ }
286
+
287
+ @for $i from 1 through 12 {
288
+ > .#{$layout}__item--#{$i} {
289
+ flex: 0 0 auto;
290
+ width: calc(#{math.div($i, 12) * 100%} - (#{map.get($defaults, 'row-gap')} * #{math.div(12 - $i, 12)}));
291
+ }
292
+ }
293
+ }
294
+ }
295
+
296
+ // ----------------------------------------
297
+ // Grid Layout
298
+ // ----------------------------------------
299
+
300
+ .#{$layout}--grid {
301
+ display: grid;
302
+ gap: map.get($defaults, 'grid-gap');
303
+ width: 100%;
304
+
305
+ // Auto-stack on mobile by default
306
+ grid-template-columns: 1fr;
307
+
308
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
309
+ // Default to auto-fit for non-mobile screens
310
+ grid-template-columns: repeat(auto-fit, minmax(map.get($defaults, 'grid-min'), 1fr));
311
+ }
312
+
313
+ // Grid modes: auto-fit (default), auto-fill
314
+ &-fill {
315
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
316
+ grid-template-columns: repeat(auto-fill, minmax(map.get($defaults, 'grid-min'), 1fr));
317
+ }
318
+ }
319
+
320
+ // Fixed column counts - stack on mobile by default
321
+ @for $i from 1 through 12 {
322
+ &-cols-#{$i} {
323
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
324
+ grid-template-columns: repeat($i, 1fr);
325
+ }
326
+ }
327
+ }
328
+
329
+ // Responsive column counts
330
+ @each $bp, $width in map.get($defaults, 'breakpoints') {
331
+ @if $bp != 'xs' {
332
+ @for $i from 1 through 6 {
333
+ &-#{$bp}-cols-#{$i} {
334
+ @media (min-width: $width) {
335
+ grid-template-columns: repeat($i, 1fr);
336
+ }
337
+ }
338
+ }
339
+ }
340
+ }
341
+
342
+ // Add option to override auto-stacking for specific cases
343
+ &-no-stack {
344
+ grid-template-columns: repeat(auto-fit, minmax(map.get($defaults, 'grid-min'), 1fr));
345
+
346
+ &-cols-2 {
347
+ grid-template-columns: repeat(2, 1fr);
348
+ }
349
+
350
+ &-cols-3 {
351
+ grid-template-columns: repeat(3, 1fr);
352
+ }
353
+ }
354
+
355
+ // Dense auto-placement
356
+ &-dense {
357
+ grid-auto-flow: dense;
358
+ }
359
+
360
+ // Grid alignment
361
+ &-align-start {
362
+ align-items: start;
363
+ }
364
+
365
+ &-align-center {
366
+ align-items: center;
367
+ }
368
+
369
+ &-align-end {
370
+ align-items: end;
371
+ }
372
+
373
+ &-justify-start {
374
+ justify-content: start;
375
+ }
376
+
377
+ &-justify-center {
378
+ justify-content: center;
379
+ }
380
+
381
+ &-justify-end {
382
+ justify-content: end;
383
+ }
384
+
385
+ &-auto-height {
386
+ align-items: start; // Prevent stretching items vertically
387
+
388
+ > * {
389
+ height: auto; // Ensure children only take the height they need
390
+ }
391
+ }
392
+
393
+ // Grid minimum sizes
394
+ @each $name, $size in (
395
+ 'xs': 120px,
396
+ 'sm': 180px,
397
+ 'md': 240px,
398
+ 'lg': 300px,
399
+ 'xl': 360px
400
+ ) {
401
+ &-min-#{$name} {
402
+ grid-template-columns: repeat(auto-fit, minmax($size, 1fr));
403
+
404
+ &.#{$layout}--grid-fill {
405
+ grid-template-columns: repeat(auto-fill, minmax($size, 1fr));
406
+ }
407
+ }
408
+ }
409
+
410
+ // Grid gap sizes
411
+ @each $name, $size in $gap-sizes {
412
+ &-gap-#{$name} {
413
+ gap: $size;
414
+ }
415
+ }
416
+
417
+ // Grid item span
418
+ @for $i from 1 through 12 {
419
+ > .#{$layout}__item--span-#{$i} {
420
+ grid-column: span $i;
421
+ }
422
+
423
+ > .#{$layout}__item--row-span-#{$i} {
424
+ grid-row: span $i;
425
+ }
426
+ }
427
+
428
+ // Responsive item spans
429
+ @each $bp, $width in map.get($defaults, 'breakpoints') {
430
+ @if $bp != 'xs' {
431
+ @for $i from 1 through 12 {
432
+ > .#{$layout}__item--#{$bp}-span-#{$i} {
433
+ @media (min-width: $width) {
434
+ grid-column: span $i;
435
+ }
436
+ }
437
+ }
438
+ }
439
+ }
440
+ }
441
+
442
+ // ----------------------------------------
443
+ // Item placement and alignment
444
+ // ----------------------------------------
445
+
446
+ // Self alignment utilities for both flex and grid children
447
+ .#{$layout}__item--self-start {
448
+ align-self: flex-start;
449
+ }
450
+
451
+ .#{$layout}__item--self-center {
452
+ align-self: center;
453
+ }
454
+
455
+ .#{$layout}__item--self-end {
456
+ align-self: flex-end;
457
+ }
458
+
459
+ .#{$layout}__item--self-stretch {
460
+ align-self: stretch;
461
+ }
462
+
463
+ // Order utilities
464
+ .#{$layout}__item--order-first {
465
+ order: -9999;
466
+ }
467
+
468
+ .#{$layout}__item--order-last {
469
+ order: 9999;
470
+ }
471
+
472
+ @for $i from 1 through 12 {
473
+ .#{$layout}__item--order-#{$i} {
474
+ order: $i;
475
+ }
476
+ }
477
+
478
+ // ----------------------------------------
479
+ // Responsive display utilities
480
+ // ----------------------------------------
481
+
482
+ // Hide on specific breakpoints
483
+ @each $bp, $width in map.get($defaults, 'breakpoints') {
484
+ @if $bp != 'xs' {
485
+ .#{$layout}--hide-#{$bp}-up {
486
+ @media (min-width: $width) {
487
+ display: none !important;
488
+ }
489
+ }
490
+
491
+ .#{$layout}--hide-#{$bp}-down {
492
+ @media (max-width: $width - 1px) {
493
+ display: none !important;
494
+ }
495
+ }
496
+ }
497
+ }
498
+
499
+ // Mobile-specific layouts - now redundant as stacking is default behavior
500
+ // These are kept for backward compatibility
501
+ .#{$layout}--stack-mobile {
502
+ @media (max-width: map.get(map.get($defaults, 'breakpoints'), 'sm') - 1px) {
503
+ display: flex;
504
+ flex-direction: column;
505
+ width: 100%;
506
+ }
507
+ }
508
+
509
+ // Still useful for layouts that specifically need to override
510
+ .#{$layout}--force-stack {
511
+ flex-direction: column !important;
512
+
513
+ > * {
514
+ width: 100% !important;
515
+ }
516
+ }
517
+
518
+ .#{$layout}--row-mobile-scroll {
519
+ @media (max-width: map.get(map.get($defaults, 'breakpoints'), 'sm') - 1px) {
520
+ flex-wrap: nowrap;
521
+ overflow-x: auto;
522
+ -webkit-overflow-scrolling: touch;
523
+ scroll-snap-type: x mandatory;
524
+
525
+ > * {
526
+ scroll-snap-align: start;
527
+ flex: 0 0 auto;
528
+ width: 80%; // Default mobile scroll item width
529
+ max-width: 300px;
530
+ }
531
+
532
+ // Optionally override the width
533
+ &-small > * {
534
+ width: 60%;
535
+ max-width: 200px;
536
+ }
537
+
538
+ &-large > * {
539
+ width: 90%;
540
+ max-width: 400px;
541
+ }
542
+ }
543
+ }
544
+
545
+ // Mobile-first responsive grid with specified minimum sizes
546
+ .#{$layout}--grid-mobile-first {
547
+ grid-template-columns: 1fr;
548
+
549
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'sm')) {
550
+ grid-template-columns: repeat(2, 1fr);
551
+ }
552
+
553
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'md')) {
554
+ grid-template-columns: repeat(auto-fit, minmax(map.get($defaults, 'grid-min'), 1fr));
555
+ }
556
+ }
557
+
558
+ // ----------------------------------------
559
+ // Mobile-specific utilities
560
+ // ----------------------------------------
561
+
562
+ // Mobile safe area insets (for notches and home indicators)
563
+ .#{$layout}--safe-area {
564
+ padding-top: env(safe-area-inset-top, 0);
565
+ padding-right: env(safe-area-inset-right, 0);
566
+ padding-bottom: env(safe-area-inset-bottom, 0);
567
+ padding-left: env(safe-area-inset-left, 0);
568
+ }
569
+
570
+ // Touch-friendly spacing
571
+ .#{$layout}--touch-friendly {
572
+ @media (max-width: map.get(map.get($defaults, 'breakpoints'), 'sm') - 1px) {
573
+ > * {
574
+ min-height: 44px; // Minimum recommended touch target size
575
+ margin-bottom: 12px; // Ensure adequate spacing between touch targets
576
+ }
577
+ }
578
+ }
579
+
580
+ // Prevent overscroll bounce on iOS
581
+ .#{$layout}--prevent-overscroll {
582
+ height: 100%;
583
+ overflow: hidden;
584
+
585
+ > div {
586
+ height: 100%;
587
+ overflow-y: auto;
588
+ -webkit-overflow-scrolling: touch;
589
+ }
590
+ }
591
+
592
+ // Mobile viewport height fix (for address bar issues)
593
+ .#{$layout}--full-height {
594
+ height: 100vh; /* Fallback */
595
+ height: -webkit-fill-available;
596
+ height: stretch; /* Future standard */
597
+
598
+ @supports (-webkit-touch-callout: none) {
599
+ /* iOS specific fix */
600
+ min-height: -webkit-fill-available;
601
+ }
602
+ }
603
+
604
+ // Mobile navigation bar spacing
605
+ .#{$layout}--nav-spacing {
606
+ padding-bottom: max(env(safe-area-inset-bottom, 16px), 16px);
607
+ }
608
+
609
+ // ----------------------------------------
610
+ // Spacing utilities
611
+ // ----------------------------------------
612
+
613
+ // Utility for consistent spacing in a section
614
+ .#{$layout}--section {
615
+ padding-top: 32px;
616
+ padding-bottom: 32px;
617
+
618
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'md')) {
619
+ padding-top: 48px;
620
+ padding-bottom: 48px;
621
+ }
622
+
623
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'lg')) {
624
+ padding-top: 64px;
625
+ padding-bottom: 64px;
626
+ }
627
+
628
+ &-sm {
629
+ padding-top: 16px;
630
+ padding-bottom: 16px;
631
+
632
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'md')) {
633
+ padding-top: 24px;
634
+ padding-bottom: 24px;
635
+ }
636
+ }
637
+
638
+ &-lg {
639
+ padding-top: 48px;
640
+ padding-bottom: 48px;
641
+
642
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'md')) {
643
+ padding-top: 64px;
644
+ padding-bottom: 64px;
645
+ }
646
+
647
+ @media (min-width: map.get(map.get($defaults, 'breakpoints'), 'lg')) {
648
+ padding-top: 96px;
649
+ padding-bottom: 96px;
650
+ }
651
+ }
652
+ }
653
+
654
+ // ----------------------------------------
655
+ // Hero layout
656
+ // ----------------------------------------
657
+
658
+ // Hero layout
659
+ .#{$layout}--hero {
660
+ display: grid;
661
+ grid-template-rows: auto 1fr auto;
662
+ min-height: 100vh;
663
+ min-height: -webkit-fill-available;
664
+ width: 100%;
665
+ }