.mw-spinner {
	position: relative;

	> .mw-spinner-container {
		transform-origin: 0 0;
	}
}

@mw-spinner-small-size: 20px;
@mw-spinner-large-size: 32px;

.mw-spinner-small {
	width: @mw-spinner-small-size;
	height: @mw-spinner-small-size;

	> .mw-spinner-container {
		transform: scale( unit( @mw-spinner-small-size / 64 ) );
	}
}

.mw-spinner-large {
	width: @mw-spinner-large-size;
	height: @mw-spinner-large-size;

	> .mw-spinner-container {
		transform: scale( unit( @mw-spinner-large-size / 64 ) );
	}
}

.mw-spinner-block {
	display: block;
	width: 100%;
	text-align: center;

	> .mw-spinner-container {
		display: inline-block;
		vertical-align: top;
	}

	&.mw-spinner-small > .mw-spinner-container {
		min-width: @mw-spinner-small-size;
	}

	&.mw-spinner-large > .mw-spinner-container {
		min-width: @mw-spinner-large-size;
	}
}

.mw-spinner-inline {
	display: inline-block;
	vertical-align: middle;
}

/**
 * CSS loading spinner adapted from loadingio, CC0
 * https://github.com/loadingio/css-spinner/
 */
.mw-spinner-container > div {
	transform-origin: 32px 32px;
	animation: mw-spinner 1.2s linear infinite;
}

.mw-spinner-container > div:after {
	content: ' ';
	display: block;
	position: absolute;
	top: 3px;
	// If this was allowed to flip, then transform-origin would also need to be flipped,
	// but that's not supported. Partial flipping causes visual issues (T292673).
	/* @noflip */
	left: 29px;
	width: 5px;
	height: 14px;
	border-radius: 20%;
	background: #000;
}

.mw-spinner-container > div:nth-child( 1 ) {
	transform: rotate( 0deg );
	animation-delay: -1.1s;
}

.mw-spinner-container > div:nth-child( 2 ) {
	transform: rotate( 30deg );
	animation-delay: -1s;
}

.mw-spinner-container > div:nth-child( 3 ) {
	transform: rotate( 60deg );
	animation-delay: -0.9s;
}

.mw-spinner-container > div:nth-child( 4 ) {
	transform: rotate( 90deg );
	animation-delay: -0.8s;
}

.mw-spinner-container > div:nth-child( 5 ) {
	transform: rotate( 120deg );
	animation-delay: -0.7s;
}

.mw-spinner-container > div:nth-child( 6 ) {
	transform: rotate( 150deg );
	animation-delay: -0.6s;
}

.mw-spinner-container > div:nth-child( 7 ) {
	transform: rotate( 180deg );
	animation-delay: -0.5s;
}

.mw-spinner-container > div:nth-child( 8 ) {
	transform: rotate( 210deg );
	animation-delay: -0.4s;
}

.mw-spinner-container > div:nth-child( 9 ) {
	transform: rotate( 240deg );
	animation-delay: -0.3s;
}

.mw-spinner-container > div:nth-child( 10 ) {
	transform: rotate( 270deg );
	animation-delay: -0.2s;
}

.mw-spinner-container > div:nth-child( 11 ) {
	transform: rotate( 300deg );
	animation-delay: -0.1s;
}

.mw-spinner-container > div:nth-child( 12 ) {
	transform: rotate( 330deg );
	animation-delay: 0s;
}

@keyframes mw-spinner {
	0% {
		opacity: 1;
	}

	100% {
		opacity: 0;
	}
}
