/* =========================================================================
   UCP — 04 · LA FICHE SÉJOUR DANS DIVI
   -------------------------------------------------------------------------
   La fiche séjour est écrite par le thème (`woocommerce/content-single-
   product.php`) et habillée par 03-components.css. Elle n'a donc presque
   besoin de rien ici.

   Presque : Divi l'enferme dans le gabarit de blog qu'il réserve aux pages
   WooCommerce — colonne de 79 %, conteneur de 1080 px, listes à puces. Ce
   fichier desserre cet étau, et rien d'autre.

   C'est le seul endroit du projet, avec la section « surcharges Divi » de
   02-base.css, où l'on a le droit de cibler `#left-area` ou `#main-content`.
   Aucun `!important`, aucun `display:none` sur du contenu.
   ========================================================================= */


/* =========================================================================
   1 · LIBÉRER LA PLEINE LARGEUR
   -------------------------------------------------------------------------
   La couverture de la maquette occupe tout l'écran. Divi, lui, sert les pages
   WooCommerce dans :

       #main-content > .container (80 %, max 1080 px) > #content-area > #left-area (79 %)

   `functions.php` a déjà demandé la pleine largeur dans la langue de Divi
   (classes `et_no_sidebar` et `et_full_width_page` sur le <body>), ce qui
   règle la colonne latérale et la largeur de `#left-area`. Restent la largeur
   du conteneur et ses marges, que ces classes ne touchent pas.

   Tout est enfermé dans `body.single-product` : le catalogue et le reste du
   site gardent le gabarit réglé dans les Options du thème.
   ========================================================================= */

body.single-product #main-content {
	background-color: transparent;
}

body.single-product #main-content .container {
	width: 100%;
	max-width: none;
	padding: 0;
}

/* Divi réserve 58 px au-dessus du contenu. Sous une photo pleine hauteur, ces
   58 px sont une bande blanche entre l'en-tête et la couverture. Le sélecteur
   recopie celui de Divi à l'identique — même spécificité, et c'est l'ordre de
   chargement qui tranche. */
body.single-product:not(.et-tb) #main-content .container,
body.single-product:not(.et-tb-has-header) #main-content .container {
	padding-top: 0;
}

body.single-product #left-area {
	padding: 0;
}

/* Le filet vertical que Divi trace entre les deux colonnes n'a plus rien à
   séparer une fois la colonne latérale retirée. */
body.single-product #main-content .container::before {
	display: none;
}


/* =========================================================================
   2 · LES LISTES DES BLOCS DE FICHE
   -------------------------------------------------------------------------
   Divi impose ses puces à toutes les listes de la colonne principale :

       #left-area ul { list-style: disc; padding: 0 0 23px 1em; line-height: 26px }

   Un id : la règle bat n'importe laquelle de nos classes. Sans les deux
   lignes ci-dessous, la liste d'atouts afficherait une puce ronde EN PLUS de
   sa flèche dorée, et le tableau « inclus / non inclus » sortirait à puces.

   On ne vise que nos propres blocs. Les listes que vous écrivez dans la
   description du séjour gardent leurs puces : c'est du texte courant, il doit
   se comporter comme du texte courant.
   ========================================================================= */

/* La liste d'atouts est un encadré crème : elle a besoin de son rembourrage,
   sur les quatre côtés.

   La version précédente n'annulait que `padding-left`. Or la règle de Divi est
   une écriture raccourcie, `padding: 0 0 23px 1em` : elle avait déjà remis le
   haut et la droite à zéro, et notre `.ucp-atouts { padding: 24px }`, qui ne
   pèse qu'une classe, ne pouvait rien contre un sélecteur à identifiant. La
   flèche dorée se retrouvait collée au bord gauche du cadre et le texte au bord
   droit, sans un pixel de marge, alors que le CSS du composant en demandait 24
   partout. On croyait lire notre feuille, on lisait celle de Divi.

   D'où la règle : face à un raccourci, on répond par un raccourci. Annuler
   propriété par propriété laisse toujours passer ce qu'on n'avait pas vu. */
#left-area ul.ucp-atouts,
#left-area .ucp-faq ul.ucp-atouts {
	list-style: none;
	padding: var(--ucp-card-pad);
	line-height: var(--ucp-lh-body);
}

/* Les colonnes « inclus / non inclus » portent déjà le rembourrage : la liste
   qu'elles contiennent doit rester à plat, sinon il se cumule. */
