]> BookStack Code Mirror - bookstack/blob - resources/assets/sass/_grid.scss
302b667073bf7ef5e70551f705c4d245429534b1
[bookstack] / resources / assets / sass / _grid.scss
1
2 /** Flexbox styling rules **/
3 body.flexbox {
4   display: flex;
5   flex-direction: column;
6   align-items: stretch;
7   height: 100%;
8   min-height: 100%;
9   max-height: 100%;
10   overflow: hidden;
11   #content {
12     flex: 1;
13     display: flex;
14     min-height: 0;
15   }
16 }
17
18 .flex-fill {
19   display: flex;
20   align-items: stretch;
21   min-height: 0;
22   max-width: 100%;
23   position: relative;
24   &.rows {
25     flex-direction: row;
26   }
27   &.columns {
28     flex-direction: column;
29   }
30 }
31
32 .flex {
33   min-height: 0;
34   flex: 1;
35 }
36
37 .flex.scroll {
38   //overflow-y: auto;
39   display: flex;
40   &.sidebar {
41     margin-right: -14px;
42   }
43 }
44 .flex.scroll .scroll-body {
45   overflow-y: scroll;
46   flex: 1;
47 }
48
49 .flex-child > div {
50   flex: 1;
51 }
52
53 .content-wrap.card {
54   padding: $-l $-xxl;
55   margin-left: auto;
56   margin-right: auto;
57   margin-bottom: $-xl;
58   overflow: auto;
59   min-height: 60vh;
60   &.auto-height {
61     min-height: 0;
62   }
63 }
64
65 .tri-layout-container {
66   display: grid;
67   grid-template-columns: 1fr minmax(auto, 940px) 1fr;
68   grid-template-areas: "a b c";
69   .tri-layout-right-contents, .tri-layout-left-contents {
70     padding-right: 3vw;
71     padding-left: 3vw;
72     max-width: 460px;
73     margin-left: auto;
74     margin-right: auto;
75   }
76   .tri-layout-right {
77     grid-area: c;
78   }
79   .tri-layout-left {
80     grid-area: a;
81   }
82   .tri-layout-middle {
83     grid-area: b;
84   }
85 }
86 @include smaller-than($xxl) {
87   .tri-layout-container {
88     grid-template-areas:  "c b b"
89                           "a b b";
90     grid-template-columns: 1fr 3fr;
91     grid-template-rows: max-content min-content;
92     padding-right: $-l;
93     .content-wrap.card {
94       padding: $-l $-l;
95     }
96   }
97 }
98 @include larger-than($xxl) {
99   .tri-layout-left-contents, .tri-layout-right-contents {
100     position: sticky;
101     top: $-m;
102     max-height: 100vh;
103     min-height: 50vh;
104     overflow-y: scroll;
105     overflow-x: visible;
106     scrollbar-width: none;
107     -ms-overflow-style: none;
108     &::-webkit-scrollbar {
109       display: none;
110     }
111   }
112 }
113
114 @include smaller-than($l) {
115   .tri-layout-container {
116     grid-template-areas:  none;
117     grid-template-columns: 10% 90%;
118     grid-column-gap: 0;
119     .tri-layout-left-contents, .tri-layout-right-contents {
120       padding-left: $-m;
121       padding-right: $-m;
122     }
123     .tri-layout-right-contents > div, .tri-layout-left-contents > div {
124       opacity: 0.6;
125       z-index: 0;
126     }
127     .tri-layout-left > *, .tri-layout-right > * {
128       pointer-events: none;
129     }
130     .tri-layout-right, .tri-layout-left, .tri-layout-middle {
131       grid-area: none;
132       grid-column: 1/3;
133       grid-row: 1;
134     }
135     .tri-layout-middle {
136       grid-row: 1/3;
137       grid-column: 2/3;
138       z-index: 1;
139       transition: transform ease-in-out 240ms;
140     }
141     .tri-layout-left {
142       grid-row: 2;
143     }
144     &.mobile-open {
145       overflow: hidden;
146       .tri-layout-middle {
147         transform: translateX(90%);
148       }
149       .tri-layout-right  > *, .tri-layout-left > * {
150         pointer-events: auto;
151       }
152     }
153   }
154 }
155
156 .tri-layout-left-contents > div, .tri-layout-right-contents > div {
157   opacity: 0.6;
158   transition: opacity ease-in-out 120ms;
159   &:hover {
160     opacity: 1;
161   }
162 }
163
164 /** Rules for all columns */
165 div[class^="col-"] img {
166   max-width: 100%;
167 }
168
169 .container {
170   max-width: $xxl;
171   margin-left: auto;
172   margin-right: auto;
173   padding-left: $-m;
174   padding-right: $-m;
175   &.fluid {
176     max-width: 100%;
177   }
178   &.medium {
179     max-width: 992px;
180   }
181   &.small {
182     max-width: 840px;
183   }
184   &.nopad {
185     padding-left: 0;
186     padding-right: 0;
187   }
188 }
189
190 .row {
191   margin-left: -$-m;
192   margin-right: -$-m;
193 }
194
195 .grid {
196   display: grid;
197   grid-column-gap: $-l;
198   grid-row-gap: $-l;
199   &.half {
200     grid-template-columns: 1fr 1fr;
201   }
202   &.third {
203     grid-template-columns: 1fr 1fr 1fr;
204   }
205   &.left-focus {
206     grid-template-columns: 2fr 1fr;
207   }
208   &.large-gap {
209     grid-column-gap: $-xl;
210     grid-row-gap: $-xl;
211     justify-items: start;
212   }
213 }
214
215 .grid-card {
216   display: flex;
217   flex-direction: column;
218   border: 1px solid #ddd;
219   margin-bottom: $-l;
220   border-radius: 4px;
221   overflow: hidden;
222   min-width: 100px;
223   color: $text-dark;
224   transition: border-color ease-in-out 120ms, box-shadow ease-in-out 120ms;
225   &:hover {
226     color: $text-dark;
227     text-decoration: none;
228     box-shadow: $bs-card;
229   }
230   h2 {
231     width: 100%;
232     font-size: 1.5em;
233     margin: 0 0 10px;
234   }
235   p {
236     font-size: .85em;
237     margin: 0;
238     line-height: 1.6em;
239   }
240   .grid-card-content {
241     flex: 1;
242     border-top: 0;
243     border-bottom-width: 2px;
244   }
245   .grid-card-content, .grid-card-footer {
246     padding: $-l;
247   }
248   .grid-card-content + .grid-card-footer {
249     padding-top: 0;
250   }
251 }
252
253 .bookshelf-grid-item .grid-card-content h2 a  {
254   color: $color-bookshelf;
255   fill: $color-bookshelf;
256 }
257
258 .book-grid-item .grid-card-footer {
259   p.small {
260     font-size: .8em;
261     margin: 0;
262   }
263 }
264
265 @include smaller-than($m) {
266   .grid.third {
267     grid-template-columns: 1fr 1fr;
268   }
269   .grid.left-focus {
270     grid-template-columns: 1fr;
271   }
272 }
273
274 @include smaller-than($s) {
275   .grid.third {
276     grid-template-columns: 1fr;
277   }
278 }
279
280 .float {
281   float: left;
282   &.right {
283     float: right;
284   }
285 }
286
287 .block {
288   display: block;
289   position: relative;
290 }
291
292 .inline {
293   display: inline;
294 }
295
296 .block.inline {
297   display: inline-block;
298 }
299
300
301 // TODO - Remove old BS grid system
302 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
303   position: relative;
304   min-height: 1px;
305   padding-left: $-m;
306   padding-right: $-m;
307 }
308 .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
309   float: left;
310 }
311 .col-xs-12 {
312   width: 100%;
313 }
314 .col-xs-11 {
315   width: 91.66666667%;
316 }
317 .col-xs-10 {
318   width: 83.33333333%;
319 }
320 .col-xs-9 {
321   width: 75%;
322 }
323 .col-xs-8 {
324   width: 66.66666667%;
325 }
326 .col-xs-7 {
327   width: 58.33333333%;
328 }
329 .col-xs-6 {
330   width: 50%;
331 }
332 .col-xs-5 {
333   width: 41.66666667%;
334 }
335 .col-xs-4 {
336   width: 33.33333333%;
337 }
338 .col-xs-3 {
339   width: 25%;
340 }
341 .col-xs-2 {
342   width: 16.66666667%;
343 }
344 .col-xs-1 {
345   width: 8.33333333%;
346 }
347 .col-xs-pull-12 {
348   right: 100%;
349 }
350 .col-xs-pull-11 {
351   right: 91.66666667%;
352 }
353 .col-xs-pull-10 {
354   right: 83.33333333%;
355 }
356 .col-xs-pull-9 {
357   right: 75%;
358 }
359 .col-xs-pull-8 {
360   right: 66.66666667%;
361 }
362 .col-xs-pull-7 {
363   right: 58.33333333%;
364 }
365 .col-xs-pull-6 {
366   right: 50%;
367 }
368 .col-xs-pull-5 {
369   right: 41.66666667%;
370 }
371 .col-xs-pull-4 {
372   right: 33.33333333%;
373 }
374 .col-xs-pull-3 {
375   right: 25%;
376 }
377 .col-xs-pull-2 {
378   right: 16.66666667%;
379 }
380 .col-xs-pull-1 {
381   right: 8.33333333%;
382 }
383 .col-xs-pull-0 {
384   right: auto;
385 }
386 .col-xs-push-12 {
387   left: 100%;
388 }
389 .col-xs-push-11 {
390   left: 91.66666667%;
391 }
392 .col-xs-push-10 {
393   left: 83.33333333%;
394 }
395 .col-xs-push-9 {
396   left: 75%;
397 }
398 .col-xs-push-8 {
399   left: 66.66666667%;
400 }
401 .col-xs-push-7 {
402   left: 58.33333333%;
403 }
404 .col-xs-push-6 {
405   left: 50%;
406 }
407 .col-xs-push-5 {
408   left: 41.66666667%;
409 }
410 .col-xs-push-4 {
411   left: 33.33333333%;
412 }
413 .col-xs-push-3 {
414   left: 25%;
415 }
416 .col-xs-push-2 {
417   left: 16.66666667%;
418 }
419 .col-xs-push-1 {
420   left: 8.33333333%;
421 }
422 .col-xs-push-0 {
423   left: auto;
424 }
425 .col-xs-offset-12 {
426   margin-left: 100%;
427 }
428 .col-xs-offset-11 {
429   margin-left: 91.66666667%;
430 }
431 .col-xs-offset-10 {
432   margin-left: 83.33333333%;
433 }
434 .col-xs-offset-9 {
435   margin-left: 75%;
436 }
437 .col-xs-offset-8 {
438   margin-left: 66.66666667%;
439 }
440 .col-xs-offset-7 {
441   margin-left: 58.33333333%;
442 }
443 .col-xs-offset-6 {
444   margin-left: 50%;
445 }
446 .col-xs-offset-5 {
447   margin-left: 41.66666667%;
448 }
449 .col-xs-offset-4 {
450   margin-left: 33.33333333%;
451 }
452 .col-xs-offset-3 {
453   margin-left: 25%;
454 }
455 .col-xs-offset-2 {
456   margin-left: 16.66666667%;
457 }
458 .col-xs-offset-1 {
459   margin-left: 8.33333333%;
460 }
461 .col-xs-offset-0 {
462   margin-left: 0%;
463 }
464 @media (min-width: $screen-sm) {
465   .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
466     float: left;
467   }
468   .col-sm-12 {
469     width: 100%;
470   }
471   .col-sm-11 {
472     width: 91.66666667%;
473   }
474   .col-sm-10 {
475     width: 83.33333333%;
476   }
477   .col-sm-9 {
478     width: 75%;
479   }
480   .col-sm-8 {
481     width: 66.66666667%;
482   }
483   .col-sm-7 {
484     width: 58.33333333%;
485   }
486   .col-sm-6 {
487     width: 50%;
488   }
489   .col-sm-5 {
490     width: 41.66666667%;
491   }
492   .col-sm-4 {
493     width: 33.33333333%;
494   }
495   .col-sm-3 {
496     width: 25%;
497   }
498   .col-sm-2 {
499     width: 16.66666667%;
500   }
501   .col-sm-1 {
502     width: 8.33333333%;
503   }
504   .col-sm-pull-12 {
505     right: 100%;
506   }
507   .col-sm-pull-11 {
508     right: 91.66666667%;
509   }
510   .col-sm-pull-10 {
511     right: 83.33333333%;
512   }
513   .col-sm-pull-9 {
514     right: 75%;
515   }
516   .col-sm-pull-8 {
517     right: 66.66666667%;
518   }
519   .col-sm-pull-7 {
520     right: 58.33333333%;
521   }
522   .col-sm-pull-6 {
523     right: 50%;
524   }
525   .col-sm-pull-5 {
526     right: 41.66666667%;
527   }
528   .col-sm-pull-4 {
529     right: 33.33333333%;
530   }
531   .col-sm-pull-3 {
532     right: 25%;
533   }
534   .col-sm-pull-2 {
535     right: 16.66666667%;
536   }
537   .col-sm-pull-1 {
538     right: 8.33333333%;
539   }
540   .col-sm-pull-0 {
541     right: auto;
542   }
543   .col-sm-push-12 {
544     left: 100%;
545   }
546   .col-sm-push-11 {
547     left: 91.66666667%;
548   }
549   .col-sm-push-10 {
550     left: 83.33333333%;
551   }
552   .col-sm-push-9 {
553     left: 75%;
554   }
555   .col-sm-push-8 {
556     left: 66.66666667%;
557   }
558   .col-sm-push-7 {
559     left: 58.33333333%;
560   }
561   .col-sm-push-6 {
562     left: 50%;
563   }
564   .col-sm-push-5 {
565     left: 41.66666667%;
566   }
567   .col-sm-push-4 {
568     left: 33.33333333%;
569   }
570   .col-sm-push-3 {
571     left: 25%;
572   }
573   .col-sm-push-2 {
574     left: 16.66666667%;
575   }
576   .col-sm-push-1 {
577     left: 8.33333333%;
578   }
579   .col-sm-push-0 {
580     left: auto;
581   }
582   .col-sm-offset-12 {
583     margin-left: 100%;
584   }
585   .col-sm-offset-11 {
586     margin-left: 91.66666667%;
587   }
588   .col-sm-offset-10 {
589     margin-left: 83.33333333%;
590   }
591   .col-sm-offset-9 {
592     margin-left: 75%;
593   }
594   .col-sm-offset-8 {
595     margin-left: 66.66666667%;
596   }
597   .col-sm-offset-7 {
598     margin-left: 58.33333333%;
599   }
600   .col-sm-offset-6 {
601     margin-left: 50%;
602   }
603   .col-sm-offset-5 {
604     margin-left: 41.66666667%;
605   }
606   .col-sm-offset-4 {
607     margin-left: 33.33333333%;
608   }
609   .col-sm-offset-3 {
610     margin-left: 25%;
611   }
612   .col-sm-offset-2 {
613     margin-left: 16.66666667%;
614   }
615   .col-sm-offset-1 {
616     margin-left: 8.33333333%;
617   }
618   .col-sm-offset-0 {
619     margin-left: 0%;
620   }
621 }
622 @media (min-width: $screen-md) {
623   .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
624     float: left;
625   }
626   .col-md-12 {
627     width: 100%;
628   }
629   .col-md-11 {
630     width: 91.66666667%;
631   }
632   .col-md-10 {
633     width: 83.33333333%;
634   }
635   .col-md-9 {
636     width: 75%;
637   }
638   .col-md-8 {
639     width: 66.66666667%;
640   }
641   .col-md-7 {
642     width: 58.33333333%;
643   }
644   .col-md-6 {
645     width: 50%;
646   }
647   .col-md-5 {
648     width: 41.66666667%;
649   }
650   .col-md-4 {
651     width: 33.33333333%;
652   }
653   .col-md-3 {
654     width: 25%;
655   }
656   .col-md-2 {
657     width: 16.66666667%;
658   }
659   .col-md-1 {
660     width: 8.33333333%;
661   }
662   .col-md-pull-12 {
663     right: 100%;
664   }
665   .col-md-pull-11 {
666     right: 91.66666667%;
667   }
668   .col-md-pull-10 {
669     right: 83.33333333%;
670   }
671   .col-md-pull-9 {
672     right: 75%;
673   }
674   .col-md-pull-8 {
675     right: 66.66666667%;
676   }
677   .col-md-pull-7 {
678     right: 58.33333333%;
679   }
680   .col-md-pull-6 {
681     right: 50%;
682   }
683   .col-md-pull-5 {
684     right: 41.66666667%;
685   }
686   .col-md-pull-4 {
687     right: 33.33333333%;
688   }
689   .col-md-pull-3 {
690     right: 25%;
691   }
692   .col-md-pull-2 {
693     right: 16.66666667%;
694   }
695   .col-md-pull-1 {
696     right: 8.33333333%;
697   }
698   .col-md-pull-0 {
699     right: auto;
700   }
701   .col-md-push-12 {
702     left: 100%;
703   }
704   .col-md-push-11 {
705     left: 91.66666667%;
706   }
707   .col-md-push-10 {
708     left: 83.33333333%;
709   }
710   .col-md-push-9 {
711     left: 75%;
712   }
713   .col-md-push-8 {
714     left: 66.66666667%;
715   }
716   .col-md-push-7 {
717     left: 58.33333333%;
718   }
719   .col-md-push-6 {
720     left: 50%;
721   }
722   .col-md-push-5 {
723     left: 41.66666667%;
724   }
725   .col-md-push-4 {
726     left: 33.33333333%;
727   }
728   .col-md-push-3 {
729     left: 25%;
730   }
731   .col-md-push-2 {
732     left: 16.66666667%;
733   }
734   .col-md-push-1 {
735     left: 8.33333333%;
736   }
737   .col-md-push-0 {
738     left: auto;
739   }
740   .col-md-offset-12 {
741     margin-left: 100%;
742   }
743   .col-md-offset-11 {
744     margin-left: 91.66666667%;
745   }
746   .col-md-offset-10 {
747     margin-left: 83.33333333%;
748   }
749   .col-md-offset-9 {
750     margin-left: 75%;
751   }
752   .col-md-offset-8 {
753     margin-left: 66.66666667%;
754   }
755   .col-md-offset-7 {
756     margin-left: 58.33333333%;
757   }
758   .col-md-offset-6 {
759     margin-left: 50%;
760   }
761   .col-md-offset-5 {
762     margin-left: 41.66666667%;
763   }
764   .col-md-offset-4 {
765     margin-left: 33.33333333%;
766   }
767   .col-md-offset-3 {
768     margin-left: 25%;
769   }
770   .col-md-offset-2 {
771     margin-left: 16.66666667%;
772   }
773   .col-md-offset-1 {
774     margin-left: 8.33333333%;
775   }
776   .col-md-offset-0 {
777     margin-left: 0%;
778   }
779 }
780 @media (min-width: $screen-lg) {
781   .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
782     float: left;
783   }
784   .col-lg-12 {
785     width: 100%;
786   }
787   .col-lg-11 {
788     width: 91.66666667%;
789   }
790   .col-lg-10 {
791     width: 83.33333333%;
792   }
793   .col-lg-9 {
794     width: 75%;
795   }
796   .col-lg-8 {
797     width: 66.66666667%;
798   }
799   .col-lg-7 {
800     width: 58.33333333%;
801   }
802   .col-lg-6 {
803     width: 50%;
804   }
805   .col-lg-5 {
806     width: 41.66666667%;
807   }
808   .col-lg-4 {
809     width: 33.33333333%;
810   }
811   .col-lg-3 {
812     width: 25%;
813   }
814   .col-lg-2 {
815     width: 16.66666667%;
816   }
817   .col-lg-1 {
818     width: 8.33333333%;
819   }
820   .col-lg-pull-12 {
821     right: 100%;
822   }
823   .col-lg-pull-11 {
824     right: 91.66666667%;
825   }
826   .col-lg-pull-10 {
827     right: 83.33333333%;
828   }
829   .col-lg-pull-9 {
830     right: 75%;
831   }
832   .col-lg-pull-8 {
833     right: 66.66666667%;
834   }
835   .col-lg-pull-7 {
836     right: 58.33333333%;
837   }
838   .col-lg-pull-6 {
839     right: 50%;
840   }
841   .col-lg-pull-5 {
842     right: 41.66666667%;
843   }
844   .col-lg-pull-4 {
845     right: 33.33333333%;
846   }
847   .col-lg-pull-3 {
848     right: 25%;
849   }
850   .col-lg-pull-2 {
851     right: 16.66666667%;
852   }
853   .col-lg-pull-1 {
854     right: 8.33333333%;
855   }
856   .col-lg-pull-0 {
857     right: auto;
858   }
859   .col-lg-push-12 {
860     left: 100%;
861   }
862   .col-lg-push-11 {
863     left: 91.66666667%;
864   }
865   .col-lg-push-10 {
866     left: 83.33333333%;
867   }
868   .col-lg-push-9 {
869     left: 75%;
870   }
871   .col-lg-push-8 {
872     left: 66.66666667%;
873   }
874   .col-lg-push-7 {
875     left: 58.33333333%;
876   }
877   .col-lg-push-6 {
878     left: 50%;
879   }
880   .col-lg-push-5 {
881     left: 41.66666667%;
882   }
883   .col-lg-push-4 {
884     left: 33.33333333%;
885   }
886   .col-lg-push-3 {
887     left: 25%;
888   }
889   .col-lg-push-2 {
890     left: 16.66666667%;
891   }
892   .col-lg-push-1 {
893     left: 8.33333333%;
894   }
895   .col-lg-push-0 {
896     left: auto;
897   }
898   .col-lg-offset-12 {
899     margin-left: 100%;
900   }
901   .col-lg-offset-11 {
902     margin-left: 91.66666667%;
903   }
904   .col-lg-offset-10 {
905     margin-left: 83.33333333%;
906   }
907   .col-lg-offset-9 {
908     margin-left: 75%;
909   }
910   .col-lg-offset-8 {
911     margin-left: 66.66666667%;
912   }
913   .col-lg-offset-7 {
914     margin-left: 58.33333333%;
915   }
916   .col-lg-offset-6 {
917     margin-left: 50%;
918   }
919   .col-lg-offset-5 {
920     margin-left: 41.66666667%;
921   }
922   .col-lg-offset-4 {
923     margin-left: 33.33333333%;
924   }
925   .col-lg-offset-3 {
926     margin-left: 25%;
927   }
928   .col-lg-offset-2 {
929     margin-left: 16.66666667%;
930   }
931   .col-lg-offset-1 {
932     margin-left: 8.33333333%;
933   }
934   .col-lg-offset-0 {
935     margin-left: 0%;
936   }
937 }
938 .clearfix:before,
939 .clearfix:after,
940 .row:before,
941 .row:after {
942   content: " ";
943   display: table;
944 }
945 .clearfix:after,
946 .row:after {
947   clear: both;
948 }
949 .center-block {
950   display: block;
951   margin-left: auto;
952   margin-right: auto;
953 }
954
955
956
957
958
959
960 .grid {
961   display: grid;
962   grid-column-gap: $-m;
963   grid-row-gap: 0;
964   &.contained {
965     max-width: $xxl;
966     padding-left: $-m;
967     padding-right: $-m;
968     margin-left: auto;
969     margin-right: auto;
970   }
971   &.v-center {
972     align-items: center;
973   }
974 }
975
976 @each $sizeLetter, $size in $spacing {
977   .grid.contained.space-#{$sizeLetter} {
978     padding-left: $size;
979     padding-right: $size;
980     grid-column-gap: $size;
981   }
982 }
983
984 @mixin grid-layout($name, $times) {
985   .grid.#{$name} {
986     grid-template-columns: repeat(#{$times}, 1fr);
987   }
988 }
989
990 @include grid-layout('thirds', 3)
991 @include grid-layout('halves', 2)
992
993 @each $sizeLetter, $size in $screen-sizes {
994   @include smaller-than($size) {
995     .grid.break-#{$sizeLetter} {
996       grid-template-columns: 1fr;
997     }
998   }
999 }
1000
1001
1002 /**
1003  * Visibility
1004  */
1005
1006 @each $sizeLetter, $size in $screen-sizes {
1007   @include smaller-than($size) {
1008     .hide-under-#{$sizeLetter} {
1009       display: none !important;
1010     }
1011   }
1012   @include larger-than($size) {
1013     .hide-over-#{$sizeLetter} {
1014       display: none !important;
1015     }
1016   }
1017 }