/*
Theme Name:   Publisoft
Theme URI:    https://publisoft-conseil.fr
Description:  Thème enfant de GeneratePress pour Publisoft, agence d'acquisition digitale et de création. Les couleurs et la typographie sont pilotées depuis le Customizer : ce fichier ne contient que ce qui n'est pas paramétrable.
Author:       Publisoft
Template:     generatepress
Version:      2.0.0
License:      GNU General Public License v2 or later
Text Domain:  publisoft-conseil
*/

/* ==========================================================================
   Repères — toutes les couleurs viennent des couleurs globales GeneratePress
   ========================================================================== */
:root {
	--pc-filet: #E6E2F0;
	--pc-r-s: 12px;
	--pc-r-m: 18px;
	--pc-r-l: 24px;
	--pc-r-xl: 32px;
	--pc-ombre: 0 2px 12px rgba(20, 15, 26, .05);
	--pc-ombre-forte: 0 26px 54px rgba(20, 15, 26, .15);
}

/* ==========================================================================
   En-tête flottant en pilule
   ========================================================================== */
.site-header {
	background: transparent;
	padding-block: 16px;
}
.site-header > .inside-header {
	background: var(--base-3);
	border-radius: 999px;
	padding: 11px 12px 11px 30px;
	box-shadow: 0 4px 24px rgba(20, 15, 26, .07);
	align-items: center;
}
.main-navigation .main-nav > ul > li > a { border-radius: 999px; }
.main-navigation .main-nav > ul > li > a:hover { background: var(--base); }

/* Sous-menus : carte blanche arrondie */
.main-navigation .main-nav ul ul {
	border-radius: var(--pc-r-m);
	padding: 12px;
	box-shadow: 0 18px 46px rgba(20, 15, 26, .13);
	border: 0;
	min-width: 290px;
}
.main-navigation .main-nav ul ul li a {
	border-radius: var(--pc-r-s);
	padding: 11px 15px;
}
.main-navigation .main-nav ul ul li a:hover { background: var(--base); }

/* ==========================================================================
   Boutons en pilule
   ========================================================================== */
.gb-button,
.wp-block-button__link,
.wp-block-search__button,
button[type="submit"],
input[type="submit"] {
	border-radius: 999px;
	font-weight: 600;
	transition: transform .28s, background-color .28s, box-shadow .28s;
}
.gb-button:hover,
.wp-block-button__link:hover,
button[type="submit"]:hover {
	transform: translateY(-2px);
	box-shadow: 0 12px 28px rgba(121, 62, 246, .28);
}
/* Bouton secondaire : contour seul, sans le fond gris par défaut du thème */
.wp-block-button.is-style-outline .wp-block-button__link {
	background-color: transparent !important;
	border: 1.5px solid var(--pc-filet);
	color: var(--contrast);
}
.wp-block-button.is-style-outline .wp-block-button__link:hover {
	background-color: var(--contrast) !important;
	border-color: var(--contrast);
	color: var(--base-3);
}

/* ==========================================================================
   Cartes — survol et surélévation
   ========================================================================== */
.pc-carte {
	border-radius: var(--pc-r-l);
	overflow: hidden;
	box-shadow: var(--pc-ombre);
	transition: transform .35s cubic-bezier(.2, .7, .3, 1), box-shadow .35s;
}
.pc-carte:hover {
	transform: translateY(-6px);
	box-shadow: var(--pc-ombre-forte);
}
.pc-carte img { transition: transform .55s cubic-bezier(.2, .7, .3, 1); }
.pc-carte:hover img { transform: scale(1.05); }

/* Cartes de famille d'expertise : surélévation plus marquée */
.pc-famille:hover { transform: translateY(-8px); }

/* ==========================================================================
   Étiquettes de catégorie et puces de service
   ========================================================================== */
.pc-etiquette {
	display: inline-block;
	background: var(--base);
	color: var(--accent);
	padding: 5px 12px;
	border-radius: 999px;
	font-size: 12.5px;
	font-weight: 600;
	line-height: 1.4;
}

/* ==========================================================================
   Bandeau d'archive : image assombrie, texte en surimpression
   ========================================================================== */
.pc-bandeau {
	position: relative;
	border-radius: var(--pc-r-xl);
	overflow: hidden;
	isolation: isolate;
}
.pc-bandeau::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	background: rgba(20, 15, 26, .72);
}
.pc-bandeau img {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	z-index: -2;
}

