/*
Theme Name: Future Textile
Theme URI: https://futuretextile.fr/
Author: S2SEE
Description: Thème blocs FSE pour la reproduction de Future Textile, base technique issue de Now Textile.
Version: 0.4.22
Requires at least: 6.7
Requires PHP: 8.1
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: future-textile
Tags: full-site-editing, block-patterns, wide-blocks, custom-logo
*/

/* Principes : pas de couleurs HEX ni de polices imposées en CSS.
   Les styles de theme.json et les ajustements du client dans l'éditeur de site priment.
   Les variables --wp--preset--color--* suivent les couleurs de la palette dans WordPress. */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
body{min-width:320px;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
img,video{max-width:100%;height:auto}
.wp-site-blocks{overflow:clip}
.wp-site-blocks>header+main,.wp-site-blocks>main+footer{margin-block-start:0}
:where(a,.wp-block-button__link):focus-visible{outline:2px solid var(--wp--preset--color--accent);outline-offset:3px}
body .wp-block-button .wp-block-button__link{transition:filter .2s ease}
body .wp-block-button .wp-block-button__link:hover{filter:brightness(.88)}

/* Le logo, les menus et les couleurs de fond se modifient dans Apparence > Éditeur. */
.site-header{position:sticky;top:var(--wp-admin--admin-bar--height,0px);z-index:50;margin:0;border-bottom:1px solid var(--wp--preset--color--line)}
.site-header__inner{min-height:80px;gap:2rem;padding-inline:clamp(1.25rem,3.8vw,3rem)}
.ft-brand-logo{display:inline-flex;align-items:center;line-height:1;flex:0 0 auto}
.ft-brand-logo img,.ft-brand-logo .custom-logo{display:block;height:auto;max-height:56px;width:auto;max-width:140px;object-fit:contain}
.site-header .wp-block-navigation{margin-left:auto}
.site-header .wp-block-navigation__container{gap:clamp(.8rem,2.1vw,2rem)}
.site-header .wp-block-navigation-item__content{text-decoration:none;transition:opacity .2s ease}
.site-header .wp-block-navigation-item__content:hover,.site-header .wp-block-navigation-item__content:focus-visible{opacity:.7}
.site-header .wp-block-navigation__responsive-container.is-menu-open{background-color:var(--wp--preset--color--paper);color:var(--wp--preset--color--ink)}

/* Pied de page : les couleurs sont celles du bloc Footer, modifiables via l'éditeur. */
.site-footer{margin:0}
.ft-footer__columns{gap:clamp(1.5rem,3vw,3.5rem);align-items:flex-start}
.site-footer a{color:inherit;text-decoration:none;transition:opacity .2s ease}
.site-footer a:hover,.site-footer a:focus-visible{opacity:.72}
.site-footer h3{margin:0 0 1rem;color:inherit}
.site-footer h4{margin:0 0 1.5rem;color:inherit}
.site-footer p{margin:0 0 1.5rem;color:inherit;line-height:1.85}
.ft-footer__brand>p{max-width:350px}
.ft-footer__nav a{display:inline-block;padding-bottom:.4rem}
.ft-footer__contact a{overflow-wrap:anywhere}
.ft-footer__social{gap:1rem}
.ft-footer__bottom{gap:1rem;margin-top:3.5rem;padding-top:1.7rem;border-top:1px solid color-mix(in srgb,currentColor 20%,transparent)}
.ft-footer__bottom p{margin:0}

/* Composants structurels (aucune couleur 'en dur'). */
.ft-section{padding-block:var(--wp--preset--spacing--60);padding-inline:var(--wp--preset--spacing--30)}
.ft-section--compact{padding-block:var(--wp--preset--spacing--40);padding-inline:var(--wp--preset--spacing--30)}
body .ft-grid--4-2-1.is-layout-grid,.editor-styles-wrapper .ft-grid--4-2-1.is-layout-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.ft-eyebrow{font-size:.78rem;font-weight:600;letter-spacing:.13em;text-transform:uppercase}
.ft-news-grid .wp-block-post-template{gap:2rem}
.ft-news-grid .wp-block-post-featured-image img{aspect-ratio:4/3;object-fit:cover}
.ft-news-card{padding-bottom:1.5rem;border-bottom:1px solid var(--wp--preset--color--line)}
.ft-article-content{max-width:var(--wp--style--global--content-size);margin-inline:auto}
.ft-share-links{display:flex;flex-wrap:wrap;gap:1rem}
.ft-share-links a{display:inline-flex;padding:.35rem .65rem;border:1px solid currentColor}
.ft-share-links a:hover{opacity:.72}

@media(max-width:900px){.site-header__inner{gap:1rem}.site-header .wp-block-navigation__container{gap:.85rem}}
@media(max-width:781px){.site-header__inner{min-height:64px;padding-inline:1.5rem}.ft-brand-logo img,.ft-brand-logo .custom-logo{max-height:46px}.ft-footer__columns{gap:2rem}body .ft-grid--4-2-1.is-layout-grid,.editor-styles-wrapper .ft-grid--4-2-1.is-layout-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:599px){.ft-footer__columns{flex-direction:column}.ft-footer__columns>.wp-block-column{flex-basis:auto!important;width:100%}.ft-footer__bottom{display:block}.ft-footer__bottom>*{margin-bottom:.75rem!important}.site-header__inner{padding-inline:1.25rem}}
@media(max-width:480px){body .ft-grid--4-2-1.is-layout-grid,.editor-styles-wrapper .ft-grid--4-2-1.is-layout-grid{grid-template-columns:minmax(0,1fr)}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition-duration:0.01ms!important;animation-duration:0.01ms!important}}


