/*
Theme Name: Nomad Spirits
Author: Axel Lussiez
Description: Thème bloc (Full Site Editing) sur mesure pour le groupe Nomad Spirits — wordmark géométrique (Orbitron + Inter), palette sombre à l'orange brûlé, sections agenda, écoute, à propos et actualités.
Version: 0.12.6
Requires at least: 6.6
Tested up to: 6.8
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: nms
Tags: music, entertainment, dark, full-site-editing, block-patterns, one-column
*/

/* Réglages fins impossibles à exprimer dans theme.json */

::selection {
	background: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--base);
}

html {
	scroll-behavior: smooth;
}

a {
	text-underline-offset: 0.18em;
	transition: color 0.15s ease;
}

.wp-element-button,
.wp-block-button__link {
	transition: background-color 0.15s ease, color 0.15s ease;
}

:where(a, button, input, .wp-element-button):focus-visible {
	outline: 2px solid var(--wp--preset--color--accent);
	outline-offset: 3px;
}

/* Bouton variante contour */
.is-style-outline .wp-block-button__link {
	background: transparent;
	border: 1px solid var(--wp--preset--color--contrast);
	color: var(--wp--preset--color--contrast);
}

.is-style-outline .wp-block-button__link:hover {
	border-color: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--accent);
	background: transparent;
}

/* Lignes d'agenda : filet discret entre les dates */
.nms-agenda-row {
	border-bottom: 1px solid color-mix(in srgb, var(--wp--preset--color--contrast) 15%, transparent);
}

/* En-tête collant : reste visible et cliquable au défilement.
   Le sticky est posé sur le conteneur de template-part (son parent
   .wp-site-blocks est haut), pas sur le header interne. */
.wp-site-blocks > header.wp-block-template-part {
	position: sticky;
	top: 0;
	z-index: 100;
}

.nms-header {
	background-color: color-mix(in srgb, var(--wp--preset--color--base) 82%, transparent);
	backdrop-filter: saturate(140%) blur(12px);
	-webkit-backdrop-filter: saturate(140%) blur(12px);
}

/* Les ancres one-page s'arrêtent sous l'en-tête collant */
:where([id]) {
	scroll-margin-top: 7rem;
}

/* Logo : grand sur desktop, raisonnable sur mobile */
.wp-block-site-logo {
	width: clamp(160px, 22vw, 300px) !important;
	transition: width 0.25s ease;
}

/* Menu de navigation à l'orange, s'éclaircit au survol */
.wp-block-navigation .wp-block-navigation-item__content {
	color: var(--wp--preset--color--accent) !important;
}

.wp-block-navigation .wp-block-navigation-item__content:hover,
.wp-block-navigation .wp-block-navigation-item__content:focus,
.wp-block-navigation .current-menu-item > .wp-block-navigation-item__content {
	color: var(--wp--preset--color--contrast) !important;
}

/* Héro : photo plein écran, contenu ancré en bas */
.nms-hero.wp-block-cover {
	align-items: flex-end;
}

.nms-hero .wp-block-cover__inner-container {
	width: 100%;
}

/* Numéros de section éditoriaux (01, 02, 03…) */
.wp-site-blocks main {
	counter-reset: nms-sec;
}

.wp-site-blocks main > section:not(.nms-sans-numero) {
	counter-increment: nms-sec;
}

.wp-site-blocks main > section h2.wp-block-heading::before {
	content: counter(nms-sec, decimal-leading-zero);
	display: inline-block;
	margin-right: 0.6em;
	color: var(--wp--preset--color--accent);
	font-size: 0.42em;
	font-weight: 700;
	letter-spacing: 0.08em;
	vertical-align: 0.95em;
}

/* Grain de film — fine texture sur tout le site */
body::after {
	content: "";
	position: fixed;
	inset: 0;
	z-index: 9999;
	pointer-events: none;
	opacity: 0.05;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
	background-size: 200px 200px;
}

/* Sélecteur de langue : le menu flottant de TranslatePress est masqué,
   remplacé par « FR · EN » dans l'en-tête (liens fixés à l'export). */