#left-area .ucp-inclus ul {
	list-style: none;
	padding: 0;
	line-height: var(--ucp-lh-body);
}

#left-area ul.ucp-atouts li,
#left-area .ucp-inclus li {
	list-style: none;
}


/* =========================================================================
   3 · LES DEUX EMPLACEMENTS PHOTO
   -------------------------------------------------------------------------
   La fiche en compte deux, distincts : « Galerie du séjour » et « Trophées
   réalisés ». Même mécanique pour les deux — un carrousel de trois vignettes
   par vue, déjà habillé par 03-components.css (`ucp-carousel`,
   `ucp-carousel-page`, `ucp-media-tile`).

   Il ne manque que le comportement de l'image à l'intérieur de la tuile.
   `<figure>` porte une marge par défaut dans tous les navigateurs : sans la
   remise à zéro, les vignettes se décalent les unes des autres et la grille
   perd son alignement.
   ========================================================================= */

figure.ucp-media-tile {
	margin: 0;
}

.ucp-media-tile img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}


/* =========================================================================
   4 · LE CONTENU RÉDIGÉ DANS LA DESCRIPTION
   -------------------------------------------------------------------------
   Une partie du séjour se tape dans la description du produit, en HTML libre :
   les titres, les paragraphes, les listes, les tableaux.

   Ce contenu-là n'a aucune classe `ucp-`, et il ne faut pas en exiger. Le
   rédacteur écrit un <h2>, une <ul>, un <table> — c'est au thème de faire en
   sorte que ça sorte à l'image du reste du site. Une règle de rédaction qu'on
   ne peut pas tenir n'est pas une règle, c'est une dette.
   ========================================================================= */

/* --- Les titres marquent la coupure entre deux sections ------------------ */

/* Sans repère visuel, une fiche de quinze titres se lit comme un seul bloc de
   texte à faire défiler. Le filet doré au-dessus de chaque <h2> rejoue le
   découpage de la maquette sans rien demander au rédacteur : il écrit un
   titre, il obtient une section. */
.ucp-sejour-page .ucp-content-section > h2 {
	margin: var(--ucp-space-12) 0 var(--ucp-space-5);
	padding-top: var(--ucp-space-6);
	border-top: 1px solid var(--ucp-border);
	font-size: var(--ucp-fs-h3);
	font-weight: var(--ucp-fw-black);
	line-height: 1.2;
	letter-spacing: -0.025em;
	color: var(--ucp-night);
}

.ucp-sejour-page .ucp-content-section > h2::before {
	content: "";
	display: block;
	width: var(--ucp-rule-w);
	height: var(--ucp-rule-h);
	margin-bottom: var(--ucp-space-5);
	background-color: var(--ucp-accent);
}

/* Le premier titre de la section ouvre la page : ni filet de séparation, ni
   marge haute — il n'a rien à séparer de ce qui précède. */
.ucp-sejour-page .ucp-content-section > h2:first-child,
.ucp-sejour-page .ucp-content-section > .ucp-content-h2 {
	margin-top: 0;
	padding-top: 0;
	border-top: 0;
}

.ucp-sejour-page .ucp-content-section > .ucp-content-h2::before {
	content: none;
}

.ucp-sejour-page .ucp-content-section h3 {
	margin: var(--ucp-space-8) 0 var(--ucp-space-3);
	font-size: var(--ucp-fs-h4);
	color: var(--ucp-night);
}

/* --- Les listes ---------------------------------------------------------- */

/* La puce en or : le seul rappel de la marque dans un texte courant. */
#left-area .ucp-content-section ul li::marker,
.ucp-sejour-page .ucp-content-section ul li::marker {
	color: var(--ucp-accent);
}

/* --- Les tableaux -------------------------------------------------------- */

/* Un <table> écrit à la main dans la description sort sans bordure ni fond :
   les colonnes flottent, et « 60 $ par jour » ne se rattache visuellement à
   rien. On lui applique l'habillage du composant `ucp-table`, pour que le
   tableau des coûts sur place ressemble à celui des taxes de tir.

   `display: block` + `overflow-x: auto` sur l'enveloppe : un tableau de trois
   colonnes déborde sur un téléphone, et un débordement qui ne défile pas est
   un débordement qui coupe l'information. */
