{"id":86,"date":"2025-03-25T11:43:14","date_gmt":"2025-03-25T10:43:14","guid":{"rendered":"https:\/\/test.only-beach.com\/?page_id=86"},"modified":"2025-05-20T08:41:14","modified_gmt":"2025-05-20T06:41:14","slug":"accueil","status":"publish","type":"page","link":"https:\/\/francebeachvolleyseries.fr\/","title":{"rendered":"Accueil"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"86\" class=\"elementor elementor-86\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1cbcfc1d e-flex e-con-boxed e-con e-parent\" data-id=\"1cbcfc1d\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-55f22c7 elementor-widget elementor-widget-html\" data-id=\"55f22c7\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n<style>\r\n  body {\r\n    font-family: 'Aquawax', sans-serif;\r\n    background-color: #ffffff;\r\n    color: #333;\r\n    margin: 0;\r\n    padding: 0;\r\n  }\r\n\r\n  .hero {\r\n    background: linear-gradient(rgba(0, 40, 90, 0.4), rgba(0, 40, 90, 0.4)), \r\n                url('https:\/\/francebeachvolleyseries.fr\/wp-content\/uploads\/2025\/05\/RS_DAY3-e1747259000729.webp') \r\n                center\/cover no-repeat;\r\n    color: white;\r\n    text-align: center;\r\n    padding: 80px 20px;\r\n    margin: 0;\r\n  }\r\n\r\n  .hero h1 {\r\n    font-size: 2.5em;\r\n    margin-bottom: 15px;\r\n    text-transform: uppercase;\r\n    letter-spacing: 1.5px;\r\n    color: #FFFFFF;\r\n  }\r\n\r\n  .hero p {\r\n    font-size: 1.1em;\r\n    max-width: 700px;\r\n    margin: 0 auto;\r\n    line-height: 1.6;\r\n    color: #F0F0F0;\r\n  }\r\n\r\n  .tournaments {\r\n    padding: 0px 20px;\r\n    max-width: 1100px;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  .tournaments h2 {\r\n    text-align: center;\r\n    color: #00285A;\r\n    margin-bottom: 40px;\r\n  }\r\n  \r\n  .tournoi-filters {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      justify-content: center;\r\n      align-items: center;\r\n      gap: 12px;\r\n      margin: 20px auto 30px;\r\n      font-family: 'Gotham', sans-serif;\r\n    }\r\n    \r\n    .filter-title {\r\n      font-weight: bold;\r\n      color: #00285A;\r\n      text-transform: uppercase;\r\n      margin-right: 10px;\r\n      font-size: 0.9em;\r\n    }\r\n    \r\n    .filter-chip {\r\n      background-color: #00285A;\r\n      color: white;\r\n      padding: 6px 14px;\r\n      border-radius: 20px;\r\n      font-size: 0.85em;\r\n      cursor: default;\r\n      user-select: none;\r\n      transition: background-color 0.3s ease;\r\n    }\r\n    \r\n    .filter-chip:hover {\r\n      background-color: #E18232;\r\n    }\r\n\r\n  .grid {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      justify-content: center;\r\n      gap: 20px;\r\n      margin-top: 40px;\r\n    }\r\n    \r\n    .card {\r\n      background-color: #F9F7F3;\r\n      border: 2px solid #D9D9D9;\r\n      border-radius: 8px;\r\n      width: 260px;\r\n      height: 160px;\r\n      padding: 12px 16px;\r\n      text-align: center;\r\n      display: flex;\r\n      flex-direction: column;\r\n      justify-content: space-between;\r\n      box-shadow: 0 2px 6px rgba(0, 0, 0, 0.04);\r\n      transition: border-color 0.3s ease, transform 0.2s ease;\r\n    }\r\n    \r\n    .card:hover {\r\n      border-color: #E18232;\r\n      transform: translateY(-4px);\r\n    }\r\n    \r\n    .card h3 {\r\n      margin: 0;\r\n      font-size: 1em;\r\n      font-weight: 700;\r\n      color: #00285A;\r\n      line-height: 1.3;\r\n      font-family: 'Gotham', sans-serif;\r\n    }\r\n    \r\n    .card p {\r\n      margin: 4px 0;\r\n      font-size: 0.85em;\r\n      color: #333;\r\n      font-family: 'Gotham', sans-serif;\r\n    }\r\n    \r\n    .card a {\r\n      font-size: 0.85em;\r\n      padding: 6px 14px;\r\n      background-color: #00285A;\r\n      color: white;\r\n      text-decoration: none;\r\n      border-radius: 4px;\r\n      font-family: 'Gotham', sans-serif;\r\n      transition: background-color 0.3s ease;\r\n    }\r\n    \r\n    .card a:hover {\r\n      background-color: #E18232;\r\n    }\r\n    \r\n    @media (max-width: 768px) {\r\n      .card {\r\n        width: 90%;\r\n        max-width: 300px;\r\n      }\r\n    }\r\n<\/style>\r\n\r\n<section class=\"hero\">\r\n  <h1>FRANCE BEACH VOLLEY SERIES<\/h1>\r\n  <p>Retrouvez les tableaux, scores et classements des tournois nationaux de S\u00e9rie 1 du circuit beach-volley fran\u00e7ais.<\/p>\r\n<\/section>\r\n\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab8c972 elementor-widget elementor-widget-shortcode\" data-id=\"ab8c972\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <section class=\"next-tournament-block\">\n      <div class=\"next-tournament-flex\">\n        <div class=\"logo-container\">\n          <img decoding=\"async\" src=\"https:\/\/francebeachvolleyseries.fr\/wp-content\/uploads\/2025\/03\/cropped-CN-FVBS-GENERIQUE.png\" alt=\"Logo FFVB Beach Volley\">\n        <\/div>\n        <div class=\"next-tournament\">\n          <h3>Aucun tournoi \u00e0 venir<\/h3>\n          <h4>VSG BEACH MASTERS<\/h4>\n          <p><span class=\"icon\">\ud83d\udccd<\/span> Saint-Germain-en-Laye<\/p>\n          <p><span class=\"icon\">\ud83d\udcc5<\/span> 23\/05\/2025<\/p>\n          <p><span class=\"icon\">\ud83c\udfc5<\/span> S1-2000<\/p>\n\n                      <a href=\"https:\/\/francebeachvolleyseries.fr\/index.php\/tournois\/vsg-beach-masters-f\/\" class=\"btn-voir\">Tournoi F\u00e9minin<\/a>\n                                <a href=\"https:\/\/francebeachvolleyseries.fr\/index.php\/tournois\/vsg-beach-masters-m\/\" class=\"btn-voir\">Tournoi Masculin<\/a>\n                  <\/div>\n      <\/div>\n    <\/section>\n\n    <style>\n      .next-tournament-block {\n        padding: 40px 0;\n        background-color: #F0EDE9;\n      }\n      .next-tournament-flex {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        max-width: 1100px;\n        margin: 0 auto;\n        gap: 40px;\n      }\n      .logo-container {\n        flex: 0 0 30%;\n        text-align: center;\n        padding-left: 20px;\n      }\n      .logo-container img {\n        max-width: 170px;\n        height: auto;\n      }\n      .next-tournament {\n        flex: 0 0 70%;\n        text-align: left;\n      }\n      .next-tournament h3 {\n        font-family: 'Aquawax', sans-serif;\n        text-transform: uppercase;\n        font-size: 1.4em;\n        color: #00285A;\n        margin-bottom: 10px;\n      }\n      .next-tournament h4 {\n        font-family: 'Aquawax', sans-serif;\n        font-size: 1.8em;\n        font-weight: 700;\n        color: #00285A;\n        margin-bottom: 10px;\n      }\n      .next-tournament p {\n        font-family: 'Gotham', sans-serif;\n        font-size: 1em;\n        margin: 5px 0;\n        color: #333;\n      }\n      .btn-voir {\n        display: inline-block;\n        background-color: #00285A;\n        color: #fff;\n        padding: 10px 20px;\n        border-radius: 4px;\n        margin-top: 15px;\n        margin-right: 10px;\n        font-size: 0.95em;\n        text-decoration: none;\n        transition: background-color 0.3s;\n      }\n      .btn-voir:hover {\n        background-color: #E18232;\n        color: #fff;\n      }\n      @media (max-width: 768px) {\n        .next-tournament-flex {\n          flex-direction: column;\n          text-align: center;\n          padding: 0 20px;\n        }\n        .logo-container img {\n          max-width: 90px;\n        }\n      }\n    <\/style>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-02c5a6d elementor-widget elementor-widget-shortcode\" data-id=\"02c5a6d\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" crossorigin=\"\" \/>\n    <section class=\"tournaments\" style=\"padding-top: 40px;\">\n        <h2>Tournois 2026<\/h2>\n\n        <div class=\"tournoi-filters\" id=\"global-tournoi-filters\">\n            <span class=\"filter-title\">Filtrer par :<\/span>\n            <button class=\"filter-chip\" data-filter=\"all\">Tous<\/button>\n            <button class=\"filter-chip\" data-filter=\"masculin\">\ud83d\udc68 Masculin<\/button>\n            <button class=\"filter-chip\" data-filter=\"feminin\">\ud83d\udc69 F\u00e9minin<\/button>\n        <\/div>\n\n        <div id=\"cards-tournois\" class=\"grid\"><\/div>\n        <div class=\"voir-plus-overlay\" id=\"voir-plus-overlay\"><\/div>\n        <div class=\"voir-plus-wrapper\">\n            <button id=\"voir-plus-btn\" class=\"voir-plus-btn\">Voir plus<\/button>\n        <\/div>\n        <div id=\"map-tournois\" style=\"height: 550px; margin: 40px auto; max-width: 100%;\"><\/div>\n    <\/section>\n\n    <script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\" crossorigin=\"\"><\/script>\n    <script id=\"tournois-json\" type=\"application\/json\">\n      [{\"titre\":\"BOUBOU BEACH OPEN 2026 &#8211; F\",\"ville\":\"DIJON\",\"date\":\"15\\\/05\\\/2026\",\"lien\":\"https:\\\/\\\/francebeachvolleyseries.fr\\\/index.php\\\/tournois\\\/boubou-beach-open-2026-f\\\/\",\"niveau\":\"s1-1500\",\"genre\":\"feminin\"},{\"titre\":\"BOUBOU BEACH OPEN 2026 &#8211; M\",\"ville\":\"DIJON\",\"date\":\"15\\\/05\\\/2026\",\"lien\":\"https:\\\/\\\/francebeachvolleyseries.fr\\\/index.php\\\/tournois\\\/boubou-beach-open-2026-m\\\/\",\"niveau\":\"s1-1500\",\"genre\":\"masculin\"}]    <\/script>\n\n    <script>\n      let tournois = [];\n      let markers = [];\n      let map;\n\n      try {\n        tournois = JSON.parse(document.getElementById('tournois-json').textContent);\n      } catch (e) {\n        console.error(\"Erreur de parsing JSON :\", e);\n      }\n\n      const mapContainer = document.getElementById('map-tournois');\n      const cardsContainer = document.getElementById('cards-tournois');\n      const voirPlusBtn = document.getElementById('voir-plus-btn');\n      const voirPlusOverlay = document.getElementById('voir-plus-overlay');\n      let expanded = false;\n\n      if (mapContainer) {\n        map = L.map('map-tournois').setView([46.5, 2.5], window.innerWidth <= 768 ? 5.3 : 6);\n        L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {\n          attribution: '&copy; OpenStreetMap contributors'\n        }).addTo(map);\n\n        function afficherMarkers(data) {\n          markers.forEach(marker => map.removeLayer(marker));\n          markers = [];\n          data.forEach(t => {\n            const url = `https:\/\/nominatim.openstreetmap.org\/search?format=json&q=${encodeURIComponent(t.ville + ' France')}`;\n            fetch(url)\n              .then(res => res.json())\n              .then(loc => {\n                if (loc && loc[0]) {\n                  const m = L.marker([parseFloat(loc[0].lat), parseFloat(loc[0].lon)]).addTo(map)\n                    .bindPopup(`<strong>${t.titre}<\/strong><br>${t.ville}<br><a href=\"${t.lien}\">Voir le tournoi<\/a>`);\n                  markers.push(m);\n                }\n              });\n          });\n        }\n\n        function afficherCards(data) {\n          cardsContainer.innerHTML = '';\n          let maxInitial;\n\n          \/\/ D\u00e9finir combien de cards visibles selon la largeur d\u2019\u00e9cran\n          if (window.innerWidth >= 1024) {\n            maxInitial = 6; \/\/ Desktop : 3x2\n          } else if (window.innerWidth >= 600) {\n            maxInitial = 4; \/\/ Tablette : 2x2\n          } else {\n            maxInitial = 3; \/\/ Mobile : 1x3\n          }\n\n          const allCards = [];\n\n          data.forEach((t, i) => {\n            const card = document.createElement('div');\n            card.className = 'card fade-slide';\n            card.innerHTML = `<div class=\"card-inner\">\n              <h3>${t.titre}<\/h3><div class=\"spacer\"><\/div>\n              <p>${t.date}<\/p>\n              <a href=\"${t.lien}\">Voir le tournoi<\/a>\n            <\/div>`;\n            card.style.display = i < maxInitial ? 'flex' : 'none';\n            if (!expanded && i < maxInitial) {\n              setTimeout(() => {\n                card.classList.add('visible');\n              }, 20);\n            }\n            cardsContainer.appendChild(card);\n            allCards.push(card);\n          });\n\n          voirPlusBtn.style.display = data.length > maxInitial ? 'block' : 'none';\n          if (voirPlusOverlay)\n            voirPlusOverlay.style.display = data.length > maxInitial && !expanded ? 'block' : 'none';\n\n          voirPlusBtn.onclick = () => {\n            expanded = !expanded;\n            voirPlusBtn.textContent = expanded ? 'Voir moins' : 'Voir plus';\n            allCards.forEach((c, i) => {\n              if (expanded || i < maxInitial) {\n                c.style.display = 'flex';\n                setTimeout(() => c.classList.add('visible'), 10);\n              } else {\n                c.classList.remove('visible');\n                setTimeout(() => (c.style.display = 'none'), 300);\n              }\n            });\n            if (voirPlusOverlay)\n              voirPlusOverlay.style.display = expanded ? 'none' : 'block';\n\n            voirPlusBtn.scrollIntoView({ behavior: 'smooth', block: 'center' });\n          };\n        }\n\n\n\n        afficherMarkers(tournois);\n        afficherCards(tournois);\n\n        \/\/ Forcer la mise \u00e0 jour des cards si on redimensionne l\u2019\u00e9cran\n        window.addEventListener('resize', () => {\n          if (!expanded) afficherCards(tournois);\n        });\n\n        document.querySelectorAll('.filter-chip').forEach(chip => {\n          chip.addEventListener('click', () => {\n            const filtre = chip.dataset.filter;\n            const filtered = filtre === 'all' ? tournois : tournois.filter(t.genre.includes(filtre));\n            afficherMarkers(filtered);\n            afficherCards(filtered);\n          });\n        });\n      }\n    <\/script>\n\n    <style>\n      .voir-plus-overlay {\n        position: relative;\n        height: 100px;\n        width: 100%;\n        background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #ffffff);\n        margin-top: -90px;\n        z-index: 0;\n        pointer-events: none;\n      }\n      .voir-plus-wrapper {\n        display: flex;\n        justify-content: center;\n        margin-top: 20px;\n        z-index: 1;\n        position: relative;\n      }\n      .voir-plus-btn {\n        padding: 10px 20px;\n        background-color: #E18232;\n        color: white;\n        font-size: 0.95em;\n        font-family: 'Gotham', sans-serif;\n        border: none;\n        border-radius: 5px;\n        cursor: pointer;\n        transition: background-color 0.3s ease;\n        z-index: 2;\n      }\n      .voir-plus-btn:hover { background-color: #00285A; }\n      .fade-slide {\n        opacity: 0;\n        transform: translateY(20px);\n        transition: all 0.4s ease;\n      }\n      .fade-slide.visible {\n        opacity: 1;\n        transform: translateY(0);\n      }\n    <\/style>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>FRANCE BEACH VOLLEY SERIES Retrouvez les tableaux, scores et classements des tournois nationaux de S\u00e9rie 1 du circuit beach-volley fran\u00e7ais.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-86","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/francebeachvolleyseries.fr\/index.php\/wp-json\/wp\/v2\/pages\/86","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/francebeachvolleyseries.fr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/francebeachvolleyseries.fr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/francebeachvolleyseries.fr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/francebeachvolleyseries.fr\/index.php\/wp-json\/wp\/v2\/comments?post=86"}],"version-history":[{"count":79,"href":"https:\/\/francebeachvolleyseries.fr\/index.php\/wp-json\/wp\/v2\/pages\/86\/revisions"}],"predecessor-version":[{"id":298,"href":"https:\/\/francebeachvolleyseries.fr\/index.php\/wp-json\/wp\/v2\/pages\/86\/revisions\/298"}],"wp:attachment":[{"href":"https:\/\/francebeachvolleyseries.fr\/index.php\/wp-json\/wp\/v2\/media?parent=86"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}