.trp-language-switcher.trp-floating-switcher {
	display: none !important;
}

.nms-lang {
	display: flex;
	align-items: center;
	gap: 1.1rem;
	font-family: var(--wp--preset--font-family--heading);
	font-size: 0.78rem;
	letter-spacing: 0.18em;
	text-transform: uppercase;
}

.nms-lang a {
	position: relative;
	padding: 0.4rem 0;
	color: var(--wp--preset--color--muted);
	text-decoration: none;
	border-bottom: 1px solid transparent;
	transition: color 0.15s ease, border-color 0.15s ease;
}

.nms-lang a + a::before {
	content: "";
	position: absolute;
	left: -0.6rem;
	top: 28%;
	height: 44%;
	width: 1px;
	background: color-mix(in srgb, var(--wp--preset--color--contrast) 28%, transparent);
}

.nms-lang a:hover {
	color: var(--wp--preset--color--contrast);
}

html[lang^="fr"] .nms-lang a[hreflang="fr"],
html[lang^="en"] .nms-lang a[hreflang="en"] {
	color: var(--wp--preset--color--accent);
	border-bottom-color: var(--wp--preset--color--accent);
}

/* Grille Merch : responsive + cartes */
.nms-merch-grid {
	grid-template-columns: repeat(4, 1fr);
	gap: clamp(1rem, 2.5vw, 1.75rem);
}

@media (max-width: 900px) {
	.nms-merch-grid {
		grid-template-columns: repeat(2, 1fr);
	}
}

@media (max-width: 520px) {
	.nms-merch-grid {
		grid-template-columns: 1fr;
		max-width: 360px;
		margin-inline: auto;
	}
}

.nms-merch-card .wp-block-image {
	margin: 0;
	background: var(--wp--preset--color--surface);
}

.nms-merch-card h3 {
	line-height: 1.25;
}

/* Tracklist de l'album : numéros à l'accent */
.nms-tracklist {
	padding-left: 1.4em;
}

.nms-tracklist li::marker {
	color: var(--wp--preset--color--accent);
	font-family: var(--wp--preset--font-family--heading);
	font-weight: 600;
}

/* Formulaire newsletter (plugin « Newsletter ») aux couleurs du thème */
.tnp-subscription-minimal,
.tnp-subscription {
	max-width: 520px;
	margin: var(--wp--preset--spacing--50) auto 0 !important;
}

.tnp-subscription-minimal form,
.tnp-subscription form {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
	justify-content: center;
}

.tnp input.tnp-email,
.tnp-subscription input[type="text"] {
	flex: 1 1 280px;
	width: auto !important;
	background: transparent !important;
	border: 1px solid color-mix(in srgb, var(--wp--preset--color--contrast) 35%, transparent) !important;
	border-radius: 999px !important;
	color: var(--wp--preset--color--contrast) !important;
	font-family: var(--wp--preset--font-family--body) !important;
	font-size: 1rem !important;
	padding: 0.75rem 1.25rem !important;
}

.tnp input.tnp-email:focus,
.tnp-subscription input[type="text"]:focus {
	border-color: var(--wp--preset--color--accent) !important;
	outline: none;
}

.tnp input.tnp-submit {
	width: auto !important;
	background: var(--wp--preset--color--accent) !important;
	border: 0 !important;
	border-radius: 999px !important;
	color: var(--wp--preset--color--base) !important;
	cursor: pointer;
	font-family: var(--wp--preset--font-family--heading) !important;
	font-size: 0.9375rem !important;
	font-weight: 600;
	height: auto !important;
	padding: 0.75rem 1.5rem !important;
	transition: background-color 0.15s ease;
}

.tnp input.tnp-submit:hover {
	background: var(--wp--preset--color--contrast) !important;
}

/* Formulaire de contact (Contact Form 7) aux couleurs du thème */
.nms-contact-form .nms-form-row {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
}

.nms-contact-form .nms-form-row > p {
	display: flex;
	flex-wrap: wrap;
	gap: 0.75rem;
	width: 100%;
}

