/*
Theme Name: ANMTEPH
Template: anmteph-theme
Description: Thème enfant du thème parent "anmteph-theme" — charte graphique ANMTEPH 2026 (sobre, accessible, RGAA/WCAG AA). Intègre header, footer, fil d'ariane, bandeau d'alerte et cartes (actualité / formation / offre) sous forme de vrais template parts WordPress, plus le kit de tokens visuels du dossier composants-elementor/.
Version: 1.0.0
Author: ANMTEPH
Text Domain: anmteph
*/

/* ============================================================
   1. Design tokens — source de vérité (identique à
   composants-elementor/tokens.css, posé ici une seule fois : plus
   besoin de le coller en Code Snippet séparé si ce thème est actif).
   ============================================================ */
:root {
  --color-primary: #10b981;
  --color-primary-dark: #0a7a5c;
  --color-primary-light: #d1fae5;
  --color-secondary: #2563eb;
  --color-accent: #ff6b4a;
  --color-accent-dark: #e6512f;
  --color-ink: #011520;
  --color-bg: #fafaf9;
  --color-surface: #ffffff;

  --color-gray-100: #f1f3f2;
  --color-gray-200: #e2e6e4;
  --color-gray-300: #c7cdc9;
  --color-gray-500: #6b7570;
  --color-gray-700: #3a4340;

  --color-error: #dc2626;
  --color-error-light: #fee2e2;
  --color-warning: #f59e0b;
  --color-warning-light: #fef3c7;
  --color-warning-text: #92400e;
  --color-focus: #2563eb;
  --color-white: #ffffff;
  --color-secondary-light: #e3ecfd;
  --color-accent-light: #fff1ec;

  --font-base: 'Inter', system-ui, -apple-system, sans-serif;
  --text-xs: 0.875rem;
  --text-sm: .9375rem;
  --text-base: 1rem;
  --text-lg: 1.125rem;
  --text-xl: 1.375rem;
  --text-2xl: 1.75rem;
  --text-3xl: 2.25rem;
  --text-4xl: 2.75rem;
  --text-5xl: 3.5rem;
  --lh-body: 1.5;
  --lh-heading: 1.2;

  --space-1: .5rem;
  --space-2: 1rem;
  --space-3: 1.5rem;
  --space-4: 2rem;
  --space-6: 3rem;
  --space-8: 4rem;
  --space-12: 6rem;

  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-full: 999px;
  --shadow-card: 0 1px 3px rgba(1,21,32,.08), 0 1px 2px rgba(1,21,32,.06);

  /* Largeur de contenu partagée par le header, le footer, .anm-container
     et .wrap (page d'accueil) — un seul gabarit, plus de décalage visuel
     entre les bords du header/footer et le contenu en dessous. */
  --content-max: 1240px;
}

/* Paliers responsive de référence pour l'ensemble du thème (style.css +
   assets/css/*.css) — @media ne peut pas lire une custom property, donc
   ce commentaire fait office de token : 480px (mobile étroit → une seule
   colonne/ligne empilée), 768px (tablette → 2-3 colonnes), 1024px
   (desktop → nav horizontale, grilles complètes). Toute nouvelle règle
   responsive doit se caler sur l'un de ces 3 paliers plutôt qu'inventer
   une valeur voisine (ex: 700px, 900px). Exception assumée : le couple
   782px/783px de my-account.css (nav de l'espace "Mon compte") est calé
   sur le breakpoint natif de l'admin bar WordPress, pas sur cette échelle
   — volontairement distinct, ne pas l'aligner sur 768px. */

:where(a, button, input, select, textarea, [tabindex]):focus-visible {
  outline: 3px solid var(--color-focus);
  outline-offset: 2px;
}

/* Footer collé en bas même sur les pages courtes (sinon du blanc reste
   sous le footer quand le contenu ne remplit pas le viewport). */
html, body { height: 100%; }
body { display: flex; flex-direction: column; min-height: 100vh; }
main { flex: 1 0 auto; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* Conteneur générique — remplace les max-width:1280px répétés
   dans chaque composant HTML d'origine. */
.anm-container {
  max-width: var(--content-max);
  margin: 0 auto;
  padding: 0 var(--space-3);
}

/* Boutons partagés (header, cartes formation, formulaire...).
   all:unset + !important : même fuite Elementor/thème parent que
   .anm-header__burger/.anm-nav-toggle (styles de lien/bouton globaux
   imposés en !important sur les <a>) — même parade, sinon nos <a
   class="anm-btn"> ressortent surdimensionnés et soulignés. */
.anm-btn {
  all: unset;
  box-sizing: border-box;
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 44px; padding: 0 var(--space-3);
  border-radius: var(--radius-sm) !important; font-weight: 600 !important; font-size: var(--text-base) !important;
  line-height: 1.2 !important;
  text-decoration: none !important; cursor: pointer; border: 2px solid transparent !important;
  transition: background-color 200ms ease, border-color 200ms ease, color 200ms ease;
  font-family: var(--font-base);
}
.anm-btn--primary { background: var(--color-primary) !important; color: var(--color-white) !important; }
.anm-btn--primary:hover { background: var(--color-primary-dark) !important; }
.anm-btn--outline { background: transparent !important; border-color: var(--color-primary) !important; color: var(--color-primary-dark) !important; }
.anm-btn--outline:hover { background: var(--color-primary) !important; color: var(--color-white) !important; }

/* ============================================================
   2. Header
   ============================================================ */
.anm-header {
  font-family: var(--font-base);
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-gray-200);
  position: sticky;
  top: 0;
  z-index: 100;
}
.anm-header__inner {
  max-width: var(--content-max);
  margin: 0 auto;
  padding: var(--space-2) var(--space-3);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
}
.anm-header__logo { display: flex; align-items: center; }
.anm-header__logo img,
.anm-header__logo .custom-logo { display: block; height: 96px; width: auto; }
.anm-header__logo .site-title { color: var(--color-ink); text-decoration: none; font-weight: 700; }

