@use "sass:math";

$full-width:	960px;
$one-col:		660px;
$mobile:		480px;

$sidebar-width:	269px;

@mixin responsive($width) {
	@if $width == full-width {
		@media only screen and (max-width: $full-width) { @content; }
	}
	@else if $width == one-col {
		@media only screen and (max-width: $one-col) { @content; }
	}
	@else if $width == mobile {
		@media only screen and (max-width: $mobile) { @content; }
	}
}

@mixin mobile-first-responsive($width) {
	@if $width == full-width {
		@media only screen and (min-width: $one-col) { @content; }
	}
	@else if $width == full-width-really {
		@media only screen and (min-width: $full-width) { @content; }
	}
	@else if $width == one-col {
		@media only screen and (min-width: $mobile) { @content; }
	}
}

// ==========================================================================
// Breakpoint Mixin
// See https://wpcalypso.wordpress.com/devdocs/docs/coding-guidelines/css.md#media-queries
// ==========================================================================

$breakpoints: 480px, 660px, 960px, 1040px; // Think very carefully before adding a new breakpoint

@mixin breakpoint( $size ){
	@if type-of($size) == string {
	  $approved-value: 0;
		@each $breakpoint in $breakpoints {
			$and-larger: ">" + $breakpoint;
			$and-smaller: "<" + $breakpoint;

			@if $size == $and-smaller {
				$approved-value: 1;
				@media ( max-width: $breakpoint ) {
					@content;
				}
			}
			@else {
				@if $size == $and-larger {
					$approved-value: 2;
					@media ( min-width: $breakpoint + 1 ) {
						@content;
					}
				}
				@else {
					@each $breakpoint-end in $breakpoints {
						$range: $breakpoint + "-" + $breakpoint-end;
						@if $size == $range {
							$approved-value: 3;
							@media ( min-width: $breakpoint + 1 ) and ( max-width: $breakpoint-end ) {
								@content;
							}
						}
					}
				}
			}
		}
		@if $approved-value == 0 {
			$sizes: "";
			@each $breakpoint in $breakpoints {
				$sizes: $sizes + " " + $breakpoint;
			}
			// TODO - change this to use @error, when it is supported by node-sass
			@warn "ERROR in breakpoint( #{ $size } ): You can only use these sizes[ #{$sizes} ] using the following syntax [ <#{ nth( $breakpoints, 1 ) } >#{ nth( $breakpoints, 1 ) } #{ nth( $breakpoints, 1 ) }-#{ nth( $breakpoints, 2 ) } ]";
		}
	}
	@else {
		$sizes: "";
		@each $breakpoint in $breakpoints {
			$sizes: $sizes + " " + $breakpoint;
		}
		// TODO - change this to use @error, when it is supported by node-sass
		@warn "ERROR in breakpoint( #{ $size } ): Please wrap the breakpoint $size in parenthesis. You can use these sizes[ #{$sizes} ] using the following syntax [ <#{ nth( $breakpoints, 1 ) } >#{ nth( $breakpoints, 1 ) } #{ nth( $breakpoints, 1 ) }-#{ nth( $breakpoints, 2 ) } ]";
	}
}


@mixin calc($property, $expression) {
	#{$property}: -moz-calc(#{$expression});
	#{$property}: -o-calc(#{$expression});
	#{$property}: -webkit-calc(#{$expression});
	#{$property}: calc(#{$expression});
}

@mixin clear-fix {
	&:after {
		content: ".";
		display: block;
		height: 0;
		clear: both;
		visibility: hidden;
	}
}

@mixin noticon($char, $size: null) {
	// This isn't very clean, but... we'll see ;)
	@if $size != 0 {
		font-size: $size;
	}
	content: $char;

	// Copied verbatim
	vertical-align: top;
	text-align: center;
	display: inline-block;
	font-family: "Noticons";
	font-style: normal;
	font-weight: normal;
	font-variant: normal;
	line-height: 1;
	text-decoration: inherit;
	text-transform: none;
	-moz-osx-font-smoothing: grayscale;
	-webkit-font-smoothing: antialiased;
	speak: none;
}

@mixin border-box {
	-moz-box-sizing: border-box;
	-webkit-box-sizing: border-box;
	box-sizing: border-box;
}

