/* ==========================================================================
   assets/css/accueil.css
   --------------------------------------------------------------------------
   Les 6 blocs de section propres à l'accueil (ou disponibles partout pour
   .final/.cta) : volet, séjour, mosaïque, avis, dispo, appel final.
   ========================================================================== */

/* --- Cadre de contenu (largeur max cohérente sur grand écran) ------------
   Sous 1400px + 2×rail : comportement inchangé, padding = var(--rail).
   Au-delà : le padding grandit pour recentrer le contenu dans un cadre de
   1400px, au lieu de l'étirer à l'infini sur un écran large. Remplace
   var(--rail) par var(--idh-cadre) dans le padding-inline des sections
   pleine largeur ci-dessous (volet, séjour, mosaïque, avis, dispo, final).
   ========================================================================== */
:root {
	--idh-cadre: max(var(--rail), calc((100% - 1400px) / 2));
}

/* ==========================================================================
   VOLETS — [idh_volets]
   ========================================================================== */

.volet { position: relative; isolation: isolate; min-height: min(86svh, 760px); display: flex; align-items: flex-end; overflow: hidden; }
/* display:grid + stretch : l'<img> (élément remplacé) est étirée pour REMPLIR
   toute la hauteur du média — un height:100% ne se résout pas ici (hauteur du
   .volet en `auto`), et top:0/bottom:0 ne suffit pas sur un élément remplacé. */
