/**
 * Article de contenu — handoff, « Ecran 3 ».
 *
 * Mesures fermes reprises du handoff : colonne laterale `flex: 0 0 200px`,
 * sur-titre du sommaire 10px capitales vert, liens 13px, encart produit sur
 * fond --odg-papier-2 avec filet gauche 3px terracotta, padding 18px 20px,
 * vignette 70x70, titre 15px/700.
 *
 * Le handoff ne chiffre pas le reste de l'ecran 3 (taille du H1, mesure du
 * corps de texte, gouttiere entre les deux colonnes) : ces valeurs sont prises
 * dans l'echelle typographique et l'echelle d'espacement du handoff, via les
 * tokens, jamais inventees en dur.
 *
 * Feuille enfilee par odg_assets_article() apres odg-footer : elle sort en
 * dernier et peut donc surcharger les feuilles des lots 1 a 3.
 */

/* -------------------------------------------------------------------------
 * Grille : corps + colonne de sommaire
 * ---------------------------------------------------------------------- */

/*
 * .odg-contenu pose deja la gouttiere de 40 px et le fond papier. L'article
 * s'y installe en deux colonnes : le corps prend la place restante, la colonne
 * laterale est figee a 200 px comme le demande le handoff.
 */
.odg-article {
	display: flex;
	align-items: flex-start;
	gap: var(--odg-espace-40);
}

.odg-article__corps {
	flex: 1 1 auto;
	min-width: 0;
}

/*
 * Page sans <h2> : aucun sommaire n'est rendu et le corps occupe toute la
 * largeur. La classe est posee par template-parts/article.php ; la regle sert
 * de garde-fou si un jour la colonne est masquee autrement.
 */
.odg-article--pleine-largeur {
	display: block;
}

.odg-article__notices:not(:empty) {
	margin-bottom: var(--odg-espace-16);
}

/* -------------------------------------------------------------------------
 * Fil d'Ariane
 * ---------------------------------------------------------------------- */

.odg-fil {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	gap: var(--odg-espace-8);
	font-size: var(--odg-texte-12);
	line-height: 1.4;
	color: var(--odg-gris-texte);
}

.odg-fil a {
	color: var(--odg-gris-texte);
	text-decoration: none;
}

.odg-fil a:hover,
.odg-fil a:focus-visible {
	color: var(--odg-terracotta);
	text-decoration: underline;
	text-underline-offset: 3px;
}

.odg-fil__courant {
	color: var(--odg-encre-douce);
}

/* -------------------------------------------------------------------------
 * Titre et corps de texte
 * ---------------------------------------------------------------------- */

.odg-article__titre {
	margin-top: var(--odg-espace-12);
	font-family: var(--odg-police-titre);
	font-size: var(--odg-texte-38);
	font-weight: 500;
	line-height: 1.14;
	letter-spacing: -0.02em;
	text-wrap: balance;
	color: var(--odg-encre);
}

/*
 * Corps de texte : Karla 17px, la taille de lecture de l'echelle, sur
 * --odg-encre-douce (« texte courant » dans le handoff). La mesure est bornee
 * a 68 caracteres : au-dela, la ligne devient penible a suivre, et le corps
 * fait 960 px sur un desktop 1280.
 */
.odg-article__texte {
	max-width: 68ch;
	margin-top: var(--odg-espace-28);
	font-size: var(--odg-texte-17);
	line-height: 1.7;
	color: var(--odg-encre-douce);
}

.odg-article__texte > * + * {
	margin-top: var(--odg-espace-18);
}

.odg-article__texte h2 {
	/*
	 * L'en-tete du theme n'est pas collante : un saut d'ancre depuis le
	 * sommaire amene le titre en haut de la fenetre. Les quelques pixels de
	 * marge de defilement evitent seulement qu'il soit colle au bord.
	 */
	scroll-margin-top: var(--odg-espace-24);
	margin-top: var(--odg-espace-48);
	font-family: var(--odg-police-titre);
	font-size: var(--odg-texte-28);
	font-weight: 500;
	line-height: 1.2;
	color: var(--odg-encre);
}

.odg-article__texte h3 {
	margin-top: var(--odg-espace-28);
	font-family: var(--odg-police-titre);
	font-size: var(--odg-texte-22);
	font-weight: 500;
	line-height: 1.25;
	color: var(--odg-encre);
}

.odg-article__texte h4 {
	margin-top: var(--odg-espace-24);
	font-size: var(--odg-texte-17);
	font-weight: 700;
	line-height: 1.3;
	color: var(--odg-encre);
}

.odg-article__texte a {
	color: var(--odg-terracotta);
	text-decoration: underline;
	text-decoration-thickness: 1px;
	text-underline-offset: 3px;
}