.anm-header__right { display: flex; align-items: center; gap: var(--space-2); }

.anm-header__burger {
  /* Même fuite Elementor que .anm-nav-toggle (fond/couleur imposés sur les
     <button>) : all:unset + !important, même parade. */
  all: unset;
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px;
  border-radius: var(--radius-sm);
  color: var(--color-ink); cursor: pointer;
  background: var(--color-surface) !important;
  border: 1px solid var(--color-gray-200) !important;
  box-shadow: none !important;
}
.anm-header__burger:hover,
.anm-header__burger:focus,
.anm-header__burger:focus-visible,
.anm-header__burger:active {
  background: var(--color-surface) !important;
  border-color: var(--color-gray-200) !important;
  box-shadow: none !important;
}
.anm-header__burger svg {
  width: 22px !important; height: 22px !important;
  opacity: 1 !important; visibility: visible !important; display: block !important;
  color: inherit !important; stroke: currentColor !important;
}

.anm-header__nav {
  position: absolute; top: 100%; left: 0; right: 0;
  background: var(--color-surface); border-bottom: 1px solid var(--color-gray-200);
  padding: var(--space-2) var(--space-3) var(--space-3);
  display: none; flex-direction: column; gap: var(--space-2);
  max-height: calc(100vh - 62px); overflow-y: auto;
}
.anm-header__nav.is-open { display: flex; }

.anm-nav-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.anm-nav-item { border-bottom: 1px solid var(--color-gray-200); }
.anm-nav-item:last-child { border-bottom: none; }
.anm-nav-row { display: flex; align-items: center; justify-content: space-between; }
.anm-nav-list a {
  display: flex; align-items: center;
  min-height: 44px; flex: 1;
  color: var(--color-ink); text-decoration: none;
  font-size: var(--text-base); font-weight: 500;
}
.anm-nav-list a:hover,
.anm-nav-list a:focus-visible,
.anm-nav-item.is-current > .anm-nav-row > a {
  color: var(--color-primary-dark);
}

.anm-nav-toggle {
  /* all:unset : même fuite de style bouton (Elementor/thème parent) que
     documentée dans snippets/anm-espace-expert.php, même parade. Le fond
     rose survit à all:unset seul (règle globale Elementor en !important),
     d'où le !important ici aussi pour le neutraliser sur tous les états. */
  all: unset;
  width: 44px; height: 44px; flex-shrink: 0;
  color: var(--color-gray-500); cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
}
.anm-nav-toggle:hover,
.anm-nav-toggle:focus,
.anm-nav-toggle:focus-visible,
.anm-nav-toggle:active,
.anm-header .anm-nav-item .anm-nav-toggle:hover,
.anm-header .anm-nav-item .anm-nav-toggle:focus,
.anm-header .anm-nav-item .anm-nav-toggle:active {
  background: transparent !important;
  border: none !important;
  box-shadow: none !important;
  color: var(--color-gray-500) !important; /* ← ajout */
}


.anm-nav-toggle svg {
  /* Même fuite Elementor : une règle globale ciblant [aria-expanded="true"]
     (icône d'accordéon Elementor) rendait la flèche invisible une fois le
     sous-menu ouvert. !important pour la garder visible dans les deux états. */
  width: 18px !important; height: 18px !important;
  opacity: 1 !important; visibility: visible !important; display: block !important;
  color: inherit !important; stroke: currentColor !important;
  transition: transform 180ms ease;
}
.anm-nav-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }

.anm-sub-menu {
  list-style: none; margin: 0 0 var(--space-1); padding: 0 0 0 var(--space-2);
  display: none; flex-direction: column;
}
.anm-sub-menu a { min-height: 40px; font-weight: 400; font-size: var(--text-sm); }
.anm-nav-item.is-open > .anm-sub-menu { display: flex; }

