/* Améliorations front-end réinjectées après l'aplatissement des pages :
   apparitions au défilement, survols, curseur personnalisé.
   Principe de sécurité : le contenu est visible PAR DÉFAUT. Il n'est masqué
   pour l'animation que si le JS a pu s'exécuter (classe .js-anim sur <html>)
   et jamais en mode administrateur. */

/* --- Apparition au défilement --- */
html.js-anim .reveal-init {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.7s cubic-bezier(0.16, 1, 0.3, 1), transform 0.7s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}
html.js-anim .reveal-init.reveal-in {
  opacity: 1;
  transform: none;
}
body[data-admin="true"] .reveal-init {
  opacity: 1 !important;
  transform: none !important;
}

/* --- Survols (recréés génériquement) --- */
nav a { transition: background 0.25s ease, color 0.25s ease; }
body:not([data-admin="true"]) nav a:hover {
  background: rgba(122, 155, 255, 0.16) !important;
  color: #0A142E !important;
}
[style*="box-shadow"] { transition: transform 0.3s ease, box-shadow 0.3s ease; }
body:not([data-admin="true"]) [style*="box-shadow"]:hover {
  transform: translateY(-4px) !important;
  box-shadow: 0 22px 48px rgba(10, 20, 46, 0.14) !important;
}

/* --- Statut d'envoi du formulaire de contact --- */
.site-form-status {
  margin-top: 14px; font-size: 0.9rem; font-weight: 500;
  padding: 12px 16px; border-radius: 12px; display: none;
}
.site-form-status.is-visible { display: block; }
.site-form-status.ok { background: rgba(22, 163, 74, 0.12); color: #15803d; }
.site-form-status.err { background: rgba(220, 38, 38, 0.10); color: #b91c1c; }

/* ============================================================
   Curseur animé + effets de clic
   Le curseur système reste TOUJOURS visible ; ces éléments
   s'ajoutent par-dessus (désactivés au tactile et en mode admin).
   ============================================================ */
#site-cursor-ring, #site-cursor-dot {
  position: fixed; top: 0; left: 0; border-radius: 50%;
  pointer-events: none; z-index: 9998; transform: translate(-100px, -100px);
}
#site-cursor-ring {
  width: 30px; height: 30px; margin: -15px 0 0 -15px;
  border: 1.5px solid rgba(122, 155, 255, 0.75);
  transition: width 0.2s, height 0.2s, margin 0.2s, background 0.2s, border-color 0.2s;
}
#site-cursor-dot { width: 7px; height: 7px; margin: -3.5px 0 0 -3.5px; background: #8A5CF0; }
#site-cursor-ring.is-hover {
  width: 46px; height: 46px; margin: -23px 0 0 -23px;
  background: rgba(122, 155, 255, 0.12); border-color: rgba(138, 92, 240, 0.9);
}
#site-cursor-ring.is-down { transform-origin: center; }

/* Boutons : légère pression + onde (ripple) au clic */
.site-btn { position: relative; overflow: hidden; transition: transform 0.12s ease; }
.site-btn:active { transform: scale(0.96); }
.site-ripple {
  position: absolute; border-radius: 50%; pointer-events: none;
  transform: translate(-50%, -50%) scale(0); opacity: 0.55;
  animation: site-ripple 0.6s ease-out forwards;
}
@keyframes site-ripple { to { transform: translate(-50%, -50%) scale(1); opacity: 0; } }