/* `:not(.ucp-table)` est indispensable. Sans lui, la règle attrapait aussi le
   tableau des taxes de tir, qui est un composant à part entière — et le
   `display: block` ci-dessous lui faisait perdre sa nature de tableau : les
   colonnes cessaient de se répartir et se tassaient sur un tiers de la largeur,
   à l'intérieur d'un cadre resté pleine page.

   `display: table` explicite : Divi passe certains tableaux en `block`, et un
   tableau en `block` ne calcule plus ses colonnes. */
.ucp-sejour-page .ucp-content-section table:not(.ucp-table) {
	display: table;
	table-layout: auto;
	width: 100%;
	margin: 0 0 var(--ucp-space-8);
	border: 1px solid var(--ucp-border);
	border-collapse: collapse;
	font-size: var(--ucp-fs-sm);
	text-align: left;
}

.ucp-sejour-page .ucp-content-section table:not(.ucp-table) th {
	padding: var(--ucp-space-3) var(--ucp-space-5);
	background-color: var(--ucp-cream);
	border-bottom: 1px solid var(--ucp-border-strong);
	color: var(--ucp-text);
	font-size: var(--ucp-fs-xs);
	font-weight: var(--ucp-fw-bold);
	letter-spacing: var(--ucp-ls-label);
	text-transform: uppercase;
	white-space: nowrap;
}

.ucp-sejour-page .ucp-content-section table:not(.ucp-table) td {
	padding: var(--ucp-space-3) var(--ucp-space-5);
	border-top: 1px solid var(--ucp-border);
	color: var(--ucp-text-muted);
}

.ucp-sejour-page .ucp-content-section table:not(.ucp-table) tbody tr:nth-child(even) td {
	background: var(--ucp-cream);
}


/* =========================================================================
   5 · TRAVAILLER DANS LE CONSTRUCTEUR DE THÈME
   -------------------------------------------------------------------------
   Quand la fiche est montée dans le Corps personnalisé de Divi plutôt que par
   le gabarit PHP, la mise en deux colonnes n'est plus la nôtre : c'est une
   Ligne Divi (2/3 + 1/3). Le `position: sticky` de `.ucp-sidebar` ne peut donc
   pas s'appliquer — il vise un élément que Divi ne génère pas.

   D'où cette classe, à poser sur la COLONNE de droite dans le constructeur
   (onglet Avancé → champ « Classe CSS »).

   `align-self: flex-start` est indispensable : sans lui, la colonne s'étire sur
   toute la hauteur de la ligne, et un élément qui remplit déjà son conteneur
   n'a aucune marge pour coller — `sticky` s'applique sans que rien ne bouge.
   C'est le piège classique du sticky en colonne, et il fait perdre une heure.
   ========================================================================= */

.ucp-sticky-col {
	align-self: flex-start;
	position: sticky;
	top: var(--ucp-space-5);
}

/* Divi coupe parfois le débordement des lignes ; un ancêtre en `overflow:
   hidden` désactive silencieusement tous les `sticky` qu'il contient. */
.et_pb_row:has(.ucp-sticky-col),
.et_pb_section:has(.ucp-sticky-col) {
	overflow: visible;
}


/* =========================================================================
   6 · CORRECTIFS RELEVÉS SUR LA PREMIÈRE FICHE EN LIGNE
   ========================================================================= */

/* --- La largeur de lecture ---------------------------------------------- */

/* Deux choses différentes, qu'il ne faut surtout pas confondre : la largeur du
   FOND, et la largeur de la LECTURE.

   Le fond blanc va d'un bord à l'autre de l'écran. Sur un grand moniteur, les
   deux bandes crème de part et d'autre donnaient l'impression d'une page
   découpée et posée au milieu du vide.

   Le texte, lui, reste borné et centré. Au-delà de 1440 px, la ligne dépasse
   110 caractères : en revenant à gauche, l'œil ne retrouve plus le début de la
   ligne suivante. Sur une fiche de quinze sections, ça se paie en abandons.

   La grille à quatre colonnes fait les deux à la fois. Les deux colonnes
   extérieures sont des marges élastiques : elles absorbent tout l'espace
   au-delà de 1440 px, sans que le fond s'arrête pour autant. */