/* V0.3.2 : la largeur d'edition du contenu (760px) ne doit pas resserrer les
   conteneurs de sections. La limite suit le "Contenu large" des Styles WordPress. */
body .ft-home-hero__inner,
body .ft-home-programme__inner,
body .ft-home-figures__inner,
body .ft-footer__inner {
  width:100%;
  max-width:var(--wp--style--global--wide-size,1152px) !important;
}
/* La copie d'accueil commence au bord gauche du conteneur large. */
body .ft-home-hero__inner > .ft-home-hero__copy {
  max-width:48rem;
  margin-inline-start:0 !important;
  margin-inline-end:auto !important;
}
/* Les paragraphes et titres du programme sont repartis dans le conteneur large. */
body .ft-home-programme__inner > .ft-home-section-heading,
body .ft-home-programme__inner > .ft-home-programme__row,
body .ft-home-figures__inner > .ft-home-section-heading,
body .ft-home-figures__inner > .ft-home-figures__grid,
body .ft-footer__inner > .ft-footer__columns,
body .ft-footer__inner > .ft-footer__bottom {
  max-width:100%;
}
/* Reprendre la limite editorialisee du texte central sur le site source. */
body .ft-home-about__inner {max-width:min(100%,42rem)}

/* ACCUEIL : classes d'agencement uniquement ; identite dirigee par les reglages WordPress.
   Les blocs natifs restent librement editables depuis la page Accueil. */
.ft-home{margin-block:0}
.ft-home > *{margin-block-start:0}
.ft-home-hero{isolation:isolate;border-radius:0 0 1.5rem 1.5rem;overflow:hidden;min-height:90vh;margin-block-end:var(--wp--preset--spacing--60,4rem)}
/* V0.3.4 : le degradé est un preset natif du bloc Couverture dans theme.json.
   Aucune surcouche CSS n'impose le voile : l'editeur conserve son controle.
   L'opacite de la video (82 %) est un ajustement visuel du site source,
   distinct de l'opacite du voile reglable dans WordPress. */
.ft-home-hero > .wp-block-cover__video-background{object-fit:cover;opacity:.82}
.ft-home-hero > .wp-block-cover__inner-container{position:relative;z-index:2;width:100%}
.ft-home-hero__inner{max-width:var(--wp--style--global--wide-size,1152px);margin-inline:auto}
.ft-home-hero__copy{max-width:780px;margin:4rem 0 5rem}
.ft-home-hero__title{margin:0 0 1.75rem;line-height:1.1;letter-spacing:-.02em}
.ft-home-hero__subtitle{display:inline-block;margin-top:.75rem;font-size:clamp(1.6rem,3.2vw,3rem);line-height:1.12;letter-spacing:-.01em;white-space:normal}
.ft-home-hero__summary{max-width:670px;font-size:clamp(1.05rem,1.5vw,1.4rem);line-height:1.65}
.ft-home-hero__meta{margin-top:2rem;font-size:.87rem;font-weight:600;letter-spacing:.13em;text-transform:uppercase}
.ft-home-hero__buttons{gap:1rem;margin-top:2.5rem}
.ft-home-hero .wp-block-button__link{min-width:180px;display:inline-flex;align-items:center;justify-content:center}
.ft-home-programme,.ft-home-figures{padding-block:clamp(4rem,7vw,7rem);padding-inline:clamp(1.2rem,3vw,2.5rem)}
.ft-home-programme__inner,.ft-home-figures__inner{max-width:var(--wp--style--global--wide-size,1152px);margin-inline:auto}
.ft-home-section-heading{margin-top:0;margin-bottom:3rem;line-height:1.05}
.ft-home-programme__row{padding-block:2rem;border-bottom:1px solid color-mix(in srgb,currentColor 18%,transparent)}
.ft-home-programme__row:last-child{border-bottom:0}
.ft-home-programme__date{margin:0;line-height:1.05}
.ft-home-programme__title{margin:0 0 1rem;font-size:clamp(1.45rem,2.1vw,2.1rem)}
.ft-home-programme__details{max-width:760px;opacity:.75;line-height:1.8}
.ft-home-about{padding-block:clamp(5rem,9vw,9rem);padding-inline:clamp(1.25rem,4vw,4rem)}
.ft-home-about__inner{max-width:900px;margin-inline:auto}
.ft-home-about__intro{font-weight:500;line-height:1.25;letter-spacing:-.01em}
.ft-home-about__buttons{margin-top:2.5rem}
.ft-home-figures__grid{gap:clamp(1rem,3vw,3rem)}
.ft-home-figures__value{font-weight:500;line-height:1;margin-bottom:.45rem}
.ft-home-figures__label{font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;opacity:.7}
@media(max-width:781px){.ft-home-hero{min-height:75vh}.ft-home-hero__copy{margin:3rem 0 3.5rem}.ft-home-section-heading{margin-bottom:2.3rem}.ft-home-programme__row{gap:.75rem}}
@media(max-width:599px){.ft-home-hero{border-radius:0 0 1rem 1rem;min-height:80vh}.ft-home-hero__copy{margin:2rem 0 3rem}.ft-home-hero__summary{font-size:1rem}.ft-home-hero__buttons{flex-direction:column;align-items:flex-start}.ft-home-hero .wp-block-button,.ft-home-hero .wp-block-button__link{width:100%}.ft-home-programme__row{padding-block:1.8rem}.ft-home-figures__grid{gap:2.5rem}}


