/*
Theme Name: INOVAFOOD Child
Theme URI: https://inovafood.test/
Description: Child theme of The7 for the INOVAFOOD website. Holds only accessibility and brand fixes; all layout is built with WPBakery and The7 theme options so the site stays editable from wp-admin.
Author: INOVAFOOD
Template: dt-the7
Version: 1.0.0
Text Domain: inovafood
*/

/* ---------------------------------------------------------------------------
 * Accessibility — colour contrast (WCAG AA, 4.5:1 on normal text)
 *
 * Brand accent: a green between the logo green #04D00B and the olive #34421E,
 * replacing The7 "Church" gold. Change the accent in one place here (and in
 * Theme Options > General > Accent colour, which must match --inovafood-accent).
 * The post-meta grey #9a9891 only reached 2.88:1, hence the darker meta grey.
 * ------------------------------------------------------------------------- */

:root {
	--inovafood-accent: #217b16;        /* 5.4:1 on white — buttons, links, menu */
	--inovafood-accent-hover: #1a6312;  /* 7.4:1 on white */
	--inovafood-accent-light: #8bcf7a;  /* 5.8:1 on olive #34421e — text on dark rows */
	--inovafood-meta: #6b6960;        /* 5.3:1 on white — post meta */
}

/* Buttons: white label on the accent green.
   The7 renders solid buttons as ".dt-btn.btn-flat" (plus optional size
   classes), so target the flat variant and the form submits. */
a.dt-btn.btn-flat,
button.dt-btn.btn-flat,
.dt-btn.dt-btn-s,
.dt-btn.dt-btn-m,
.dt-btn.dt-btn-l,
a.dt-btn-s.post-details,
.wpcf7 input[type="submit"],
.wpcf7 button[type="submit"],
.widget .dt-form button[type="submit"],
.widget .dt-form input[type="submit"] {
	background-color: var(--inovafood-accent) !important;
	border-color: var(--inovafood-accent) !important;
	color: #fff !important;
}

a.dt-btn.btn-flat:hover,
button.dt-btn.btn-flat:hover,
.dt-btn.dt-btn-s:hover,
.dt-btn.dt-btn-m:hover,
.dt-btn.dt-btn-l:hover,
a.dt-btn-s.post-details:hover,
.wpcf7 input[type="submit"]:hover,
.wpcf7 button[type="submit"]:hover,
.widget .dt-form button[type="submit"]:hover,
.widget .dt-form input[type="submit"]:hover {
	background-color: var(--inovafood-accent-hover) !important;
	border-color: var(--inovafood-accent-hover) !important;
	color: #fff !important;
}

/* Post / project meta line. */
.entry-meta,
.entry-meta a,
.entry-meta a.author,
.entry-meta .fn,
.entry-meta .entry-date,
.entry-meta .comment-link,
.entry-meta .category-link a {
	color: var(--inovafood-meta) !important;
}

/* Small accent links on light backgrounds. */
.post-entry-content .category-link a:hover,
.entry-meta a:hover {
	color: var(--inovafood-accent-hover) !important;
}

/* Touch targets in the meta line (min 24px). */
.entry-meta > a,
.entry-meta > span > a {
	display: inline-block;
	min-height: 24px;
	line-height: 24px;
}

/* ---------------------------------------------------------------------------
 * Layout polish
 * ------------------------------------------------------------------------- */

/* Keep the three "gamme" cards on the home page the same height. */
.wpb_single_image img {
	width: 100%;
	height: auto;
}

/* List markers: accent green; lighter green on dark rows.
   On a dark WPBakery row, add "inovafood-on-dark" to the row's Extra class name. */
.vc_row .wpb_text_column ul > li::marker {
	color: var(--inovafood-accent);
}

.inovafood-on-dark .wpb_text_column ul > li::marker,
.inovafood-dark .wpb_text_column ul > li::marker,
.pp-olive ul > li::marker {
	color: var(--inovafood-accent-light);
}

/* ---------------------------------------------------------------------------
 * Spacing — 8px grid (8 / 16 / 24 / 32 / 48)
 * Buttons and lists must never sit flush against the text above them.
 * ------------------------------------------------------------------------- */

/* Standalone WPBakery buttons. */
.wpb_wrapper > .btn-align-center,
.wpb_wrapper > .btn-align-left,
.wpb_wrapper > .btn-align-right,
.wpb_wrapper > .dt-btn,
.wpb_wrapper > .ult-new-ib + .dt-btn {
	margin-top: 24px;
}

/* Lists following a paragraph. */
.wpb_text_column p + ul,
.wpb_text_column p + ol,
.uvc-sub-heading + ul,
.vc_row .wpb_text_column ul {
	margin-top: 16px;
}

.wpb_text_column ul > li {
	margin-bottom: 8px;
}

/* Blog / news cards: read-more button. */
.post-entry-content .entry-excerpt + a.dt-btn,
.post-entry-content a.dt-btn,
.post-entry-content a.post-details {
	margin-top: 16px;
}

/* Footer widgets: buttons below paragraphs and forms. */
.widget p + a.dt-btn,
.widget p + .dt-btn,
.widget .dt-form p + button,
.widget .dt-form button[type="submit"],
.widget .dt-form input[type="submit"] {
	margin-top: 16px;
}

/* Contact form 7: breathing room above the submit and after the consent box. */
.wpcf7-form .wpcf7-acceptance {
	display: block;
	margin-bottom: 16px;
}

.wpcf7-form input[type="submit"],
.wpcf7-form button[type="submit"] {
	margin-top: 8px;
}

/* Gap between a section's tagline and the paragraph under it. */
.uvc-sub-heading {
	padding-top: 8px;
}

/* ---------------------------------------------------------------------------
 * Contrast (continued) — found by the automated audit on every page
 * ------------------------------------------------------------------------- */

