/*
Theme Name: PACT 44
Theme URI: https://pact44.fr
Author: P.A.C.T 44 — Pays d'Ancenis Club Triathlon
Description: Thème officiel du Pays d'Ancenis Club Triathlon, fidèle au design system du club : vert PACT, magenta hibiscus, bleu Loire, fondu vert → noir, typographie Archivo Narrow + Manrope. Thème de blocs (Full Site Editing) avec patterns prêts à l'emploi : hero, disciplines, calendrier d'événements, galerie, bloc adhésion.
Requires at least: 6.5
Tested up to: 7.0
Requires PHP: 7.4
Version: 1.0.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: pact44
Tags: block-patterns, block-styles, full-site-editing, custom-colors, custom-logo
*/

/* =========================================================================
   PACT 44 — Tokens du design system
   Aliases vers les presets WordPress (theme.json) + tokens non couverts.
   ========================================================================= */
:root {
  --pact-green-50:  #ecf9df;
  --pact-green-100: #d6f1bb;
  --pact-green-200: #b6e687;
  --pact-green-300: #93d854;
  --pact-green-400: #7ccb3c;
  --pact-green:     var(--wp--preset--color--pact-green, #69bf2d);
  --pact-green-600: #56a624;
  --pact-green-700: #43821a;
  --pact-green-800: #305c14;
  --pact-green-900: #1d3a0d;

  --hibiscus-50:  #fde6f1;
  --hibiscus-100: #fbb6d8;
  --hibiscus-200: #f47bb8;
  --hibiscus-300: #ed3f96;
  --hibiscus:     var(--wp--preset--color--hibiscus, #e4027d);
  --hibiscus-600: #c5006c;
  --hibiscus-700: #9c0055;

  --loire-50:  #e7eef9;
  --loire-100: #c3d3ee;
  --loire-200: #91afde;
  --loire-300: #5e8bce;
  --loire:     var(--wp--preset--color--loire, #3c69bb);
  --loire-600: #2d52a0;
  --loire-700: #213d7a;

  --ink:        var(--wp--preset--color--ink, #0a0a0a);
  --ink-soft:   #1a1a1a;
  --graphite:   #2a2a2a;
  --slate-700:  #3a3f47;
  --slate-500:  #6a7280;
  --slate-300:  #c4c9d1;
  --slate-200:  #e1e4e9;
  --slate-100:  #eef0f3;
  --slate-50:   #f7f8fa;
  --paper:      #ffffff;

  --bg:          var(--paper);
  --bg-alt:      var(--slate-50);
  --bg-deep:     #050706;
  --fg:          var(--ink);
  --fg-soft:     var(--slate-700);
  --fg-muted:    var(--slate-500);

  --primary:        var(--pact-green);
  --primary-hover:  var(--pact-green-600);
  --primary-press:  var(--pact-green-700);
  --accent:         var(--hibiscus);
  --link:           var(--loire-600);
  --link-hover:     var(--loire-700);
  --border:         var(--slate-200);
  --border-strong:  var(--slate-300);
  --divider:        var(--slate-100);

  --grad-fondu:        linear-gradient(180deg, var(--pact-green) 0%, var(--bg-deep) 100%);
  --grad-fondu-soft:   linear-gradient(180deg, var(--pact-green) 0%, var(--ink) 75%);
  --grad-fondu-radial: radial-gradient(120% 80% at 50% 0%, var(--pact-green) 0%, var(--ink) 70%);
  --grad-energie:      linear-gradient(135deg, var(--pact-green) 0%, var(--hibiscus) 100%);
  --grad-triathlon:    linear-gradient(90deg, var(--pact-green) 0%, var(--loire) 50%, var(--hibiscus) 100%);

  --font-display: var(--wp--preset--font-family--display, 'Archivo Narrow', system-ui, sans-serif);
  --font-sans:    var(--wp--preset--font-family--sans, 'Manrope', system-ui, sans-serif);
  --font-mono:    ui-monospace, 'SF Mono', Menlo, Consolas, monospace;

  --tracking-tight: -0.02em;
  --tracking-wide:  0.04em;
  --tracking-uber:  0.18em;

  --radius-sm:   4px;
  --radius-md:   8px;
  --radius-lg:   14px;
  --radius-pill: 999px;

  --shadow-sm: 0 1px 2px rgba(10,10,10,0.08), 0 0 0 1px rgba(10,10,10,0.04);
  --shadow-md: 0 4px 14px rgba(10,10,10,0.10), 0 1px 2px rgba(10,10,10,0.06);
  --shadow-lg: 0 12px 30px rgba(10,10,10,0.14), 0 2px 6px rgba(10,10,10,0.06);
  --shadow-green: 0 8px 24px rgba(105,191,45,0.30);
  --shadow-pink:  0 8px 24px rgba(228,2,125,0.28);

  --ease-out:    cubic-bezier(0.22, 1, 0.36, 1);
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
  --dur-fast: 140ms;
  --dur-base: 220ms;
  --dur-slow: 420ms;
}

html { scroll-behavior: smooth; }
body { -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }

h1, h2, h3, h4 { text-wrap: balance; }
p { text-wrap: pretty; }

/* =========================================================================
   Éléments génériques
   ========================================================================= */

/* Eyebrow — surtitre Archivo Narrow magenta sur-tracké */
.pact-eyebrow {
  font-family: var(--font-display);
  font-size: 13px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: var(--tracking-uber);
  color: var(--hibiscus);
}
.pact-eyebrow-ink { color: var(--ink); opacity: 0.7; }
.pact-eyebrow-light { color: var(--pact-green-300); }

/* Boutons (core/button habillé DS) */
.wp-block-button .wp-block-button__link {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  white-space: nowrap;
  box-shadow: var(--shadow-sm);
  transition: all var(--dur-base) var(--ease-out);
  text-decoration: none;
}
.wp-block-button .wp-block-button__link:hover {
  transform: translateY(-1px);
  box-shadow: var(--shadow-green);
}
.wp-block-button .wp-block-button__link:active {
  transform: translateY(0);
  background-color: var(--primary-press);
}
.wp-block-button .wp-block-button__link:focus-visible {
  outline: 2px solid var(--hibiscus);
  outline-offset: 2px;
}

/* Style de bloc : bouton sombre */
.wp-block-button.is-style-pact-dark .wp-block-button__link {
  background-color: var(--ink);
  color: var(--paper);
}
.wp-block-button.is-style-pact-dark .wp-block-button__link:hover {
  background-color: var(--graphite);
  box-shadow: var(--shadow-md);
}

/* Style de bloc : bouton fantôme clair (sur fond sombre / photo) */
.wp-block-button.is-style-pact-ghost-light .wp-block-button__link {
  background: transparent;
  color: var(--paper);
  border: 2px solid rgba(255,255,255,0.4);
  box-shadow: none;
}
.wp-block-button.is-style-pact-ghost-light .wp-block-button__link:hover {
  border-color: var(--paper);
  background: rgba(255,255,255,0.08);
  box-shadow: none;
}

/* Style de bloc : bouton accent hibiscus */
.wp-block-button.is-style-pact-accent .wp-block-button__link {
  background-color: var(--hibiscus);
  color: var(--paper);
}
.wp-block-button.is-style-pact-accent .wp-block-button__link:hover {
  background-color: var(--hibiscus-600);
  box-shadow: var(--shadow-pink);
}

/* Liens du contenu */
.entry-content a:not(.wp-block-button__link):not(.wp-element-button) {
  color: var(--link);
  text-decoration-thickness: 1px;
  text-underline-offset: 2px;
  transition: color var(--dur-fast) var(--ease-out);
}
.entry-content a:not(.wp-block-button__link):not(.wp-element-button):hover {
  color: var(--link-hover);
  text-decoration-thickness: 2px;
}

/* =========================================================================
   Navigation
   ========================================================================= */
/* Pas d'écart vertical entre header / main / footer à la racine :
   WP injecte `:where(.wp-site-blocks) > * { margin-block-start:1.5rem }` */
.wp-site-blocks > * { margin-block-start: 0; }

/* position:sticky est confiné à la hauteur de son parent ; le wrapper
   <header.wp-block-template-part> doit donc porter le sticky lui-même */
header.wp-block-template-part {
  position: sticky;
  top: 0;
  z-index: 50;
}
body.admin-bar header.wp-block-template-part { top: 32px; }
@media (max-width: 782px) {
  body.admin-bar header.wp-block-template-part { top: 46px; }
}

.pact-nav {
  position: sticky;
  top: 0;
  z-index: 50;
  width: 100%;
  transition: background var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out);
}
.pact-nav.scrolled,
body:not(.pact-has-hero) .pact-nav {
  background: rgba(255,255,255,0.88);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
  box-shadow: var(--shadow-sm);
}
.pact-nav-inner {
  max-width: 1280px;
  margin: 0 auto;
  padding: 16px clamp(24px, 5vw, 64px);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
}
.pact-nav-logo {
  display: flex;
  align-items: center;
  gap: 11px;
  text-decoration: none;
}
.pact-nav-flower { width: 44px; height: 44px; display: block; flex: 0 0 auto; }
.pact-nav-lockup { display: flex; flex-direction: column; }
.pact-nav-word {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 30px;
  line-height: 0.9;
  letter-spacing: -0.5px;
  color: var(--ink);
  white-space: nowrap;
}
.pact-nav-word .g { color: var(--pact-green); }
.pact-nav-bars { display: flex; gap: 4px; margin-top: 4px; width: 100%; }
.pact-nav-bars i { flex: 1; height: 4px; display: block; }
.pact-nav-bars .b-swim { background: var(--loire); }
.pact-nav-bars .b-bike { background: var(--pact-green); }
.pact-nav-bars .b-run  { background: var(--hibiscus); }

/* Sur le hero (non scrollé) : wordmark et liens blancs */
body.pact-has-hero .pact-nav:not(.scrolled) .pact-nav-word { color: var(--paper); }
body.pact-has-hero .pact-nav:not(.scrolled) .wp-block-navigation .wp-block-navigation-item__content { color: var(--paper); }

/* Liens (core/navigation) */
.pact-nav .wp-block-navigation { flex: 1; justify-content: center; }
.pact-nav .wp-block-navigation .wp-block-navigation-item__content {
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 15px;
  color: var(--ink);
  text-decoration: none;
  position: relative;
  padding: 4px 0;
  white-space: nowrap;
}
.pact-nav .wp-block-navigation .wp-block-navigation-item__content::after {
  content: '';
  position: absolute;
  left: 0;
  bottom: 0;
  height: 2px;
  width: 0;
  background: var(--pact-green);
  transition: width var(--dur-base) var(--ease-out);
}
.pact-nav .wp-block-navigation .wp-block-navigation-item__content:hover::after { width: 100%; }

/* Sous-menu déroulant : panneau clair, texte encre.
   Annule aussi l'override blanc du hero à l'intérieur du panneau
   (sinon liens blancs sur fond blanc, illisibles). */
.pact-nav .wp-block-navigation .wp-block-navigation__submenu-container {
  background: var(--paper);
  border: 1px solid var(--slate-200, #e2e8f0);
  border-radius: 10px;
  box-shadow: 0 12px 32px rgba(10, 10, 10, 0.14);
  padding: 6px;
  min-width: 230px;
}
.pact-nav .wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item__content,
body.pact-has-hero .pact-nav:not(.scrolled) .wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item__content {
  color: var(--ink) !important;
  display: block;
  padding: 8px 12px;
  border-radius: 6px;
  white-space: normal;
}
.pact-nav .wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover {
  background: var(--pact-green-50, #ecf9df);
  color: var(--pact-green-700, #43821a) !important;
}
/* Pas de soulignement animé dans le panneau (réservé à la barre principale) */
.pact-nav .wp-block-navigation .wp-block-navigation__submenu-container .wp-block-navigation-item__content::after {
  display: none;
}

/* Menu mobile (overlay du bloc navigation) */
.pact-nav .wp-block-navigation__responsive-container.is-menu-open {
  background: var(--paper);
}
.pact-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content {
  color: var(--ink) !important;
  font-size: 22px;
  font-family: var(--font-display);
  font-weight: 700;
  text-transform: uppercase;
}
body.pact-has-hero .pact-nav:not(.scrolled) .wp-block-navigation__responsive-container-open { color: var(--paper); }

.pact-nav-cta .wp-block-button__link { font-size: 13px; padding: 9px 18px; }

/* =========================================================================
   Hero (cover plein écran, fondu de protection, hibiscus filigrane)
   ========================================================================= */
.pact-hero.wp-block-cover {
  min-height: 92vh;
  /* !important : les règles de layout WP (.wp-container > :first-child)
     remettent margin-block-start à 0 sinon */
  margin-top: calc(-1 * var(--pact-nav-height, 78px)) !important;
  display: flex;
  align-items: flex-end;
  color: var(--paper);
  background: var(--bg-deep);
  padding: 0;
}
.pact-hero.wp-block-cover .wp-block-cover__background {
  background:
    linear-gradient(180deg, rgba(5,7,6,0.30) 0%, rgba(5,7,6,0.10) 40%, rgba(5,7,6,0.92) 100%),
    linear-gradient(75deg, rgba(5,7,6,0.78) 0%, rgba(5,7,6,0.25) 55%, rgba(5,7,6,0) 80%) !important;
  opacity: 1 !important;
}
.pact-hero .wp-block-cover__image-background { object-position: 60% 35%; }
.pact-hero-hibiscus {
  position: absolute;
  right: -50px;
  top: 60px;
  width: 300px;
  filter: brightness(0) invert(1);
  opacity: 0.10;
  transform: rotate(-12deg);
  z-index: 1;
  pointer-events: none;
}
.pact-hero-hibiscus img { width: 100%; height: auto; }
.pact-hero-inner {
  max-width: 1280px;
  margin: 0 auto;
  padding: 180px clamp(24px, 5vw, 64px) 84px;
  position: relative;
  z-index: 2;
  width: 100%;
}
.pact-hero-title {
  font-family: var(--font-display);
  font-weight: 900;
  text-transform: uppercase;
  font-size: clamp(48px, 8.5vw, 100px);
  line-height: 0.92;
  letter-spacing: -0.03em;
  color: var(--paper);
  margin: 14px 0 0;
  text-shadow: 0 2px 30px rgba(0,0,0,0.3);
}
.pact-hero-title em { font-style: normal; color: var(--pact-green-300); }
.pact-hero-lead {
  font-size: 19px;
  line-height: 1.55;
  color: rgba(255,255,255,0.9);
  max-width: 560px;
  margin: 22px 0 0;
}
.pact-hero-cta { margin-top: 34px; }

/* =========================================================================
   Sections
   ========================================================================= */
.pact-section-pad { padding-top: clamp(56px, 8vw, 100px); padding-bottom: clamp(56px, 8vw, 100px); }

.pact-h2 {
  font-family: var(--font-display);
  font-weight: 800;
  text-transform: uppercase;
  font-size: clamp(32px, 5vw, 52px);
  line-height: 1;
  letter-spacing: -0.02em;
  margin: 10px 0 0;
}

/* =========================================================================
   Disciplines (3 cards N / V / C)
   ========================================================================= */
.pact-disc-card {
  background: var(--paper);
  border: 1.5px solid var(--border);
  border-radius: var(--radius-lg);
  padding: 28px;
  transition: all var(--dur-base) var(--ease-out);
}
.pact-disc-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-md); }
.pact-disc-dot {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  font-family: var(--font-display);
  font-weight: 800;
  font-size: 24px;
  color: var(--paper);
  margin: 0;
}
.pact-disc-card.swim .pact-disc-dot { background: var(--loire); }
.pact-disc-card.bike .pact-disc-dot { background: var(--pact-green); }
.pact-disc-card.run  .pact-disc-dot { background: var(--hibiscus); }
.pact-disc-card.swim:hover { border-color: var(--loire); }
.pact-disc-card.bike:hover { border-color: var(--pact-green); }
.pact-disc-card.run:hover  { border-color: var(--hibiscus); }
.pact-disc-name {
  font-family: var(--font-display);
  font-weight: 800;
  text-transform: uppercase;
  font-size: 26px;
  margin: 18px 0 8px;
  letter-spacing: -0.01em;
}
.pact-disc-desc { font-size: 15px; line-height: 1.6; color: var(--fg-soft); margin: 0; }

/* =========================================================================
   Événements (query loop sur le CPT « Événement »)
   ========================================================================= */
.wp-block-query.pact-events-grid { margin-top: 40px; }
.pact-events-grid .wp-block-post-template {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 20px;
}
/* l'ul est en layout flow : WP met margin-block-start:1.5rem sur chaque li
   sauf le premier → quinconce dans la grille. On neutralise. */
.pact-events-grid .wp-block-post-template > li {
  margin-block-start: 0;
  margin-block-end: 0;
}
.pact-events-grid .wp-block-post {
  display: flex;
  background: var(--paper);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
  border-left: 4px solid var(--ink);
  transition: all var(--dur-base) var(--ease-out);
}
.pact-events-grid .wp-block-post:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.pact-events-grid .wp-block-post.discipline-natation     { border-left-color: var(--loire); }
.pact-events-grid .wp-block-post.discipline-velo         { border-left-color: var(--pact-green); }
.pact-events-grid .wp-block-post.discipline-course-a-pied { border-left-color: var(--hibiscus); }

.pact-event-date {
  flex: 0 0 110px;
  background: var(--slate-50);
  padding: 22px 18px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 2px;
  border-right: 1px solid var(--divider);
}
.pact-event-day {
  font-family: var(--font-display);
  font-weight: 800;
  text-transform: uppercase;
  font-size: 18px;
  line-height: 1.1;
  color: var(--ink);
  margin: 0;
}
.pact-event-year { font-family: var(--font-mono); font-size: 12px; color: var(--fg-muted); margin: 0; }
.pact-event-body { padding: 20px 22px; flex: 1; }
.pact-event-body .wp-block-post-title {
  font-family: var(--font-display);
  font-weight: 800;
  text-transform: uppercase;
  font-size: 22px;
  margin: 0 0 6px;
  letter-spacing: -0.01em;
  line-height: 1.05;
}
.pact-event-body .wp-block-post-title a { color: var(--ink); text-decoration: none; }
.pact-event-body .wp-block-post-title a:hover { color: var(--pact-green-700); }
.pact-event-body .wp-block-post-excerpt__excerpt {
  font-size: 14px;
  line-height: 1.5;
  color: var(--fg-soft);
  margin: 0 0 14px;
}

/* Chips disciplines (post-terms) */
.pact-event-body .wp-block-post-terms,
.pact-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.pact-event-body .wp-block-post-terms a,
.pact-chip {
  font-size: 11px;
  font-weight: 600;
  padding: 4px 11px;
  border-radius: var(--radius-pill);
  background: var(--slate-100);
  color: var(--fg-soft);
  text-decoration: none;
}
.pact-event-body .wp-block-post-terms a:hover { background: var(--slate-200); color: var(--ink); }
.pact-event-body .wp-block-post-terms .wp-block-post-terms__separator { display: none; }

/* Filtres (liens de termes, page archive) */
.pact-filters { display: flex; gap: 8px; flex-wrap: wrap; }
.pact-filters a, .pact-filter {
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: 13px;
  padding: 8px 16px;
  border-radius: var(--radius-pill);
  border: 1.5px solid var(--border-strong);
  background: var(--paper);
  color: var(--fg-soft);
  text-decoration: none;
  transition: all var(--dur-fast) var(--ease-out);
}
.pact-filters a:hover { border-color: var(--ink); color: var(--ink); }
.pact-filters a.active, .pact-filter.active { background: var(--ink); color: var(--paper); border-color: var(--ink); }

/* =========================================================================
   Galerie mosaïque
   ========================================================================= */
.pact-gallery-grid.wp-block-gallery {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 200px;
  gap: 16px;
}
.pact-gallery-grid.wp-block-gallery .wp-block-image {
  margin: 0;
  position: relative;
  overflow: hidden;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  width: auto !important;
}
.pact-gallery-grid.wp-block-gallery .wp-block-image.wide { grid-column: span 2; }
.pact-gallery-grid.wp-block-gallery .wp-block-image.tall { grid-row: span 2; }
.pact-gallery-grid.wp-block-gallery .wp-block-image img {
  width: 100%;
  height: 100% !important;
  object-fit: cover;
  display: block;
  border-radius: 0;
  transition: transform var(--dur-slow) var(--ease-out);
  flex: 1;
}
.pact-gallery-grid.wp-block-gallery .wp-block-image:hover img { transform: scale(1.04); }
.pact-gallery-grid.wp-block-gallery .wp-block-image figcaption {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 26px 16px 12px;
  font-family: var(--font-display);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: var(--tracking-wide);
  font-size: 14px;
  color: var(--paper);
  background: linear-gradient(180deg, transparent, rgba(5,7,6,0.78));
  text-align: left;
  margin: 0;
}

/* =========================================================================
   Bloc adhésion (fond vert, hibiscus filigrane)
   ========================================================================= */
.pact-join {
  position: relative;
  overflow: hidden;
  background: var(--pact-green);
}
.pact-join-hibiscus {
  position: absolute;
  right: -40px;
  bottom: -60px;
  width: 340px;
  filter: brightness(0);
  opacity: 0.08;
  transform: rotate(20deg);
  pointer-events: none;
}
.pact-join-hibiscus img { width: 100%; height: auto; }
.pact-join-title {
  font-family: var(--font-display);
  font-weight: 900;
  text-transform: uppercase;
  font-size: clamp(40px, 7vw, 72px);
  line-height: 0.95;
  letter-spacing: -0.02em;
  color: var(--ink);
  margin: 12px 0 0;
}
.pact-join-lead {
  font-size: 18px;
  line-height: 1.55;
  color: rgba(10,10,10,0.78);
  margin: 18px auto 0;
  max-width: 520px;
}

/* =========================================================================
   En-tête de page intérieure (fondu signature)
   ========================================================================= */
.pact-page-header {
  position: relative;
  overflow: hidden;
  background: var(--grad-fondu-soft);
  color: var(--paper);
  padding-top: 140px;
  padding-bottom: 56px;
  margin-top: calc(-1 * var(--pact-nav-height, 78px)) !important;
}
/* Fleur d'hibiscus en filigrane sur la droite du bandeau (chemin relatif
   depuis style.css vers assets/img). N'intercepte pas les clics. */
.pact-page-header::after {
  content: "";
  position: absolute;
  right: -35px;
  bottom: -35px;
  width: 240px;
  height: 240px;
  background: url("assets/img/hibiscus.png") no-repeat center / contain;
  filter: grayscale(1) brightness(1.6);
  opacity: 0.2;
  pointer-events: none;
}
/* le titre reste au-dessus de la fleur */
.pact-page-header > * { position: relative; z-index: 1; }
.pact-page-header .wp-block-post-title,
.pact-page-header .wp-block-query-title,
.pact-page-header .wp-block-heading,
.pact-page-header h1 {
  color: var(--paper);
  font-size: clamp(36px, 6vw, 64px);
  line-height: 0.95;
  /* margin-block explicite : neutralise le margin-block-start que WP
     applique à .wp-block-heading (sinon le titre du calendrier se place
     plus haut que celui des pages, qui utilisent .wp-block-post-title). */
  margin-block: 10px 0;
  margin-inline: 0;
}
.pact-page-header .wp-block-post-date,
.pact-page-header .pact-meta {
  color: rgba(255,255,255,0.7);
  font-size: 14px;
}

/* =========================================================================
   Footer
   ========================================================================= */
.pact-footer {
  background: var(--bg-deep);
  color: var(--paper);
}
.pact-footer-flower { width: 52px; height: 52px; flex: 0 0 auto; display: block; }
.pact-footer-word {
  font-family: var(--font-display);
  font-weight: 900;
  font-size: 30px;
  line-height: 0.9;
  letter-spacing: -0.5px;
  color: var(--paper);
  white-space: nowrap;
}
.pact-footer-word .g { color: var(--pact-green); }
.pact-footer-bars { display: flex; gap: 4px; margin-top: 5px; }
.pact-footer-bars i { flex: 1; height: 4px; display: block; }
.pact-footer-tag {
  font-family: var(--font-sans);
  font-weight: 600;
  text-transform: uppercase;
  font-size: 12px;
  letter-spacing: 0.12em;
  line-height: 1.2;
  color: rgba(255,255,255,0.6);
}
.pact-footer-h {
  font-family: var(--font-display);
  font-weight: 700;
  text-transform: uppercase;
  font-size: 14px;
  letter-spacing: 0.08em;
  color: var(--pact-green-300);
  margin: 0 0 14px;
}
.pact-footer-links {
  list-style: none;
  padding-left: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
/* Bloc Navigation natif utilisé dans les colonnes du footer */
.pact-footer-links.wp-block-navigation {
  --wp--style--block-gap: 10px;
  align-items: flex-start;
}
.pact-footer-links .wp-block-navigation-item .wp-block-navigation-item__content {
  padding: 0;
}
.pact-footer a { color: rgba(255,255,255,0.75); text-decoration: none; font-size: 14px; transition: color var(--dur-fast); }
.pact-footer a:hover { color: var(--paper); }
.pact-footer-addr { font-size: 14px; line-height: 1.5; color: rgba(255,255,255,0.75); }
/* Social links (bloc natif wp:social-links, style logos-only) */
.pact-footer-social.wp-block-social-links {
  display: flex;
  gap: 10px;
  margin: 18px 0 0;
  padding: 0;
}
.pact-footer-social .wp-social-link {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  border: 1.5px solid rgba(255,255,255,0.25);
  background: transparent;
  transition: all var(--dur-fast) var(--ease-out);
}
.pact-footer-social .wp-social-link a {
  display: grid;
  place-items: center;
  width: 100%;
  height: 100%;
  padding: 0;
  color: var(--paper);
}
.pact-footer-social .wp-social-link svg {
  width: 18px;
  height: 18px;
  fill: currentColor;
}
.pact-footer-social .wp-social-link:hover {
  background: var(--pact-green);
  border-color: var(--pact-green);
}
.pact-footer-social .wp-social-link:hover a { color: var(--ink); }
.pact-footer-bottom {
  border-top: 1px solid rgba(255,255,255,0.12);
  font-size: 13px;
  color: rgba(255,255,255,0.5);
}
.pact-footer-dots { display: flex; gap: 6px; }
.pact-footer-dots i { width: 10px; height: 10px; border-radius: 50%; display: block; }
.dot-green { background: var(--pact-green); }
.dot-loire { background: var(--loire); }
.dot-pink  { background: var(--hibiscus); }

/* =========================================================================
   Liste d'articles (blog / actualités)
   ========================================================================= */
.pact-post-card {
  background: var(--paper);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
  transition: all var(--dur-base) var(--ease-out);
  height: 100%;
}
.pact-post-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.pact-post-card .wp-block-post-featured-image { margin: 0; }
.pact-post-card .wp-block-post-featured-image img { aspect-ratio: 16 / 9; object-fit: cover; }
.pact-post-card .wp-block-post-title {
  font-size: 22px;
  line-height: 1.05;
}
.pact-post-card .wp-block-post-title a { color: var(--ink); text-decoration: none; }
.pact-post-card .wp-block-post-title a:hover { color: var(--pact-green-700); }
.pact-post-card .wp-block-post-date { font-size: 13px; color: var(--fg-muted); }

/* Pagination */
.wp-block-query-pagination a, .wp-block-query-pagination-numbers .page-numbers {
  font-family: var(--font-display);
  font-weight: 700;
  text-decoration: none;
}

/* Grille de logos partenaires (pattern pact44/partenaires) */
.pact-partners-grid { gap: 18px; align-items: stretch; }
.pact-partner {
  margin: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 18px;
  background: var(--paper);
  border: 1px solid var(--slate-200, #e2e8f0);
  border-radius: 12px;
  aspect-ratio: 3 / 2;
  transition: box-shadow var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out);
}
.pact-partner:hover {
  box-shadow: 0 10px 24px rgba(10, 10, 10, 0.10);
  transform: translateY(-2px);
}
.pact-partner img {
  max-width: 100%;
  max-height: 90px;
  width: auto;
  height: auto;
  object-fit: contain;
  /* logos couleur disparates : neutralise sur fond clair, couleur au survol */
  filter: grayscale(1);
  opacity: 0.85;
  transition: filter var(--dur-base) var(--ease-out), opacity var(--dur-base) var(--ease-out);
}
.pact-partner:hover img { filter: grayscale(0); opacity: 1; }

/* Variante médiathèque : grille construite avec des blocs wp:image
   (chaque image porte la classe .pact-partner). Neutralise les marges
   et le crop par défaut du bloc Image pour retrouver le rendu carte. */
.pact-partners-grid .wp-block-image { margin: 0; }
.pact-partners-grid .wp-block-image.pact-partner {
  /* le bloc Image de WP impose height:100% + display:flex en inline-CSS ;
     on laisse aspect-ratio piloter la hauteur de la carte et on recentre. */
  height: auto;
  padding: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.pact-partners-grid .wp-block-image.pact-partner img {
  display: block;
  max-height: 90px;
  width: auto;
  height: auto;
  object-fit: contain;
  border-radius: 0;
  margin: 0;
}

/* =========================================================================
   Responsive
   ========================================================================= */
@media (max-width: 900px) {
  .pact-events-grid .wp-block-post-template { grid-template-columns: 1fr; }
  .pact-gallery-grid.wp-block-gallery { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 170px; }
  .pact-hero.wp-block-cover { min-height: 80vh; }
}
@media (max-width: 600px) {
  .pact-event-date { flex-basis: 92px; padding: 16px 12px; }
  .pact-nav-word { font-size: 24px; }
  .pact-nav-flower { width: 36px; height: 36px; }
}

/* Préférence utilisateur : réduire les animations */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { transition: none !important; animation: none !important; }
}
