/* ==========================================================================
   GOLDEN PORTAL TRANSITION - Animation de chargement
   ========================================================================== */

/* Variables CSS pour l'animation */
:root {
	--gpt-gold: #D4AF37;
	--gpt-gold-light: #B8860B;
	--gpt-gold-dark: #8B6914;
	--gpt-bg: #ffffff;
	--gpt-bg-secondary: #f5f5f5;
	--gpt-white: #000000;
	--gpt-gradient-gold: linear-gradient(135deg, var(--gpt-gold) 0%, var(--gpt-gold-light) 50%, var(--gpt-gold) 100%);
	--gpt-gradient-radial: radial-gradient(circle at center, rgba(212, 175, 55, 0.4) 0%, transparent 60%);
	--gpt-shadow-gold: 0 0 30px rgba(212, 175, 55, 0.6);
	--gpt-ring-speed: 1.5s;
}

/* Page Loader */
.gpt-page-loader {
	position: fixed;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	z-index: 999999;
	display: flex;
	align-items: center;
	justify-content: center;
	background-color: var(--gpt-bg);
	pointer-events: all;
	transition: opacity 0.2s ease, visibility 0.2s ease;
}

body.gpt-loading {
	overflow: hidden !important;
}

.gpt-page-loader.gpt-loaded {
	pointer-events: none;
}

/* Loader Container */
.gpt-loader-container {
	position: relative;
	width: 300px;
	height: 300px;
	display: flex;
	align-items: center;
	justify-content: center;
}

/* Particules */
.gpt-particles-container {
	position: absolute;
	inset: -100px;
	pointer-events: none;
}

.gpt-particle {
	position: absolute;
	width: 6px;
	height: 6px;
	background: var(--gpt-gold);
	border-radius: 50%;
	opacity: 0;
	animation: gptParticleFloat 1.2s ease-in-out infinite;
	box-shadow: 0 0 8px rgba(212, 175, 55, 0.8);
	will-change: transform, opacity;
}

@keyframes gptParticleFloat {
	0% {
		opacity: 0;
		transform: translate(0, 0) scale(0);
	}

	20% {
		opacity: 1;
	}

	100% {
		opacity: 0;
		transform: translate(var(--tx), var(--ty)) scale(1);
	}
}

/* Portail - Anneaux */
.gpt-portal {
	position: absolute;
	width: 200px;
	height: 200px;
	display: flex;
	align-items: center;
	justify-content: center;
}

.gpt-portal-ring {
	position: absolute;
	border-radius: 50%;
	border: 2px solid transparent;
	border-top-color: var(--gpt-gold);
	border-right-color: var(--gpt-gold-light);
	opacity: 0;
	animation: gptRingAppear 0.3s ease forwards, gptRingSpin var(--gpt-ring-speed) linear infinite;
	will-change: transform, opacity;
}

/* Anneau 1 - Exterieur */
.gpt-ring-1 {
	width: 100%;
	height: 100%;
	animation-delay: 0s, 0.3s;
}

/* Anneau 2 - Milieu */
.gpt-ring-2 {
	width: 75%;
	height: 75%;
	animation-delay: 0.1s, 0.4s;
	animation-duration: 0.3s, 2s;
}

/* Anneau 3 - Interieur */
.gpt-ring-3 {
	width: 50%;
	height: 50%;
	animation-delay: 0.2s, 0.5s;
	animation-duration: 0.3s, 2.5s;
}

/* Coeur du portail */
.gpt-portal-core {
	position: absolute;
	width: 30%;
	height: 30%;
	background: var(--gpt-gradient-radial);
	border-radius: 50%;
	opacity: 0;
	animation: gptCoreGlow 0.3s ease forwards 0.25s, gptCorePulse 1s ease-in-out infinite 0.55s;
}

/* Animations des anneaux */
@keyframes gptRingAppear {
	from {
		opacity: 0;
		transform: scale(0.5) rotate(-180deg);
	}

	to {
		opacity: 1;
		transform: scale(1) rotate(0deg);
	}
}