/* Breadcrumbs and previous/next labels: grey #9a9891 was 2.7:1. */
.breadcrumbs,
.breadcrumbs a,
.breadcrumbs li,
.breadcrumbs span,
.nav-previous .meta-nav,
.nav-next .meta-nav {
	color: var(--inovafood-meta) !important;
}

/* "En savoir plus" read-more links on light cards. */
a.post-details:not(.dt-btn),
a.post-details.details {
	color: var(--inovafood-accent) !important;
}

/* Accent taglines and headings on dark rows (the hero video and the olive bands):
   WPBakery stores them as the light accent #8bcf7a, which passes AA on olive. */
.uvc-sub-heading[style*="c19434"],
.vc_row .uvc-sub-heading[style*="193, 148, 52"] {
	color: var(--inovafood-accent-light) !important;
}

/* Form placeholders. */
::placeholder {
	color: #6b6960 !important;
	opacity: 1;
}

a.post-details:not(.dt-btn):hover {
	color: var(--inovafood-accent-hover) !important;
}

/* ---------------------------------------------------------------------------
 * Title bar → first section: no white gap when the first row has its own
 * background (the theme adds 80px of padding to #main).
 * ------------------------------------------------------------------------- */
#main:has(.wpb-content-wrapper > .vc_row:first-child.vc_row-has-fill) {
	padding-top: 0;
}

#main:has(.wpb-content-wrapper > .vc_row:last-child.vc_row-has-fill) {
	padding-bottom: 0;
}

/* News / blog cards: equal-height cards with the "Lire la suite" button pinned
   to the bottom, so the three buttons share one baseline. */
.dt-css-grid .wf-cell > article,
.dt-css-grid .wf-cell .post-entry-content {
	height: 100%;
}

.dt-css-grid .post-entry-content {
	display: flex;
	flex-direction: column;
}

.dt-css-grid .post-entry-content .entry-excerpt {
	flex: 1 1 auto;
}

.dt-css-grid .post-entry-content a.dt-btn,
.dt-css-grid .post-entry-content a.post-details {
	align-self: flex-start;
}

/* ---------------------------------------------------------------------------
 * Home: INOVAFOOD logo mark above the "travaille avec des fabricants" line.
 * ------------------------------------------------------------------------- */
.inovafood-brandmark img {
	max-width: 280px;
	height: auto;
}

/* ---------------------------------------------------------------------------
 * Contact: responsive embedded map (16:9 on desktop, taller on phones).
 * ------------------------------------------------------------------------- */
.inovafood-map {
	position: relative;
	width: 100%;
	max-width: 100%;
	height: 0;
	padding-bottom: 56.25%;
	overflow: hidden;
	margin-top: 32px;
}

.inovafood-map iframe {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	border: 0;
}

@media (max-width: 600px) {
	.inovafood-map {
		padding-bottom: 100%;
	}
}

/* ---------------------------------------------------------------------------
 * Footer bottom bar: the two links (Mentions légales & RGPD, Contact) stay
 * visible on every screen size. The7's "collapse menu after" option is set to
 * 0px; the theme script still injects its "Menu bas" dropdown label, so the
 * dropdown is hidden here.
 * ------------------------------------------------------------------------- */
#bottom-bar .mini-nav .menu-select {
	display: none !important;
}

/* ---------------------------------------------------------------------------
 * Partner pages: coloured text tiles that alternate with photo tiles.
 * Dark text on every tile colour keeps WCAG AA contrast.
 * ------------------------------------------------------------------------- */
.inovafood-tile,
.inovafood-tile p,
.inovafood-tile h3 {
	color: #222123 !important;
	text-align: center;
}

.inovafood-tile h3 {
	margin-bottom: 16px;
}

/* Lists are always left-aligned; a tile or block that holds a list is
   left-aligned as a whole so headings and bullets share one edge. */
.inovafood-tile ul,
.inovafood-tile ol,
.inovafood-center ul,
.inovafood-center ol {
	display: block;
	text-align: left;
	padding-left: 24px;
	margin-left: 0;
}

.inovafood-tile ul li,
.inovafood-tile ol li {
	text-align: left;
}

.inovafood-tile:has(ul) h3,
.inovafood-tile:has(ul) p,
.inovafood-tile:has(ol) h3,
.inovafood-tile:has(ol) p,
.inovafood-center:has(ul) h2,
.inovafood-center:has(ul) h3,
.inovafood-center:has(ul) p {
	text-align: left;
}

.inovafood-tile a {
	color: #222123 !important;
	text-decoration: underline;
}

/* Photo tiles must not keep the column's inner padding. */
.wpb_column.vc_col-sm-3 > .vc_column-inner[class*="vc_custom"] {
	box-sizing: border-box;
}

/* ---------------------------------------------------------------------------
 * Partner pages — logo sizing.
 *
 * The reference material ships brand and certification logos at their full
 * export size (up to 2500px wide), and WPBakery renders them at that size, so
 * a logo could fill a whole column. Three caps give the page a hierarchy:
 *
 *   .inovafood-partner-logo  the partner's own brand mark   (96px tall)
 *   .inovafood-productlogo   product logos, single badges   (64px tall)
 *   .inovafood-certstrip     wide multi-logo certification strips
 *
 * The caps are on the height, so wide and tall logos end up visually equal.
 * Change the max-height values below to resize every partner page at once.
 * (`.inovafood-brandmark` is a different, home-page class — see above.)
 * ------------------------------------------------------------------------- */

/* Anything untagged: never upscale, and stay inside a sane height. The7 gives
   the portfolio singles the body class `single-portfolio`. */
.single-portfolio .wpb_single_image img {
	width: auto;
	max-width: 100%;
	max-height: 480px;
	object-fit: contain;
}

.wpb_single_image.inovafood-partner-logo img {
	max-width: 100%;
	max-height: 96px;
	width: auto !important;
	height: auto;
}

.wpb_single_image.inovafood-productlogo img {
	max-width: 100%;
	max-height: 64px;
	width: auto !important;
	height: auto;
}

.wpb_single_image.inovafood-certstrip img {
	max-width: 100%;
	max-height: 72px;
	width: auto !important;
	height: auto;
}