.anm-header__search { position: relative; }
.anm-search-btn {
  /* Même fuite Elementor que .anm-nav-toggle/.anm-header__burger : all:unset
     + !important, même parade. */
  all: unset;
  width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--radius-sm);
  color: var(--color-ink); cursor: pointer;
  background: var(--color-surface) !important;
  border: 1px solid var(--color-gray-200) !important;
  box-shadow: none !important;
}
.anm-search-btn:hover,
.anm-search-btn:focus,
.anm-search-btn:focus-visible,
.anm-search-btn:active {
  background: var(--color-surface) !important;
  border-color: var(--color-gray-200) !important;
  box-shadow: none !important;
}
.anm-search-btn svg,
.anm-header__right .anm-header__search .anm-search-btn svg {
  /* Sélecteur renforcé (ancêtres qualifiés) : même fuite Elementor que
     .anm-nav-toggle svg / .anm-header__burger svg plus haut, qui ont eu
     besoin d'une spécificité accrue pour gagner sur la règle globale
     Elementor — un simple ".anm-search-btn svg" ne suffisait pas et
     laissait la loupe invisible (icône "en trop" retirée par Elementor
     sur les boutons avec aria-expanded). */
  width: 20px !important; height: 20px !important;
  opacity: 1 !important; visibility: visible !important; display: block !important;
  color: inherit !important; stroke: currentColor !important;
}
.anm-search-form {
  position: absolute; top: calc(100% + var(--space-1)); right: 0;
  background: var(--color-surface); border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-sm); box-shadow: var(--shadow-card);
  padding: var(--space-1); display: none; gap: var(--space-1); width: min(300px, 80vw);
}
.anm-search-form.is-open { display: flex; }
.anm-search-form input[type="search"] {
  flex: 1; min-height: 44px; padding: 0 var(--space-2);
  border: 1px solid var(--color-gray-200); border-radius: var(--radius-sm);
  font-size: var(--text-base); color: var(--color-ink);
}
/* Vert (--color-primary), pas le bleu --color-focus par défaut du site
   (règle :focus-visible globale plus haut) — même choix que les
   formulaires PMPro/préinscription (cf. assets/css/pmpro.css). */
.anm-search-form input[type="search"]:focus {
  border-color: var(--color-primary);
  outline: none;
}
.anm-search-form input[type="search"]:focus-visible {
  outline: 3px solid var(--color-primary) !important;
  outline-offset: 2px;
}

/* Mobile : ".anm-search-form" ancré en absolute sur ".anm-header__search"
   (44px de large, positionné n'importe où dans la rangée burger/CTA)
   pouvait déborder hors écran une fois ouvert (right:0 d'un élément
   étroit + largeur fixe ne garantit rien par rapport au viewport). On le
   ré-ancre plutôt sur ".anm-header" (pleine largeur, seul ancêtre
   position:sticky) avec les mêmes marges que le conteneur du header :
   toujours dans l'écran, quelle que soit la position du bouton loupe. */
@media (max-width: 480px) {
  .anm-header__search { position: static; }
  .anm-search-form {
    left: var(--space-3);
    right: var(--space-3);
    top: 100%;
    width: auto;
  }
}

/* Desktop ≥ 1024px : nav horizontale + menus déroulants au survol/focus.
   !important sur display : même fuite Elementor que le reste du header
   (règle globale du parent qui force display:none sur ce conteneur en
   desktop), sinon la nav reste masquée même hors mode burger. */
@media (min-width: 1024px) {
  .anm-header__burger { display: none; }
  .anm-header__nav {
    position: static; display: flex !important; flex-direction: row;
    align-items: stretch; border: none; padding: 0; max-height: none; overflow: visible;
    flex: 1; justify-content: flex-end; gap: var(--space-3);
  }
  .anm-nav-list { flex-direction: row; align-items: center; gap: var(--space-1); }
  .anm-nav-item { position: relative; border-bottom: 2px solid transparent; }
  .anm-nav-item.is-current { border-bottom-color: var(--color-primary); }
  .anm-nav-row { padding: 0 var(--space-1); }
  .anm-nav-list a { min-height: 60px; padding: 0 .25rem; }
  .anm-nav-toggle { width: 26px; height: 60px; }

  .anm-sub-menu {
    position: absolute; top: 100%; left: 0; min-width: 260px;
    background: var(--color-surface); border: 1px solid var(--color-gray-200);
    border-radius: var(--radius-sm); box-shadow: var(--shadow-card);
    padding: var(--space-1) 0; margin: 0;
  }
  /* Sans ce reset, ".anm-nav-list a" (min-height:60px, ligne au-dessus)
     s'applique aussi ici car les <a> du sous-menu sont imbriqués dans
     .anm-nav-list — d'où des lignes de dropdown deux fois trop hautes. */
  .anm-sub-menu a { min-height: 40px; padding-inline: var(--space-2); }
}

/* ============================================================
   3. Footer
   ============================================================ */
.anm-footer {
  font-family: var(--font-base);
  background: var(--color-bg);
  color: var(--color-ink);
  border-top: 1px solid var(--color-gray-200);
  padding: var(--space-6) var(--space-3) var(--space-4);
}
.anm-footer__inner {
  max-width: var(--content-max);
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
}
.anm-footer__logo .custom-logo { height: 72px; width: auto; display: block; margin-bottom: var(--space-2); }
.anm-footer__col p { color: var(--color-gray-500); }
.anm-footer__col h3 {
  font-size: var(--text-base);
  font-weight: 700;
  margin: 0 0 var(--space-2);
  color: var(--color-ink);
}
.anm-footer__col ul { list-style: none; margin: 0; padding: 0; }
.anm-footer__col li { margin-bottom: var(--space-2); }
.anm-footer__col a {
  color: var(--color-gray-500);
  text-decoration: none;
}
.anm-footer__col a:hover { color: var(--color-primary-dark); text-decoration: underline; }