@keyframes gptRingSpin {
	to {
		transform: rotate(360deg);
	}
}

@keyframes gptCoreGlow {
	from {
		opacity: 0;
		transform: scale(0);
	}

	to {
		opacity: 1;
		transform: scale(1);
	}
}

@keyframes gptCorePulse {

	0%,
	100% {
		box-shadow: 0 0 20px rgba(212, 175, 55, 0.5);
	}

	50% {
		box-shadow: 0 0 40px rgba(212, 175, 55, 0.8);
	}
}

/* Logo central */
.gpt-loader-logo {
	position: relative;
	z-index: 10;
	font-size: 1.8rem;
	font-weight: 800;
	letter-spacing: 2px;
	opacity: 0;
	transform: scale(0.5);
	animation: gptLogoReveal 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) forwards 0.35s;
	font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}

.gpt-logo-prefix {
	color: var(--gpt-gold);
	text-shadow: var(--gpt-shadow-gold);
}

.gpt-logo-text {
	color: var(--gpt-white);
}

@keyframes gptLogoReveal {
	to {
		opacity: 1;
		transform: scale(1);
	}
}

/* Expansion du portail */
.gpt-portal-expand {
	position: absolute;
	top: 50%;
	left: 50%;
	width: 0;
	height: 0;
	background: var(--gpt-bg);
	border-radius: 50%;
	transform: translate(-50%, -50%);
	pointer-events: none;
}

/* Animation de sortie */
.gpt-page-loader.gpt-loaded .gpt-loader-container {
	animation: gptContainerExit 0.3s ease forwards;
}

.gpt-page-loader.gpt-loaded .gpt-portal-expand {
	animation: gptPortalExpand 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards 0.2s;
}

.gpt-page-loader.gpt-loaded {
	animation: gptLoaderFadeOut 0.2s ease forwards 0.6s;
}

@keyframes gptContainerExit {
	to {
		opacity: 0;
		transform: scale(1.5);
	}
}

@keyframes gptPortalExpand {
	to {
		width: 300vmax;
		height: 300vmax;
	}
}

@keyframes gptLoaderFadeOut {
	to {
		opacity: 0;
		visibility: hidden;
	}
}

/* Animation de sortie de page */
body.gpt-page-exit {
	pointer-events: none;
}

body.gpt-page-exit::after {
	content: '';
	position: fixed;
	inset: 0;
	background: var(--gpt-bg);
	z-index: 999998;
	opacity: 0;
	animation: gptPageExit 0.35s ease forwards;
}

@keyframes gptPageExit {
	to {
		opacity: 1;
	}
}

/* Responsive */
@media (max-width: 768px) {
	.gpt-loader-container {
		width: 250px;
		height: 250px;
	}

	.gpt-portal {
		width: 160px;
		height: 160px;
	}

	.gpt-loader-logo {
		font-size: 1.5rem;
	}

	.gpt-particles-container {
		inset: -50px;
	}
}

@media (max-width: 480px) {
	.gpt-loader-container {
		width: 200px;
		height: 200px;
	}

	.gpt-portal {
		width: 130px;
		height: 130px;
	}

	.gpt-loader-logo {
		font-size: 1.3rem;
	}
}

/* Preference mouvement réduit */
@media (prefers-reduced-motion: reduce) {

	.gpt-particle,
	.gpt-portal-ring,
	.gpt-portal-core,
	.gpt-loader-logo,
	.gpt-loader-container,
	.gpt-portal-expand,
	.gpt-page-loader {
		animation: none !important;
	}

	.gpt-portal-ring,
	.gpt-portal-core,
	.gpt-loader-logo {
		opacity: 1;
		transform: none;
	}

	.gpt-page-loader.gpt-loaded {
		display: none;
	}
}

/* Print */
@media print {
	.gpt-page-loader {
		display: none !important;
	}
}