.nms-contact-form .nms-form-row > p > span,
.nms-contact-form .nms-form-row > span {
	flex: 1 1 220px;
	min-width: 0;
}

.nms-contact-form .wpcf7-form-control-wrap {
	display: block;
}

.nms-contact-form .wpcf7-form p {
	margin: 0 0 0.85rem;
}

.nms-contact-form input[type="text"],
.nms-contact-form input[type="email"],
.nms-contact-form textarea {
	box-sizing: border-box;
	width: 100%;
	background: transparent;
	border: 1px solid color-mix(in srgb, var(--wp--preset--color--contrast) 30%, transparent);
	border-radius: 12px;
	color: var(--wp--preset--color--contrast);
	font-family: var(--wp--preset--font-family--body);
	font-size: 1rem;
	padding: 0.75rem 1rem;
}

.nms-contact-form textarea {
	min-height: 150px;
	resize: vertical;
}

.nms-contact-form input::placeholder,
.nms-contact-form textarea::placeholder {
	color: var(--wp--preset--color--muted);
}

.nms-contact-form input:focus,
.nms-contact-form textarea:focus {
	border-color: var(--wp--preset--color--accent);
	box-shadow: 0 0 0 3px color-mix(in srgb, var(--wp--preset--color--accent) 18%, transparent);
	outline: none;
}

.nms-contact-form input[type="submit"] {
	background: var(--wp--preset--color--accent);
	border: 0;
	border-radius: 999px;
	color: var(--wp--preset--color--base);
	cursor: pointer;
	font-family: var(--wp--preset--font-family--heading);
	font-size: 0.9375rem;
	font-weight: 600;
	margin-top: 0.25rem;
	padding: 0.8rem 1.75rem;
	transition: background-color 0.2s ease;
}

.nms-contact-form input[type="submit"]:hover {
	background: var(--wp--preset--color--contrast);
}

/* Adresses e-mail : espacement entre les blocs */
.nms-contact-mails {
	gap: clamp(1.5rem, 5vw, 3.5rem) !important;
	padding-top: var(--wp--preset--spacing--50);
}

/* Retours CF7 (validation, succès) */
.nms-contact-form .wpcf7-response-output {
	border-radius: 10px !important;
	margin: 1rem 0 0 !important;
	padding: 0.75rem 1rem !important;
}

.nms-contact-form .wpcf7-not-valid-tip {
	color: var(--wp--preset--color--accent);
	font-size: 0.85rem;
}

/* ============================================================
   Micro-interactions — désactivées si l'utilisateur préfère
   réduire les animations (réglage système).
   ============================================================ */
