@use "sass:math";
@import './variables';

.s-switch__track,
.s-switch__thumb {
	background-color: currentColor;
	pointer-events: none;
}

.s-switch__track {
	color: var(--theme-controls-track-inactive);
	border-radius: $switch-track-border-radius;
	width: $switch-track-width;
	height: $switch-track-height;
	left: $switch-track-x;
	position: absolute;
	opacity: $switch-track-opacity;
	right: $switch-track-x;
	top: $switch-track-top;
	transition: background-color $primary-transition;
	will-change: background-color;
}

.s-switch__thumb {
	color: var(--theme-controls-thumb-inactive);
	border-radius: 50%;
	top: $switch-thumb-top;
	height: $switch-thumb-height;
	position: relative;
	width: $switch-thumb-width;
	display: flex;
	justify-content: center;
	align-items: center;
	transition: $primary-transition;
	will-change: transform;
	@include elevation(4);

	&::before {
		background: currentColor;
		transform: scale(2);
		opacity: 0.2;
		border-radius: inherit;
		position: absolute;
		bottom: 0;
		left: 0;
		right: 0;
		top: 0;
		display: none;
		transform-origin: center center;
		content: '';
	}
}

.s-switch {
	display: flex;
	margin-bottom: 8px;
	align-items: center;
	position: relative;

	label {
		margin-left: 8px;
	}
}

.s-switch__wrapper {
	width: $switch-width;
	display: inline-flex;
	flex: 0 0 auto;
	height: 24px;
	position: relative;

	&:hover {
		.s-switch__thumb::before {
			display: block;
		}
	}

	&.inset {
		width: $switch-track-inset-width;

		.s-switch__track {
			width: $switch-track-inset-width;
			border-radius: $switch-track-inset-border-radius;
			height: $switch-track-inset-height;
			left: -4px;
			opacity: $switch-track-inset-opacity;
			top: calc(50% - #{math.div($switch-track-inset-height, 2)});
		}

		.s-switch__thumb {
			box-shadow: none;
		}
	}

	&.dense {
		.s-switch__thumb {
			width: $switch-thumb-dense-width;
			height: $switch-thumb-dense-height;
		}

		.s-switch__track {
			height: $switch-track-dense-height;
			width: $switch-track-dense-width;
		}

		&.inset {
			.s-switch__track {
				height: $switch-track-dense-inset-height;
				width: $switch-track-dense-inset-width;
				top: $switch-track-dense-top;
				left: -3px;
			}
		}
	}

	&.disabled {
		opacity: $switch-disabled-opacity;
		pointer-events: none;

		.s-switch__thumb {
			color: var(--theme-controls-thumb-disabled);

			&::before {
				display: none;
			}
		}

		// stylelint-disable-next-line no-descending-specificity
		.s-switch__track {
			color: var(--theme-controls-track-disabled);
		}
	}

	& > input {
		position: absolute;
		opacity: 0;
		width: 100%;
		height: 100%;
		user-select: none;
		cursor: pointer;

		&:checked ~ {
			// stylelint-disable-next-line no-descending-specificity
			.s-switch__track,
			.s-switch__thumb {
				color: inherit;
			}

			.s-switch__thumb {
				transform: translate($switch-dirty-offset-x);
			}
		}
	}
}