.odg-article__texte a:hover,
.odg-article__texte a:focus-visible {
	color: var(--odg-vert-fonce);
}

.odg-article__texte strong,
.odg-article__texte b {
	font-weight: 700;
	color: var(--odg-encre);
}

.odg-article__texte ul,
.odg-article__texte ol {
	padding-left: var(--odg-espace-24);
}

.odg-article__texte li + li {
	margin-top: var(--odg-espace-8);
}

.odg-article__texte ul {
	list-style: disc;
}

.odg-article__texte ul::marker,
.odg-article__texte li::marker {
	color: var(--odg-terracotta);
}

.odg-article__texte blockquote {
	padding-left: var(--odg-espace-18);
	border-left: 3px solid var(--odg-trait-fort);
	font-family: var(--odg-police-titre);
	font-size: var(--odg-texte-22);
	font-style: italic;
	line-height: 1.45;
	color: var(--odg-encre);
}

.odg-article__texte img {
	border-radius: var(--odg-rayon-4);
}

.odg-article__texte figcaption {
	margin-top: var(--odg-espace-8);
	font-size: var(--odg-texte-12);
	color: var(--odg-gris-texte);
}

.odg-article__texte hr {
	height: 1px;
	border: 0;
	background-color: var(--odg-trait);
}

.odg-article__texte table {
	font-size: var(--odg-texte-15);
}

.odg-article__texte th,
.odg-article__texte td {
	padding: var(--odg-espace-8) var(--odg-espace-12);
	border-bottom: 1px solid var(--odg-trait);
	text-align: left;
}

.odg-article__texte th {
	font-weight: 700;
	color: var(--odg-encre);
}

.odg-article__pagination {
	margin-top: var(--odg-espace-40);
	font-size: var(--odg-texte-14);
	color: var(--odg-gris-texte);
}

/* -------------------------------------------------------------------------
 * Sommaire « Sur cette page »
 * ---------------------------------------------------------------------- */

/*
 * Handoff : `flex: 0 0 200px`. Le sommaire n'est pas rendu collant — le
 * handoff ne le demande pas, et le rendre collant supposerait de choisir seul
 * une hauteur de decrochage.
 */
.odg-sommaire {
	flex: 0 0 200px;
	padding-left: var(--odg-espace-18);
	border-left: 1px solid var(--odg-trait);
}

.odg-sommaire__titre {
	font-size: var(--odg-texte-10);
	font-weight: 700;
	letter-spacing: 0.16em;
	line-height: 1.4;
	text-transform: uppercase;
	color: var(--odg-vert-fonce);
}

.odg-sommaire__liste {
	margin-top: var(--odg-espace-12);
}

.odg-sommaire__liste li + li {
	margin-top: var(--odg-espace-8);
}

.odg-sommaire__liste a {
	display: block;
	font-size: var(--odg-texte-13);
	line-height: 1.45;
	color: var(--odg-encre-douce);
	text-decoration: none;
}

.odg-sommaire__liste a:hover,
.odg-sommaire__liste a:focus-visible {
	color: var(--odg-terracotta);
	text-decoration: underline;
	text-underline-offset: 3px;
}

/* -------------------------------------------------------------------------
 * Encart produit en milieu d'article
 * ---------------------------------------------------------------------- */

/*
 * Handoff : fond --odg-papier-2, filet gauche 3px terracotta, padding 18/20,
 * vignette 70x70, titre 15px/700, ligne de mentions, bouton d'ajout direct.
 *
 * L'encart est pose par le shortcode a l'interieur de .odg-article__texte : il
 * annule la mesure de 68ch heritee du corps pour occuper la largeur du corps
 * d'article, et remet la couleur de texte principale.
 */
.odg-encart-produit {
	display: flex;
	align-items: center;
	gap: var(--odg-espace-16);
	max-width: none;
	padding: var(--odg-espace-18) 20px;
	border-left: 3px solid var(--odg-terracotta);
	border-radius: 0 var(--odg-rayon-4) var(--odg-rayon-4) 0;
	background-color: var(--odg-papier-2);
	color: var(--odg-encre);
}

.odg-article__texte .odg-encart-produit {
	margin-top: var(--odg-espace-28);
	margin-bottom: var(--odg-espace-28);
}

/*
 * Vignette 70x70. Aucun visuel definitif n'est fourni (handoff, « Assets ») :
 * le cadre est rendu hachure, comme les autres emplacements du theme, et
 * l'image de reserve de WooCommerce se pose dessus quand elle existe.
 */
