/**
 * Visiora Core — Reset
 *
 * Normalisation minimale et sécurisée du périmètre Visiora.
 *
 * Ce fichier corrige uniquement les styles natifs susceptibles
 * de varier entre navigateurs ou d’être hérités du thème.
 *
 * Les dimensions, variantes et comportements spécialisés
 * restent sous la responsabilité des composants.
 *
 * Dépendances :
 * - aucune dépendance visuelle obligatoire
 *
 * @package Visiora_Core
 */

/* ======================================================
   1. PÉRIMÈTRE
   ====================================================== */

/*
 * Les règles utilisent :where() afin de conserver
 * une spécificité nulle.
 *
 * Les composants peuvent ainsi les surcharger naturellement
 * sans !important ni sélecteur artificiellement complexe.
 */

/* ======================================================
   2. TYPOGRAPHIE ET TEXTE
   ====================================================== */

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) {
	word-break: normal;
}

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) :where(
	h1,
	h2,
	h3,
	h4,
	h5,
	h6,
	p,
	li,
	dt,
	dd,
	figcaption
) {
	overflow-wrap: anywhere;
}

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) :where(
	strong,
	b
) {
	font-weight: bolder;
}

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) small {
	font-size: 0.875em;
}

/* ======================================================
   3. MÉDIAS NATIFS
   ====================================================== */

/*
 * Seuls les médias de contenu sont normalisés ici.
 *
 * Les SVG sont exclus :
 * UI-009 Icon et les composants SVG spécialisés contrôlent
 * eux-mêmes leurs dimensions.
 */

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) :where(
	img,
	picture,
	video,
	canvas
) {
	display: block;
	max-inline-size: 100%;
	block-size: auto;
}

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) iframe {
	display: block;
	max-inline-size: 100%;
	border: 0;
}

/* ======================================================
   4. LISTES
   ====================================================== */

/*
 * Les marqueurs et marges ne sont pas supprimés globalement.
 *
 * Le léger retrait logique conserve la lisibilité des listes
 * natives lorsqu’aucun composant spécialisé ne les contrôle.
 */

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) :where(
	ul,
	ol
) {
	padding-inline-start: 1.5em;
}

/* ======================================================
   5. LIENS
   ====================================================== */

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) a {
	text-decoration-thickness: from-font;
	text-underline-offset: 0.15em;
}

/*
 * La couleur n’est pas réinitialisée ici.
 *
 * Les liens natifs conservent la couleur définie par le thème
 * ou par le composant qui les contient.
 */

/* ======================================================
   6. CONTRÔLES DE FORMULAIRE
   ====================================================== */

/*
 * Ces règles possèdent une spécificité nulle.
 *
 * Les composants Button, Badge et futurs composants Form
 * conservent donc la priorité avec leurs classes publiques.
 */

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) :where(
	button,
	input,
	select,
	textarea
) {
	margin: 0;
	color: inherit;
	font: inherit;
	letter-spacing: inherit;
}

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) button:not(:disabled) {
	cursor: pointer;
}

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) button:disabled {
	cursor: not-allowed;
}

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) textarea {
	resize: vertical;
}

/* ======================================================
   7. TABLEAUX NATIFS
   ====================================================== */

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) table {
	inline-size: 100%;
	max-inline-size: 100%;
	border-collapse: collapse;
	border-spacing: 0;
}

/*
 * Le défilement horizontal appartient à un wrapper dédié.
 *
 * Le tableau lui-même ne reçoit aucun overflow.
 */

/* ======================================================
   8. ÉLÉMENTS MASQUÉS
   ====================================================== */

/*
 * L’attribut HTML hidden doit toujours retirer l’élément
 * de la mise en page.
 *
 * !important est volontaire ici afin qu’un display déclaré
 * par une classe de composant ne neutralise pas hidden.
 */

:where(
	.v-root,
	[class^="v-"],
	[class*=" v-"]
) [hidden] {
	display: none !important;
}

/* ======================================================
   9. MOUVEMENTS RÉDUITS
   ====================================================== */

/*
 * Le Reset ne neutralise pas globalement les animations
 * ou transitions des composants.
 *
 * Chaque composant définit son propre comportement dans
 * prefers-reduced-motion afin de préserver sa signification :
 *
 * - Spinner arrête sa rotation ;
 * - Skeleton arrête son impulsion ;
 * - Progress arrête son déplacement ;
 * - Tooltip supprime ses transitions ;
 * - Card supprime son élévation animée.
 *
 * Seul le défilement fluide hérité est neutralisé ici.
 */

@media (prefers-reduced-motion: reduce) {
	:where(
		.v-root,
		[class^="v-"],
		[class*=" v-"]
	) {
		scroll-behavior: auto;
	}
}

/* ======================================================
   10. COMPATIBILITÉ WORDPRESS
   ====================================================== */

/*
 * Aucun style global n’est appliqué aux classes WordPress,
 * Gutenberg, GeneratePress ou Spectra.
 *
 * Seuls les éléments réellement contenus dans le périmètre
 * Visiora sont concernés.
 */

/* ======================================================
   11. PERFORMANCE ET SÉCURITÉ
   ====================================================== */

/*
 * - Aucun JavaScript.
 * - Aucun gestionnaire inline.
 * - Aucune dépendance externe.
 * - Compatible CSP.
 * - Spécificité nulle grâce à :where().
 * - Aucun style global sur svg.
 * - Aucun max-inline-size imposé à tous les composants.
 * - Aucun dimensionnement dupliqué avec components.css.
 * - Aucun !important hors contrat natif de hidden.
 * - Aucun reset global agressif des animations.
 * - Compatible RTL grâce aux propriétés logiques.
 */