/* Prismal wave loader
   Page-load indicator: fixed to the bottom of the viewport, removed on window load. */

.prismal-wave-loader {
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: var( --prismal-wave-z, 99999 );
	pointer-events: none;
	opacity: 1;
	transition: opacity var( --prismal-wave-fade, 450ms ) ease;
	will-change: opacity;
}

.prismal-wave-loader.is-hiding {
	opacity: 0;
}

.prismal-wave-loader__svg {
	display: block;
	width: 100%;
	height: var( --prismal-wave-height, 170px );
}

.prismal-wave-loader__status {
	position: absolute;
	left: var( --prismal-wave-status-x, 22px );
	bottom: var( --prismal-wave-status-y, 24px );
	display: flex;
	align-items: center;
	gap: 9px;
	font-size: 14px;
	line-height: 1;
}

.prismal-wave-loader__dot {
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var( --prismal-wave-dot, #7f77dd );
	animation: prismal-wave-pulse 1.4s ease-in-out infinite;
}

.prismal-wave-loader__label {
	font-weight: 500;
	letter-spacing: 0.01em;
	background-image: linear-gradient(
		90deg,
		var( --prismal-wave-label-a, #a79ff0 ),
		var( --prismal-wave-label-b, #ffffff ),
		var( --prismal-wave-label-a, #a79ff0 )
	);
	background-size: 200% 100%;
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
	-webkit-text-fill-color: transparent;
	animation: prismal-wave-shimmer 2.6s linear infinite;
}

@keyframes prismal-wave-pulse {
	0%, 100% { opacity: 0.35; transform: scale( 0.8 ); }
	50%      { opacity: 1;    transform: scale( 1.15 ); }
}

@keyframes prismal-wave-shimmer {
	to { background-position: -200% 0; }
}

@media ( prefers-reduced-motion: reduce ) {
	.prismal-wave-loader__dot,
	.prismal-wave-loader__label {
		animation: none;
	}

	.prismal-wave-loader__label {
		background-image: none;
		color: var( --prismal-wave-label-a, #a79ff0 );
		-webkit-text-fill-color: currentColor;
	}
}