.anm-footer__phone { display: flex; align-items: center; gap: var(--space-1); }
.anm-footer__phone svg { width: 16px; height: 16px; color: var(--color-primary); flex-shrink: 0; }
.anm-footer__phone a { font-weight: 600; color: var(--color-ink); }

.anm-footer__legal {
  border-top: 1px solid var(--color-gray-200);
  margin-top: var(--space-6);
  padding-top: var(--space-3);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  font-size: var(--text-xs);
  color: var(--color-gray-500);
  max-width: var(--content-max);
  margin-left: auto;
  margin-right: auto;
}
.anm-footer__legal ul { list-style: none; display: flex; gap: var(--space-3); margin: 0; padding: 0; flex-wrap: wrap; }
.anm-footer__legal a { color: var(--color-gray-500); }
.anm-footer__legal a:hover { color: var(--color-primary-dark); }

@media (min-width: 768px) {
  .anm-footer__inner { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1024px) {
  .anm-footer__inner { grid-template-columns: 1.2fr 1fr 1fr 1fr; }
}

/* ============================================================
   4. Fil d'ariane
   ============================================================ */
.anm-breadcrumb-nav { margin: var(--space-2) 0; }
.anm-breadcrumb {
  font-family: var(--font-base);
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-1);
  margin: 0;
  padding: 0;
  font-size: var(--text-xs);
  color: var(--color-gray-500);
}
.anm-breadcrumb__item { display: flex; align-items: center; gap: var(--space-1); }
.anm-breadcrumb__item:not(:first-child)::before {
  content: "/";
  color: var(--color-gray-500);
}
.anm-breadcrumb a { color: var(--color-primary-dark); text-decoration: none; }
.anm-breadcrumb a:hover { text-decoration: underline; }
.anm-breadcrumb__item[aria-current="page"] { color: var(--color-ink); font-weight: 600; }

/* Sortie native de yoast_breadcrumb() : pas de <li>, on habille son
   propre wrapper (ponytail: approximation visuelle, pas une reprise
   exacte du marquage — suffisant, Yoast ne fournit pas de <li>). */
.yoast-breadcrumb {
  font-family: var(--font-base);
  font-size: var(--text-xs);
  color: var(--color-gray-500);
}
.yoast-breadcrumb a { color: var(--color-primary-dark); text-decoration: none; }
.yoast-breadcrumb a:hover { text-decoration: underline; }

/* ============================================================
   5. Bandeau alerte
   ============================================================ */
.anm-alert {
  font-family: var(--font-base);
  display: flex;
  align-items: flex-start;
  gap: var(--space-2);
  background: var(--color-accent-light);
  border: 1px solid var(--color-accent);
  border-radius: var(--radius-sm);
  padding: var(--space-2) var(--space-3);
  max-width: 1280px;
  margin: var(--space-2) auto;
}
.anm-alert__icon { flex-shrink: 0; width: 24px; height: 24px; color: var(--color-accent); margin-top: .1rem; }
.anm-alert__body { flex: 1; font-size: var(--text-base); color: var(--color-ink); }
.anm-alert__body a { color: var(--color-ink); font-weight: 600; }
.anm-alert__close {
  flex-shrink: 0;
  width: 44px; height: 44px;
  display: inline-flex; align-items: center; justify-content: center;
  background: none; border: none; cursor: pointer;
  color: var(--color-ink);
}
.anm-alert__close svg { width: 20px; height: 20px; }
.anm-alert.is-hidden { display: none; }

/* ============================================================
   6. Cartes (actualité / formation / offre) + grille
   ============================================================ */
.anm-card-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-3);
}
@media (min-width: 768px) { .anm-card-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .anm-card-grid { grid-template-columns: repeat(3, 1fr); } }

.anm-card--actu {
  position: relative;
  font-family: var(--font-base);
  background: var(--color-surface);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  overflow: hidden;
  transition: box-shadow 200ms ease, transform 200ms ease;
}
.anm-card--actu:hover { box-shadow: var(--shadow-card); transform: translateY(-2px); }
.anm-card__media { aspect-ratio: 16 / 9; overflow: hidden; background: var(--color-gray-200); }
.anm-card__media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.anm-card__body { padding: var(--space-3); }
.anm-card--actu .anm-card__date {
  display: block;
  font-size: var(--text-xs);
  color: var(--color-primary-dark);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .03em;
  margin-bottom: var(--space-1);
}
.anm-card__title { font-size: var(--text-lg); line-height: 1.3; margin: 0 0 var(--space-1); color: var(--color-ink); }
.anm-card__title-link { color: inherit; text-decoration: none; }
.anm-card__title-link::after { content: ""; position: absolute; inset: 0; }
.anm-card__title-link:hover { text-decoration: underline; }
.anm-card__excerpt { font-size: var(--text-base); color: var(--color-gray-500); margin: 0; }