/* v0.3.5 - aucun espace vide non voulu entre l'en-tete et la couverture.
   Les marges/paddings internes au bloc Couverture restent ajustables depuis Gutenberg. */
body.home .wp-site-blocks > main,
body.home main > .wp-block-post-content,
body.home main .wp-block-post-content > .ft-home,
body.home .ft-home > .ft-home-hero {
  margin-block-start: 0 !important;
}
body.home .wp-site-blocks > main,
body.home main > .wp-block-post-content {
  padding-block-start: 0 !important;
}


/* v0.3.6 - hero: les blocs contenus sous le titre partagent la meme
   ligne de depart. Le layout Gutenberg "constrained" centre par defaut
   ses enfants avec margin-inline:auto, meme si le groupe est a gauche.
   On ne force pas de text-align sur les blocs explicitement alignes par
   l'editeur : leurs options d'alignement restent utilisables. */
body .ft-home-hero__copy.is-layout-constrained > :where(:not(.alignright):not(.alignfull):not(.alignwide)) {
  margin-inline-start: 0 !important;
  margin-inline-end: auto !important;
}
/* Le shortcode du compte a rebours produit son propre conteneur flex. */
body .ft-home-hero__copy .ftcd-wrap {
  margin-inline-start: 0;
  margin-inline-end: auto;
  justify-content: flex-start;
}
/* Les boutons sont alignes avec le texte ; leur padding reste pilote par
   Styles globaux > Blocs > Boutons dans WordPress (theme.json). */
body .ft-home-hero .ft-home-hero__buttons:not(.is-content-justification-center):not(.is-content-justification-right) {
  justify-content: flex-start;
}


/* v0.3.7 - header + hero occupent exactement la premiere hauteur d'ecran.
   La variable est renseignee avec la hauteur REELLE de l'en-tete par JS ;
   les valeurs de repli evitent tout clignotement en attendant sa mesure.
   On conserve min-height (plutot qu'une hauteur fixe) : sur un petit mobile,
   les titres, le compte a rebours et les boutons ne seront jamais coupes.
   !important est necessaire pour surcharger l'ancien min-height:90vh
   enregistre directement dans le HTML du bloc Couverture Gutenberg. */
:root{--ft-hero-header-offset:81px}
@media(max-width:781px){:root{--ft-hero-header-offset:65px}}
body.home .ft-home-hero{
  min-height:calc(100vh - var(--ft-hero-header-offset)) !important;
  height:auto;
}
@supports(height:100dvh){
  body.home .ft-home-hero{
    min-height:calc(100dvh - var(--ft-hero-header-offset)) !important;
  }
}
/* Les medias du bloc Couverture remplissent leur conteneur redimensionne.
   WordPress gere toujours la video et son remplacement depuis Gutenberg. */
body.home .ft-home-hero > .wp-block-cover__video-background{
  width:100%;
  height:100%;
  object-fit:cover;
}


/* v0.4.0 - composition Gutenberg commune Visiteurs / Exposants.
   Les images, contenus, colonnes et fonds restent editables dans Gutenberg. */
.ft-landing-page{margin-block:0}
.ft-landing-page > *{margin-block-start:0}
.ft-landing-hero{border-radius:0 0 1.5rem 1.5rem;overflow:hidden;margin-block:0;padding:var(--wp--preset--spacing--60) var(--wp--preset--spacing--30)}
/* Le voile du bloc Couverture est un degrade natif de la palette Gutenberg.
   Opacite globale 100 % : les transparences sont integrees aux 3 stops. */