@media (pointer: coarse) { #site-cursor-ring, #site-cursor-dot { display: none !important; } }
body[data-admin="true"] #site-cursor-ring, body[data-admin="true"] #site-cursor-dot { display: none !important; }

@media (prefers-reduced-motion: reduce) {
  html.js-anim .reveal-init { opacity: 1; transform: none; transition: none; }
  .site-btn:active { transform: none; }
  .site-ripple { display: none; }
}

/* ============================================================
   Adaptation mobile / tablette
   Les pages étant en styles « inline », on force les grandes
   dispositions à se réorganiser en une seule colonne.
   ============================================================ */

/* Menu hamburger (masqué sur grand écran) */
.site-burger { display: none; align-items: center; justify-content: center; flex-direction: column; gap: 5px; background: none; border: none; cursor: pointer; padding: 8px; z-index: 101; }
.site-burger span { display: block; width: 24px; height: 2px; background: #0A142E; border-radius: 2px; transition: transform 0.25s ease, opacity 0.2s ease; }
.site-burger.is-open span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.site-burger.is-open span:nth-child(2) { opacity: 0; }
.site-burger.is-open span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
.site-menu-panel { display: none; position: absolute; top: 100%; left: 0; right: 0; z-index: 100; flex-direction: column; padding: 6px 22px 18px; background: rgba(246, 247, 243, 0.98); backdrop-filter: blur(18px); border-bottom: 1px solid rgba(10, 20, 46, 0.1); box-shadow: 0 16px 30px rgba(10, 20, 46, 0.08); }
.site-menu-panel.is-open { display: flex; }
.site-menu-panel a { padding: 13px 6px; text-decoration: none; color: #0A142E; font-size: 15px; font-weight: 500; border-bottom: 1px solid rgba(10, 20, 46, 0.06); }
.site-menu-panel a:last-child { border-bottom: none; }

@media (max-width: 860px) {
  html, body { overflow-x: hidden !important; max-width: 100% !important; }
  img { max-width: 100% !important; height: auto !important; }

  /* Toutes les grilles multi-colonnes -> une seule colonne */
  [style*="grid-template-columns"] { grid-template-columns: 1fr !important; }

  /* Un enfant qui s'étend sur plusieurs colonnes/rangées (grid-column/grid-row:
     span N) force, une fois la grille ramenée à une colonne, la création d'une
     colonne IMPLICITE : la 1re colonne s'écrase à 0px et les cartes suivantes
     s'y empilent, invisibles et superposées. On neutralise donc tout span. */
  [style*="grid-column"] { grid-column: auto !important; }
  [style*="grid-row"] { grid-row: auto !important; }

  /* Autorise les enfants de grille/flex à rétrécir sous la taille de leur
     contenu (sinon une image ou un long texte élargit la colonne et déborde). */
  [style*="grid-template-columns"] > *,
  [style*="display: flex"] > *,
  [style*="display:flex"] > * { min-width: 0 !important; }

  /* Le hero (flex centré + min-height:100vh) : passe en bloc pleine largeur
     pour éviter le contenu tronqué et l'immense espace vide vertical. */
  header { display: block !important; min-height: 0 !important; padding: 96px 20px 56px !important; }

  /* Titres surdimensionnés ramenés à une taille lisible */
  h1 { font-size: clamp(2rem, 10vw, 3.1rem) !important; line-height: 1.08 !important; }
  h2 { font-size: clamp(1.55rem, 7.5vw, 2.3rem) !important; line-height: 1.15 !important; }
  h3 { font-size: clamp(1.15rem, 5vw, 1.5rem) !important; }

  /* Rangées avec séparateurs verticaux (statistiques) : réduit l'espacement
     pour tenir sur un écran étroit. */
  [style*="border-right"][style*="margin-right"] { padding-right: 16px !important; margin-right: 16px !important; }

  /* Nav : bascule sur le menu hamburger */
  .site-burger { display: flex; }
  .site-navlinks-hidden { display: none !important; }

  /* Tagline masquée dans l'en-tête sur petit écran (conservée dans le footer) */
  .nav-tag { display: none !important; }
}

@media (min-width: 861px) {
  .site-burger, .site-menu-panel { display: none !important; }
}

/* ============================================================
   Sélecteur de langue (FR | EN) + icône d'accès administrateur
   Injectés dans le menu par server/render.js.
   Couleurs reprises du logo E : #3D4FE0, #A177F0, #14142E.
   ============================================================ */
.lang-switch {
  display: inline-flex; align-items: center; gap: 2px;
  margin-left: 10px; padding: 3px 4px;
  border-radius: 999px; background: rgba(61, 79, 224, 0.08);
}
.lang-switch .lang-opt {
  padding: 4px 9px; border-radius: 999px;
  font-size: 12px; font-weight: 600; letter-spacing: 0.03em;
  color: rgba(20, 20, 46, 0.55); text-decoration: none;
  transition: color 0.2s ease, background 0.2s ease;
}
body:not([data-admin="true"]) .lang-switch .lang-opt:hover { color: #3D4FE0 !important; background: transparent !important; }
.lang-switch .lang-opt.is-active {
  color: #fff;
  background-image: linear-gradient(135deg, #3D4FE0, #A177F0);
  box-shadow: 0 2px 8px rgba(61, 79, 224, 0.28);
}
.lang-switch .lang-sep { color: rgba(20, 20, 46, 0.22); font-size: 12px; }

.admin-login-link {
  display: inline-flex; align-items: center; justify-content: center;
  margin-left: 8px; text-decoration: none; line-height: 0;
  border-radius: 999px; transition: transform 0.2s ease, filter 0.2s ease;
}
.admin-login-link .admin-login-ico { display: block; }
body:not([data-admin="true"]) .admin-login-link:hover { transform: translateY(-1px) scale(1.06); filter: drop-shadow(0 4px 10px rgba(61, 79, 224, 0.4)); }
.admin-login-link:focus-visible { outline: 2px solid #3D4FE0; outline-offset: 3px; }
/* Dans la barre de navigation, seule l'icône est visible ; le libellé
   n'apparaît que dans le menu mobile (reconstruit à partir du texte). */
nav .admin-login-text { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