.anm-card--formation {
  font-family: var(--font-base);
  background: var(--color-surface);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  padding: var(--space-3);
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  transition: box-shadow 200ms ease;
}
.anm-card--formation:hover { box-shadow: var(--shadow-card); }
.anm-card__badge {
  display: inline-flex;
  align-self: flex-start;
  background: var(--color-primary);
  color: var(--color-white);
  font-size: var(--text-xs);
  font-weight: 700;
  padding: .25rem .75rem;
  border-radius: var(--radius-sm);
}
.anm-card__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-size: var(--text-base);
  color: var(--color-gray-500);
  margin: 0;
  list-style: none;
  padding: 0;
}
.anm-card__meta li { display: flex; align-items: center; gap: .35rem; }
.anm-card__meta svg { width: 18px; height: 18px; flex-shrink: 0; }
.anm-card__actions { display: flex; gap: var(--space-2); flex-wrap: wrap; margin-top: var(--space-1); }

.anm-card--offre {
  font-family: var(--font-base);
  background: var(--color-surface);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  padding: var(--space-3);
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  transition: box-shadow 200ms ease;
}
.anm-card--offre:hover { box-shadow: var(--shadow-card); }
.anm-card__top { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--space-2); }
.anm-card__contract-badge {
  flex-shrink: 0;
  font-size: var(--text-xs);
  font-weight: 700;
  padding: .25rem .75rem;
  border-radius: var(--radius-sm);
  background: var(--color-secondary-light);
  color: var(--color-secondary);
}
.anm-card__meta-text { font-size: var(--text-base); color: var(--color-gray-500); margin: 0; }
.anm-card--offre .anm-card__date { font-size: var(--text-xs); color: var(--color-gray-500); margin: var(--space-1) 0 0; }
.anm-card__cta {
  all: unset;
  box-sizing: border-box;
  align-self: flex-start;
  margin-top: var(--space-2);
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 44px; padding: 0 var(--space-3);
  border-radius: var(--radius-sm) !important; font-weight: 600 !important; font-size: var(--text-base) !important;
  line-height: 1.2 !important;
  text-decoration: none !important; cursor: pointer;
  background: var(--color-accent) !important; color: var(--color-white) !important;
  transition: background-color 200ms ease;
  font-family: var(--font-base);
}
.anm-card__cta:hover { background: var(--color-accent-dark); }

/* ============================================================
   6bis. Carte "Cours" Tutor LMS — shortcode [tutor_course], utilisé
   sur Catalogue des formations et Mes formations. Classes natives du
   plugin (tutor-course-card, tutor-course-name, tutor-meta...) : pas
   de template réécrit pour la carte elle-même, on garde sa logique
   (notation, catégories) et on n'habille que le rendu, pour coller aux
   cartes ci-dessus.
   Seul le footer de carte (CTA) est réécrit, par
   anmteph-child/tutor/loop/footer.php (surcharge officielle Tutor) :
   il décide sur le vrai statut serveur (is_enrolled/accès contenu)
   entre 2 boutons mutuellement exclusifs, tous deux en fond plein vert —
   natif "Continuer/Commencer à apprendre" et préinscription
   (.anm-card-inscription-btn), même connecté ou non (cf. footer.php).
   Le bouton natif Tutor étant en dur .tutor-btn-outline-primary (contour,
   fond transparent), les CSS custom properties de Tutor ne suffisent pas
   pour un fond plein : on force background/border/color, scopé au footer
   de carte pour ne pas toucher les boutons outline-primary ailleurs sur
   le site (dashboard Tutor...).
   ============================================================ */
.tutor-course-card {
  font-family: var(--font-base);
  background: var(--color-surface);
  border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md);
  overflow: hidden;
  transition: box-shadow 200ms ease, transform 200ms ease;
}
.tutor-course-card:hover { box-shadow: var(--shadow-card); transform: translateY(-2px); }
.tutor-course-card .tutor-card-body { padding: var(--space-3); }

.tutor-course-card .tutor-course-bookmark .tutor-iconic-btn-secondary {
  background: var(--color-primary-light);
  color: var(--color-primary-dark);
}

.tutor-course-card .tutor-course-name,
.tutor-course-card .tutor-course-name a { color: var(--color-ink); font-weight: 600; }
.tutor-course-card .tutor-course-name a:hover { text-decoration: underline; }

.tutor-course-card .tutor-meta,
.tutor-course-card .tutor-meta-value,
.tutor-course-card .tutor-meta-icon { color: var(--color-gray-500); }
.tutor-course-card .tutor-meta a { color: var(--color-gray-700); text-decoration: underline; }
.tutor-course-card .tutor-meta a:hover { color: var(--color-primary-dark); }

/* Gabarit commun aux 2 CTA de footer de carte : bouton natif Tutor
   (.tutor-btn-outline-primary) + .anm-card-inscription-btn (rendu par
   anmteph-child/tutor/loop/footer.php sur un <a> nu). Padding vertical
   (pas juste horizontal) + line-height : le libellé long ("Se préinscrire
   à cette formation") passe sur 2 lignes, il lui faut de l'air au-dessus/
   en dessous plutôt que le texte collé aux bords du bouton. Même parade
   !important + all:unset que .anm-btn plus haut contre les styles de lien
   du thème parent. Les deux boutons partagent aussi le même fond plein
   vert (jamais affichés en même temps, cf. footer.php). */