/* La source utilise DEUX couches independantes : image a 50 % d'opacite
   puis degrade clair 20 % -> 40 % -> 100 %. Il ne faut pas reduire une
   seconde fois l'opacite du gradient. La superposition est un preset natif
   de Couverture (theme.json), editable directement dans Gutenberg.
   L'image reste modifiable via Remplacer > Mediatheque.
   Variante Gutenberg "Image opaque" disponible pour passer a 100 %. */
.ft-landing-hero:not(.has-custom-content-position){align-items:flex-end}
.ft-landing-hero > img.wp-block-cover__image-background,
.editor-styles-wrapper .ft-landing-hero > img.wp-block-cover__image-background{opacity:.5}
.ft-landing-hero.is-style-ft-image-full > img.wp-block-cover__image-background,
.editor-styles-wrapper .ft-landing-hero.is-style-ft-image-full > img.wp-block-cover__image-background{opacity:1}
.ft-landing-hero > .wp-block-cover__inner-container{width:100%;position:relative;z-index:2}
body .ft-landing-hero__inner{width:100%;max-width:var(--wp--style--global--wide-size,1152px);margin-inline:auto}
body .ft-landing-hero__copy{max-width:48rem;margin-inline-start:0;margin-inline-end:auto}
.ft-landing-hero__eyebrow{display:flex;align-items:center;gap:1rem;margin-bottom:2rem;font-size:.82rem;letter-spacing:.14em;text-transform:uppercase}
.ft-landing-hero__eyebrow::before{content:"";display:block;width:3rem;height:2px;background:var(--wp--preset--color--accent);flex:0 0 3rem}
.ft-landing-hero__title{margin:0 0 1.5rem;line-height:1.05}
.ft-landing-hero__intro{margin-inline-start:0;margin-inline-end:auto;font-size:clamp(1.25rem,1.9vw,1.5rem);line-height:1.6;max-width:46rem}
.ft-landing-content{padding-block:clamp(4rem,7vw,7rem);padding-inline:clamp(1.25rem,4vw,3rem);margin-block:0}
body .ft-landing-content__columns{width:100%;max-width:var(--wp--style--global--wide-size,1152px);margin-inline:auto;gap:clamp(2rem,5vw,4rem);align-items:flex-start}
.ft-landing-content__columns > .wp-block-column{min-width:0}
.ft-landing-content__title{line-height:1.1;margin-top:0;margin-bottom:2.5rem}
.ft-landing-benefits{list-style:none;padding-left:0;margin:0;display:grid;gap:1.65rem}
.ft-landing-benefits > li{display:flex;align-items:flex-start;gap:1rem;font-size:clamp(1.02rem,1.35vw,1.125rem);line-height:1.6}
.ft-landing-benefits > li::before{content:"✓";display:grid;place-items:center;flex:0 0 1.6rem;width:1.6rem;height:1.6rem;margin-top:.23rem;border-radius:50%;background:var(--wp--preset--color--ink);color:var(--wp--preset--color--paper);font-family:system-ui,sans-serif;font-weight:700;font-size:.91rem;line-height:1}
/* Repere editorial seulement : n'applique aucun style aux formulaires WPForms.
   L'indication disparaît sur le site public et peut etre supprimee a l'insertion du formulaire. */
.ft-wpforms-slot__hint{display:none}
.editor-styles-wrapper .ft-wpforms-slot__hint{display:block}
@media(max-width:781px){
 .ft-landing-hero{border-radius:0 0 1rem 1rem}
 .ft-landing-content__columns{gap:2.5rem}
}
@media(max-width:599px){
 .ft-landing-hero__eyebrow{margin-bottom:1.25rem}
 .ft-landing-hero__title{margin-bottom:1rem}
 .ft-landing-hero__intro{font-size:1.1rem}
 .ft-landing-content{padding-block:3.5rem}
 .ft-landing-content__title{margin-bottom:1.75rem}
 .ft-landing-benefits{gap:1.35rem}
}


/* v0.4.7 - Trois ajustements non proposes par le theme visuel WPForms.
   Couleurs, bordures et tailles des champs restent geres dans WPForms.
   Ces regles concernent uniquement les formulaires WPForms du site. */
.wpforms-container .wpforms-form .wpforms-submit-container button.wpforms-submit {
  width: 100%;
}
.wpforms-container .wpforms-form .wpforms-submit-container button.wpforms-submit:hover {
  opacity: 0.8;
}
.wpforms-container .wpforms-form label.wpforms-field-label {
  font-weight: 500;
  margin-bottom: 5px;
}


/* v0.4.8 - Contact : hero commun aux pages interieures et coordonnees sous
   forme de blocs natifs. Aucun style de formulaire n'est ajoute. */