@media (max-width: 600px) {
	.wpb_single_image.inovafood-partner-logo img {
		max-height: 72px;
	}

	.wpb_single_image.inovafood-productlogo img,
	.wpb_single_image.inovafood-certstrip img {
		max-height: 52px;
	}
}

/* Most brand logos are dark ink on a white or transparent background, so on a
   dark photo band they are presented as a deliberate white badge instead of a
   bare rectangle or an illegible mark. */
.inovafood-dark .wpb_single_image.inovafood-partner-logo img,
.inovafood-dark .wpb_single_image.inovafood-productlogo img {
	background: #fff;
	border-radius: 8px;
	padding: 10px 16px;
	box-sizing: content-box;
}

/* Product shots of a powder or a granulate: a round thumbnail reads as a
   sample, where a large square reads as a background texture. */
.wpb_single_image.inovafood-round img {
	width: 200px !important;
	height: 200px !important;
	max-width: 200px;
	max-height: none;
	border-radius: 50%;
	object-fit: cover;
}

/* A logo above a left-aligned list follows the text, not the column centre. */
.inovafood-tile:has(ul) .wpb_single_image,
.inovafood-tile:has(ol) .wpb_single_image {
	text-align: left;
}

/* CTA blocks: each button sits in its own text block, which put 59px between
   two stacked buttons. 16px makes them read as one pair. */
.inovafood-center .wpb_text_column:has(.dt-btn) {
	margin-bottom: 0;
}

.inovafood-center .wpb_text_column:has(.dt-btn) .dt-btn {
	margin-top: 16px;
}

/* Partner pages: centred text blocks and sections with a photo background. */
.inovafood-center,
.inovafood-center p,
.inovafood-center h2,
.inovafood-center h3 {
	text-align: center;
}

.inovafood-dark,
.inovafood-dark p,
.inovafood-dark li,
.inovafood-dark h2,
.inovafood-dark h3,
.inovafood-dark strong {
	color: #fff !important;
}

.inovafood-dark a:not(.dt-btn) {
	color: #fff !important;
	text-decoration: underline;
}

/* Arandovo: certification badges are shown at a moderate size. */
.inovafood-certs .wpb_single_image img {
	max-width: 100%;
	max-height: 96px;
	width: auto;
}

/* ---------------------------------------------------------------------------
 * À propos — "Nos engagements": four rows, each with an icon beside its title.
 * Light accent green (#8bcf7a) and white on olive #34421e both pass WCAG AA.
 * ------------------------------------------------------------------------- */
.inovafood-engagement {
	display: flex;
	align-items: flex-start;
	gap: 24px;
	padding: 24px 0;
	border-top: 1px solid rgba(255, 255, 255, 0.18);
	text-align: left;
}

.inovafood-engagement:first-child {
	border-top: 0;
}

.inovafood-eicon {
	flex: 0 0 64px;
	width: 64px;
	height: 64px;
	border-radius: 50%;
	background: var(--inovafood-accent-light);
	color: #34421e;
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 26px;
}

.inovafood-etext {
	flex: 1 1 auto;
}

.inovafood-etext h3 {
	margin: 0 0 8px;
	color: var(--inovafood-accent-light) !important;
	text-align: left;
}

.inovafood-etext p {
	margin: 0;
	color: #fff !important;
	text-align: left;
}

@media (max-width: 600px) {
	.inovafood-engagement {
		gap: 16px;
	}

	.inovafood-eicon {
		flex-basis: 48px;
		width: 48px;
		height: 48px;
		font-size: 20px;
	}
}

/* À propos — client's "Notre engagement" paragraphs, above the four cards. */
.inovafood-engage-intro {
	max-width: 760px;
	margin: 0 auto 32px !important;
	text-align: center;
}

.inovafood-engage-intro p {
	color: #fff !important;
	font-size: 18px;
	line-height: 1.6;
}

/* À propos — "Nos domaines d'activité": six icon cards. */
.inovafood-domains {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 24px;
}

.inovafood-domain {
	display: flex;
	align-items: center;
	gap: 18px;
	padding: 24px;
	border-radius: 8px;
	background: #fff;
	box-shadow: 0 2px 12px rgba(34, 33, 35, 0.06);
}

.inovafood-dicon {
	flex: 0 0 56px;
	width: 56px;
	height: 56px;
	border-radius: 50%;
	background: #34421e;
	color: var(--inovafood-accent-light);
	display: flex;
	align-items: center;
	justify-content: center;
	font-size: 22px;
}

.inovafood-domain p {
	margin: 0;
	font-weight: 600;
	line-height: 1.45;
}

