// Button variants
//
// Easily pump out default styles, as well as :hover, :focus, :active,
// and disabled options for all buttons

#button-variant(@background, @border, @hover-background: darken(@background, 7.5%), @hover-border: darken(@border, 10%), @active-background: darken(@background, 10%), @active-border: darken(@border, 12.5%)) {
	color: color-yiq(@background);
	#gradient-bg(@background);
	border-color: @border;
	#box-shadow(@btn-box-shadow);

	#hover({
		color: color-yiq(@hover-background);
		#gradient-bg(@hover-background);
		border-color: @hover-border;
	});

	&:focus,
	&.focus {
		color: color-yiq(@hover-background);
		#gradient-bg(@hover-background);
		border-color: @hover-border;
		// Avoid using mixin so we can pass custom focus shadow properly
		& when (@enable-shadows) {
			box-shadow: @btn-box-shadow, 0 0 0 @btn-focus-width fade(mix(color-yiq(@background), @border, 15%), 50%);
		}
		& when not (@enable-shadows) {
			box-shadow: 0 0 0 @btn-focus-width fade(mix(color-yiq(@background), @border, 15%), 50%);
		}
	}

	// Disabled comes first so active can properly restyle
	&.disabled,
	&:disabled {
		color: color-yiq(@background);
		background-color: @background;
		border-color: @border;
		// Remove CSS gradients if they're enabled
		& when (@enable-gradients) {
			background-image: none;
		}
	}

	&:not(:disabled):not(.disabled):active,
	&:not(:disabled):not(.disabled).active,
	.show > &.dropdown-toggle {
		color: color-yiq(@active-background);
		background-color: @active-background;
		& when (@enable-gradients) {
			background-image: none; // Remove the gradient for the pressed/active state
		}
		border-color: @active-border;

		&:focus {
			// Avoid using mixin so we can pass custom focus shadow properly
			& when (@enable-shadows) and not (@btn-active-box-shadow = none) {
				box-shadow: @btn-active-box-shadow, 0 0 0 @btn-focus-width fade(mix(color-yiq(@background), @border, 15%), 50%);
			}
			& when not (@enable-shadows) or (@btn-active-box-shadow = none) {
				box-shadow: 0 0 0 @btn-focus-width fade(mix(color-yiq(@background), @border, 15%), 50%);
			}
		}
	}
}

#button-outline-variant(@color, @color-hover: color-yiq(@color), @active-background: @color, @active-border: @color) {
	color: @color;
	border-color: @color;

	#hover({
		color: @color-hover;
		background-color: @active-background;
		border-color: @active-border;
	});

	&:focus,
	&.focus {
		box-shadow: 0 0 0 @btn-focus-width fade(@color, 50%);
	}

	&.disabled,
	&:disabled {
		color: @color;
		background-color: transparent;
	}

	&:not(:disabled):not(.disabled):active,
	&:not(:disabled):not(.disabled).active,
	.show > &.dropdown-toggle {
		color: color-yiq(@active-background);
		background-color: @active-background;
		border-color: @active-border;

		&:focus {
			// Avoid using mixin so we can pass custom focus shadow properly
			& when (@enable-shadows) and not (@btn-active-box-shadow = none) {
				box-shadow: @btn-active-box-shadow, 0 0 0 @btn-focus-width fade(@color, 50%);
			}
			& when not (@enable-shadows) or (@btn-active-box-shadow = none) {
				box-shadow: 0 0 0 @btn-focus-width fade(@color, 50%);
			}
		}
	}
}

// Button sizes
#button-size(@padding-y, @padding-x, @font-size, @line-height, @border-radius) {
	padding: @padding-y @padding-x;
	#font-size(@font-size);
	line-height: @line-height;
	// Manually declare to provide an override to the browser default
	#border-radius(@border-radius, 0);
}