.ft-contact-grid{
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:clamp(1.5rem,3vw,3rem);
  align-items:start;
}
.ft-contact-grid > .wp-block-column{min-width:0;width:100%;margin:0;flex-basis:auto!important}
.ft-contact-card{overflow-wrap:anywhere}
.ft-contact-card::before{
  content:"";
  display:block;
  width:1.5rem;
  height:1.5rem;
  margin-bottom:1.35rem;
  background-color:var(--wp--preset--color--muted);
  -webkit-mask-repeat:no-repeat;
  mask-repeat:no-repeat;
  -webkit-mask-size:contain;
  mask-size:contain;
  -webkit-mask-position:center;
  mask-position:center;
}
.ft-contact-card--address::before{-webkit-mask-image:url('assets/icons/contact-address.svg');mask-image:url('assets/icons/contact-address.svg')}
.ft-contact-card--phone::before{-webkit-mask-image:url('assets/icons/contact-phone.svg');mask-image:url('assets/icons/contact-phone.svg')}
.ft-contact-card--email::before{-webkit-mask-image:url('assets/icons/contact-email.svg');mask-image:url('assets/icons/contact-email.svg')}
.ft-contact-card--hours::before{-webkit-mask-image:url('assets/icons/contact-hours.svg');mask-image:url('assets/icons/contact-hours.svg')}
.ft-contact-card__heading{
  margin:0 0 .85rem;
  font-size:.875rem;
  font-weight:500;
  letter-spacing:.12em;
  line-height:1.5;
  text-transform:uppercase;
  color:var(--wp--preset--color--muted);
}
.ft-contact-card p{margin-top:0;line-height:1.8}
.ft-contact-card a{color:inherit;text-decoration:none}
.ft-contact-card a:hover{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.2em}
@media(max-width:980px){.ft-contact-grid{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:2.75rem}}
@media(max-width:599px){.ft-contact-grid{grid-template-columns:minmax(0,1fr);gap:2rem}}


/* v0.4.11 - Bandeau legal aligné sur le H1 des pages Visiteurs / Exposants.
   Le titre dynamique et la date partagent le bord gauche du conteneur large.
   La taille du H1 utilise le meme preset Gutenberg "display" que les pages interieures.
   Les couleurs, le texte et la hauteur du bandeau restent controles par WordPress. */
.ft-legal-page { margin-block: 0; }
.ft-legal-hero {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  margin-block: 0;
}
.ft-legal-hero > .ft-legal-hero__inner {
  width: 100%;
  max-width: var(--wp--style--global--wide-size,1152px);
  margin-inline: auto;
  text-align: left;
}
/* Gutenberg centre sinon les enfants d'un groupe en layout constrained. */
.ft-legal-hero .ft-legal-hero__inner.is-layout-constrained > :is(.ft-legal-hero__title,.ft-legal-hero__date) {
  width: 100%;
  max-width: 100%;
  margin-inline-start: 0 !important;
  margin-inline-end: auto !important;
}
.ft-legal-hero .ft-legal-hero__title {
  font-size: var(--wp--preset--font-size--display);
  margin-block: 0 1.5rem;
  line-height: 1.05;
  text-align: left;
  overflow-wrap: break-word;
}
.ft-legal-hero__date {
  display: flex;
  align-items: baseline;
  justify-content: flex-start;
  flex-wrap: wrap;
  gap: .3rem;
  margin-block-start: .8rem;
  text-align: left;
  color: var(--wp--preset--color--muted);
  font-size: var(--wp--preset--font-size--small,.875rem);
}
.ft-legal-hero__date p,
.ft-legal-hero__date .wp-block-shortcode { margin: 0 !important; }
.ft-legal-body { margin: 0; }
.ft-legal-body .wp-block-post-content {
  width: 100%;
  max-width: var(--wp--style--global--content-size,760px);
  margin-inline: auto;
  overflow-wrap: anywhere;
}
.ft-legal-body .wp-block-post-content :where(h2,h3,h4) { margin-block-start: 2em; }
.ft-legal-body .wp-block-post-content :where(p,li) { line-height: 1.75; }
.ft-legal-body .wp-block-post-content a { color: var(--wp--preset--color--accent); text-decoration: underline; text-underline-offset: .12em; }
.ft-legal-body .wp-block-post-content :where(ul,ol) { padding-inline-start: 1.5em; }
@media (max-width: 599px) {
  .ft-legal-hero .ft-legal-hero__title { overflow-wrap: anywhere; }
}



/* v0.4.13 — Marges intérieures harmonisées pour les sections de CONTENU.
   Ordinateur : 48px gauche/droite, 100px haut, 160px bas.
   Mobile (<= 781px) : 24px gauche/droite, 50px haut, 80px bas.
   Les covers (hero), le header et le footer gardent leurs propres règles.
   Une modification ponctuelle du bloc dans Gutenberg (style inline) reste
   prioritaire sur les valeurs par défaut de ces règles (pas de !important).
   Le spacer global antérieur à v0.4.13 est supprimé pour éviter les cumuls. */
:root {
  --ft-content-pad-inline: 48px;
  --ft-content-pad-top: 100px;
  --ft-content-pad-bottom: 160px;
}

/* Une seule convention, quelle que soit l'origine des contenus :
   modèles de pages, articles, archives, accueil ou compositions intérieures. */
