<script>
(function(){
  function isMobile() {
    return window.matchMedia("(max-width: 768px)").matches;
  }

  function findByHeadingKeywords(container, keywords) {
    var walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, null, false);
    var node;
    while(node = walker.nextNode()) {
      try {
        var txt = (node.innerText || "").trim().toLowerCase();
        if (!txt) continue;
        for (var i = 0; i < keywords.length; i++) {
          if (txt.indexOf(keywords[i]) !== -1) return node;
        }
      } catch(e) { continue; }
    }
    return null;
  }

  function swapDescriptionAndHours() {
    if (!isMobile()) return;

    // essaye plusieurs conteneurs racine possibles
    var roots = [
      document.querySelector('.sb-homepage-content'),
      document.querySelector('.homepage-content'),
      document.querySelector('.booking-page'),
      document.querySelector('.sb-page'),
      document.body
    ].filter(Boolean);

    var hoursKeywords = ['horaires', "horaires d'ouverture", 'horaire', 'heures', 'ouverture'];
    var descrKeywords = ["so'welnness", "so'wellness", "à propos", "a propos", "description", "nous contacter", "présentation", "presentation"];

    for (var r = 0; r < roots.length; r++) {
      var root = roots[r];

      // trouve l'élément qui contient le texte "Horaires" (ou variante)
      var elHours = findByHeadingKeywords(root, hoursKeywords);
      // trouve l'élément qui contient le texte company/description
      var elDescr = findByHeadingKeywords(root, descrKeywords);

      // si on trouve, on cherche leurs éléments parents les plus proches de niveau bloc
      function nearestBlock(el) {
        if (!el) return null;
        var cur = el;
        // remonte jusqu'à trouver un enfant direct du root ou un élément avec role=region/card
        while (cur && cur.parentNode && cur.parentNode !== root && cur.parentNode !== document.body) {
          // éviter de remonter trop loin: stop si parent a class qui ressemble à un bloc de page
          var p = cur.parentNode;
          if (p.className && /section|block|card|container|sb-section|sb-block|homepage/i.test(p.className)) {
            cur = p;
            break;
          }
          cur = p;
        }
        return cur;
      }

      var blockHours = nearestBlock(elHours);
      var blockDescr = nearestBlock(elDescr);

      if (blockHours && blockDescr && blockHours.parentNode === blockDescr.parentNode) {
        // si la description est après les horaires, on l'insère avant
        var parent = blockHours.parentNode;
        if (Array.prototype.indexOf.call(parent.children, blockDescr) > Array.prototype.indexOf.call(parent.children, blockHours)) {
          parent.insertBefore(blockDescr, blockHours);
        }
        return; // fait, on stoppe
      } else if (blockHours && blockDescr && blockHours.parentNode !== blockDescr.parentNode) {
        // si parents différents, essaye le swap en déplaçant le blockDescr juste avant blockHours
        try {
          blockHours.parentNode.insertBefore(blockDescr, blockHours);
          return;
        } catch(e) { /* ignore */ }
      }
    }
  }

  // Exécute après chargement
  function init() {
    swapDescriptionAndHours();

    // ré-exécute quand la taille change (desktop -> mobile)
    window.addEventListener('resize', function(){
      // petit délai pour laisser le layout se stabiliser
      setTimeout(swapDescriptionAndHours, 200);
    });

    // observe les changements dynamiques du DOM (ex: contenu chargé par JS)
    var obs = new MutationObserver(function(mutations){
      // exécuter la fonction si mobile
      if (isMobile()) swapDescriptionAndHours();
    });
    obs.observe(document.body, { childList: true, subtree: true });

    // retry au cas où le contenu se charge plus tard
    setTimeout(swapDescriptionAndHours, 800);
    setTimeout(swapDescriptionAndHours, 1500);
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', init);
  } else {
    init();
  }
})();
</script>