.tutor-course-card .tutor-card-footer .tutor-btn-outline-primary,
.tutor-course-card .anm-card-inscription-btn {
  all: unset;
  box-sizing: border-box;
  display: flex !important; align-items: center; justify-content: center;
  margin: 0 var(--space-3) var(--space-3) !important;
  min-height: 44px; padding: var(--space-2) var(--space-3) !important;
  border-radius: var(--radius-sm) !important; font-weight: 600 !important; font-size: var(--text-base) !important;
  line-height: 1.35 !important; text-align: center;
  text-decoration: none !important; cursor: pointer;
  border: 2px solid var(--color-primary) !important;
  background: var(--color-primary) !important; color: var(--color-white) !important;
  transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease;
  font-family: var(--font-base);
}
.tutor-course-card .tutor-card-footer .tutor-btn-outline-primary:hover,
.tutor-course-card .anm-card-inscription-btn:hover {
  background: var(--color-primary-dark) !important; border-color: var(--color-primary-dark) !important; color: var(--color-white) !important;
}

/* ============================================================
   7. Habillage des templates génériques hérités du thème parent
   (anmteph-theme) (page-header / page-content / pagination communs à archive.php,
   search.php, single.php, 404.php)
   ============================================================ */
.page-header { padding: var(--space-4) 0 var(--space-3); font-family: var(--font-base); }
.page-header .entry-title { font-size: var(--text-4xl); line-height: var(--lh-heading); color: var(--color-ink); margin: 0; }
.page-content { padding-bottom: var(--space-6); font-family: var(--font-base); color: var(--color-ink); }

/* single-tribe_events.php : bloc méta événement (date/lieu/organisateur/
   tarif), même liste à puce à icône que .anm-card__meta mais empilée
   verticalement au lieu de wrap horizontal en grille de carte. */
.anm-event-meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-3);
  background: var(--color-surface); border: 1px solid var(--color-gray-200);
  border-radius: var(--radius-md); padding: var(--space-3); margin-bottom: var(--space-4);
}
.anm-card__meta--stacked { flex-direction: column; align-items: flex-start; gap: var(--space-2); }
.anm-card__meta--stacked a { color: inherit; text-decoration: underline; }
.pagination {
  display: flex; justify-content: space-between;
  font-family: var(--font-base); padding-bottom: var(--space-6);
}
.pagination a { color: var(--color-primary-dark); font-weight: 600; text-decoration: none; }
.pagination a:hover { text-decoration: underline; }

/* ============================================================
   8. Page d'accueil — repris de apercu-page-accueil.html
   (Présentation ANMTEPH / 3 accès rapides / actualités / chiffres-clés).
   Contenu construit à la main dans Elementor (cf. INTEGRATION.md §4),
   seul le CSS est repris ici. Header/footer de l'aperçu volontairement
   PAS repris : déjà couverts par les sections 2/3 ci-dessus (source de
   vérité = composants-elementor/header.html et footer.html), un
   deuxième jeu de classes (.footer-grid, .footer-col…) ferait doublon
   avec .anm-footer__* déjà câblé sur footer.php.
   ============================================================ */
.wrap { max-width: var(--content-max); margin: 0 auto; padding-inline: var(--space-3); }

.eyebrow {
  display: inline-flex; align-items: center; gap: var(--space-1);
  font-size: var(--text-xs); font-weight: 700; letter-spacing: .08em;
  text-transform: uppercase; color: var(--color-primary-dark); margin-bottom: var(--space-1);
}

.skip-link { position: absolute; left: -999px; top: 0; background: var(--color-ink); color: var(--color-white); padding: .75rem 1rem; z-index: 200; }
.skip-link:focus { left: var(--space-2); top: var(--space-2); }

/* !important : même fuite de style lien/bouton global (Elementor/thème
   parent) que .anm-btn ci-dessus, cf. commentaire §2 — .btn est utilisé
   sur des <a> (CTA header/footer/accueil) qui y sont exposés. */
.btn, #commentform input#submit { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; padding-inline: var(--space-3); border-radius: var(--radius-sm) !important; font-weight: 700 !important; font-size: var(--text-sm) !important; text-decoration: none !important; cursor: pointer; border: 2px solid transparent; transition: background-color 180ms ease, border-color 180ms ease, color 180ms ease; white-space: nowrap; }
.btn--accent { background: var(--color-accent) !important; color: var(--color-white) !important; }
.btn--accent:hover { background: var(--color-accent-dark) !important; }
.btn--primary, #commentform input#submit { background: var(--color-primary) !important; color: var(--color-white) !important; }
.btn--primary:hover, #commentform input#submit:hover { background: var(--color-primary-dark) !important; }
.btn--outline { border-color: var(--color-primary) !important; color: var(--color-primary-dark) !important; }
.btn--outline:hover { background: var(--color-primary) !important; color: var(--color-white) !important; }

/* WP core met l'astérisque obligatoire dans <span class="required"> */
#commentform .required { color: var(--color-error); }

/* Rythme vertical entre sections + reset padding : scopés à
   body.anm-home (posé automatiquement sur is_front_page(), cf.
   functions.php) pour ne pas déborder sur archive.php/single.php qui
   utilisent aussi <main> et peuvent contenir leurs propres <section>. */