.ft-section,
.ft-landing-content,
.ft-legal-body,
.ft-home-programme,
.ft-home-about,
.ft-home-figures {
  padding-top: var(--ft-content-pad-top);
  padding-right: var(--ft-content-pad-inline);
  padding-bottom: var(--ft-content-pad-bottom);
  padding-left: var(--ft-content-pad-inline);
}

/* Pages utilisant le modèle large sans composition spécifique : applique aussi
   les marges à leur contenu éditorial simple. Les compositions contiennent
   déjà des sections avec leurs propres classes, donc on n'ajoute pas de couche. */
.wp-site-blocks main > .wp-block-post-content:not(:has(.ft-landing-page, .ft-home, .ft-section)) {
  padding-top: var(--ft-content-pad-top);
  padding-right: var(--ft-content-pad-inline);
  padding-bottom: var(--ft-content-pad-bottom);
  padding-left: var(--ft-content-pad-inline);
}

/* Sécurise les anciennes personnalisations de modèles sauvegardés dans
   WordPress : si l'ancien pre-footer existe encore, ne pas doubler l'espace. */
.wp-site-blocks .ft-pre-footer {
  display: none !important;
}

@media (max-width: 781px) {
  :root {
    --ft-content-pad-inline: 24px;
    --ft-content-pad-top: 50px;
    --ft-content-pad-bottom: 80px;
  }
}


/* v0.4.14 - A propos : structure issue du site original, 100 % Gutenberg.
   La palette et les typographies globales restent la source de verite.
   Le hero partage son style avec les pages Visiteurs, Exposants et Contact.
   Les sections adoptent les espacements harmonises de .ft-section. */
.ft-about-values__columns,
.ft-about-history__inner{
  width:100%;
  max-width:var(--wp--style--global--wide-size,1152px);
  margin-inline:auto;
}
.ft-about-values__columns{
  gap:clamp(2.5rem,6vw,6rem);
  align-items:flex-start;
}
.ft-about-values__columns > .wp-block-column{min-width:0}
.ft-about-values__label,
.ft-about-history__year{
  font-family:inherit;
  font-size:.875rem;
  font-weight:500;
  letter-spacing:.14em;
  line-height:1.5;
  text-transform:uppercase;
}
.ft-about-values__label{margin:0 0 1rem}
.ft-about-values__description{
  font-size:clamp(1.05rem,1.4vw,1.25rem);
  line-height:1.85;
  margin:0;
}
.ft-about-history{
  border-top:1px solid var(--wp--preset--color--line);
}
.ft-about-history__title{margin:0 0 clamp(2rem,4vw,3rem)}
.ft-about-history__tabs{
  display:flex;
  flex-wrap:wrap;
  gap:.75rem;
  margin:0 0 1.75rem;
}
.ft-about-history__tab{
  appearance:none;
  font-family:inherit;
  font-size:1rem;
  line-height:1.2;
  min-height:44px;
  min-width:88px;
  padding:.75rem 1.5rem;
  color:var(--wp--preset--color--ink);
  background:transparent;
  border:1px solid var(--wp--preset--color--line);
  border-radius:999px;
  cursor:pointer;
  transition:background-color .2s ease,color .2s ease,border-color .2s ease;
}
.ft-about-history__tab[aria-selected="true"]{
  background:var(--wp--preset--color--ink);
  color:var(--wp--preset--color--paper);
  border-color:var(--wp--preset--color--ink);
}
.ft-about-history__tab:hover:not([aria-selected="true"]){
  border-color:var(--wp--preset--color--ink);
}
.ft-about-history__tab:focus-visible{
  outline:2px solid var(--wp--preset--color--accent);
  outline-offset:3px;
}
.ft-about-history__item[hidden]{display:none!important}
.ft-about-history__item{padding-top:.5rem}
.ft-about-history__columns{gap:clamp(1.5rem,5vw,5rem);align-items:center}
.ft-about-history__year{margin:0 0 .75rem}
.ft-about-history__milestone-title{
  font-size:clamp(1.75rem,3.1vw,2.5rem);
  line-height:1.14;
  margin:0 0 1rem;
}
.ft-about-history__description{
  font-size:clamp(1rem,1.5vw,1.125rem);
  line-height:1.8;
  max-width:44rem;
  margin:0;
}
.ft-about-history__medallion{
  display:grid;
  place-items:center;
  width:clamp(7rem,12vw,10rem);
  aspect-ratio:1;
  border:1px solid var(--wp--preset--color--line);
  border-radius:50%;
  margin-inline:auto;
}
.ft-about-history__symbol{
  margin:0;
  font-family:"Cormorant Garamond",Georgia,serif;
  font-size:clamp(2rem,4vw,3rem);
  font-weight:500;
  line-height:1;
  color:var(--wp--preset--color--ink);
}
@media (max-width:781px){
  .ft-about-values__columns{gap:2.5rem}
  .ft-about-history__columns{gap:1.75rem}
}
@media (max-width:599px){
  .ft-about-history__medallion{width:7rem}
  .ft-about-history__tab{padding:.65rem 1.15rem}
}