@media (max-width: 1023px) {
	.inovafood-domains {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 767px) {
	.inovafood-domains {
		grid-template-columns: 1fr;
		gap: 14px;
	}

	.inovafood-domain {
		padding: 18px;
	}
}

/* Produits — dairy product list, one underlined line per product. */
ul.inovafood-prodlist {
	margin: 0 0 10px;
	padding: 0;
	list-style: none;
}

ul.inovafood-prodlist li {
	margin: 0;
	padding: 12px 0;
	border-bottom: 1px solid rgba(52, 66, 30, 0.25);
	font-weight: 600;
	letter-spacing: 0.02em;
	text-transform: uppercase;
	font-size: 15px;
}

ul.inovafood-prodlist li::before {
	display: none;
}

.inovafood-proddesc {
	display: block;
	margin-top: 6px;
	font-weight: 400;
	letter-spacing: 0;
	text-transform: none;
	font-size: 16px;
	line-height: 1.6;
}

/* Produits — small titles above the starch lists. */
.inovafood-listtitle {
	margin: 10px 0 12px;
	font-size: 20px;
}

.wpb_text_column:has(.inovafood-listtitle:only-child) {
	margin-bottom: 0;
}

/* Produits — starch list: one list split into two balanced columns. The
   browser fills the left column first, so it is never shorter than the right. */
ul.inovafood-cols2 {
	column-count: 2;
	column-gap: 30px;
	column-fill: balance;
}

ul.inovafood-cols2 li {
	break-inside: avoid;
}

/* 6 items left, 4 right: the right-hand names are longer and wrap. */
ul.inovafood-cols2 li:nth-child(7) {
	break-before: column;
}

@media (max-width: 600px) {
	ul.inovafood-cols2 {
		column-count: 1;
	}

	ul.inovafood-cols2 li:nth-child(7) {
		break-before: auto;
	}
}

/* Produits — range rows (photo + text): from tablet up, the photo fills the
   whole height of its column, so it is never shorter than the text beside it.
   Phones keep the stacked layout. */
@media (min-width: 768px) {
	.inovafood-range > .wpb_column:has(.wpb_single_image) > .vc_column-inner {
		position: relative;
		min-height: 360px;
	}

	.inovafood-range > .wpb_column:has(.wpb_single_image) .wpb_single_image {
		position: absolute;
		top: 35px;
		right: 15px;
		bottom: 35px;
		left: 15px;
		margin: 0 !important;
	}

	.inovafood-range .wpb_single_image figure,
	.inovafood-range .wpb_single_image .vc_figure,
	.inovafood-range .wpb_single_image .vc_single_image-wrapper {
		display: block;
		width: 100%;
		height: 100%;
	}

	.inovafood-range .wpb_single_image img {
		width: 100%;
		height: 100% !important;
		object-fit: cover;
		object-position: center;
	}
}

/* Produits — anchors reached from the "Produits" dropdown: keep the section
   title clear of the sticky header. */
#ingredients-laitiers,
#mozzarella,
#poudre-de-cacao,
#amidons-pomme-de-terre,
#ingredients-fonctionnels,
#ingredients-nutritionnels,
#ingredients-bio {
	scroll-margin-top: 90px;
}

/* GTranslate (flag-only floating switcher, plugin default look): nudged to the
   right edge, and The7's back-to-top button sits above it instead of under it. */
.gt_switcher_wrapper {
	right: 8px !important;
	bottom: 12px !important;
}

.scroll-top {
	bottom: 64px !important;
}

/* Benexia: the three illustrations under the Huiles / Cosmétique / Margarine
   lists share one size and sit on one baseline, so the row reads as a grid
   even though the three lists are different lengths. */
.inovafood-trio > .vc_column_container > .vc_column-inner > .wpb_wrapper {
	display: flex;
	flex-direction: column;
	height: 100%;
}

.inovafood-trio .wpb_single_image {
	margin-top: auto;
}

/* WPBakery's image wrapper is an inline-block that shrinks to the file's own
   width, so `width: 100%` on the image alone would resolve to that width. */
.inovafood-trio .vc_figure,
.inovafood-trio .vc_single_image-wrapper {
	display: block;
	width: 100%;
}

.inovafood-trio .wpb_single_image img {
	width: 100% !important;
	height: 220px !important;
	max-width: none;
	max-height: none;
	object-fit: cover;
	border-radius: 4px;
}

/* GTranslate flags: small gap between the two flags (change 4px to adjust). */
.gt_switcher_wrapper,
.gtranslate_wrapper {
	display: flex !important;
	align-items: center;
	gap: 0;
}

.gt_switcher_wrapper a.glink,
.gtranslate_wrapper a.glink,
.widget_gtranslate a.glink {
	margin: 0 4px 0 0 !important;
}

.gt_switcher_wrapper a.glink:last-child,
.gtranslate_wrapper a.glink:last-child,
.widget_gtranslate a.glink:last-child {
	margin-right: 0 !important;
}

/* Phones: the floating GTranslate flags (fixed, bottom right) cover form fields and
   text while scrolling. The footer keeps its own language selector on every size. */
@media (max-width: 778px) {
	.gt_switcher_wrapper {
		display: none !important;
	}

	/* Footer links are only 16–18 px tall on phones: pad them to a 24 px touch target. */
	#footer .widget a:not(.dt-btn),
	#bottom-bar a {
		display: inline-block;
		min-height: 24px;
		padding: 3px 0;
	}
}

/* Footer (desktop, above The7's 778px collapse): the widgets are inline-blocks, so
   "Langue / Language" started below the tallest widget (the form + reCAPTCHA note).
   A grid lets the middle and right widgets span two rows, so the language widget
   sits right under the contact details in the first column. */
@media (min-width: 779px) {
	#footer .wf-container {
		display: grid;
		grid-template-columns: 1fr 2fr 1fr;
		grid-template-rows: auto 1fr;
		align-items: start;
	}

	#footer .wf-container > .wf-cell {
		width: auto;
	}

	#footer .wf-container > .widget_presscore-contact-info-widget {
		grid-column: 1;
		grid-row: 1;
	}

	#footer .wf-container > .widget_text {
		grid-column: 2;
		grid-row: 1 / span 2;
	}

	#footer .wf-container > .widget_presscore-contact-form-widget {
		grid-column: 3;
		grid-row: 1 / span 2;
	}

	#footer .wf-container > .widget_gtranslate {
		grid-column: 1;
		grid-row: 2;
	}
}

/* Home "Nos applications / Nos domaines d'expertise": the right-hand list is
   shorter, so the pair looked left-heavy. Nudge the group to the right. */
@media (min-width: 992px) {
	.inovafood-apps {
		position: relative;
		left: 16px;
	}
}

/* ===========================================================================
 * PARTNER PAGES — design system (classes prefixed `pp-`)
 *
 * Every partner page is built from the same WPBakery blocks, each tagged with
 * an "Extra class name" in its settings:
 *
 *   pp-hero        photo band with the partner name (row; photo in Design Options)
 *   pp-section     standard section spacing (row) — add pp-cream / pp-olive for a fill
 *   pp-split       text beside a photo (row) — columns pp-split-text / pp-split-media
 *   pp-banner      short statement band (row) — add pp-overlay on a photo
 *   pp-cards       card grid (inner row) — columns pp-card
 *   pp-cta         closing call-to-action band (row)
 *
 * Text-block helpers (HTML classes inside a Text block):
 *   pp-head, pp-eyebrow, pp-checks, pp-chips, pp-steps, pp-feature, pp-actions
 *
 * Sizes are deliberately smaller than the theme defaults (h2 38px → 30px,
 * h3 30px → 22px) so dense technical content does not fill the screen.
 * ========================================================================= */