.volet__media { position: absolute; inset: 0; z-index: -2; display: grid; }
.volet__media img {
	grid-area: 1 / 1; align-self: stretch; justify-self: stretch;
	min-width: 0; min-height: 0; width: 100%; height: 100%;
	object-fit: cover; object-position: center; display: block;
}
.volet::after { content: ""; position: absolute; inset: 0; z-index: -1; background: linear-gradient(to top, rgba(10,17,13,.82), rgba(10,17,13,.24) 52%, rgba(10,17,13,.08)); }
.volet__corps { padding: clamp(46px, 8vh, 96px) var(--idh-cadre); color: #fff; }
.volet__corps h2 { color: #fff; max-width: 18ch; }
/* Corps de texte du volet (paragraphe sans classe) : blanc plein. `:not([class])`
   et non `:last-of-type` — le CTA .idh-section-cta est désormais le dernier <p>. */
.volet__corps > p:not([class]) { margin-top: 20px; color: #fff; max-width: 62ch; font-size: 1rem; line-height: 1.6; }
.volet .section-kicker { color: var(--idh-accent); }
.volet .section-sub { color: rgba(255,255,255,.78); }
.volet__chiffres { display: flex; flex-wrap: wrap; gap: 10px 34px; margin-top: 26px; padding-top: 22px; border-top: 1px solid rgba(255,255,255,.24); }
.volet__chiffres div { color: #fff; }
.volet__chiffres b { display: block; font-family: var(--idh-font-display); font-size: 1.55rem; font-weight: 600; letter-spacing: -.03em; }
.volet__chiffres span { font-size: .8rem; color: rgba(255,255,255,.7); }

.volet--droite { justify-content: flex-end; text-align: right; }
.volet--droite .volet__corps h2, .volet--droite .volet__corps > p { margin-left: auto; }
.volet--droite .section-kicker { justify-content: flex-end; }
.volet--droite .section-sub { margin-left: auto; }
.volet--droite .volet__chiffres { justify-content: flex-end; }

@media (max-width: 820px) {
	.volet { min-height: 64svh; }
}

/* ==========================================================================
   SÉJOUR — [idh_sejour]
   ========================================================================== */

.sejour { margin-top: clamp(80px, 12vh, 150px); background: var(--idh-primary); color: var(--idh-on-primary); position: relative; z-index: 1; }
.sejour h2 { color: var(--idh-on-primary); }
.sejour .section-sub { color: rgba(255,255,255,.78); }
/* Toujours un rectangle net : contrairement aux médias produits/territoire,
   la photo du séjour n'est jamais découpée par le kit d'identité (pas de
   --idh-media-radius / --idh-media-clip ici, quel que soit le kit actif). */
.sejour__photo,
.etape__img,
.etape__img img { border-radius: 0; clip-path: none; }
.sejour__photo { height: clamp(240px, 42vh, 460px); background-size: cover; background-position: center; background-attachment: fixed; }
.sejour__contenu { padding: clamp(60px, 9vh, 110px) var(--idh-cadre) clamp(70px, 10vh, 130px); }
.sejour h2 { max-width: 16ch; }
.sejour__chapo { margin-top: 22px; max-width: 48ch; opacity: .82; color: inherit; }

.etapes {
	margin-top: clamp(44px, 7vh, 78px); display: grid;
	/* Autant de colonnes que d'étapes réellement saisies (2, 3 ou 4) — pas de
	   4 colonnes fixes : avec 2 ou 3 items, les cases manquantes restaient
	   vides (grand pavé gris à droite). Même correctif que .hero__today
	   (components.css) : grid-auto-flow:column laisse la grille suivre le
	   nombre d'enfants au lieu d'un repeat() figé. */
	grid-auto-flow: column; grid-auto-columns: 1fr; gap: 1px;
	background: rgba(242,243,238,.2); border: 1px solid rgba(242,243,238,.2);
	/* IDH · 1 → réglages généraux, idh_charte_rayon_image → --idh-radius
	   (includes/tokens.php). overflow:hidden : sans ça, les cartes .etape
	   (coins droits) dépasseraient du cadre arrondi — même correctif que
	   .hero__today (components.css). */
	border-radius: var(--idh-radius);
	overflow: hidden;
}
.etape { background: var(--idh-primary); padding: 0 0 28px; display: flex; flex-direction: column; }
.etape__img { margin: 0; overflow: hidden; background: rgba(255,255,255,.06); }
.etape__img img { width: 100%; aspect-ratio: 5 / 4; object-fit: cover; display: block; transition: transform 1s cubic-bezier(.2,.7,.2,1); }
.etape:hover .etape__img img { transform: scale(1.05); }
.etape__quand { margin: 22px 26px 10px; color: var(--idh-accent); }
.etape h3 { margin: 0 26px 10px; color: var(--idh-on-primary); font-size: 1.22rem; }
.etape p { margin: 0 26px; font-size: .93rem; opacity: .82; color: inherit; }

/* En dessous de 1000px, grille explicite en lignes de 2 (quel que soit le
   nombre d'étapes) — grid-auto-flow:column empilerait sinon tout sur une
   seule ligne, beaucoup trop étroite. */
@media (max-width: 1000px) { .etapes { grid-auto-flow: row; grid-auto-columns: auto; grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 700px)  { .etapes { grid-template-columns: 1fr; } .sejour__photo { background-attachment: scroll; } }

/* ==========================================================================
   MOSAÏQUE / TERRITOIRE — [idh_mosaique]
   --------------------------------------------------------------------------
   Deux blocs dans la même section :
     1. .territoire__tete / .onglets / .piste  → widget à onglets adresses/
        randos/agenda (idh_territoire_* dans components/mosaique.php).
     2. .mosaique__grille                       → grille de photos, inchangée.
   Le padding horizontal du bloc 1 est full-bleed volontaire (le .piste
   déborde du cadre pour laisser deviner la carte suivante) : la section
   n'a donc plus de padding-inline propre, chaque enfant porte le sien.
   ========================================================================== */

.mosaique { padding: clamp(40px, 6vh, 80px) 0 clamp(60px, 9vh, 110px); position: relative; z-index: 1; }
/* CTA « Découvrir notre destination » ([idh_destination]) : cadré sur le rail de
   contenu comme l'en-tête et la grille — .mosaique n'a pas de padding-inline
   propre (chaque enfant porte le sien), sinon le bouton s'étale plein écran. */
.mosaique > .idh-section-cta { padding-inline: var(--idh-cadre, var(--rail)); }

/* --- En-tête + compteur -------------------------------------------------- */
.territoire__tete {
	padding-inline: var(--idh-cadre, var(--rail));
	display: flex; align-items: flex-end; justify-content: space-between; gap: 30px; flex-wrap: wrap;
}
.territoire__compte { margin: 0 0 16px; color: var(--idh-ink-soft); font-size: .85rem; }
.territoire__tete .section-sub,
.territoire__tete p.venue:last-child { max-width: 46ch; }

/* --- Lien « Voir tous les … » (remplace les flèches de défilement) -------- */
.territoire__voir-tout {
	display: inline-flex; align-items: center; gap: 8px; flex-shrink: 0;
	font-size: .9rem; font-weight: 600; color: var(--idh-ink);
	padding-bottom: 2px; border-bottom: 1px solid currentColor;
	transition: color .3s, gap .3s;
}
.territoire__voir-tout svg { flex-shrink: 0; transition: transform .3s; }
.territoire__voir-tout:hover { color: var(--idh-primary); }
.territoire__voir-tout:hover svg { transform: translateX(3px); }

/* --- Onglets -------------------------------------------------------------- */
.onglets {
	display: flex; gap: 8px; flex-wrap: wrap;
	padding-inline: var(--idh-cadre, var(--rail));
	margin: 26px 0 30px;
}
/* background/color en !important : le <button> du thème (Twenty Twenty-One,
   règle "button:not(:hover):not(:active):not(.has-background)", spécificité
   0-3-1) gagne sinon face à .onglet.est-actif (0-2-0) — même combat que le
   h1 du hero face à .elementor-kit-<id> h1 (voir components/hero.php). */
.onglet {
	font: inherit; font-size: .9rem; cursor: pointer;
	display: inline-flex; align-items: center; gap: 9px;
	padding: 10px 18px;
	background: transparent !important; color: var(--idh-ink-soft) !important;
	border: 1px solid var(--idh-line);
	/* !important : même combat de spécificité que background/color ci-dessus —
	   un bouton (Elementor/thème) impose sinon sa propre valeur de rayon,
	   ignorant idh_charte_rayon_bouton (repéré via capture : les onglets
	   rendaient 25px, pas les 4px de --idh-radius-btn, malgré la déclaration). */
	border-radius: var(--idh-radius-btn) !important;
	transition: color .3s, border-color .3s, background-color .3s;
}
.onglet span {
	font-size: .74rem; font-variant-numeric: tabular-nums;
	padding: 1px 7px; border-radius: 20px;
	background: var(--idh-bg-alt); color: var(--idh-ink-soft);
}
.onglet:hover { color: var(--idh-ink) !important; border-color: var(--idh-ink-soft); }
.onglet.est-actif { background: var(--idh-primary) !important; border-color: var(--idh-primary); color: var(--idh-on-primary) !important; }
.onglet.est-actif span { background: rgba(255,255,255,.16); color: inherit; }

/* --- Piste : rangée de cartes défilante, une vue à la fois ---------------- */
.piste {
	display: flex; gap: 22px;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	padding: 0 var(--idh-cadre, var(--rail)) 10px;
	scrollbar-width: none;
}
.piste::-webkit-scrollbar { display: none; }
.piste[hidden] { display: none; }

.carte { flex: 0 0 clamp(230px, 27vw, 320px); scroll-snap-align: start; }
.carte img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; border-radius: var(--idh-radius); display: block; transition: transform 1.4s cubic-bezier(.2,.7,.2,1); }
.carte:hover img { transform: scale(1.04); }
.carte h3 { font-size: 1.15rem; margin-top: 18px; }
.carte p { font-size: .89rem; color: var(--idh-ink-soft); margin: 8px 0 0; }
.carte dl { display: flex; gap: 18px; margin: 14px 0 0; font-size: .82rem; color: var(--idh-ink-soft); font-variant-numeric: tabular-nums; }
.carte dt { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
.carte dd { margin: 0; }

/* overflow:hidden + même rayon que l'image (border-radius ci-dessus est
   sur l'<img> lui-même, .carte__media doit le reprendre pour clipper le
   zoom au survol sans laisser dépasser les coins). */
.carte__media { position: relative; overflow: hidden; border-radius: var(--idh-radius); }
.carte__marque {
	position: absolute; top: 10px; left: 10px;
	display: inline-flex; align-items: center; gap: 6px;
	padding: 5px 10px; font-size: .72rem; font-weight: 600;
	background: var(--idh-accent); color: var(--idh-on-accent);
	border-radius: var(--idh-radius-btn);
}
.carte__marque .jalon { width: .8em; height: .8em; }
.carte__type {
	font-family: var(--idh-font-display); font-variation-settings: "wdth" 82;
	font-size: .8rem; color: var(--idh-ink-soft);
	margin: 16px 0 0; text-transform: uppercase; letter-spacing: .06em;
}
.carte__note { display: inline-flex; align-items: center; gap: 7px; margin-top: 10px; font-size: .84rem; font-variant-numeric: tabular-nums; }
.carte__note b { font-weight: 600; }
.carte__note i { color: var(--idh-accent); font-style: normal; }
.carte__note em { font-style: normal; color: var(--idh-ink-soft); }
.carte__hote { margin: 12px 0 0; padding-left: 12px; border-left: 2px solid var(--idh-accent); font-size: .86rem; color: var(--idh-ink); font-style: italic; }
.carte__liens { display: flex; gap: 14px; margin-top: 14px; font-size: .82rem; }
/* Source / office de tourisme de l'évènement (lien sortant, nouvel onglet). */
.carte__ot { margin: 10px 0 0; font-size: .74rem; color: var(--idh-ink-soft); }
.carte__ot a { color: var(--idh-ink-soft); text-decoration: underline; text-underline-offset: 2px; }
.carte__ot a:hover { color: var(--idh-ink); }

/* Sentier : le tracé GPS (SVG déjà généré par idhotes-rando.php) remplace la
   photo, posé sur le fond de carte IGN du même guide (idhotes_rando_get_events()
   → 'bg_map'). Tracé et fond partagent la MÊME bbox carrée : ils ne restent
   superposés que si les deux occupent EXACTEMENT le même cadre (même taille,
   même position, même mise à l'échelle). D'où : fond en `contain` + SVG en
   `xMidYMid meet`, tous deux en absolute inset:0 — le carré source se pose à
   l'identique dans la vignette 3/4, centré, sans recadrage ni zoom divergent. */
.trace {
	position: relative;
	/* Carré : le fond de carte IGN et le tracé SVG sont tous deux carrés
	   (bbox commune) — une vignette carrée les affiche à pleine taille, sans
	   bande vide ni recadrage qui décalerait le tracé du fond. */
	aspect-ratio: 1; width: 100%;
	border-radius: var(--idh-radius);
	background: var(--idh-bg-alt);
	border: 1px solid var(--idh-line);
	overflow: hidden;
}
/* Sélecteurs à double classe : passent devant `.carte img` (photos des
   autres cartes du même carrousel), qui sinon réimpose object-fit:cover
   + aspect-ratio au fond de carte et casse l'alignement avec le tracé. */
.trace .trace__fond { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; border-radius: 0; z-index: 0; }
.trace .idhotes-rando__trace { position: absolute; inset: 0; width: 100%; height: 100%; z-index: 1; }
.trace > svg:not(.idhotes-rando__trace) {
	position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
	z-index: 1; width: 34px; height: 34px; color: var(--idh-ink-soft);
}

/* Agenda : bloc date à la place de l'image. Avec image (affiche du JSON ou,
   à défaut, photo générique du type — idhotes-agenda.php) : la photo passe
   en fond flouté sous un voile à la couleur primaire (50 %), la date reste
   lisible par-dessus — mêmes rôles que .idhotes-agenda__media--generique. */
.carte--date .date {
	position: relative;
	aspect-ratio: 3 / 4; width: 100%;
	border-radius: var(--idh-radius);
	overflow: hidden;
	background: var(--idh-primary); color: var(--idh-on-primary);
	display: flex; flex-direction: column; align-items: center; justify-content: center;
	gap: 2px; text-align: center;
}
.carte--date .date--photo { background-size: cover; background-position: center; }
.carte--date .date--photo::before {
	content: ""; position: absolute; inset: -12px;
	background-image: inherit; background-size: cover; background-position: center;
	filter: blur(5px);
}
.carte--date .date--photo::after { content: ""; position: absolute; inset: 0; background: var(--idh-primary); opacity: .5; }
.date__num, .date__mois, .date__jour { position: relative; z-index: 1; }
.date__num { font-family: var(--idh-font-display); font-size: clamp(2.6rem, 4vw, 3.6rem); line-height: .9; letter-spacing: -.05em; }
.date__mois { font-size: .84rem; text-transform: uppercase; letter-spacing: .14em; opacity: .8; }
.date__jour { font-size: .78rem; opacity: .6; margin-top: 8px; }

@media (max-width: 760px) {
	/* Les 3 onglets ne tiennent plus sur une ligne : ils passent à la ligne
	   (wrap) plutôt que de défiler hors écran — le 3e (« Nos restaurants »)
	   était invisible, personne ne pense à faire défiler un rang d'onglets. */
	.onglets { flex-wrap: wrap; }
	/* Onglets réduits (un <button> thème/Elementor impose sinon sa propre
	   taille : !important sur font-size, comme background/color/border-radius). */
	.onglet { font-size: .78rem !important; padding: 7px 12px; gap: 6px; }
	.onglet span { font-size: .68rem; padding: 1px 6px; }
}

/* --- Grille de photos ------------------------------------------------------ */
.mosaique__grille { padding-inline: var(--idh-cadre, var(--rail)); display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: clamp(150px, 17vw, 225px); gap: clamp(10px, 1.3vw, 16px); }

/* Chaque case REMPLIT sa zone (jamais de vide) : figure passe en grid, son
   enfant direct (img, ou <a> pour la case cliquable de [idh_destination])
   est étiré en grid-area 1/1 avec align-self/justify-self:stretch EXPLICITES
   — sans ça une image loading="lazy" pas encore chargée n'a pas de taille
   intrinsèque et retombe à 0 (même bug que .maison__media / .produits--feature,
   voir produits.css). Un simple width/height:100% ne suffit pas : la hauteur
   de figure vient de l'étirement de grille, pas d'une propriété height
   explicite, donc un height:100% en % ne peut pas se résoudre. */
/* figure = cellule de grille, overflow VISIBLE : la légende (figcaption) est
   posée par-dessus SANS être rognée par la géométrie du kit (galet Cocon,
   sommet Montagne, cercle…). Seule .mosaique__photo (l'image) porte
   overflow:hidden + --idh-media-radius / --idh-media-clip. */
.mosaique figure { position: relative; margin: 0; overflow: visible; display: grid; }
.mosaique figure > a { grid-area: 1 / 1; position: relative; display: grid; color: inherit; text-decoration: none; }
.mosaique__photo {
	grid-area: 1 / 1; align-self: stretch; justify-self: stretch;
	min-width: 0; min-height: 0; display: grid;
	overflow: hidden;
	border-radius: var(--idh-media-radius);
	clip-path: var(--idh-media-clip, none);
	/* PAS de background : un aplat --idh-bg-alt déborderait la forme du kit
	   (halo gris rectangulaire autour du galet/cercle). */
}
.mosaique__photo > img { grid-area: 1 / 1; align-self: stretch; justify-self: stretch; min-width: 0; min-height: 0; }
/* Chaque niveau de la pile figure > a > .mosaique__photo cale sa rangée interne
   sur la hauteur DÉFINIE de son parent (minmax(0,1fr)) au lieu de grandir
   jusqu'à la hauteur naturelle de l'<img>. Sans ça, dans un widget Elementor où
   « .elementor img{height:auto} » rend l'image à sa taille native, la 1re case
   (span 2, plus haute) déborde par le bas — .mosaique figure est overflow:visible
   pour la légende — et se superpose aux cases suivantes ([idh_lieux]). */
.mosaique figure,
.mosaique figure > a,
.mosaique__photo { grid-template-rows: minmax(0, 1fr); }
.mosaique figure:nth-child(1) { grid-column: span 2; grid-row: span 2; }
.mosaique figure:nth-child(6) { grid-column: span 2; }
.mosaique__grille img { object-fit: cover; display: block; transition: transform 1.1s cubic-bezier(.2,.7,.2,1); }
.mosaique figure:hover .mosaique__photo img { transform: scale(1.06); }
/* Posée par-dessus l'image, centrée en bas : reste lisible et entière même
   quand le kit rogne l'image en cercle / galet / sommet (elle n'est PAS
   enfant de .mosaique__photo). Peut légèrement déborder l'image — voulu. */
.mosaique figcaption {
	position: absolute; left: 50%; bottom: 12px; transform: translateX(-50%);
	z-index: 2; max-width: calc(100% - 20px);
	color: #fff; background: rgba(17,26,22,.72); padding: 8px 12px; font-size: .78rem; backdrop-filter: blur(8px);
	text-align: center;
	/* Même rayon que les boutons de la charte (IDH · 1 → réglages généraux,
	   idh_charte_rayon_bouton → --idh-radius-btn, includes/tokens.php). */
	border-radius: var(--idh-radius-btn);
}
.mosaique figcaption b { display: block; font-family: var(--idh-font-display); font-size: .98rem; font-weight: 600; margin-bottom: 2px; }

@media (max-width: 1000px) { .mosaique__grille { grid-template-columns: 1fr 1fr; } }
@media (max-width: 820px)  {
	.mosaique__grille { grid-auto-rows: 150px; }
	.mosaique figure:nth-child(1), .mosaique figure:nth-child(6) { grid-column: span 2; }
	/* [idh_destination] mobile : les 4 petites cases sur 2 rangées (hauteur
	   doublée), l'image remplit (object-fit:cover déjà posé). */
	.mosaique[aria-label="La destination"] figure:not(:first-child) { grid-row: span 2; }
	/* Sur petit écran, le pavé sombre de la légende cachait une trop grande
	   partie de la photo ([idh_destination] / [idh_lieux]). On retire le
	   fond et on porte la lisibilité par une ombre sous le texte. */
	.mosaique figcaption {
		background: none;
		backdrop-filter: none;
		padding: 0 2px;
		text-shadow: 0 1px 4px rgba(0,0,0,.9), 0 3px 14px rgba(0,0,0,.75);
	}
}

/* ==========================================================================
   AVIS — [idh_avis]
   ========================================================================== */

.avis { background: var(--idh-bg-alt); padding: clamp(70px, 10vh, 120px) var(--idh-cadre); position: relative; z-index: 1; }
.avis__chiffres { display: flex; flex-wrap: wrap; gap: 14px 46px; align-items: baseline; padding-bottom: 34px; border-bottom: 1px solid var(--idh-line); font-variant-numeric: tabular-nums; }
.avis__chiffres strong { font-family: var(--idh-font-display); font-size: clamp(2.4rem, 4.4vw, 3.4rem); font-weight: 700; font-variation-settings: "wdth" 82; letter-spacing: -0.04em; color: var(--idh-title); }
.avis__chiffres span { color: var(--idh-ink-soft); font-size: .93rem; }

.temoignages { display: grid; grid-template-columns: repeat(3, 1fr); gap: clamp(26px, 4vw, 56px); margin-top: 44px; }
.temoignage { margin: 0; display: flex; flex-direction: column; }
.temoignage__photo { margin: 0 0 20px; overflow: hidden; border-radius: var(--idh-media-radius, var(--idh-radius)); }
.temoignage__photo img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; transition: transform 1s cubic-bezier(.2,.7,.2,1); }
.temoignage:hover .temoignage__photo img { transform: scale(1.04); }
.temoignage blockquote { margin: 0; font-family: var(--idh-font-display); font-size: 1.16rem; font-weight: 400; font-variation-settings: "wdth" 100; line-height: 1.42; letter-spacing: -0.012em; color: var(--idh-title); }
.temoignage figcaption { display: flex; align-items: center; gap: 12px; margin-top: 16px; font-size: .86rem; color: var(--idh-ink-soft); }
.temoignage__initiales {
	width: 38px; height: 38px; flex: 0 0 38px; border-radius: 50%; display: grid; place-items: center;
	background: var(--idh-primary); color: var(--idh-on-primary);
	font-family: var(--idh-font-display); font-size: .86rem; font-weight: 600; letter-spacing: .02em;
}
.temoignage__note { margin-left: auto; color: var(--idh-accent); font-size: .86rem; white-space: nowrap; }

@media (max-width: 1000px) {
	.temoignages { grid-template-columns: 1fr 1fr; }
	/* Tablette + mobile : 2 avis seulement. */
	.temoignages .temoignage:nth-child(n+3) { display: none; }
}
@media (max-width: 700px)  { .temoignages { grid-template-columns: 1fr; } }

/* ==========================================================================
   DISPO — [idh_dispo]
   ========================================================================== */

.dispo { padding: clamp(80px, 12vh, 140px) var(--idh-cadre); display: grid; grid-template-columns: 1fr 1fr; gap: clamp(40px, 7vw, 90px); align-items: start; }
/* Sans quoi le calendrier WPBS (rangées min-width: 987px) empêche la colonne de
   se réduire et fait déborder la page — l'ascenseur horizontal reste interne à
   .wpbs-overview-inner. */
.dispo > * { min-width: 0; }
.dispo__photo { margin: 0 0 26px; overflow: hidden; border-radius: var(--idh-media-radius, var(--idh-radius)); }
.dispo__photo img { width: 100%; aspect-ratio: 16 / 9; object-fit: cover; display: block; transition: transform 1.4s cubic-bezier(.2,.7,.2,1); }
.dispo__photo:hover img { transform: scale(1.04); }
.dispo__texte p { color: var(--idh-ink-soft); margin-top: 20px; }
.dispo__legende { display: flex; flex-wrap: wrap; gap: 22px; margin-top: 26px; font-size: .84rem; color: var(--idh-ink-soft); }
.dispo__legende span { display: inline-flex; align-items: center; }
/* Bouton posé SOUS le calendrier, pleine largeur de la section. */
.dispo__action { grid-column: 1 / -1; margin: clamp(24px, 3.5vh, 34px) 0 0; }

/* Pastilles calées sur les couleurs réelles du plugin (pages.js lit la légende
   WPBS masquée et écrit --idh-dispo-libre / --idh-dispo-pris ici). Les valeurs
   ci-dessous ne sont qu'un repli si la lecture échoue. */
.puce { display: inline-block; width: 14px; height: 14px; margin-right: 9px; border: 1px solid rgba(18, 26, 23, .12); border-radius: 3px; background: var(--idh-bg-alt); }
.puce--libre { background: var(--idh-dispo-libre, #dcf5cc); border-color: rgba(18, 26, 23, .08); }
.puce--pris  { background: var(--idh-dispo-pris, #ffc0bd); border-color: rgba(18, 26, 23, .08); }

/* Contenant du calendrier (plugin tiers, injecté par idh_slot()) — sans cadre
   ni fond : la section .dispo porte déjà les siens et son rythme vertical. */
.wpbs-slot { border: 0; padding: 0; background: transparent; }
/* Widgets tiers collés en <iframe>+<script> brut dans idh_produit_calendrier /
   idh_accueil_dispo_calendrier (ex. carrousel agenda concept-gwazad.fr) :
   l'iframe n'a pas de height fixe, elle est réglée par un postMessage envoyé
   APRÈS chargement (`iframe.style.height = …`) — tant qu'il n'est pas reçu
   (ou s'il ne l'est jamais, selon le fournisseur), l'iframe retombe sur la
   hauteur par défaut du navigateur (~150 px), très courte. min-height pose
   un plancher raisonnable en attendant, SANS !important : le postMessage du
   widget peut toujours pousser plus haut. max-height:none!important est un
   filet séparé, pour le thème Twenty Twenty-One (assets/js/responsive-
   embeds.js) qui pose un max-height calculé sur TOUT iframe ayant des
   attributs HTML width/height (pensé pour les embeds vidéo 16/9) — sans
   effet sur l'embed ci-dessus (qui n'a pas ces attributs) mais utile si un
   futur calendrier/widget en a. */
.wpbs-slot iframe { min-height: 520px; max-height: none !important; }

/* Légende native WPBS : gardée dans le DOM (pages.js y lit les couleurs) mais
   retirée du flux visuel — [idh_dispo] pose la sienne, à gauche (.dispo__legende). */
.dispo .wpbs-legend {
	position: absolute !important; width: 1px !important; height: 1px !important;
	padding: 0 !important; margin: -1px !important; overflow: hidden !important;
	clip: rect(0 0 0 0) !important; border: 0 !important;
}

/* Panorama multi-logements : la vue d'ensemble WPBS défile horizontalement et
   réclame toute la largeur — la section passe en une colonne. */
.dispo--panorama { grid-template-columns: 1fr; gap: clamp(28px, 4vw, 44px); }
.dispo--panorama .dispo__texte { max-width: 64ch; }

@media (max-width: 1040px) { .dispo { grid-template-columns: 1fr; } }

/* ==========================================================================
   APPEL FINAL — [idh_cta]
   ========================================================================== */

.final { position: relative; min-height: 74vh; display: flex; align-items: center; color: #fff; overflow: hidden; }
.final__media { position: absolute; inset: -12% 0 -12%; }
.final__media img { width: 100%; height: 100%; object-fit: cover; }
.final::after { content: ""; position: absolute; inset: 0; background: rgba(24,34,29,.5); }
.final__corps { position: relative; z-index: 2; padding: 60px var(--idh-cadre); }
.final h2 { color: #fff; }
.final .section-sub { color: rgba(255,255,255,.78); }
.final p { margin: 20px 0 32px; max-width: 40ch; }
.final .bouton { background: var(--idh-bg); color: var(--idh-ink); border-color: var(--idh-bg); }
.final .bouton:hover { background: #fff; border-color: #fff; }