/* v0.4.16 : page des articles native WordPress (home.html).
   La boucle hérite du nombre d'articles défini dans Réglages > Lecture.
   Le hero est un élément de modèle indépendant, éditable dans FSE.
   Présentation tirée de /actualites : titre et intro centrés, 3 cartes desktop,
   visuels 16/10, date/titre/extrait/lecture, pagination WordPress native. */
.ft-news-page { margin-block:0; }
.ft-news-page > * { margin-block-start:0; }
.ft-news-hero { padding-bottom:96px; padding-top:clamp(100px,11vw,160px); }
.ft-news-hero > .wp-block-cover__inner-container { width:100%; position:relative; z-index:2; }
.ft-news-hero > img.wp-block-cover__image-background,
.editor-styles-wrapper .ft-news-hero > img.wp-block-cover__image-background { opacity:.5; }
.ft-news-hero .ft-news-hero__inner {
  width:100%;
  max-width:var(--wp--style--global--wide-size,1152px);
  margin-inline:auto;
  text-align:center;
}
.ft-news-hero .ft-news-hero__copy {
  width:100%;
  max-width:48rem;
  margin-inline:auto;
  text-align:center;
}
.ft-news-hero .ft-news-hero__title { margin:0 0 1.5rem; line-height:1.05; }
.ft-news-hero .ft-news-hero__intro {
  max-width:42rem;
  margin-inline:auto;
  font-size:clamp(1rem,1.45vw,1.125rem);
  line-height:1.7;
}
.ft-news-index .ft-news-grid { width:100%; max-width:var(--wp--style--global--wide-size,1152px); margin-inline:auto; }
.ft-news-index .ft-news-grid .wp-block-post-template.is-layout-grid {
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:clamp(1.5rem,2.5vw,2rem);
}
.ft-news-index .ft-news-card { border:0; padding:0; min-width:0; }
.ft-news-index .ft-news-card.is-layout-constrained > * {
  max-width:100%;
  width:100%;
  margin-inline:0;
}
.ft-news-index .ft-news-card__image { margin-block:0 1rem; overflow:hidden; }
.ft-news-index .ft-news-card__image img { aspect-ratio:16/10; width:100%; object-fit:cover; transition:transform .45s ease; }
.ft-news-index .ft-news-card__image:hover img { transform:scale(1.05); }
.ft-news-index .ft-news-card__date { color:var(--wp--preset--color--muted); font-size:.875rem; margin:0 0 .5rem; }
.ft-news-index .ft-news-card__title { margin:0 0 .75rem; font-size:clamp(1.25rem,2vw,1.55rem); line-height:1.25; }
.ft-news-index .ft-news-card__title a { color:inherit; text-decoration:none; }
.ft-news-index .ft-news-card__title a:hover,
.ft-news-index .ft-news-card__more:hover { color:var(--wp--preset--color--accent); }
.ft-news-index .ft-news-card__excerpt { margin:0 0 1rem; color:var(--wp--preset--color--muted); font-size:.9rem; line-height:1.65; }
.ft-news-index .ft-news-card__excerpt .wp-block-post-excerpt__excerpt {
  margin:0;
  display:-webkit-box;
  -webkit-box-orient:vertical;
  -webkit-line-clamp:3;
  line-clamp:3;
  overflow:hidden;
}
.ft-news-index .ft-news-card__excerpt .wp-block-post-excerpt__more-text { display:none; }
.ft-news-index .ft-news-card__more { color:var(--wp--preset--color--ink); font-size:.875rem; font-weight:500; text-decoration:none; }
.ft-news-index .ft-news-pagination { gap:1rem; margin-block-start:4rem; }
.ft-news-index .ft-news-pagination a { text-decoration:none; }
.ft-news-index .ft-news-pagination a:hover,
.ft-news-index .ft-news-pagination .current { color:var(--wp--preset--color--accent); }
.ft-news-index .ft-news-empty { padding-block:4rem; margin-block:0; }
@media(max-width:980px){
  .ft-news-index .ft-news-grid .wp-block-post-template.is-layout-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media(max-width:781px){
  .ft-news-hero { padding-block:100px 64px; }
}
@media(max-width:599px){
  .ft-news-index .ft-news-grid .wp-block-post-template.is-layout-grid { grid-template-columns:minmax(0,1fr); }
  .ft-news-hero { padding-top:80px; }
  .ft-news-index .ft-news-pagination { gap:.65rem; flex-wrap:wrap; }
}
@media(prefers-reduced-motion:reduce){
  .ft-news-index .ft-news-card__image img { transition:none; }
}


/* v0.4.17 — Modèle d'article. Titre et date issus de WordPress ; bandeau
   partagé modifiable dans Éditeur > Éléments de modèle. Aucune marge externe
   entre le bandeau CTA et le footer. Les couleurs restent pilotées par la palette. */
.ft-single-page { margin-block: 0; }
.ft-single-page > * { margin-block-start: 0; }
/* v0.4.19 : bandeau des articles sans media ni voile de superposition.
   Le gris est la couleur de palette WordPress « Bordures et séparateurs » (#E8E2DC),
   modifiable dans Apparence > Éditeur > Styles > Couleurs.
   Le bandeau a une hauteur minimale de 400 px pour laisser les titres longs
   se replier sur les petits écrans, en gardant l'alignement bas. */
.ft-single-hero {
  min-height: 400px;
  display: flex;
  align-items: flex-end;
  width: 100%;
  padding-block-start: clamp(100px, 11vw, 160px);
  padding-block-end: clamp(64px, 7vw, 96px);
  padding-inline: var(--ft-content-pad-inline);
}
.ft-single-hero .ft-single-hero__inner { width:100%; max-width:var(--wp--style--global--wide-size,1152px); margin-inline:auto; }
.ft-single-hero .ft-single-hero__copy { max-width:60rem; margin-inline:0 auto; text-align:left; }
.ft-single-hero__back { margin:0 0 2rem; font-size:.875rem; font-weight:500; }
.ft-single-hero__back a { color:var(--wp--preset--color--ink); text-decoration:none; }
.ft-single-hero__back a:hover { color:var(--wp--preset--color--accent); }
/* Le H1 utilise le préréglage WordPress « Titre article » (max. 48px). */
.ft-single-hero__title { margin:0 0 1rem; line-height:1.08; overflow-wrap:anywhere; }
.ft-single-hero__date { margin:0; color:var(--wp--preset--color--muted); font-size:.9rem; }
.ft-single-content { margin-block:0; }
.ft-single-content__image { max-width:var(--wp--style--global--wide-size,1152px); margin:0 auto clamp(2rem,4vw,3.25rem); }
.ft-single-content__image img { width:100%; aspect-ratio:16/9; object-fit:cover; }
.ft-single-content__body { width:100%; max-width:var(--wp--style--global--content-size,760px); margin-inline:auto; overflow-wrap:anywhere; }
.ft-single-content__body :where(h2,h3,h4) { margin-block-start:2em; }
.ft-single-content__body :where(p,li) { line-height:1.8; }
.ft-single-content__body :where(ul,ol) { padding-inline-start:1.4em; }
.ft-single-content__body a { color:var(--wp--preset--color--accent); text-decoration:underline; text-underline-offset:.15em; }
.ft-article-cta {
  margin-block:0;
  padding:var(--ft-content-pad-top) var(--ft-content-pad-inline) var(--ft-content-pad-bottom);
  border-bottom:1px solid color-mix(in srgb,var(--wp--preset--color--paper) 16%,transparent);
}
.ft-article-cta .ft-article-cta__inner {
  width:100%; max-width:var(--wp--style--global--wide-size,1152px);
  margin-inline:auto; text-align:center;
}
.ft-article-cta__title { font-size:clamp(2.25rem,4vw,3.5rem); line-height:1.12; margin:0 0 2.5rem; }
.ft-article-cta .ft-article-cta__buttons { gap:clamp(.75rem,2vw,1.2rem); margin-block:0 2rem; }
.ft-article-cta .ft-article-cta__buttons .wp-block-button__link { white-space:normal; overflow-wrap:break-word; }
.ft-article-cta .ft-article-cta__buttons .is-style-outline .wp-block-button__link { border-color:currentColor; }
.ft-article-cta__back { margin:0; font-size:.875rem; }
.ft-article-cta__back a { color:var(--wp--preset--color--paper); text-decoration:none; }
.ft-article-cta__back a:hover { opacity:.75; }
.ft-single-page + .site-footer { margin-block-start:0; }
.ft-newsletter-page { margin-block:0; }
/* Meme hauteur minimale que le bandeau des articles. Les blocs Gutenberg et leur contenu restent editables. */
.ft-newsletter-hero { min-height:400px; display:flex; align-items:center; padding:var(--ft-content-pad-top) var(--ft-content-pad-inline); }
.ft-newsletter-hero > .wp-block-group { width:100%; max-width:var(--wp--style--global--wide-size,1152px); }
.ft-newsletter-form-slot { max-width:var(--wp--style--global--content-size,760px); margin-inline:auto; }
@media (max-width:781px) {
  .ft-single-hero { padding-top:100px; padding-bottom:64px; }
  .ft-single-hero__back { margin-bottom:1.25rem; }
  .ft-article-cta__title { margin-bottom:2rem; }
}
@media (max-width:599px) {
  .ft-single-hero { padding-top:80px; }
  .ft-article-cta .ft-article-cta__buttons { flex-direction:column; align-items:stretch; }
  .ft-article-cta .ft-article-cta__buttons .wp-block-button,
  .ft-article-cta .ft-article-cta__buttons .wp-block-button__link { width:100%; }
}