.pp {
	--pp-olive: #34421e;
	--pp-ink: #222123;
	--pp-muted: #5f5d57;
	--pp-accent: var(--inovafood-accent);
	--pp-accent-l: var(--inovafood-accent-light);
	--pp-cream: #f6f4ee;
	--pp-line: #e4dfd2;
}

/* --- Type scale ---------------------------------------------------------- */
.pp h1,
.pp h2,
.pp h3,
.pp h4 {
	text-transform: uppercase;
}

.pp h2 {
	font-size: 30px;
	line-height: 1.25;
	margin: 0 0 16px;
	color: var(--pp-olive);
}

.pp h3 {
	font-size: 22px;
	line-height: 1.35;
	margin: 0 0 12px;
	color: var(--pp-olive);
}

.pp h4 {
	font-size: 17px;
	line-height: 1.4;
	margin: 0 0 8px;
	color: var(--pp-ink);
}

.pp p,
.pp li {
	font-size: 17px;
	line-height: 1.7;
	color: var(--pp-muted);
}

.pp p {
	margin: 0 0 14px;
}

.pp p:last-child {
	margin-bottom: 0;
}

.pp strong {
	color: var(--pp-ink);
}

.pp .wpb_text_column,
.pp .wpb_content_element {
	margin-bottom: 0;
}

.pp .wpb_single_image {
	margin-bottom: 24px;
}

.pp-eyebrow {
	display: block;
	margin: 0 0 12px;
	font-family: Lato, sans-serif;
	font-size: 13px;
	font-weight: 700;
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--pp-accent);
}

/* --- Centred single columns ---------------------------------------------
   A full-width column narrowed and centred by max-width. Grid offsets were
   avoided on purpose: mixing breakpoint offsets pushed columns off centre. */
.pp .wpb_column.pp-w6,
.pp .wpb_column.pp-w8,
.pp .wpb_column.pp-w10 {
	float: none;
	margin-left: auto;
	margin-right: auto;
}

.pp .wpb_column.pp-w6 {
	max-width: 640px;
}

.pp .wpb_column.pp-w8 {
	max-width: 800px;
}

.pp .wpb_column.pp-w10 {
	max-width: 980px;
}

/* --- Sections ------------------------------------------------------------ */
.pp-section {
	padding-top: 88px;
	padding-bottom: 88px;
}

.pp-section + .pp-section:not(.pp-cream):not(.pp-olive):not(.pp-overlay) {
	padding-top: 0;
}

.pp-cream {
	background-color: var(--pp-cream);
}

.pp-olive {
	background-color: var(--pp-olive);
}

.pp-head,
.pp .wpb_text_column.pp-head {
	max-width: 760px;
	margin: 0 auto 48px;
	text-align: center;
}

.pp .wpb_single_image + .wpb_text_column.pp-head {
	margin-top: 8px;
}

.pp-head p {
	font-size: 18px;
}

/* Photo backgrounds: a dark wash that survives re-saving the row in the
   builder (it lives on the class, not in the row's Design Options). */
.pp-overlay,
.pp-hero,
.pp-cta {
	background-size: cover;
	background-position: center;
	box-shadow: inset 0 0 0 100vmax rgba(24, 27, 16, 0.66);
}

.pp-overlay h2,
.pp-overlay h3,
.pp-overlay h4,
.pp-overlay p,
.pp-overlay li,
.pp-overlay strong,
.pp-olive h2,
.pp-olive h3,
.pp-olive h4,
.pp-olive p,
.pp-olive li,
.pp-olive strong,
.pp-cta h2,
.pp-cta p,
.pp-cta strong {
	color: #fff;
}

.pp-overlay .pp-eyebrow,
.pp-olive .pp-eyebrow,
.pp-hero .pp-eyebrow,
.pp-cta .pp-eyebrow {
	color: var(--pp-accent-l);
}

/* A CTA without a photo uses the plain olive fill, no dark wash. */
.pp-cta.pp-olive {
	box-shadow: none;
}

/* --- Hero ---------------------------------------------------------------- */
.pp-hero {
	padding-top: 104px;
	padding-bottom: 96px;
	text-align: center;
}

.pp-hero h1 {
	margin: 0 0 16px;
	font-size: 52px;
	line-height: 1.1;
	color: #fff;
}

.pp-hero p {
	max-width: 720px;
	margin: 0 auto;
	font-size: 19px;
	color: rgba(255, 255, 255, 0.9);
}

.pp-hero .pp-eyebrow a {
	color: inherit;
	text-decoration: none;
}

.pp-hero .pp-eyebrow a:hover {
	color: #fff;
}

/* --- Split: text beside a photo ----------------------------------------- */
.pp-split-text > .vc_column-inner {
	padding: 80px 64px !important;
}

.pp-split-text .wpb_wrapper {
	max-width: 560px;
	margin: 0 auto;
}

.pp-split-media {
	position: relative;
	min-height: 440px;
}

.pp-split-media > .vc_column-inner {
	position: absolute;
	inset: 0;
	padding: 0 !important;
}

.pp-split-media .wpb_wrapper,
.pp-split-media .wpb_single_image,
.pp-split-media .vc_figure,
.pp-split-media .vc_single_image-wrapper {
	display: block;
	width: 100%;
	height: 100%;
	margin: 0 !important;
}

.pp-split-media .wpb_single_image img {
	width: 100% !important;
	height: 100% !important;
	max-width: none;
	max-height: none;
	object-fit: cover;
}