@media (prefers-reduced-motion: no-preference) {

	/* --- Grain de film : léger scintillement --- */
	body::after {
		animation: nms-grain 0.5s steps(1) infinite;
	}

	/* --- Boutons : élévation discrète + pression au clic --- */
	.wp-element-button,
	.wp-block-button__link,
	.tnp input.tnp-submit {
		transition: background-color 0.2s ease, color 0.2s ease,
			transform 0.2s cubic-bezier(0.2, 0.6, 0.2, 1), box-shadow 0.25s ease;
	}

	.wp-block-button:not(.is-style-outline) .wp-block-button__link:hover,
	.tnp input.tnp-submit:hover {
		transform: translateY(-2px);
		box-shadow: 0 8px 24px color-mix(in srgb, var(--wp--preset--color--accent) 30%, transparent);
	}

	.is-style-outline .wp-block-button__link:hover {
		transform: translateY(-2px);
		box-shadow: 0 8px 20px color-mix(in srgb, var(--wp--preset--color--contrast) 10%, transparent);
	}

	.wp-block-button .wp-block-button__link:active,
	.tnp input.tnp-submit:active {
		transform: translateY(0) scale(0.98);
		box-shadow: none;
		transition-duration: 0.08s;
	}

	/* --- Menu : soulignement qui glisse --- */
	.wp-block-navigation .wp-block-navigation-item__content {
		position: relative;
		text-decoration: none;
	}

	.wp-block-navigation .wp-block-navigation-item__content::after {
		content: "";
		position: absolute;
		left: 0;
		right: 0;
		bottom: -0.3em;
		height: 1px;
		background: var(--wp--preset--color--accent);
		transform: scaleX(0);
		transform-origin: right center;
		transition: transform 0.28s cubic-bezier(0.2, 0.6, 0.2, 1);
	}

	.wp-block-navigation .wp-block-navigation-item__content:hover::after,
	.wp-block-navigation .current-menu-item .wp-block-navigation-item__content::after {
		transform: scaleX(1);
		transform-origin: left center;
	}

	/* --- Lignes d'agenda : réaction au survol --- */
	.nms-agenda-row {
		transition: background-color 0.25s ease, border-color 0.25s ease;
	}

	.nms-agenda-row:hover {
		background-color: color-mix(in srgb, var(--wp--preset--color--contrast) 4%, transparent);
		border-bottom-color: color-mix(in srgb, var(--wp--preset--color--accent) 55%, transparent);
	}

	/* --- Images : zoom lent et léger --- */
	.wp-block-image,
	.wp-block-post-featured-image {
		overflow: hidden;
	}

	.wp-block-image img,
	.wp-block-post-featured-image img {
		transition: transform 0.7s cubic-bezier(0.2, 0.6, 0.2, 1);
	}

	.wp-block-image:hover img,
	.wp-block-post-featured-image:hover img {
		transform: scale(1.03);
	}

	/* --- Icônes sociales : élévation --- */
	.wp-block-social-links .wp-social-link {
		transition: transform 0.2s cubic-bezier(0.2, 0.6, 0.2, 1);
	}

	.wp-block-social-links .wp-social-link:hover {
		transform: translateY(-3px);
	}

	/* --- Logo : fondu discret --- */
	.wp-block-site-logo img {
		transition: opacity 0.2s ease;
	}

	.wp-block-site-logo a:hover img {
		opacity: 0.8;
	}

	/* --- Champ newsletter : halo au focus --- */
	.tnp input.tnp-email:focus {
		box-shadow: 0 0 0 3px color-mix(in srgb, var(--wp--preset--color--accent) 22%, transparent);
	}

	/* --- Entrée du héro en cascade au chargement --- */
	.nms-hero .wp-block-cover__inner-container .wp-block-group > * {
		animation: nms-rise 0.7s cubic-bezier(0.2, 0.6, 0.2, 1) both;
	}

	.nms-hero .wp-block-cover__inner-container .wp-block-group > *:nth-child(2) {
		animation-delay: 0.12s;
	}

	/* --- Révélation des sections au défilement (classes posées en JS) --- */
	.nms-reveal {
		opacity: 0;
		transform: translateY(24px);
		transition: opacity 0.7s ease, transform 0.7s cubic-bezier(0.2, 0.6, 0.2, 1);
	}

	.nms-reveal.is-visible {
		opacity: 1;
		transform: none;
	}
}

@keyframes nms-rise {
	from {
		opacity: 0;
		transform: translateY(18px);
	}

	to {
		opacity: 1;
		transform: none;
	}
}

@keyframes nms-grain {
	0% { background-position: 0 0; }
	20% { background-position: -45px 25px; }
	40% { background-position: 35px -35px; }
	60% { background-position: -25px -15px; }
	80% { background-position: 30px 45px; }
	100% { background-position: 0 0; }
}

/* Mobile : la photo du héro est très large (2,15:1). On lui donne son format
   pour que les quatre musiciens restent visibles, sans parallaxe. */
@media (max-width: 781px) {
	.nms-hero.wp-block-cover {
		min-height: 0 !important;
		height: 50vw !important;
		padding-bottom: 0 !important;
	}

	.nms-hero .wp-block-cover__image-background {
		transform: none !important;
	}
}

/* Zones tactiles : confortables au pouce */
.nms-lang a {
	padding: 0.7rem 0;
}

.nms-contact-mails a {
	display: inline-block;
	padding: 0.6rem 0;
}

.wp-block-social-links .wp-social-link a {
	padding: 0.55rem;
}