.ucp-sejour-page .ucp-layout {
	max-width: none;
	padding-left: 0;
	padding-right: 0;
	grid-template-columns:
		minmax(var(--ucp-gutter), 1fr)
		minmax(0, 950px)
		minmax(280px, 400px)
		minmax(var(--ucp-gutter), 1fr);
}

.ucp-sejour-page .ucp-layout > .ucp-content { grid-column: 2; min-width: 0; }
.ucp-sejour-page .ucp-layout > .ucp-sidebar { grid-column: 3; }

/* --- Les séjours similaires --------------------------------------------- */

/* Deux réglages, et le second compte autant que le premier.

   Le titre partait se coller au bord gauche de l'écran pendant que la grille
   restait centrée : l'en-tête n'avait pas de largeur maximale.

   Et 1440 px, pas 1280 : c'est la même largeur que la fiche au-dessus, donc le
   même bord gauche. Deux blocs qui se suivent avec deux alignements différents
   se voient immédiatement, même sans savoir pourquoi — le regard descend et
   accroche sur le décalage. */
.ucp-similaires .ucp-section-header,
.ucp-similaires .ucp-grid {
	max-width: 1440px;
	margin-left: auto;
	margin-right: auto;
}

.ucp-similaires .ucp-section-header {
	margin-bottom: var(--ucp-space-10);
}

/* Un séjour similaire tout seul ne doit pas s'étaler sur un tiers de page au
   milieu de deux vides. On cale les cartes à gauche, à leur largeur normale. */
.ucp-similaires .ucp-grid {
	grid-template-columns: repeat(auto-fill, minmax(280px, 380px));
	justify-content: start;
}


/* =========================================================================
   7 · LA LISIBILITÉ DU BANDEAU DE COUVERTURE
   -------------------------------------------------------------------------
   Les six caractéristiques sont posées sur la photo. Tant que la photo est
   sombre, ça passe ; sur une herbe sèche en plein soleil, les intitulés en
   petites capitales grises disparaissent — et ce sont eux qui portent
   l'information la plus concrète de toute la page.

   Un voile sombre derrière le bandeau règle le problème une fois pour toutes,
   quelle que soit la photo. Trois raisons de le poser en bande unique plutôt
   qu'en six cases séparées :

     · six cases donnent six boutons, et le visiteur essaie de cliquer ;
     · elles hachent la lecture horizontale, alors que le bandeau se lit
       justement d'un trait, de gauche à droite ;
     · au moindre changement de longueur d'un intitulé, elles se décalent
       les unes par rapport aux autres.

   `backdrop-filter` floute la photo DERRIÈRE le voile. On garde ainsi la
   matière de l'image — on devine les herbes, la lumière — sans que le détail
   vienne concurrencer le texte. Les navigateurs qui ne le connaissent pas
   ignorent la ligne et gardent le voile seul : c'est déjà suffisant.
   ========================================================================= */

.ucp-hero--sejour .ucp-hero__info {
	/* Les marges négatives font déborder la bande jusqu'aux bords de la zone
	   de texte, puis le padding la remplit : le voile dépasse le texte des
	   deux côtés, ce qui lui donne l'air d'un socle et non d'un encadré. */
	margin-left: calc(-1 * var(--ucp-gutter));
	margin-right: calc(-1 * var(--ucp-gutter));
	margin-bottom: calc(-1 * clamp(2.5rem, 6vw, 3.75rem));
	padding: var(--ucp-space-6) var(--ucp-gutter) var(--ucp-space-8);
	background: rgba(18, 18, 20, 0.55);
	backdrop-filter: blur(10px);
	-webkit-backdrop-filter: blur(10px);
	border-top: 1px solid rgba(212, 175, 55, 0.45);
}

/* Les intitulés passaient à 60 % d'opacité — un gris clair sur une photo
   claire. À 82 %, ils tiennent sur n'importe quel fond sans pour autant
   voler la vedette aux valeurs, qui restent seules en or. */
.ucp-hero--sejour .ucp-hero__info-label {
	color: rgba(244, 239, 231, 0.82);
}

/* Le dégradé du bas s'assombrit un peu : il prend maintenant le relais du
   voile au lieu de s'arrêter juste avant. */
.ucp-hero--sejour .ucp-hero__bg::after {
	background: linear-gradient(
		180deg,
		rgba(20, 20, 22, 0.28) 0%,
		rgba(20, 20, 22, 0.45) 45%,
		rgba(20, 20, 22, 0.80) 100%
	);
}