/* Diagrams and infographics: show the whole image instead of cropping. */
.pp-split-media.pp-contain {
	background: #fff;
}

.pp-split-media.pp-contain .wpb_single_image img {
	padding: 40px;
	box-sizing: border-box;
	object-fit: contain;
}

.pp-split .pp-split-text .wpb_single_image.vc_align_center {
	text-align: left;
}

/* Partner logo at the top of a split: capped on both axes so wide marks
   (BioNeutra, Saltwell) and tall ones (Valorex, Nutrilo) carry equal weight. */
.pp-split-text .wpb_single_image.inovafood-partner-logo img {
	max-width: 280px;
	max-height: 88px;
}

.pp ul.pp-checks:not(:last-child),
.pp ul.pp-chips:not(:last-child) {
	margin-bottom: 18px;
}

/* Certification badges and buttons that follow the text inside a split. */
.pp-split-text .pp-inline-badge {
	display: inline-block;
	margin: 28px 28px 0 0 !important;
	vertical-align: middle;
}

.pp-actions.pp-actions-left,
.pp-actions.pp-actions-left > p {
	align-items: flex-start;
}

.pp-actions.pp-actions-left .dt-btn {
	min-width: 0;
}

/* --- Lists --------------------------------------------------------------- */
.pp ul.pp-checks {
	list-style: none;
	margin: 0;
	padding: 0;
}

.pp ul.pp-checks li {
	position: relative;
	margin: 0 0 10px;
	padding-left: 30px;
	text-align: left;
}

.pp ul.pp-checks li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 6px;
	width: 18px;
	height: 18px;
	border-radius: 50%;
	background: var(--pp-accent-l);
}

.pp ul.pp-checks li::after {
	content: "";
	position: absolute;
	left: 6px;
	top: 9px;
	width: 5px;
	height: 9px;
	border: solid var(--pp-olive);
	border-width: 0 2px 2px 0;
	transform: rotate(45deg);
}

.pp ul.pp-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
	margin: 0;
	padding: 0;
	list-style: none;
}

.pp-head + * ul.pp-chips,
.pp-center ul.pp-chips {
	justify-content: center;
}

.pp ul.pp-chips li {
	margin: 0;
	padding: 7px 16px;
	border: 1px solid var(--pp-line);
	border-radius: 999px;
	background: #fff;
	font-size: 15px;
	line-height: 1.4;
	color: var(--pp-ink);
}

.pp-olive ul.pp-chips li,
.pp-overlay ul.pp-chips li {
	border-color: rgba(255, 255, 255, 0.35);
	background: transparent;
	color: #fff;
}

/* --- Cards --------------------------------------------------------------- */
.pp-cards {
	row-gap: 30px;
}

.pp-card > .vc_column-inner > .wpb_wrapper {
	height: 100%;
	overflow: hidden;
	border-radius: 8px;
	background: #fff;
	box-shadow: 0 1px 2px rgba(34, 33, 35, 0.06), 0 10px 28px rgba(52, 66, 30, 0.08);
}

.pp-card .wpb_single_image {
	margin: 0 !important;
}

.pp-card .vc_figure,
.pp-card .vc_single_image-wrapper {
	display: block;
	width: 100%;
}

.pp-card .wpb_single_image img {
	display: block;
	width: 100% !important;
	height: 200px !important;
	max-width: none;
	max-height: none;
	object-fit: cover;
}

.pp-card .wpb_text_column {
	padding: 22px 24px 26px;
}

.pp-card h3 {
	font-size: 19px;
}

.pp-card p,
.pp-card li {
	font-size: 16px;
	line-height: 1.6;
}

/* Text-only feature cards with a round icon. */
.pp-feature {
	text-align: center;
}

.pp-ficon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 64px;
	height: 64px;
	margin-bottom: 18px;
	border-radius: 50%;
	background: var(--pp-olive);
	color: var(--pp-accent-l);
	font-size: 24px;
}

.pp-olive .pp-ficon,
.pp-overlay .pp-ficon {
	background: var(--pp-accent-l);
	color: var(--pp-olive);
}

.pp-feature p {
	font-size: 16px;
}

/* --- Photo gallery (row of equal photos) -------------------------------- */
.pp-gallery {
	row-gap: 24px;
}

.pp-gallery .wpb_single_image {
	margin: 0 !important;
}

.pp-gallery .vc_figure,
.pp-gallery .vc_single_image-wrapper {
	display: block;
	width: 100%;
}

.pp-gallery .wpb_single_image img {
	display: block;
	width: 100% !important;
	height: 220px !important;
	max-width: none;
	max-height: none;
	border-radius: 8px;
	object-fit: cover;
}

/* Small round product shot after the text of a split. */
.pp-split-text .pp-inline-round {
	display: inline-block;
	margin: 28px 20px 0 0 !important;
}

.pp-split-text .wpb_single_image.pp-inline-round img {
	width: 120px !important;
	height: 120px !important;
	max-width: 120px;
}

/* Two-column check list for long attribute lists. */
.pp ul.pp-checks.pp-cols {
	columns: 2;
	column-gap: 32px;
}

.pp ul.pp-checks.pp-cols li {
	break-inside: avoid;
}

/* Illustration (diagram, map) shown centred at a moderate size. */
.pp .wpb_single_image.pp-figure img {
	width: auto !important;
	max-width: 100%;
	max-height: 520px;
}

/* --- Numbered steps ------------------------------------------------------ */
.pp ol.pp-steps {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
	gap: 24px;
	margin: 0;
	padding: 0;
	list-style: none;
	counter-reset: pp-step;
}

.pp ol.pp-steps > li {
	counter-increment: pp-step;
	margin: 0;
	padding: 28px 26px 30px;
	border-radius: 8px;
	background: #fff;
	box-shadow: 0 1px 2px rgba(34, 33, 35, 0.06), 0 10px 28px rgba(52, 66, 30, 0.08);
}