.odg-encart-produit__vignette {
	flex: 0 0 70px;
	width: 70px;
	height: 70px;
	overflow: hidden;
	border-radius: var(--odg-rayon-4);
	background-color: var(--odg-papier);
	background-image: repeating-linear-gradient(
		-45deg,
		rgba(125, 130, 117, 0.14) 0 8px,
		rgba(125, 130, 117, 0) 8px 16px
	);
}

.odg-encart-produit__image {
	width: 70px;
	height: 70px;
	object-fit: cover;
}

.odg-encart-produit__texte {
	flex: 1 1 auto;
	min-width: 0;
}

.odg-encart-produit__titre {
	font-size: var(--odg-texte-15);
	font-weight: 700;
	line-height: 1.3;
	color: var(--odg-encre);
}

/* « 20 € · en stock · Point Relais 4,15 € » — le tarif vient de l'API. */
.odg-encart-produit__mentions {
	margin-top: var(--odg-espace-4);
	font-size: var(--odg-texte-13);
	line-height: 1.4;
	color: var(--odg-gris-texte);
}

.odg-encart-produit__achat {
	flex: 0 0 auto;
	margin: 0;
}

/*
 * Le bouton porte .odg-bouton --primaire, defini dans base.css : forme,
 * couleurs et etats viennent de la. Ne reste ici que ce qui est propre a
 * l'encart — un bouton un peu plus compact que celui de l'accueil, et le
 * libelle tenu sur une seule ligne pour ne pas casser la ligne de l'encart.
 */
.odg-encart-produit__bouton {
	padding: 12px 22px;
	white-space: nowrap;
}

/* -------------------------------------------------------------------------
 * Hub « Ressources »
 * ---------------------------------------------------------------------- */

.odg-hub {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: var(--odg-espace-16);
	margin-top: var(--odg-espace-40);
}

.odg-hub__entree a {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--odg-espace-16);
	padding: var(--odg-espace-18) 20px;
	border: 1px solid var(--odg-trait-fort);
	border-radius: var(--odg-rayon-6);
	background-color: var(--odg-papier-2);
	font-size: var(--odg-texte-16);
	font-weight: 600;
	line-height: 1.35;
	color: var(--odg-encre);
	text-decoration: none;
	transition: transform 200ms cubic-bezier(0.2, 0.8, 0.2, 1), border-color 200ms;
}

.odg-hub__entree a:hover,
.odg-hub__entree a:focus-visible {
	border-color: var(--odg-vert-fonce);
	transform: translateY(-2px);
}

.odg-hub__fleche {
	color: var(--odg-terracotta);
}

/* -------------------------------------------------------------------------
 * Ecrans etroits
 * ---------------------------------------------------------------------- */

/*
 * 899 px : la colonne laterale de 200 px du handoff n'a plus la place, le
 * sommaire passe sous le corps d'article.
 */
@media (max-width: 899px) {
	.odg-article {
		display: block;
	}

	.odg-sommaire {
		margin-top: var(--odg-espace-40);
		padding-left: 0;
		border-left: 0;
		border-top: 1px solid var(--odg-trait);
		padding-top: var(--odg-espace-18);
	}

	.odg-hub {
		grid-template-columns: minmax(0, 1fr);
	}
}

/*
 * 767 px : mobile. La gouttiere de 16 px vient de .odg-contenu (base.css). Ne
 * restent ici que le titre, la taille de lecture et l'encart produit, qui ne
 * peut plus tenir sa vignette, son texte et son bouton sur une seule ligne.
 */
@media (max-width: 767px) {
	.odg-article__titre {
		font-size: var(--odg-texte-32);
	}

	.odg-article__texte {
		font-size: var(--odg-texte-16);
	}

	.odg-article__texte h2 {
		font-size: var(--odg-texte-24);
	}

	.odg-article__texte h3 {
		font-size: var(--odg-texte-22);
	}

	.odg-encart-produit {
		flex-wrap: wrap;
	}

	.odg-encart-produit__texte {
		flex: 1 1 60%;
	}

	.odg-encart-produit__achat {
		flex: 1 1 100%;
	}

	.odg-encart-produit__bouton {
		justify-content: center;
		width: 100%;
		white-space: normal;
	}

	/* Hauteur de frappe : 16 px de texte + 2 x 18 px de padding = 52 px. */
	.odg-hub__entree a {
		padding: var(--odg-espace-18) var(--odg-espace-16);
	}

	.odg-sommaire__liste a {
		display: inline-flex;
		align-items: center;
		min-height: 44px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.odg-encart-produit__bouton,
	.odg-hub__entree a {
		transition: none;
	}

	.odg-encart-produit__bouton:hover,
	.odg-encart-produit__bouton:focus-visible,
	.odg-encart-produit__bouton:active,
	.odg-hub__entree a:hover,
	.odg-hub__entree a:focus-visible {
		transform: none;
	}
}