/* ==========================================================================
   Réalisations
   ========================================================================== */
.pc-cas { border-radius: var(--pc-r-xl); overflow: hidden; box-shadow: var(--pc-ombre); transition: box-shadow .4s; }
.pc-cas:hover { box-shadow: 0 24px 54px rgba(20, 15, 26, .14); }
.pc-cas-visuel img { border-radius: var(--pc-r-m); box-shadow: 0 14px 34px rgba(20, 15, 26, .14); }
.pc-chiffres { border-block: 1px solid var(--pc-filet); }

/* ==========================================================================
   Formulaire
   ========================================================================== */
.gb-form-field__input {
	border-radius: 999px !important;
	border: 1.5px solid var(--pc-filet) !important;
	padding: 14px 20px !important;
	font-family: inherit;
	transition: border-color .24s, box-shadow .24s;
}
textarea.gb-form-field__input {
	border-radius: var(--pc-r-m) !important;
	min-height: 160px;
	line-height: 1.6;
}
.gb-form-field__input:focus {
	border-color: var(--accent) !important;
	box-shadow: 0 0 0 4px rgba(121, 62, 246, .12) !important;
	outline: none;
}
.gb-form-field__label { font-weight: 600 !important; font-size: 13px !important; }

/* ==========================================================================
   Pied de page
   ========================================================================== */
.site-footer .pc-pied a { text-decoration: none; transition: color .22s; }
.site-info { display: none; } /* le pied de page personnalisé porte déjà la mention */

/* ==========================================================================
   Divers
   ========================================================================== */
.pc-a-completer {
	background: #FDF6E9;
	border-left: 3px solid #C8922F;
	padding: 16px 20px;
	border-radius: 0 6px 6px 0;
	font-size: 15px;
}
img { border-radius: inherit; }
.pc-arrondi img { border-radius: var(--pc-r-l); }

/* ==========================================================================
   Responsive — le menu mobile de GeneratePress prend le relais sous 1000 px
   ========================================================================== */
@media (max-width: 1024px) {
	.site-header > .inside-header {
		border-radius: var(--pc-r-l);
		padding: 12px 16px;
	}
	.main-navigation .main-nav ul ul { box-shadow: none; min-width: 0; padding: 0; }
}

/* Liens de catégories sous le bandeau d'archive */
.pc-liens-categories p { margin: 0; }

.pc-liens-categories a { display:inline-block; text-decoration:none; padding:9px 18px;
	border:1px solid var(--pc-filet); border-radius:999px; color:var(--contrast-2); transition:.25s; }
.pc-liens-categories a:hover { border-color:var(--accent); color:var(--accent); }
.main-navigation .main-nav ul li.gp-menu-bouton > a:hover {
	background-color: var(--contrast);
	color: #fff;
	transform: translateY(-2px);
	box-shadow: 0 10px 24px rgba(121, 62, 246, .30);
}
/* sur mobile, le bouton occupe toute la largeur du menu déroulant */
@media (max-width: 1024px) {
	.main-navigation .main-nav ul li.gp-menu-bouton > a {
		margin: 14px 0 4px;
		text-align: center;
		justify-content: center;
	}
}

/* Pas d'espace sous la dernière carte d'une colonne */
.pc-service:last-child { margin-bottom: 0 !important; }

/* Bouton d'envoi du formulaire : couleur d'accent */
.gb-form button[type="submit"], .gb-form .gb-button {
	background-color: var(--accent) !important;
	color: #fff !important;
	border-radius: 999px !important;
	font-weight: 600;
	padding: 14px 34px;
}
.gb-form button[type="submit"]:hover, .gb-form .gb-button:hover {
	background-color: var(--contrast) !important;
}

/* Écart entre les cartes de service */
.pc-grille-services { gap: 16px !important; }

/* Espace entre les filtres de catégorie et la grille d'articles */
.generate-columns-container { margin-top: 22px; }

/* ==========================================================================
   Cartes d’article : hauteur constante, quel que soit le contenu
   La structure vient du gabarit Content Template (.pc-carte)
   ========================================================================== */
.generate-columns-container { align-items: stretch; }
.generate-columns-container > .generate-columns { display: flex; }
article.dynamic-content-template { display: flex; width: 100%; }

article.dynamic-content-template > .pc-carte {
	display: flex;
	flex-direction: column;
	width: 100%;
}
.pc-carte > .wp-block-group__inner-container {
	display: flex;
	flex-direction: column;
	height: 100%;
}