.pp ol.pp-steps > li::before {
	content: counter(pp-step, decimal-leading-zero);
	display: block;
	margin-bottom: 12px;
	font-family: "Noticia Text", serif;
	font-size: 30px;
	line-height: 1;
	color: var(--pp-accent-l);
}

.pp ol.pp-steps h3 {
	font-size: 19px;
}

.pp ol.pp-steps p {
	font-size: 16px;
}

/* --- Badges (certification logos in one row) ---------------------------- */
.pp-badges > .vc_column-inner > .wpb_wrapper {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 24px 40px;
}

.pp-badges .wpb_text_column,
.pp .pp-badges .wpb_text_column.pp-head {
	flex: 0 0 100%;
	max-width: 100%;
	margin-bottom: 16px;
}

.pp-badges .pp-head > .wpb_wrapper {
	max-width: 760px;
	margin: 0 auto;
}

.pp-badges .wpb_single_image {
	margin: 0 !important;
}

/* --- Statement band ------------------------------------------------------ */
.pp-banner {
	padding-top: 72px;
	padding-bottom: 72px;
	text-align: center;
}

.pp-banner h2 {
	max-width: 900px;
	margin: 0 auto;
	font-size: 28px;
	line-height: 1.35;
}

.pp-banner p {
	max-width: 760px;
	margin: 16px auto 0;
}

/* --- Call to action ------------------------------------------------------ */
.pp-cta {
	padding-top: 96px;
	padding-bottom: 96px;
	text-align: center;
}

.pp-cta .wpb_single_image.inovafood-partner-logo {
	margin-bottom: 28px;
	text-align: center;
}

.pp-cta .wpb_single_image.inovafood-partner-logo img {
	max-width: 260px;
	max-height: 80px;
	padding: 14px 22px;
	border-radius: 8px;
	background: #fff;
	box-sizing: content-box;
}

.pp-cta p {
	max-width: 680px;
	margin-left: auto;
	margin-right: auto;
	font-size: 18px;
	color: rgba(255, 255, 255, 0.92);
}

.pp-actions,
.pp-actions > p {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 12px;
	margin: 32px 0 0;
}

.pp-actions > p {
	margin: 0;
}

.pp-actions .dt-btn {
	width: 420px;
	max-width: 100%;
	margin: 0 !important;
	justify-content: center;
	text-align: center;
}

.pp-actions .dt-btn.pp-btn-ghost {
	border: 1px solid rgba(255, 255, 255, 0.7) !important;
	background: transparent !important;
	color: #fff !important;
}

.pp-actions .dt-btn.pp-btn-ghost:hover {
	border-color: var(--pp-accent-l) !important;
	background: rgba(139, 207, 122, 0.15) !important;
}

.pp-actions .dt-btn.pp-btn-ghost * {
	color: inherit !important;
}

/* --- Responsive ---------------------------------------------------------- */
@media (max-width: 1199px) {
	.pp-split-text > .vc_column-inner {
		padding: 64px 40px !important;
	}
}

@media (max-width: 767px) {
	.pp-section {
		padding-top: 56px;
		padding-bottom: 56px;
	}

	.pp-hero {
		padding-top: 72px;
		padding-bottom: 64px;
	}

	.pp-hero h1 {
		font-size: 36px;
	}

	.pp-hero p {
		font-size: 17px;
	}

	.pp h2,
	.pp-banner h2 {
		font-size: 24px;
	}

	.pp h3 {
		font-size: 20px;
	}

	.pp p,
	.pp li {
		font-size: 16px;
	}

	.pp-head,
	.pp .wpb_text_column.pp-head {
		margin-bottom: 32px;
	}

	.pp-split-text > .vc_column-inner {
		padding: 48px 24px !important;
	}

	.pp-split-media {
		min-height: 260px;
	}

	/* Photo always above its text on phones, so two photos never touch. */
	.pp-split > .wpb_column.pp-split-media {
		order: -1;
	}

	.pp-split > .wpb_column.pp-split-text {
		order: 0;
	}

	/* One card / gallery photo per row on phones: two side by side left
	   too little width for the text. */
	.pp-cards > .pp-card,
	.pp-gallery > .wpb_column {
		width: 100%;
	}

	.pp-card .wpb_single_image img {
		height: 200px !important;
	}

	.pp-card .wpb_text_column {
		padding: 20px 20px 24px;
	}

	.pp-card h3 {
		font-size: 18px;
	}

	.pp-gallery .wpb_single_image img {
		height: 220px !important;
	}

	.pp-banner,
	.pp-cta {
		padding-top: 56px;
		padding-bottom: 56px;
	}

	.pp-actions .dt-btn {
		width: 100%;
		min-width: 0;
	}

	.pp ul.pp-checks.pp-cols {
		columns: 1;
	}

	/* Stacked feature items (icon + title + text): keep each one clearly
	   apart, so the next icon never touches the text above it. */
	.pp-feature {
		padding-bottom: 40px;
	}

	.vc_inner .wpb_column:last-child .pp-feature {
		padding-bottom: 0;
	}

}

/* Home: the "fabricants reconnus" sub-heading stays on one line on desktop; balanced wrap below. */
.inovafood-oneline .uvc-sub-heading { text-wrap: balance; }
@media (min-width: 1100px) {
	.inovafood-oneline .uvc-sub-heading { white-space: nowrap; width: max-content; margin-left: 50% !important; margin-right: 0 !important; transform: translateX(-50%); }
}

/* reCAPTCHA v3: floating badge hidden; the Google attribution line is shown under the form instead. */
.grecaptcha-badge { visibility: hidden !important; }
.inovafood-recaptcha-note { font-size: 13px; line-height: 1.5; opacity: .8; margin-top: 12px; }

/* ===========================================================================
 * Home — "Nos applications" photo cards on the dark band (client request,
 * 2026-11-10). Plain HTML inside one Text block so editors can change a
 * title, photo or link in wp-admin without touching columns.
 * ======================================================================== */
.inovafood-appcards {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 24px;
	margin: 0 0 8px;
}

