/*
Theme Name:   IPIAB Kadence Child
Description:  Child theme of Kadence for IPIAB Kénitra: brand tokens, fonts, hexagon shapes and Arabic (RTL) typography from the approved mockup.
Template:     kadence
Version:      0.4.1
Requires PHP: 8.1
Author:       Webloo
Text Domain:  ipiab-kadence-child
License:      GPL-2.0-or-later
*/

/*
 * Kadence's global palette (Customizer → Couleurs) holds the same values, in the roles Kadence gives each slot:
 * 1 #205e8c accent        2 #123a5e accent hover   3 #0c2440 headings     4 #0f2238 body text   5 #506276 muted text
 * 6 #7d8fa3 subtle text   7 #eef4fa sky background 8 #f7fafd light bg     9 #ffffff white
 * 10 #f4c430 sun          11 #387ab6 light blue    12 #dde9f5 sky 2       13 #d6e1ec rule       14 #3a2c00 text on sun
 * 15 #1c8f4e WhatsApp
 * These tokens are for the few styles Kadence's settings don't cover.
 */
:root {
	--ipiab-blue: var(--global-palette1, #205e8c);
	--ipiab-blue-2: var(--global-palette11, #387ab6);
	--ipiab-navy: var(--global-palette2, #123a5e);
	--ipiab-navy-2: var(--global-palette3, #0c2440);
	--ipiab-sun: var(--global-palette10, #f4c430);
	--ipiab-sky: var(--global-palette7, #eef4fa);
	--ipiab-ink: var(--global-palette4, #0f2238);
	--ipiab-muted: var(--global-palette5, #506276);
	--ipiab-sky-2: var(--global-palette12, #dde9f5);
	--ipiab-line: var(--global-palette13, #d6e1ec);
	--ipiab-sun-ink: var(--global-palette14, #3a2c00);
	--ipiab-ease: cubic-bezier(0.2, 0.7, 0.2, 1);
	--ipiab-radius: 14px;
	--ipiab-font-head: "Archivo", system-ui, sans-serif;
	--ipiab-font-body: "Public Sans", system-ui, sans-serif;
	--ipiab-hex: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
}

body {
	font-family: var(--ipiab-font-body);
	color: var(--ipiab-ink);
}

h1, h2, h3, h4, h5, h6,
.site-title,
.main-navigation .primary-menu-container > ul > li.menu-item > a {
	font-family: var(--ipiab-font-head);
}

h1, h2 {
	letter-spacing: -0.015em;
	text-wrap: balance;
}

/* FR | ع, added at the end of the header menu and the mobile drawer by ipiab-core. FR stays on the left in both directions. */
.ipiab-lang {
	display: flex;
	align-items: center;
}

[dir="rtl"] .ipiab-lang {
	flex-direction: row-reverse;
	justify-content: flex-end;
}

.main-navigation .ipiab-lang {
	margin-inline-start: 6px;
	padding-inline-start: 6px;
	border-inline-start: 1px solid var(--ipiab-line);
}

.main-navigation .primary-menu-container > ul > li.ipiab-lang > a {
	padding-inline: 7px;
}

.ipiab-lang > a {
	font-weight: 700;
	color: var(--ipiab-muted);
	text-decoration: none;
}

.ipiab-lang > a:hover,
.ipiab-lang > a:focus-visible {
	color: var(--ipiab-blue);
}

.ipiab-lang > a.is-current {
	color: var(--ipiab-navy-2);
	font-weight: 800;
}

.ipiab-lang > a[lang="ar"] {
	font-family: "Noto Kufi Arabic", system-ui, sans-serif;
	font-size: 1.1em;
	line-height: 1;
}

.ipiab-lang > span {
	color: var(--ipiab-line);
}

.mobile-navigation .ipiab-lang {
	gap: 10px;
}

.mobile-navigation ul li.ipiab-lang > a {
	display: inline-block;
	width: auto;
	border: 0;
}

/* Phone numbers and emails keep their digit order inside Arabic text. */
.ipiab-ltr {
	direction: ltr;
	unicode-bidi: isolate;
}

/* ---------- Hexagons (add the class in the block's "Advanced → Additional CSS class") ---------- */

.ipiab-hex,
.ipiab-hex img {
	clip-path: var(--ipiab-hex);
	aspect-ratio: 0.866;
	object-fit: cover;
}

.ipiab-hex-badge {
	display: inline-grid;
	place-items: center;
	width: 64px;
	aspect-ratio: 0.866;
	clip-path: var(--ipiab-hex);
	background: var(--ipiab-blue);
	color: #fff;
	font-family: var(--ipiab-font-head);
	font-weight: 800;
}

.ipiab-hex-badge.is-sun {
	background: var(--ipiab-sun);
	color: var(--ipiab-navy-2);
}

/* Faint hexagon grid behind dark bands (hero, CTA). */
.ipiab-hex-bg {
	position: relative;
	isolation: isolate;
}

.ipiab-hex-bg::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	opacity: 0.08;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='56' height='97' viewBox='0 0 56 97'%3E%3Cpath d='M28 0l28 16v32L28 64 0 48V16zM28 64l28 16v32M28 64L0 80v32' fill='none' stroke='%23fff' stroke-width='1.2'/%3E%3C/svg%3E");
	background-size: 56px 97px;
	pointer-events: none;
}

/* ---------- Formation cards ---------- */

.ipiab-card {
	background: #fff;
	border: 1px solid #dbe5ef;
	border-radius: var(--ipiab-radius);
	transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.ipiab-card:hover {
	transform: translateY(-3px);
	box-shadow: 0 14px 30px -18px rgb(18 58 94 / 0.45);
}

.ipiab-tag {
	display: inline-block;
	padding: 3px 10px;
	border-radius: 999px;
	background: var(--ipiab-sky);
	color: var(--ipiab-blue);
	font-size: 0.8125rem;
	font-weight: 600;
}

.ipiab-tag.is-accredited {
	background: var(--ipiab-sun);
	color: var(--ipiab-navy-2);
}

/* Content the school hasn't supplied yet. Remove the class once the real text is in. */
.ipiab-placeholder {
	outline: 2px dashed var(--ipiab-sun);
	outline-offset: 4px;
}

@media (prefers-reduced-motion: reduce) {
	.ipiab-card,
	.ipiab-card:hover {
		transition: none;
		transform: none;
	}
}

/* ---------- Arabic (Polylang sets dir="rtl" on the root element for /ar/) ---------- */

[dir="rtl"] {
	--ipiab-font-head: "Noto Kufi Arabic", "Archivo", sans-serif;
	--ipiab-font-body: "IBM Plex Sans Arabic", "Public Sans", sans-serif;
}

[dir="rtl"] body {
	line-height: 1.75;
}

[dir="rtl"] h1,
[dir="rtl"] h2 {
	letter-spacing: 0;
	line-height: 1.45;
}

/* ==========================================================================
 * Page sections, ported from the approved mockup (maquette/index.html).
 * The home page is built from core blocks; each block carries one of these classes
 * in "Advanced → Additional CSS class", so the text stays editable.
 * ========================================================================== */

.ipiab-home h1, .ipiab-home h2, .ipiab-home h3, .ipiab-home h4,
.ipiab-home p, .ipiab-home ul, .ipiab-home ol, .ipiab-home figure, .ipiab-home dl {
	margin: 0;
}

.ipiab-home > * + *,
.ipiab-home .wp-block-group > * + * {
	margin-block-start: 0;
}

.ipiab-wrap {
	max-width: 1200px;
	margin-inline: auto;
	padding-inline: max(16px, env(safe-area-inset-left, 0px));
}

.ipiab-band {
	padding-block: clamp(56px, 8vw, 96px);
}

.ipiab-home h2 {
	font-size: clamp(28px, 3.6vw, 40px);
	font-weight: 800;
	line-height: 1.1;
	color: var(--ipiab-navy-2);
}

.ipiab-home h3 {
	font-size: 19px;
	font-weight: 700;
	line-height: 1.2;
	color: var(--ipiab-navy-2);
}

.ipiab-eyebrow {
	font: 700 12.5px/1.2 var(--ipiab-font-body);
	letter-spacing: 0.14em;
	text-transform: uppercase;
	color: var(--ipiab-blue-2);
}

.ipiab-lead {
	font-size: 18px;
	color: var(--ipiab-muted);
	max-width: 60ch;
}

.ipiab-sec-head {
	display: flex;
	flex-wrap: wrap;
	align-items: end;
	justify-content: space-between;
	gap: 16px 32px;
	margin-bottom: 36px;
}

.ipiab-sec-head > .wp-block-group {
	display: grid;
	gap: 12px;
	min-width: 0;
}

.ipiab-todo {
	display: inline-flex;
	align-items: center;
	font: 600 11.5px/1 var(--ipiab-font-body);
	letter-spacing: 0.04em;
	padding: 5px 9px;
	border-radius: 999px;
	border: 1.5px dashed #c58a00;
	color: #7a5500;
	background: #fff8e1;
	white-space: nowrap;
}

/* ---------- Buttons: core Button blocks with class is-ipiab-sun / is-ipiab-line, or .ipiab-btn from the plugin ---------- */

.ipiab-btns {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
}

.ipiab-btn,
.wp-block-button[class*="is-ipiab-"] > .wp-block-button__link {
	position: relative;
	overflow: hidden;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	min-height: 48px;
	padding: 0 22px;
	border-radius: 999px;
	border: 2px solid transparent;
	font: 700 15.5px/1 var(--ipiab-font-body);
	text-decoration: none;
	box-shadow: none;
	transition: transform 0.2s var(--ipiab-ease), background-color 0.2s, box-shadow 0.2s;
}

.ipiab-btn.is-sun,
.wp-block-button.is-ipiab-sun > .wp-block-button__link {
	background: var(--ipiab-sun);
	color: var(--ipiab-sun-ink);
}

.ipiab-btn.is-line,
.wp-block-button.is-ipiab-line > .wp-block-button__link {
	background: transparent;
	border-color: currentColor;
	color: var(--ipiab-blue);
}

.wp-block-button.is-ipiab-light > .wp-block-button__link {
	background: transparent;
	border-color: #fff;
	color: #fff;
}

.ipiab-btn:hover,
.wp-block-button[class*="is-ipiab-"] > .wp-block-button__link:hover {
	transform: translateY(-2px);
	box-shadow: 0 10px 22px -12px rgb(12 36 64 / 0.55);
}

.ipiab-btn.is-sun:hover,
.wp-block-button.is-ipiab-sun > .wp-block-button__link:hover {
	background: #ffd34d;
	color: var(--ipiab-sun-ink);
}

.ipiab-btn.is-line:hover,
.wp-block-button.is-ipiab-line > .wp-block-button__link:hover {
	background: var(--ipiab-sky);
	color: var(--ipiab-blue);
}

/* A streak of light across the yellow buttons on hover. */
.ipiab-btn.is-sun::after,
.wp-block-button.is-ipiab-sun > .wp-block-button__link::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(105deg, transparent 35%, rgb(255 255 255 / 0.65) 50%, transparent 65%);
	transform: translateX(-120%);
	pointer-events: none;
}

.ipiab-btn.is-sun:hover::after,
.wp-block-button.is-ipiab-sun > .wp-block-button__link:hover::after {
	transform: translateX(120%);
	transition: transform 0.7s var(--ipiab-ease);
}

.ipiab-arrow {
	display: inline-block;
	transition: transform 0.2s var(--ipiab-ease);
}

[dir="rtl"] .ipiab-arrow {
	scale: -1 1;
}

a:hover > .ipiab-arrow,
.ipiab-more:hover .ipiab-arrow {
	transform: translateX(4px);
}

/* ---------- Hero ---------- */

.ipiab-hero {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	background: linear-gradient(180deg, var(--ipiab-sky) 0%, #fff 100%);
}

/* Hexagon grid drifting behind the hero and the inner page heads. Moved with transform, so it costs no repaint. */
.ipiab-hero::before,
.ipiab-page-head::before {
	content: "";
	position: absolute;
	inset: -97px 0 0;
	z-index: -1;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='56' height='97' viewBox='0 0 56 97'%3E%3Cpath d='M28 0l28 16v32L28 64 0 48V16zM28 64l28 16v32M28 64L0 80v32' fill='none' stroke='%23205e8c' stroke-width='1'/%3E%3C/svg%3E");
	background-size: 56px 97px;
	opacity: 0.07;
	-webkit-mask-image: linear-gradient(100deg, transparent 20%, #000 75%);
	mask-image: linear-gradient(100deg, transparent 20%, #000 75%);
	pointer-events: none;
}

[dir="rtl"] .ipiab-hero::before,
[dir="rtl"] .ipiab-page-head::before {
	-webkit-mask-image: linear-gradient(-100deg, transparent 20%, #000 75%);
	mask-image: linear-gradient(-100deg, transparent 20%, #000 75%);
}

.ipiab-hero > .ipiab-wrap {
	display: grid;
	grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
	gap: 40px;
	align-items: center;
	padding-block: 56px 72px;
}

.ipiab-hero-txt {
	display: grid;
	gap: 22px;
	min-width: 0;
}

.ipiab-home .ipiab-hero h1 {
	font-size: clamp(38px, 5.6vw, 68px);
	font-weight: 900;
	letter-spacing: -0.02em;
	line-height: 1.02;
	color: var(--ipiab-navy-2);
}

.ipiab-hero h1 em {
	font-style: normal;
	color: var(--ipiab-blue-2);
}

[dir="rtl"] .ipiab-home .ipiab-hero h1 {
	line-height: 1.35;
	font-size: clamp(34px, 4.6vw, 56px);
}

.ipiab-hero .ipiab-lead {
	font-size: clamp(17px, 1.6vw, 19px);
}

.ipiab-hero-mini {
	display: flex;
	flex-wrap: wrap;
	gap: 8px 20px;
	font-size: 14px;
	color: var(--ipiab-muted);
}

.ipiab-hero-mini span {
	display: inline-flex;
	gap: 8px;
	align-items: center;
}

.ipiab-hero-mini i {
	display: block;
	width: 9px;
	height: 10px;
	clip-path: var(--ipiab-hex);
	background: var(--ipiab-blue-2);
}

.ipiab-hex-stage {
	position: relative;
	aspect-ratio: 1;
	width: 100%;
	max-width: 560px;
	margin-inline: auto;
}

.ipiab-hx {
	position: absolute;
	overflow: hidden;
	clip-path: var(--ipiab-hex);
}

/* Photos sit a little larger than their hexagon, so the pointer parallax never shows an edge. */
.ipiab-hx > img,
.ipiab-hx > .ipiab-hx-in {
	width: 100%;
	height: 100%;
	object-fit: cover;
	scale: 1.08;
	transform: translate3d(calc(var(--px, 0) * var(--depth, 10px)), calc(var(--py, 0) * var(--depth, 10px)), 0);
	transition: transform 0.4s ease-out;
}

.ipiab-hx-a {
	inset-block: 0 6%;
	inset-inline: 14% 6%;
	background: var(--ipiab-sky-2);
	--depth: -10px;
}

.ipiab-hx-a > img {
	object-position: 48% 30%;
}

.ipiab-hx-b {
	width: 38%;
	aspect-ratio: 0.866;
	inset-inline-start: 0;
	bottom: 2%;
	padding: 5px;
	background: #fff;
	--depth: 18px;
}

.ipiab-hx-b > img {
	clip-path: var(--ipiab-hex);
	background: var(--ipiab-sky-2);
}

.ipiab-hx-c {
	width: 30%;
	aspect-ratio: 0.866;
	inset-inline-end: 0;
	top: 4%;
	background: var(--ipiab-sun);
	color: var(--ipiab-sun-ink);
	--depth: 24px;
}

.ipiab-hx-c > .ipiab-hx-in {
	display: grid;
	place-content: center;
	text-align: center;
	padding: 10px;
	scale: 1;
}

.ipiab-hx-c b {
	display: block;
	font: 900 clamp(20px, 2.6vw, 30px)/1 var(--ipiab-font-head);
}

.ipiab-hx-c small {
	display: block;
	margin-top: 4px;
	font-size: clamp(11px, 1.1vw, 13px);
	font-weight: 600;
	line-height: 1.25;
}

@media (max-width: 860px) {
	.ipiab-hero > .ipiab-wrap {
		grid-template-columns: minmax(0, 1fr);
		padding-block: 32px 48px;
	}

	.ipiab-hex-stage {
		max-width: 420px;
		order: -1;
	}
}

/* ---------- Key figures ---------- */

.ipiab-facts {
	background: var(--ipiab-navy);
	color: #fff;
}

.ipiab-facts > .ipiab-wrap {
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
}

.ipiab-fact {
	display: grid;
	gap: 6px;
	align-content: start;
	padding: 28px 24px;
	border-inline-start: 1px solid rgb(255 255 255 / 0.14);
}

.ipiab-fact:first-child {
	border-inline-start: 0;
	padding-inline-start: 0;
}

.ipiab-home .ipiab-fact-n {
	font: 900 clamp(26px, 3vw, 36px)/1 var(--ipiab-font-head);
	color: var(--ipiab-sun);
	font-variant-numeric: tabular-nums;
}

.ipiab-fact p:not(.ipiab-fact-n) {
	font-size: 14.5px;
	line-height: 1.4;
	color: #cfe0f1;
}

@media (max-width: 860px) {
	.ipiab-facts > .ipiab-wrap {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.ipiab-fact {
		padding: 22px 16px;
		border-top: 1px solid rgb(255 255 255 / 0.14);
	}

	.ipiab-fact:nth-child(odd) {
		border-inline-start: 0;
		padding-inline-start: 0;
	}

	.ipiab-fact:nth-child(-n+2) {
		border-top: 0;
	}
}

/* ---------- Level and filière cards ([ipiab_niveaux], [ipiab_filieres]) ---------- */

.ipiab-grid-3 {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 20px;
}

@media (max-width: 1000px) {
	.ipiab-grid-3 {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (max-width: 640px) {
	.ipiab-grid-3 {
		grid-template-columns: minmax(0, 1fr);
	}
}

.ipiab-prog {
	display: flex;
	flex-direction: column;
	gap: 14px;
	padding: 24px;
	background: #fff;
	border: 1px solid var(--ipiab-line);
	border-radius: 10px;
	transition: transform 0.25s var(--ipiab-ease), border-color 0.25s, box-shadow 0.25s;
}

.ipiab-prog:hover {
	transform: translateY(-4px);
	border-color: var(--ipiab-blue-2);
	box-shadow: 0 18px 36px -20px rgb(32 94 140 / 0.45);
}

.ipiab-prog h3,
.ipiab-prog p,
.ipiab-prog ul {
	margin: 0;
}

.ipiab-prog h3 {
	font-size: 19px;
	line-height: 1.2;
}

.ipiab-prog h3 a {
	color: inherit;
	text-decoration: none;
}

.ipiab-prog-top {
	display: flex;
	align-items: center;
	gap: 14px;
}

.ipiab-prog-top > div {
	display: grid;
	gap: 4px;
	min-width: 0;
}

.ipiab-badge {
	flex: none;
	display: grid;
	place-items: center;
	width: 52px;
	height: 60px;
	clip-path: var(--ipiab-hex);
	background: var(--ipiab-blue);
	color: #fff;
	font: 800 15px/1 var(--ipiab-font-head);
	transition: background-color 0.25s, color 0.25s, transform 0.35s var(--ipiab-ease);
}

.ipiab-prog:hover .ipiab-badge {
	background: var(--ipiab-sun);
	color: var(--ipiab-sun-ink);
	transform: scale(1.08);
}

.ipiab-meta {
	font-size: 13.5px;
	line-height: 1.35;
	color: var(--ipiab-muted);
}

.ipiab-prog ul {
	list-style: none;
	padding: 0;
	display: grid;
	gap: 8px;
	font-size: 15px;
}

.ipiab-prog li {
	display: flex;
	gap: 10px;
	align-items: baseline;
}

.ipiab-prog li::before {
	content: "";
	flex: none;
	width: 8px;
	height: 9px;
	clip-path: var(--ipiab-hex);
	background: var(--ipiab-blue-2);
	transform: translateY(-1px);
}

.ipiab-prog li a {
	color: var(--ipiab-ink);
	text-decoration: none;
}

.ipiab-prog li a:hover {
	color: var(--ipiab-blue);
	text-decoration: underline;
}

.ipiab-prog li.is-more {
	color: var(--ipiab-muted);
	font-size: 14px;
}

.ipiab-prog li.is-more::before {
	background: transparent;
}

.ipiab-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 6px;
}

.ipiab-chips span {
	padding: 5px 10px;
	border-radius: 999px;
	background: var(--ipiab-sky);
	color: var(--ipiab-navy);
	font-size: 13.5px;
	font-weight: 500;
}

.ipiab-more {
	margin-top: auto;
	padding-top: 6px;
	display: inline-flex;
	gap: 8px;
	font-weight: 700;
	font-size: 15px;
	text-decoration: none;
}

/* ---------- Why IPIAB ---------- */

.ipiab-why {
	background: var(--ipiab-sky);
}

.ipiab-why > .ipiab-wrap {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	gap: 56px;
	align-items: center;
}

.ipiab-collage {
	position: relative;
	padding-bottom: 12%;
	padding-inline-end: 14%;
}

.ipiab-collage img,
.ipiab-collage .ipiab-ph {
	display: block;
	width: 100%;
	object-fit: cover;
	border-radius: 10px;
}

.ipiab-collage .is-big {
	aspect-ratio: 4 / 3;
}

.ipiab-collage .is-small {
	position: absolute;
	inset-inline-end: 0;
	bottom: 0;
	width: 42%;
	aspect-ratio: 3 / 4;
	border: 6px solid var(--ipiab-sky);
}

.ipiab-ph {
	background: var(--ipiab-sky-2);
}

.ipiab-why-txt {
	display: grid;
	gap: 28px;
	min-width: 0;
}

.ipiab-why-txt > .wp-block-group:first-child {
	display: grid;
	gap: 12px;
}

.ipiab-why-list {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 24px;
}

.ipiab-why-item {
	display: grid;
	gap: 8px;
	align-content: start;
}

.ipiab-ic {
	display: grid;
	place-items: center;
	width: 44px;
	height: 44px;
	border-radius: 10px;
	background: #fff;
	color: var(--ipiab-blue);
	transition: transform 0.35s var(--ipiab-ease), background-color 0.25s, color 0.25s;
}

.ipiab-ic svg {
	width: 24px;
	height: 24px;
}

.ipiab-why-item:hover .ipiab-ic {
	transform: translateY(-3px) rotate(-6deg);
	background: var(--ipiab-blue);
	color: #fff;
}

.ipiab-why-item p {
	font-size: 15px;
	color: var(--ipiab-muted);
}

@media (max-width: 900px) {
	.ipiab-why > .ipiab-wrap {
		grid-template-columns: minmax(0, 1fr);
		gap: 36px;
	}
}

@media (max-width: 520px) {
	.ipiab-why-list {
		grid-template-columns: minmax(0, 1fr);
	}
}

/* ---------- Partners ---------- */

.ipiab-partners > .ipiab-wrap {
	display: grid;
	grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
	gap: 48px;
	align-items: center;
}

.ipiab-partners-txt {
	display: grid;
	gap: 20px;
	min-width: 0;
}

.ipiab-logos {
	display: grid;
	grid-template-columns: repeat(2, minmax(0, 1fr));
	gap: 12px;
}

.ipiab-logos span {
	display: grid;
	place-items: center;
	height: 72px;
	padding: 8px;
	border: 1px solid var(--ipiab-line);
	border-radius: 10px;
	font: 800 17px/1 var(--ipiab-font-head);
	letter-spacing: 0.06em;
	color: #55697e;
	text-align: center;
	transition: border-color 0.25s, color 0.25s, transform 0.25s var(--ipiab-ease);
}

.ipiab-logos span:hover {
	border-color: var(--ipiab-blue-2);
	color: var(--ipiab-blue);
	transform: translateY(-2px);
}

.ipiab-logos span.is-tbd {
	border-style: dashed;
	font: 500 13px/1.3 var(--ipiab-font-body);
	letter-spacing: 0;
	color: var(--ipiab-muted);
}

.ipiab-partners figure img,
.ipiab-partners figure .ipiab-ph {
	display: block;
	width: 100%;
	aspect-ratio: 4 / 3;
	object-fit: cover;
	border-radius: 10px;
}

.ipiab-home figcaption {
	margin-top: 10px;
	font-size: 13.5px;
	color: var(--ipiab-muted);
}

@media (max-width: 900px) {
	.ipiab-partners > .ipiab-wrap {
		grid-template-columns: minmax(0, 1fr);
		gap: 32px;
	}
}

/* ---------- Admission steps ---------- */

.ipiab-steps-band {
	background: var(--ipiab-navy-2);
	color: #fff;
}

.ipiab-home .ipiab-steps-band h2,
.ipiab-home .ipiab-steps-band h3 {
	color: #fff;
}

.ipiab-steps-band .ipiab-eyebrow {
	color: var(--ipiab-sun);
}

.ipiab-steps-band .ipiab-lead,
.ipiab-steps-band p {
	color: #b9cde2;
}

.ipiab-steps {
	position: relative;
	display: grid;
	grid-template-columns: repeat(4, minmax(0, 1fr));
	gap: 24px;
}

.ipiab-steps::before {
	content: "";
	position: absolute;
	top: 30px;
	inset-inline: 30px;
	height: 2px;
	background: repeating-linear-gradient(90deg, #3d6489 0 8px, transparent 8px 14px);
	transform-origin: left center;
}

[dir="rtl"] .ipiab-steps::before {
	transform-origin: right center;
}

.ipiab-step {
	position: relative;
	display: grid;
	gap: 10px;
	align-content: start;
}

.ipiab-home .ipiab-step-n {
	display: grid;
	place-items: center;
	width: 60px;
	height: 68px;
	clip-path: var(--ipiab-hex);
	background: var(--ipiab-sun);
	color: var(--ipiab-sun-ink);
	font: 900 26px/1 var(--ipiab-font-head);
}

.ipiab-step h3 {
	margin-top: 6px;
}

.ipiab-step p:not(.ipiab-step-n) {
	font-size: 15px;
}

.ipiab-steps-foot {
	margin-top: 40px;
	display: flex;
	flex-wrap: wrap;
	gap: 16px;
	align-items: center;
}

.ipiab-steps-band .ipiab-todo,
.ipiab-apply .ipiab-todo {
	background: transparent;
	color: #ffd34d;
	border-color: #ffd34d;
}

@media (max-width: 900px) {
	.ipiab-steps {
		grid-template-columns: repeat(2, minmax(0, 1fr));
		row-gap: 36px;
	}

	.ipiab-steps::before {
		display: none;
	}
}

@media (max-width: 480px) {
	.ipiab-steps {
		grid-template-columns: minmax(0, 1fr);
	}
}

/* ---------- News ---------- */

.ipiab-news {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 20px;
}

.ipiab-news article {
	display: flex;
	flex-direction: column;
	overflow: hidden;
	border: 1px solid var(--ipiab-line);
	border-radius: 10px;
	background: #fff;
	transition: transform 0.25s var(--ipiab-ease), box-shadow 0.25s;
}

.ipiab-news article:hover {
	transform: translateY(-4px);
	box-shadow: 0 18px 36px -22px rgb(12 36 64 / 0.5);
}

.ipiab-news .ipiab-news-img {
	overflow: hidden;
	aspect-ratio: 16 / 10;
	background: var(--ipiab-sky-2);
}

.ipiab-news img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.7s var(--ipiab-ease);
}

.ipiab-news article:hover img {
	transform: scale(1.06);
}

.ipiab-news-body {
	display: grid;
	gap: 10px;
	padding: 18px 20px 22px;
}

.ipiab-news-tag {
	font: 700 12px/1 var(--ipiab-font-body);
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--ipiab-blue-2);
}

.ipiab-news h3 a {
	color: var(--ipiab-ink);
	text-decoration: none;
}

.ipiab-news h3 a:hover {
	color: var(--ipiab-blue);
	text-decoration: underline;
}

@media (max-width: 900px) {
	.ipiab-news {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.ipiab-news article:last-child {
		display: none;
	}
}

@media (max-width: 600px) {
	.ipiab-news {
		grid-template-columns: minmax(0, 1fr);
	}

	.ipiab-news article:last-child {
		display: flex;
	}
}

/* ---------- President's word ---------- */

.ipiab-pres {
	background: var(--ipiab-sky);
}

.ipiab-pres > .ipiab-wrap {
	display: grid;
	grid-template-columns: 280px minmax(0, 1fr);
	gap: 56px;
	align-items: center;
}

.ipiab-pres-ph {
	width: 100%;
	aspect-ratio: 0.866;
	overflow: hidden;
	clip-path: var(--ipiab-hex);
	background: var(--ipiab-sky-2);
}

.ipiab-pres-ph img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: 50% 25%;
}

.ipiab-pres-txt {
	display: grid;
	gap: 20px;
}

.ipiab-home .ipiab-pres-q {
	max-width: 42ch;
	font: 600 clamp(20px, 2.3vw, 27px)/1.45 var(--ipiab-font-head);
	color: var(--ipiab-navy-2);
}

[dir="rtl"] .ipiab-home .ipiab-pres-q {
	line-height: 1.8;
}

.ipiab-pres-cite {
	display: grid;
	gap: 2px;
	font-size: 14.5px;
	color: var(--ipiab-muted);
}

.ipiab-pres-cite strong {
	font-size: 17px;
	color: var(--ipiab-ink);
}

@media (max-width: 760px) {
	.ipiab-pres > .ipiab-wrap {
		grid-template-columns: minmax(0, 1fr);
		gap: 28px;
	}

	.ipiab-pres-ph {
		width: 200px;
	}
}

/* ---------- Testimonials (placeholders until consented quotes come in) ---------- */

.ipiab-quotes {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: 20px;
}

.ipiab-quote {
	display: grid;
	gap: 14px;
	padding: 24px;
	border: 1.5px dashed #c9d6e3;
	border-radius: 10px;
	background: #fbfdff;
}

.ipiab-quote .bar {
	height: 10px;
	border-radius: 5px;
	background: var(--ipiab-sky-2);
}

.ipiab-quote .bar.s {
	width: 70%;
}

.ipiab-quote .who {
	display: flex;
	gap: 12px;
	align-items: center;
	margin-top: 6px;
	font-size: 13.5px;
	line-height: 1.4;
	color: var(--ipiab-muted);
}

.ipiab-quote .av {
	flex: none;
	width: 40px;
	height: 46px;
	clip-path: var(--ipiab-hex);
	background: var(--ipiab-sky-2);
}

@media (max-width: 900px) {
	.ipiab-quotes {
		grid-template-columns: minmax(0, 1fr);
	}

	.ipiab-quote:nth-child(n+2) {
		display: none;
	}
}

/* ---------- Pre-registration and contact ---------- */

.ipiab-apply {
	background: linear-gradient(135deg, var(--ipiab-navy), var(--ipiab-blue));
	color: #fff;
}

.ipiab-apply > .ipiab-wrap {
	display: grid;
	grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
	gap: 48px;
	align-items: start;
}

.ipiab-home .ipiab-apply h2 {
	color: #fff;
}

.ipiab-apply .ipiab-eyebrow {
	color: var(--ipiab-sun);
}

.ipiab-apply .ipiab-lead {
	color: #d3e3f3;
}

.ipiab-apply-info {
	display: grid;
	gap: 24px;
	min-width: 0;
}

.ipiab-apply-info > .wp-block-group:first-child {
	display: grid;
	gap: 12px;
}

.ipiab-contact-list {
	display: grid;
	gap: 14px;
}

.ipiab-contact-list div {
	display: grid;
	grid-template-columns: 110px minmax(0, 1fr);
	gap: 12px;
	font-size: 15.5px;
}

.ipiab-contact-list dt {
	padding-top: 2px;
	font-size: 13px;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	color: #a9c4de;
}

.ipiab-contact-list dd {
	margin: 0;
}

.ipiab-contact-list a {
	color: #fff;
}

.ipiab-form-card {
	display: grid;
	gap: 16px;
	padding: clamp(20px, 3vw, 32px);
	border-radius: 14px;
	background: #fff;
	color: var(--ipiab-ink);
	box-shadow: 0 24px 60px rgb(5 20 40 / 0.25);
}

.ipiab-home .ipiab-form-card h3 {
	font-size: 22px;
}

@media (max-width: 900px) {
	.ipiab-apply > .ipiab-wrap {
		grid-template-columns: minmax(0, 1fr);
		gap: 36px;
	}
}

@media (max-width: 520px) {
	.ipiab-contact-list div {
		grid-template-columns: minmax(0, 1fr);
		gap: 2px;
	}
}

/* ---------- Filière page (built by IPIAB Core from the fields) ---------- */

.ipiab-filiere {
	display: grid;
	gap: 32px;
}

.ipiab-f-level a {
	display: inline-flex;
	gap: 8px;
	font-weight: 600;
	text-decoration: none;
}

.ipiab-f-facts {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
	gap: 12px;
	margin: 0;
}

.ipiab-f-facts div {
	padding: 16px 18px;
	border-radius: 10px;
	background: var(--ipiab-sky);
	border-inline-start: 4px solid var(--ipiab-sun);
}

.ipiab-f-facts dt {
	font-size: 12.5px;
	font-weight: 700;
	letter-spacing: 0.1em;
	text-transform: uppercase;
	color: var(--ipiab-blue-2);
}

.ipiab-f-facts dd {
	margin: 4px 0 0;
	font-weight: 600;
	color: var(--ipiab-navy-2);
}

.ipiab-f-section {
	display: grid;
	gap: 16px;
	padding-top: 32px;
	border-top: 1px solid var(--ipiab-line);
}

.ipiab-f-section h2,
.ipiab-f-section h3,
.ipiab-f-section h4 {
	margin: 0;
}

.ipiab-f-groups {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
	gap: 16px;
}

.ipiab-f-group {
	padding: 18px 20px;
	border: 1px solid var(--ipiab-line);
	border-radius: 10px;
	background: #fff;
}

.ipiab-f-group h4 {
	margin-bottom: 10px;
	font-size: 15px;
	color: var(--ipiab-blue);
}

.ipiab-f-group ul,
.ipiab-f-jobs {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 8px;
}

.ipiab-f-group li,
.ipiab-f-jobs li {
	display: flex;
	gap: 10px;
	align-items: baseline;
}

.ipiab-f-group li::before,
.ipiab-f-jobs li::before {
	content: "";
	flex: none;
	width: 8px;
	height: 9px;
	clip-path: var(--ipiab-hex);
	background: var(--ipiab-blue-2);
}

.ipiab-f-jobs {
	grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}

.ipiab-f-cta {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 20px 32px;
	padding: clamp(24px, 4vw, 40px);
	border-radius: 14px;
	background: linear-gradient(135deg, var(--ipiab-navy), var(--ipiab-blue));
	color: #fff;
}

.ipiab-f-cta h2 {
	margin: 0 0 6px;
	color: #fff;
}

.ipiab-f-cta p {
	margin: 0;
	color: #d3e3f3;
}

.ipiab-f-cta-btns {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
}

.ipiab-f-cta .ipiab-btn.is-line {
	color: #fff;
}

.ipiab-f-cta .ipiab-btn.is-line:hover {
	background: rgb(255 255 255 / 0.12);
	color: #fff;
}

/* ---------- Inner pages: /formations/ and the level pages ---------- */

.ipiab-page-head {
	position: relative;
	isolation: isolate;
	overflow: hidden;
	padding-block: clamp(44px, 6vw, 72px);
	background: linear-gradient(180deg, var(--ipiab-sky) 0%, #fff 100%);
}

.ipiab-page-head-txt {
	display: grid;
	gap: 16px;
	max-width: 780px;
}

.ipiab-home .ipiab-page-head h1 {
	font-size: clamp(34px, 4.6vw, 54px);
	font-weight: 900;
	letter-spacing: -0.02em;
	line-height: 1.05;
	color: var(--ipiab-navy-2);
}

[dir="rtl"] .ipiab-home .ipiab-page-head h1 {
	line-height: 1.35;
}

.ipiab-crumb a {
	display: inline-flex;
	gap: 8px;
	font-weight: 600;
	text-decoration: none;
}

.ipiab-page-head + .ipiab-band {
	padding-top: clamp(32px, 4vw, 48px);
}

.ipiab-cta-band {
	padding-top: 0;
}

/* ==========================================================================
 * Motion. Everything below is skipped for visitors who ask for reduced motion.
 * Content is only hidden under .ipiab-js, which the head gate in functions.php adds and removes
 * again if animations.js has not run within 3 s, so nothing stays invisible.
 * ========================================================================== */

@keyframes ipiab-up {
	from {
		opacity: 0;
		transform: translateY(18px);
	}
}

@keyframes ipiab-zoom {
	from {
		opacity: 0;
		transform: scale(0.9);
	}
}

@keyframes ipiab-pop {
	from {
		opacity: 0;
		transform: scale(0.6) rotate(-12deg);
	}
	70% {
		transform: scale(1.04) rotate(1deg);
	}
}

@keyframes ipiab-float {
	to {
		translate: 0 -10px;
	}
}

@keyframes ipiab-drift {
	to {
		transform: translateY(97px);
	}
}

@media (prefers-reduced-motion: no-preference) {
	html {
		scroll-behavior: smooth;
	}

	/* Hero: plays on load, no script needed. */
	.ipiab-hero::before,
	.ipiab-page-head::before {
		animation: ipiab-drift 30s linear infinite;
	}

	.ipiab-hero-txt > *,
	.ipiab-page-head-txt > * {
		animation: ipiab-up 0.8s var(--ipiab-ease) both;
	}

	.ipiab-hero-txt > :nth-child(2),
	.ipiab-page-head-txt > :nth-child(2) { animation-delay: 0.1s; }
	.ipiab-hero-txt > :nth-child(3),
	.ipiab-page-head-txt > :nth-child(3) { animation-delay: 0.2s; }
	.ipiab-hero-txt > :nth-child(4),
	.ipiab-page-head-txt > :nth-child(4) { animation-delay: 0.3s; }
	.ipiab-hero-txt > :nth-child(5),
	.ipiab-page-head-txt > :nth-child(5) { animation-delay: 0.4s; }

	.ipiab-hx-a {
		animation: ipiab-zoom 1.1s var(--ipiab-ease) both 0.1s;
	}

	.ipiab-hx-b {
		animation: ipiab-pop 0.9s var(--ipiab-ease) both 0.45s, ipiab-float 6s ease-in-out 1.4s infinite alternate;
	}

	.ipiab-hx-c {
		animation: ipiab-pop 0.9s var(--ipiab-ease) both 0.7s, ipiab-float 5s ease-in-out 1.6s infinite alternate-reverse;
	}

	/* Scroll reveals. */
	.ipiab-js .ipiab-reveal:not(.is-done),
	.ipiab-js .ipiab-stagger:not(.is-done) > * {
		transition: opacity 0.7s var(--ipiab-ease), transform 0.7s var(--ipiab-ease);
		transition-delay: calc(var(--i, 0) * 90ms);
	}

	.ipiab-js .ipiab-reveal:not(.is-in),
	.ipiab-js .ipiab-stagger:not(.is-in) > * {
		opacity: 0;
		transform: translateY(26px);
	}

	.ipiab-js .ipiab-reveal.from-start:not(.is-in) { transform: translateX(-40px); }
	.ipiab-js .ipiab-reveal.from-end:not(.is-in) { transform: translateX(40px); }
	[dir="rtl"].ipiab-js .ipiab-reveal.from-start:not(.is-in) { transform: translateX(40px); }
	[dir="rtl"].ipiab-js .ipiab-reveal.from-end:not(.is-in) { transform: translateX(-40px); }
	.ipiab-js .ipiab-reveal.is-zoom:not(.is-in) { transform: scale(0.88); }

	/* Admission: the dotted line draws itself, then each hexagon pops in turn. */
	.ipiab-js .ipiab-steps::before {
		transform: scaleX(0);
		transition: transform 1.4s var(--ipiab-ease) 0.2s;
	}

	.ipiab-js .ipiab-steps.is-in::before {
		transform: none;
	}

	.ipiab-js .ipiab-steps.is-in .ipiab-step-n {
		animation: ipiab-pop 0.7s var(--ipiab-ease) both;
		animation-delay: calc(var(--i, 0) * 250ms + 0.25s);
	}

	.ipiab-js .ipiab-steps:not(.is-in) .ipiab-step-n {
		opacity: 0;
	}
}

@media (prefers-reduced-motion: reduce) {
	.ipiab-prog,
	.ipiab-prog:hover,
	.ipiab-news article,
	.ipiab-news article:hover,
	.ipiab-news img,
	.ipiab-btn,
	.wp-block-button[class*="is-ipiab-"] > .wp-block-button__link {
		transition: none;
		transform: none;
	}

	.ipiab-hx > img,
	.ipiab-hx > .ipiab-hx-in {
		transform: none;
	}
}

ol.ipiab-steps {
	list-style: none;
	margin: 0;
	padding: 0;
}

/* Kadence indents every .single-content list by 2em (padding-right on RTL pages), which beats the
   resets above. These lists draw their own markers, so they stay flush on both sides. */
body .single-content .ipiab-prog ul,
body .single-content .ipiab-f-group ul,
body .single-content ul.ipiab-f-jobs,
body .single-content ol.ipiab-steps {
	padding: 0;
}

/* Photo slots shown until the image is in the media library. */
.ipiab-hx > .ipiab-ph,
.ipiab-news-img > .ipiab-ph,
.ipiab-pres-ph > .ipiab-ph {
	width: 100%;
	height: 100%;
}

.ipiab-hx-b > .ipiab-ph {
	clip-path: var(--ipiab-hex);
}
