$breakpoints-map: (
	'small': 500px,
	'medium': 750px,
	'large': 1000px,
	'x-large': 1200px
);

@mixin gt($size) {
	@if map-has-key($breakpoints-map, $size) {
		@media screen and (min-width: #{map-get($breakpoints-map, $size) + 1}) {
			@content;
		}
	} @else {
		@media screen and (min-width: #{$size + 1px}) {
			@content;
		}
	}
}

@mixin lte($size) {
	@if map-has-key($breakpoints-map, $size) {
		@media screen and (max-width: map-get($breakpoints-map, $size)) {
			@content;
		}
	} @else {
		@media screen and (max-width: $size) {
			@content;
		}
	}
}

/**
Spacing
*/
$spacing-unit: 16;

// Base definitions to be used in semantic classes
$spacing__0: 0 !default;
$spacing__1: 0.25rem !default;
$spacing__2: 0.5rem !default;
$spacing__3: 0.75rem !default;
$spacing__4: 1rem !default;
$spacing__5: 1.25rem !default;
$spacing__6: 1.5rem !default;
$spacing__7: 2rem !default;
$spacing__8: 2.5rem !default;
$spacing__9: 3rem !default;
$spacing__10: 3.75rem !default;
$spacing__11: 4.5rem !default;
$spacing__12: 5.25rem !default;

// Spacing map to generate placeholders
$base-spacing: (
	'0': $spacing__0,
	'1': $spacing__1,
	'2': $spacing__2,
	'3': $spacing__3,
	'4': $spacing__4,
	'5': $spacing__5,
	'6': $spacing__6,
	'7': $spacing__7,
	'8': $spacing__8,
	'9': $spacing__9,
	'10': $spacing__10,
	'11': $spacing__11,
	'12': $spacing__12
);

// Legacy spacing map
$spacing-map: (
	'none': 0,
	'extra-tight': rem($spacing-unit * 0.25),
	'tight': rem($spacing-unit * 0.5),
	'base': rem($spacing-unit * 1),
	'loose': rem($spacing-unit * 1.25),
	'extra-loose': rem($spacing-unit * 2)
);

@function spacing($size: 'base') {
	@if map-has-key($spacing-map, $size) {
		@return map-get($spacing-map, $size);
	} @else {
		@warn 'This is not a step of the Heartwood Spacing Scale!';
	}
}

/**
Box Model
*/

// Sides map to be used for placeholder generation
$sides: (
	'all': '',
	'x': '',
	'y': '',
	't': 'top',
	'r': 'right',
	'b': 'bottom',
	'l': 'left'
);

// Margin
%mx-auto {
	margin-left: auto;
	margin-right: auto;
}
// Placeholders
@each $id, $side in $sides {
	@each $label, $value in $base-spacing {
		@if $id == 'all' {
			%m-#{$label} {
				margin: $value;
			}
		} @else if $id == 'x' {
			%mx-#{$label} {
				margin-left: $value;
				margin-right: $value;
			}
		} @else if $id == 'y' {
			%my-#{$label} {
				margin-top: $value;
				margin-bottom: $value;
			}
		} @else {
			%m#{$id}-#{$label} {
				margin-#{$side}: $value;
			}
		}
	}
}

// Padding
%px-auto {
	padding-left: auto;
	padding-right: auto;
}
// Placeholders
@each $id, $side in $sides {
	@each $label, $value in $base-spacing {
		@if $id == 'all' {
			%p-#{$label} {
				padding: $value;
			}
		} @else if $id == 'x' {
			%px-#{$label} {
				padding-left: $value;
				padding-right: $value;
			}
		} @else if $id == 'y' {
			%py-#{$label} {
				padding-top: $value;
				padding-bottom: $value;
			}
		} @else {
			%p#{$id}-#{$label} {
				padding-#{$side}: $value;
			}
		}
	}
}

/**
Layout Width
*/
$layout-width-map: (
	'tight': rem(480),
	'base': rem(720),
	'wide': rem(1040)
);

@function layout-width($size: 'base') {
	@if map-has-key($layout-width-map, $size) {
		@return map-get($layout-width-map, $size);
	} @else {
		@warn 'This is not a valid Heartwood Layout Width!';
	}
}