@media (max-width: 991px) {
	.inovafood-appcards {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 767px) {
	.inovafood-appcards {
		grid-template-columns: minmax(0, 1fr);
	}
}

.inovafood-appcard {
	display: flex;
	flex-direction: column;
	background: #fff;
	border-radius: 16px;
	overflow: hidden;
	text-decoration: none !important;
	color: #222123 !important;
	box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
	transition: transform 0.25s ease, box-shadow 0.25s ease;
}

.inovafood-appcard:hover,
.inovafood-appcard:focus-visible {
	transform: translateY(-4px);
	box-shadow: 0 10px 28px rgba(0, 0, 0, 0.2);
}

.inovafood-appcard:focus-visible {
	outline: 3px solid var(--inovafood-accent-light, #8bcf7a);
	outline-offset: 2px;
}

.inovafood-appcard-media {
	display: block;
	aspect-ratio: 4 / 3;
	overflow: hidden;
	background: #f6f4ee;
}

.inovafood-appcard-media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.4s ease;
}

.inovafood-appcard:hover .inovafood-appcard-media img {
	transform: scale(1.04);
}

.inovafood-appcard-title {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	padding: 18px 20px 20px;
	font-size: 20px;
	line-height: 1.3;
	font-weight: 600;
	color: #222123;
}

.inovafood-appcard-arrow {
	flex: 0 0 40px;
	width: 40px;
	height: 40px;
	border-radius: 50%;
	background: #f6f4ee;
	color: #34421e;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	font-size: 18px;
	transition: background 0.25s ease, color 0.25s ease;
}

.inovafood-appcard:hover .inovafood-appcard-arrow {
	background: #34421e;
	color: #fff;
}

/* "Nos domaines d'expertise": one line of pills under the cards. */
.inovafood-on-dark ul.inovafood-chips {
	list-style: none;
	margin: 0 !important;
	padding: 0 !important;
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 10px;
}

.inovafood-on-dark ul.inovafood-chips li {
	margin: 0;
	padding: 8px 16px;
	border: 1px solid rgba(255, 255, 255, 0.45);
	border-radius: 999px;
	color: #fff;
	font-size: 15px;
	line-height: 1.3;
}

/* Partenaires — featured partner row (logo beside text). */
.inovafood-partner-featured .wpb_single_image img {
	max-width: 280px;
	width: 100%;
	height: auto;
}

.inovafood-partner-featured .dt-btn {
	margin: 0 12px 12px 0;
}

/* Ghost button on a light split block (Lyckeby page): olive outline instead of white. */
.pp-split:not(.pp-olive) .pp-actions .dt-btn.pp-btn-ghost {
	border-color: var(--pp-olive) !important;
	color: var(--pp-olive) !important;
}

.pp-split:not(.pp-olive) .pp-actions .dt-btn.pp-btn-ghost:hover {
	background: rgba(52, 66, 30, 0.08) !important;
}

/* Home applications (2026-11-10, second pass): showcase cards, not links. */
div.inovafood-appcard {
	cursor: default;
}

div.inovafood-appcard:hover {
	transform: none;
	box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
}

div.inovafood-appcard .inovafood-appcard-title {
	padding: 16px 20px;
}

/* Produits — Mozzarella: the client's photo is portrait, keep it whole on desktop. */
@media (min-width: 768px) {
	#mozzarella .wpb_single_image img {
		width: 100%;
		max-width: 440px;
		height: auto;
		max-height: none;
	}
}

/* Home applications band: the long intro sentence stays readable. */
.inovafood-on-dark .uvc-sub-heading {
	max-width: 820px;
	margin-left: auto !important;
	margin-right: auto !important;
	text-wrap: balance;
	line-height: 1.6;
}

/* ===========================================================================
 * Application pages (/applications/…): plain olive hero, link chips, card links.
 * ======================================================================== */
.pp-apphero {
	padding-top: 96px;
	padding-bottom: 88px;
	text-align: center;
}

.pp-apphero h1 {
	color: #fff;
	font-size: 44px;
	line-height: 52px;
	margin: 8px 0 14px;
}

.pp-apphero p {
	color: rgba(255, 255, 255, 0.9);
	font-size: 19px;
	line-height: 30px;
	max-width: 760px;
	margin-left: auto;
	margin-right: auto;
}

.pp-apphero .pp-eyebrow a {
	color: inherit;
	text-decoration: none;
}

@media (max-width: 767px) {
	.pp-apphero {
		padding-top: 64px;
		padding-bottom: 56px;
	}

	.pp-apphero h1 {
		font-size: 30px;
		line-height: 38px;
	}

	.pp-apphero p {
		font-size: 17px;
		line-height: 27px;
	}
}

.pp .pp-more a {
	font-weight: 600;
	color: var(--pp-olive);
	text-decoration: none;
	border-bottom: 1px solid currentColor;
}

.pp .pp-more a:hover {
	color: var(--pp-accent);
}

.pp ul.pp-chips-links {
	justify-content: center;
}

/* One pill only: the link is the pill, the list item is a plain wrapper. */
.pp ul.pp-chips.pp-chips-links li {
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 0;
	background: transparent;
}

.pp ul.pp-chips-links a {
	display: inline-block;
	padding: 9px 18px;
	border: 1px solid var(--pp-line);
	border-radius: 999px;
	background: #fff;
	color: var(--pp-ink);
	text-decoration: none;
	font-size: 15px;
	line-height: 1.3;
	transition: border-color 0.2s ease, color 0.2s ease;
}

.pp ul.pp-chips-links a:hover,
.pp ul.pp-chips-links a:focus-visible {
	border-color: var(--pp-olive);
	color: var(--pp-olive);
}

/* The Home / index application cards are links again. */
a.inovafood-appcard {
	cursor: pointer;
}

/* Application pages: photos whose subject sits above the centre keep it fully in frame
   when the column crops the photo (window moved up instead of centred). */
.pp-split-media.pp-focus-up .wpb_single_image img {
	object-position: 50% 27%;
}