body.anm-home section { padding-block: 0; }
body.anm-home main > * + * { margin-top: var(--space-8); }

.section__head { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--space-3); margin-bottom: var(--space-4); flex-wrap: wrap; }
.section__head h2 { font-size: var(--text-2xl); }
.section__link { font-weight: 700; font-size: var(--text-sm); color: var(--color-primary-dark); text-decoration: none; white-space: nowrap; }
.section__link:hover { text-decoration: underline; }

/* Lien de retour (ex. single-tribe_events.php > archive évènements). */
.anm-back-link { display: inline-flex; align-items: center; gap: var(--space-1); margin-bottom: var(--space-4); font-weight: 700; font-size: var(--text-sm); color: var(--color-primary-dark); text-decoration: none; }
.anm-back-link:hover { text-decoration: underline; }

/* Archive évènements (tribe_events) : groupes "à venir" / "passés". */
.anm-events-group + .anm-events-group { margin-top: var(--space-8); }
.anm-events-empty { color: var(--color-gray-500); }

/* Archive évènements : onglets Liste / Mois / Jour (gabarit maison,
   cf. inc/events-calendar-views.php). */
.anm-cal-tabs { display: flex; gap: var(--space-1); border-bottom: 1px solid var(--color-gray-200); margin-bottom: var(--space-4); }
.anm-cal-tab { padding: var(--space-1) var(--space-2); font-weight: 700; font-size: var(--text-sm); color: var(--color-gray-500); text-decoration: none; border-bottom: 2px solid transparent; }
.anm-cal-tab:hover { color: var(--color-ink); }
.anm-cal-tab.is-active { color: var(--color-primary-dark); border-bottom-color: var(--color-primary); }

.anm-cal-nav { display: flex; align-items: center; justify-content: center; gap: var(--space-3); margin-bottom: var(--space-4); }
.anm-cal-nav__title { font-size: var(--text-xl); text-transform: capitalize; margin: 0; min-width: 12ch; text-align: center; }
.anm-cal-nav__btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 2.25rem; height: 2.25rem; border: 1px solid var(--color-gray-300); border-radius: var(--radius-md);
  color: var(--color-ink); text-decoration: none;
}
.anm-cal-nav__btn:hover { border-color: var(--color-primary); color: var(--color-primary-dark); }