/* L’image garde toujours le même format */
.pc-carte .wp-block-post-featured-image { margin: 0; }
.pc-carte .wp-block-post-featured-image img {
	width: 100%;
	aspect-ratio: 3 / 2;
	object-fit: cover;
	display: block;
}

/* Le corps occupe tout l’espace restant */
.pc-carte .wp-block-group__inner-container > .wp-block-group {
	display: flex;
	flex-direction: column;
	flex: 1;
}

/* Titre : deux lignes exactement */
.pc-carte .wp-block-post-title {
	display: -webkit-box;
	-webkit-line-clamp: 2;
	-webkit-box-orient: vertical;
	overflow: hidden;
	min-height: calc(2 * 1.32em);
}

/* Extrait : trois lignes exactement */
.pc-carte .wp-block-post-excerpt {
	flex: 1;
}
.pc-carte .wp-block-post-excerpt__excerpt {
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
	min-height: calc(3 * 1.6em);
}

/* La date reste en bas */
.pc-carte .wp-block-post-date { margin-top: auto; padding-top: 12px; }

/* Sur mobile aussi, la carte impose sa taille au contenu */
@media (max-width: 768px) {
	.pc-carte .wp-block-post-title {
		-webkit-line-clamp: 2;
		min-height: calc(2 * 1.32em);
	}
	.pc-carte .wp-block-post-excerpt__excerpt {
		-webkit-line-clamp: 3;
		min-height: calc(3 * 1.6em);
	}
}
/* ==========================================================================
   Bandeau et filtres sur mobile
   ========================================================================== */
@media (max-width: 780px) {

	/* Le bandeau occupe toute la largeur, sans angles arrondis */
	.wp-block-cover {
		border-radius: 0 !important;
		margin-inline: calc(50% - 50vw);
		width: 100vw;
		max-width: 100vw;
		padding-inline: 24px !important;
	}
	.wp-block-cover img { border-radius: 0 !important; }

	/* Les filtres défilent horizontalement, sans barre visible,
	   avec un léger dégradé qui signale qu'il y a une suite */
	.pc-liens-categories {
		flex-wrap: nowrap !important;
		justify-content: flex-start !important;
		overflow-x: auto;
		scroll-snap-type: x proximity;
		-webkit-overflow-scrolling: touch;
		scrollbar-width: none;
		padding: 22px 20px 6px !important;
		margin-inline: calc(50% - 50vw);
		width: 100vw;
		max-width: 100vw;
		mask-image: linear-gradient(to right, transparent 0, #000 16px, #000 calc(100% - 26px), transparent 100%);
	}
	.pc-liens-categories::-webkit-scrollbar { display: none; }
	.pc-liens-categories p { scroll-snap-align: start; }
	.pc-liens-categories a {
		white-space: nowrap;
		padding: 10px 18px;
		font-size: 14.5px;
	}
}
/* Bandeau de consentement : mêmes formes que le reste du site */
#cookie-notice .cn-button { border-radius: 999px !important; font-weight: 600; padding: 10px 26px !important; }
#cookie-notice .cn-button:hover { opacity: .9; }
#cookie-notice { font-family: inherit !important; }

/* WordPress impose display:flow-root aux titres de bloc, ce qui neutralise
   le line-clamp : on rétablit la valeur nécessaire. */
.pc-carte .wp-block-post-title,
.pc-carte .wp-block-post-excerpt__excerpt {
	display: -webkit-box !important;
	-webkit-box-orient: vertical;
	overflow: hidden;
}
.pc-carte .wp-block-post-title { -webkit-line-clamp: 2; }
.pc-carte .wp-block-post-excerpt__excerpt { -webkit-line-clamp: 3; }

/* ==========================================================================
   Hauteur fixe des zones de texte des cartes
   Le line-clamp est neutralisé par une règle display de WordPress :
   on impose donc directement la hauteur, ce qui donne le même résultat.
   ========================================================================== */
.pc-carte .wp-block-post-title {
	height: 2.7em;
	overflow: hidden;
	margin-bottom: 10px;
}
.pc-carte .wp-block-post-excerpt {
	height: 4.9em;
	overflow: hidden;
	margin-bottom: 0;
}
.pc-carte .wp-block-post-excerpt__excerpt { margin: 0; }

@media (max-width: 768px) {
	.pc-carte .wp-block-post-title { height: 2.7em; }
	.pc-carte .wp-block-post-excerpt { height: 4.9em; }
}