// grid.scss v0.1-dev | @ajlkn | MIT licensed */

// Mixins.

	/// Initializes grid classes.
	/// @param {mixed} $gutters Gutters (either a single number to set both column/row gutters, or a list to set them individually).
	/// @param {string} $suffix Optional column class suffix.
	/// @param {list} $override Optional list of column classes to override.
	@mixin grid($gutters: 1.5em, $suffix: '', $override: ()) {

		// Initialize.
			$cols: 12;
			$multipliers: 0, 0.25, 0.5, 1, 1.50, 2.00;
			$unit: 100% / $cols;
			$suffixes: join($override, ($suffix));

			// Gutters.
				$guttersCols: null;
				$guttersRows: null;

				@if (type-of($gutters) == 'list') {

					$guttersCols: nth($gutters, 1);
					$guttersRows: nth($gutters, 2);

				}
				@else {

					$guttersCols: $gutters;
					$guttersRows: 0;

				}

		// Row.
			.row {
				display: flex;
				flex-wrap: wrap;
				box-sizing: border-box;

				// Columns.
					> * {
						box-sizing: border-box;
					}

				// Gutters.
					&.gtr-uniform {
						> * {
							> :last-child {
								margin-bottom: 0;
							}
						}
					}

			}

		// Step through suffixes.
			@each $suffix in $suffixes {

				// Suffix.
					@if ($suffix != '') {
						$suffix: '-' + $suffix;
					}
					@else {
						$suffix: '';
					}

				// Row.
					.row {

						// Important.
							> .imp#{$suffix} {
								order: -1;
							}

						// Columns, offsets.
							@for $i from 1 through $cols {
								> .col-#{$i}#{$suffix} {
									width: $unit * $i;
								}

								> .off-#{$i}#{$suffix} {
									margin-left: $unit * $i;
								}
							}

						// Step through multipliers.
							@each $multiplier in $multipliers {

								// Gutters.
									$class: null;

									@if ($multiplier != 1) {
										$class: '.gtr-' + ($multiplier * 100);
									}

									&#{$class} {
										margin-top: ($guttersRows * $multiplier * -1);
										margin-left: ($guttersCols * $multiplier * -1);

										> * {
											padding: ($guttersRows * $multiplier) 0 0 ($guttersCols * $multiplier);
										}

										// Uniform.
											&.gtr-uniform {
												margin-top: $guttersCols * $multiplier * -1;

												> * {
													padding-top: $guttersCols * $multiplier;
												}
											}

									}

							}

					}

			}

	}