.anm-cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); border: 1px solid var(--color-gray-200); border-radius: var(--radius-md); overflow: hidden; }
.anm-cal-grid__head { padding: var(--space-1); text-align: center; font-size: var(--text-xs); font-weight: 700; color: var(--color-gray-500); background: var(--color-gray-100); }
.anm-cal-day {
  display: flex; flex-direction: column; gap: 4px; min-height: 6rem; padding: var(--space-1);
  background: var(--color-surface); color: inherit; text-decoration: none;
  border-top: 1px solid var(--color-gray-200); border-left: 1px solid var(--color-gray-200);
}
.anm-cal-day:nth-child(7n+1) { border-left: none; }
.anm-cal-day:hover { background: var(--color-gray-100); }
.anm-cal-day--out { background: var(--color-gray-100); color: var(--color-gray-500); }
.anm-cal-day--today .anm-cal-day__num {
  display: inline-flex; align-items: center; justify-content: center;
  width: 1.75rem; height: 1.75rem; border-radius: var(--radius-full);
  background: var(--color-primary); color: var(--color-white);
}
.anm-cal-day__num { font-weight: 700; font-size: var(--text-sm); }
.anm-cal-day__events { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 2px; }
.anm-cal-day__events li {
  font-size: var(--text-xs); padding: 1px 6px; border-radius: var(--radius-sm);
  background: var(--color-primary-light); color: var(--color-primary-dark);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.anm-cal-day__events li.anm-cal-day__more { background: none; color: var(--color-gray-500); padding-left: 0; }

/* Vue Semaine : mêmes colonnes que la grille mois, une seule rangée,
   pas de rangée d'en-tête "L M M J V S D" séparée (le jour+date est
   dans chaque case), et pas de troncature des évènements. */
.anm-cal-day--week { min-height: 14rem; }
.anm-cal-day__weekday { font-weight: 700; font-size: var(--text-xs); color: var(--color-gray-500); text-transform: capitalize; }

@media (max-width: 640px) {
  .anm-cal-grid { grid-template-columns: repeat(7, minmax(0, 1fr)); font-size: var(--text-xs); }
  .anm-cal-day:not(.anm-cal-day--week) { min-height: 3.5rem; }
  .anm-cal-day:not(.anm-cal-day--week) .anm-cal-day__events li { display: none; }
  .anm-cal-grid--week { grid-template-columns: 1fr; }
  .anm-cal-day--week { min-height: auto; border-left: none; }
}

/* Présentation ANMTEPH */
.presentation { padding-top: var(--space-8); padding-bottom: var(--space-6); border-bottom: 1px solid var(--color-gray-200); }
.presentation__grid { display: grid; gap: var(--space-6); }
@media (min-width: 900px) { .presentation__grid { grid-template-columns: 1fr 1.3fr; align-items: center; } }
.presentation__photo {
  margin: 0; aspect-ratio: 4 / 3; border-radius: var(--radius-md);
  background: var(--color-gray-100); border: 1px solid var(--color-gray-200);
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: var(--space-2); color: var(--color-gray-500);
}
.presentation__photo svg { width: 40px; height: 40px; opacity: .5; }
.presentation__photo figcaption { font-size: var(--text-xs); text-align: center; max-width: 22ch; padding-inline: var(--space-2); }
/* < 900px : la grille passe en colonne unique (pas de media query dédiée
   plus haut, c'est le comportement par défaut de .presentation__grid) —
   la photo prend alors toute la largeur de l'écran, et son aspect-ratio
   4/3 donne une boîte énorme pour une simple icône placeholder. Plafond
   de hauteur pour ne pas écraser le reste du contenu sous le pli. */
@media (max-width: 899px) {
  .presentation__photo { max-height: 280px; }
}
.presentation h2 { font-size: var(--text-3xl); text-transform: uppercase; letter-spacing: -.01em; margin-bottom: var(--space-3); }
.presentation h2 .drop { color: var(--color-primary); }
.presentation p { max-width: 68ch; color: var(--color-ink); font-size: var(--text-lg); }
.presentation p + p { margin-top: var(--space-3); }

/* Logos de certification Qualiopi / ANDPC — même hauteur pour un alignement
   propre côte à côte, largeur libre pour ne pas déformer chaque logo. */
.cert-badges { display: flex; flex-wrap: nowrap; gap: var(--space-1); align-items: center; }
.cert-badge { height: 64px; width: auto; }

/* 3 accès rapides */
.quick-grid { display: grid; gap: var(--space-3); grid-template-columns: 1fr; }
@media (min-width: 768px) { .quick-grid { grid-template-columns: repeat(3, 1fr); } }
.quick-card { background: var(--color-surface); border: 1px solid var(--color-gray-200); border-radius: var(--radius-sm); padding: var(--space-3); display: flex; flex-direction: column; gap: var(--space-2); text-decoration: none; color: var(--color-ink); transition: border-color 180ms ease, box-shadow 180ms ease; }
.quick-card:hover { border-color: var(--quick-color, var(--color-primary)); box-shadow: var(--shadow-card); }
.quick-card__icon { width: 44px; height: 44px; border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; background: color-mix(in srgb, var(--quick-color, var(--color-primary)) 12%, transparent); color: var(--quick-color, var(--color-primary)); }
.quick-card__icon svg { width: 22px; height: 22px; }
.quick-card h3 { font-size: var(--text-lg); }
.quick-card p { margin: 0; color: var(--color-gray-500); font-size: var(--text-sm); }
.quick-card__arrow { margin-top: auto; font-weight: 700; font-size: var(--text-sm); color: var(--quick-color, var(--color-primary)); }

/* Actualités (mise en avant homepage — distinct des cartes de boucle
   .anm-card--actu réutilisées dans archive.php/search.php) */
.actu-grid { display: grid; gap: var(--space-3); grid-template-columns: 1fr; }
@media (min-width: 768px) { .actu-grid { grid-template-columns: repeat(3, 1fr); } }
.actu-card { position: relative; border: 1px solid var(--color-gray-200); border-radius: var(--radius-sm); overflow: hidden; background: var(--color-surface); transition: box-shadow 180ms ease, transform 180ms ease; }
.actu-card:hover { box-shadow: var(--shadow-card); transform: translateY(-2px); }
.actu-card__media { aspect-ratio: 16/9; background: var(--color-gray-100); display: flex; align-items: center; justify-content: center; color: var(--color-gray-500); font-size: var(--text-xs); gap: .4rem; flex-direction: column; }
.actu-card__media svg { width: 26px; height: 26px; opacity: .6; }
.actu-card__body { padding: var(--space-3); }
.actu-card time { display: block; font-size: var(--text-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--color-primary-dark); margin-bottom: .35rem; }
.actu-card h3 { font-size: var(--text-lg); margin-bottom: .35rem; }
.actu-card a::after { content: ""; position: absolute; inset: 0; }
.actu-card p { margin: 0; font-size: var(--text-sm); color: var(--color-gray-500); }

/* Chiffres-clés — bandeau compact à filets, pas de fond sombre */
.stats { margin-top: var(--space-12); border-top: 1px solid var(--color-gray-200); border-bottom: 1px solid var(--color-gray-200); padding-block: 0; }
.stats__grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0; }
@media (min-width: 768px) { .stats__grid { grid-template-columns: repeat(4, 1fr); } }
.stat { padding: var(--space-1) var(--space-2); border-left: 1px solid var(--color-gray-200); display: flex; align-items: baseline; gap: .4rem; }
.stat:first-child, .stat:nth-child(3) { border-left: none; }
@media (min-width: 768px) { .stat:nth-child(3) { border-left: 1px solid var(--color-gray-200); } }
.stat strong { font-variant-numeric: tabular-nums; font-size: var(--text-lg); font-weight: 800; color: var(--color-primary-dark); white-space: nowrap; }
.stat span { font-size: var(--text-xs); color: var(--color-gray-500); }