// Turn a list into a dropdown menu
@mixin dropdown-menu {
	display: none;
	background: $white;
	float: none;
	line-height: 46px;
	min-width: 220px;
	overflow: visible;
	padding: 0;
	position: absolute;
	width: auto;
	z-index: 1;
	box-sizing: border-box;
	box-shadow: 0 0 2px rgba(0,0,0,0.15), 0 3px 8px rgba(0,0,0,0.1);

	&:after {
		border: 6px solid transparent;
		border-bottom-color: $white;
		content: ' ';
		height: 0;
		position: absolute;
			top: -12px;
			left: 73px;
		width: 0;
	}

	li {
		display: block;
		float: none;

		a,
		a.selected {
			border-bottom: 1px solid rgba(0,0,0,0.1);
			color: $blue-wordpress;
			display: block;
			float: none;
			height: auto;
			margin: 0;
			padding: 0 14px;
			text-align: left;

			&:hover {
				border-bottom: 1px solid rgba(0,0,0,0.1);
				background: none; // Remove inherited background color
				color: $link-highlight;
				box-shadow: none; // Remove inherited box shadow
			}
		}

		a.selected {
			color: $gray-dark;
		}

		&:last-child a {
			border-bottom: none; // Last child in the dropdown doesn't need a bottom border
		}
	}
}

// Can't use the @extend in a media query, use this instead
@mixin clear-text {
	-webkit-font-smoothing: antialiased;
	-moz-osx-font-smoothing: grayscale;
}

// courtesy: http://codeboxers.com/sass-mixin-for-transitions/
@mixin transition($transition-property, $transition-time, $method) {
	-webkit-transition: $transition-property $transition-time $method;
	-moz-transition: $transition-property $transition-time $method;
	-ms-transition: $transition-property $transition-time $method;
	-o-transition: $transition-property $transition-time $method;
	transition: $transition-property $transition-time $method;
}

@mixin box-shadow($shadows...) {
	-webkit-box-shadow: $shadows;
	-moz-box-shadow: $shadows;
	-ms-box-shadow: $shadows;
	-o-box-shadow: $shadows;
	box-shadow: $shadows;
}

@mixin site-icon($size, $icon-size) {
	position: relative;
	display: inline-block;
	width: $size;
	height: $size;
	overflow: hidden;
	background: lighten( $gray, 20% );

	&::before {
		content: '\f475';
		display: inline-block;
		-webkit-font-smoothing: antialiased;
		-moz-osx-font-smoothing: grayscale;
		font: normal math.div($icon-size, 1) 'Noticons';
		color: $white;
		position: absolute;
		top: 0;
		left: 0;
		height: $size;
		width: $size;
		line-height: $size;
		text-align: center;
		z-index: 0;
	}

	img {
		background: $white;
		position: relative;
	}
}

@mixin debug(){
	box-shadow: 0px 0px 10px $alert-red inset;
}

@mixin stats-fade-text($toColor) {
	background-image: linear-gradient(to right, $transparent 0%, $toColor 90%);
	position: absolute;
	z-index: 1;
	left: -48px;
	top: 0;
	bottom: 0;
	content: "";
	display: block;
	width: 48px;
}

@mixin hide-content-accessibly {
	clip: rect( 1px, 1px, 1px, 1px );
	height: 1px;
	overflow: hidden;
	position: absolute;
	width: 1px;
}

// Creates a fading overlay to signify that the content is longer
// than the space allows.
@mixin long-content-fade( $direction: right, $size: 20%, $color: #fff, $edge: 0px, $z-index: false) {
	content: '';
	display: block;
	position: absolute;
	-webkit-touch-callout: none;
	-webkit-user-select: none;
	-khtml-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	pointer-events: none;

	@if $z-index {
		z-index: $z-index;
	}

	@if $direction == 'bottom' {
		background: linear-gradient( to top, rgba( $color, 0 ), $color 90% );
		left: $edge;
		right: $edge;
		top: $edge;
		bottom: calc(100% - $size);
		width: auto;
	}

	@if $direction == 'top' {
		background: linear-gradient( to bottom, rgba( $color, 0 ), $color 90% );
		top: calc(100% - $size);
		left: $edge;
		right: $edge;
		bottom: $edge;
		width: auto;
	}

	@if $direction == 'left'{
		background: linear-gradient( to left, rgba( $color, 0 ), $color 90% );
		top: $edge;
		left: $edge;
		bottom: $edge;
		right: auto;
		width: $size;
		height: auto;
	}

	@if $direction == 'right' {
		background: linear-gradient( to right, rgba( $color, 0 ), $color 90% );
		top: $edge;
		bottom: $edge;
		right: $edge;
		left: auto;
		width: $size;
		height: auto;
	}
}

@mixin placeholder( $lighten-percentage: 30% ) {
	animation: loading-fade 1.6s ease-in-out infinite;
	background-color: lighten( $gray, $lighten-percentage );
	color: transparent;

	&:after {
		content: '\00a0';
	}
}

// Simple animation to make elements appear
@keyframes appear {
	0% {
		opacity: 0;
	}
	100% {
		opacity: 1;
	}
}
