/**
 * Reset, typographie de base, keyframes et utilitaires partagés.
 */
html, body { margin: 0; padding: 0; background: var(--tp-bg); }
* { box-sizing: border-box; }
img { max-width: 100%; display: block; }

body {
	font-family: var(--font-body);
	color: var(--tp-white);
	background: var(--tp-bg);
	-webkit-font-smoothing: antialiased;
	overflow-x: clip;
}

a { color: var(--tp-green-300); text-decoration: none; }
a:hover { color: var(--tp-green-200); }

::selection { background: rgba(15, 122, 61, .45); }

.tp-page { position: relative; }

.tp-container {
	max-width: var(--tp-container);
	margin: 0 auto;
	padding-left: var(--tp-gutter);
	padding-right: var(--tp-gutter);
}

.tp-ambient-glow {
	position: fixed;
	inset: 0;
	pointer-events: none;
	z-index: 0;
	background:
		radial-gradient(1100px 640px at 80% -10%, rgba(11, 92, 46, .4), transparent 62%),
		radial-gradient(900px 600px at 5% 45%, rgba(11, 92, 46, .16), transparent 66%);
}

.tp-hairline {
	height: 1px;
	background: linear-gradient(90deg, transparent, rgba(31, 140, 74, .55), transparent);
}

.tp-mono-label {
	font-family: var(--font-mono);
	font-size: 11px;
	letter-spacing: .22em;
	color: var(--tp-text);
}
.tp-mono-label--soft { color: var(--tp-green-mist); }

.tp-fineprint {
	font-family: var(--font-mono);
	font-size: 10px;
	letter-spacing: .14em;
	color: var(--tp-text-mute4);
	margin: 8px 0 0;
}

.tp-muted { color: var(--tp-text-mute2); }
.tp-accent { color: var(--tp-green-400); }

@keyframes tpFade { from { opacity: 0; transform: translateY(26px); } to { opacity: 1; transform: none; } }
@keyframes tpFloat { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-9px); } }
@keyframes tpPulse { 0%, 100% { opacity: .5; } 50% { opacity: 1; } }
@keyframes tpLine { from { transform: scaleX(0); } to { transform: scaleX(1); } }

.tp-pulse-dot {
	width: 6px; height: 6px; border-radius: 50%;
	background: #2fbd6b;
	animation: tpPulse 2.4s ease-in-out infinite;
}

.tp-float { animation: tpFloat var(--tp-float-duration, 9s) var(--tp-float-delay, 0s) ease-in-out infinite; }

.tp-reveal-in { animation: tpFade .9s var(--tp-delay, 0s) ease-out both; }

/* Apparition au scroll (classe ajoutée par Assets/JS/reveal.js) */
.tp-reveal {
	opacity: 0;
	transform: translateY(28px);
	/* --tp-delay (optionnel, ex. ".14s") permet un décalage en cascade sur un
	   groupe d'éléments qui apparaissent ensemble ; par défaut 0s, donc aucun
	   changement pour les usages existants qui ne le définissent pas. */
	transition: opacity .8s var(--tp-ease) var(--tp-delay, 0s), transform .8s var(--tp-ease) var(--tp-delay, 0s);
}
.tp-reveal.is-revealed {
	opacity: 1;
	transform: none;
}

.tp-rail::-webkit-scrollbar { height: 6px; }
.tp-rail::-webkit-scrollbar-track { background: rgba(255, 255, 255, .05); border-radius: 99px; }
.tp-rail::-webkit-scrollbar-thumb { background: var(--tp-green-700); border-radius: 99px; }

@media (prefers-reduced-motion: reduce) {
	.tp-pulse-dot,
	.tp-float,
	.tp-reveal-in,
	.tp-steps__line,
	.tp-reveal {
		animation: none !important;
		transition: none !important;
		opacity: 1 !important;
		transform: none !important;
	}
}
