.favorite-loader {
	&.dots1 {
		width: 120rpx;
		aspect-ratio: 4;
		--dots1: #000;
		background: radial-gradient(circle closest-side, var(--dots1) 90%, #0000) 0/calc(100%/3) 100% space;
		clip-path: inset(0 100% 0 0);
		animation: dots-l1 1s steps(4) infinite;
	}

	@keyframes dots-l1 {
		to {
			clip-path: inset(0 -34% 0 0)
		}
	}

	&.dots2 {
		width: 120rpx;
		aspect-ratio: 4;
		--dots2: #000;
		background: radial-gradient(circle closest-side, var(--dots2) 90%, #0000) 0/calc(100%/3) 100% no-repeat;
		animation: dots-l2 1s steps(3) infinite;
	}

	@keyframes dots-l2 {
		to {
			background-position: 150%
		}
	}

	&.dots3 {
		width: 120rpx;
		aspect-ratio: 2;
		--dots3: #000;
		background:
			no-repeat radial-gradient(circle closest-side, var(--dots3) 90%, #0000) 0% 50%,
			no-repeat radial-gradient(circle closest-side, var(--dots3) 90%, #0000) 50% 50%,
			no-repeat radial-gradient(circle closest-side, var(--dots3) 90%, #0000) 100% 50%;
		background-size: calc(100%/3) 50%;
		animation: dots-l3 1s infinite linear;
	}

	@keyframes dots-l3 {
		20% {
			background-position: 0% 0%, 50% 50%, 100% 50%
		}

		40% {
			background-position: 0% 100%, 50% 0%, 100% 50%
		}

		60% {
			background-position: 0% 50%, 50% 100%, 100% 0%
		}

		80% {
			background-position: 0% 50%, 50% 50%, 100% 100%
		}
	}

	&.dots4 {
		width: 120rpx;
		aspect-ratio: 4;
		--dots4: #000;
		background:
			radial-gradient(circle closest-side at left 6px top 50%, var(--dots4) 90%, #0000),
			radial-gradient(circle closest-side, var(--dots4) 90%, #0000),
			radial-gradient(circle closest-side at right 6px top 50%, var(--dots4) 90%, #0000);
		background-size: 100% 100%;
		background-repeat: no-repeat;
		animation: dots-l4 1s infinite alternate;
	}

	@keyframes dots-l4 {
		to {
			width: 25px;
			aspect-ratio: 1
		}
	}

	&.dots5 {
		width: 30rpx;
		aspect-ratio: 1;
		border-radius: 50%;
		--dots5: #000;
		animation: dots-l5 1s infinite linear alternate;
	}

	@keyframes dots-l5 {
		0% {
			box-shadow: 20px 0 var(--dots5), -20px 0 #0002;
			background: var(--dots5);
		}

		33% {
			box-shadow: 20px 0 var(--dots5), -20px 0 #0002;
			background: #0002;
		}

		66% {
			box-shadow: 20px 0 #0002, -20px 0 var(--dots5);
			background: #0002;
		}

		100% {
			box-shadow: 20px 0 #0002, -20px 0 var(--dots5);
			background: var(--dots5)
		}
	}

	&.dots6 {
		width: 30rpx;
		aspect-ratio: 1;
		--dots6: #000;
		background: var(--dots6);
		border-radius: 50%;
		animation: dots-l6 1s infinite linear alternate;
	}

	@keyframes dots-l6 {
		0% {
			box-shadow: 15px 0, -25px 0;
		}

		50% {
			box-shadow: 15px 0, -15px 0;
		}

		100% {
			box-shadow: 25px 0, -15px 0;
		}
	}

	&.dots7 {
		width: 120rpx;
		aspect-ratio: 4;
		--dots7: #000;
		background:
			no-repeat radial-gradient(circle closest-side, var(--dots7) 90%, #0000) 0% 50%,
			no-repeat radial-gradient(circle closest-side, var(--dots7) 90%, #0000) 50% 50%,
			no-repeat radial-gradient(circle closest-side, var(--dots7) 90%, #0000) 100% 50%;
		background-size: calc(100%/3) 100%;
		animation: dots-l7 1s infinite linear;
	}

	@keyframes dots-l7 {
		33% {
			background-size: calc(100%/3) 0%, calc(100%/3) 100%, calc(100%/3) 100%
		}

		50% {
			background-size: calc(100%/3) 100%, calc(100%/3) 0%, calc(100%/3) 100%
		}

		66% {
			background-size: calc(100%/3) 100%, calc(100%/3) 100%, calc(100%/3) 0%
		}
	}

	&.dots8 {
		width: 30rpx;
		aspect-ratio: 1;
		position: relative;
		--dots8: #000;

		&::before,
		&::after {
			content: "";
			position: absolute;
			inset: 0;
			border-radius: 50%;
			background: var(--dots8);
		}

		&::before {
			box-shadow: -25px 0;
			animation: dots-l8-1 1s infinite linear;
		}

		&::after {
			transform: rotate(0deg) translateX(25px);
			animation: dots-l8-2 1s infinite linear;
		}
	}

	@keyframes dots-l8-1 {
		100% {
			transform: translateX(25px)
		}
	}

	@keyframes dots-l8-2 {
		100% {
			transform: rotate(-180deg) translateX(25px)
		}
	}

}