<!DOCTYPE html><html lang=fr-FR><head><meta charset=UTF-8 /><meta name=vr-live-tick content=2026-08-27T13:18:00Z><meta name=viewport content="width=device-width, initial-scale=1"/><meta name=robots content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1'/><link rel=preload href="https://vibrez-rugby.com/wp-content/uploads/fonts/Poppins-Regular.woff2" as=font type="font/woff2" crossorigin><link rel=preload href="https://vibrez-rugby.com/wp-content/uploads/fonts/Poppins-SemiBold.woff2" as=font type="font/woff2" crossorigin><meta name=description content="Matchs de TOP 14 en direct et obtenez tous les détails: radios, directs, composition des équipes, joueurs qui ont marqué et scores live"> <style id=vr-barlow-woff2>@font-face{font-family:"Barlow Semi Condensed";font-style:normal;font-weight:400;font-display:optional;src:url('https://vibrez-rugby.com/wp-content/uploads/fonts/BarlowSemiCondensed-Regular.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:"Barlow Semi Condensed";font-style:normal;font-weight:600;font-display:optional;src:url('https://vibrez-rugby.com/wp-content/uploads/fonts/BarlowSemiCondensed-SemiBold.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}
@font-face{font-family:"Barlow Semi Condensed";font-style:normal;font-weight:700;font-display:optional;src:url('https://vibrez-rugby.com/wp-content/uploads/fonts/BarlowSemiCondensed-Bold.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;}</style><style id=wp-img-auto-sizes-contain-inline-css>img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */</style><style id=wp-block-site-logo-inline-css>.wp-block-site-logo{box-sizing:border-box;line-height:0}.wp-block-site-logo a{display:inline-block;line-height:0}.wp-block-site-logo.is-default-size img{height:auto;width:120px}.wp-block-site-logo img{height:auto;max-width:100%}.wp-block-site-logo a,.wp-block-site-logo img{border-radius:inherit}.wp-block-site-logo.aligncenter{margin-left:auto;margin-right:auto;text-align:center}:root :where(.wp-block-site-logo.is-style-rounded){border-radius:9999px}
/*# sourceURL=https://vibrez-rugby.com/wp-includes/blocks/site-logo/style.min.css */</style><style id=wp-block-group-inline-css>.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}
/*# sourceURL=https://vibrez-rugby.com/wp-includes/blocks/group/style.min.css */</style><style id=wp-block-navigation-link-inline-css>.wp-block-navigation .wp-block-navigation-item__label{overflow-wrap:break-word}.wp-block-navigation .wp-block-navigation-item__description{display:none}.link-ui-tools{outline:1px solid #f0f0f0;padding:8px}.link-ui-block-inserter{padding-top:8px}.link-ui-block-inserter__back{margin-left:8px;text-transform:uppercase}
.is-style-arrow-link .wp-block-navigation-item__label:after {
content: "\2197";
padding-inline-start: 0.25rem;
vertical-align: middle;
text-decoration: none;
display: inline-block;
}
/*# sourceURL=wp-block-navigation-link-inline-css */</style><link rel=stylesheet id=wp-block-navigation-css href='https://vibrez-rugby.com/wp-includes/blocks/navigation/style.min.css?ver=7.1' media=all /><style id=wp-block-post-featured-image-inline-css>.wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image :where(img){box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:transparent}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%}
/*# sourceURL=https://vibrez-rugby.com/wp-includes/blocks/post-featured-image/style.min.css */</style><style id=wp-block-post-title-inline-css>.wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}
/*# sourceURL=https://vibrez-rugby.com/wp-includes/blocks/post-title/style.min.css */</style><style id=wp-block-post-terms-inline-css>.wp-block-post-terms{box-sizing:border-box}.wp-block-post-terms .wp-block-post-terms__separator{white-space:pre-wrap}
.is-style-pill a,
.is-style-pill span:not([class], [data-rich-text-placeholder]) {
display: inline-block;
background-color: var(--wp--preset--color--base-2);
padding: 0.375rem 0.875rem;
border-radius: var(--wp--preset--spacing--20);
}
.is-style-pill a:hover {
background-color: var(--wp--preset--color--contrast-3);
}
/*# sourceURL=wp-block-post-terms-inline-css */</style><style id=wp-block-paragraph-inline-css>.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}
/*# sourceURL=https://vibrez-rugby.com/wp-includes/blocks/paragraph/style.min.css */</style><style id=wp-block-heading-inline-css>h1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}
.is-style-asterisk:before {
content: '';
width: 1.5rem;
height: 3rem;
background: var(--wp--preset--color--contrast-2, currentColor);
clip-path: path('M11.93.684v8.039l5.633-5.633 1.216 1.23-5.66 5.66h8.04v1.737H13.2l5.701 5.701-1.23 1.23-5.742-5.742V21h-1.737v-8.094l-5.77 5.77-1.23-1.217 5.743-5.742H.842V9.98h8.162l-5.701-5.7 1.23-1.231 5.66 5.66V.684h1.737Z');
display: block;
}
/* Hide the asterisk if the heading has no content, to avoid using empty headings to display the asterisk only, which is an A11Y issue */
.is-style-asterisk:empty:before {
content: none;
}
.is-style-asterisk:-moz-only-whitespace:before {
content: none;
}
.is-style-asterisk.has-text-align-center:before {
margin: 0 auto;
}
.is-style-asterisk.has-text-align-right:before {
margin-left: auto;
}
.rtl .is-style-asterisk.has-text-align-left:before {
margin-right: auto;
}
/*# sourceURL=wp-block-heading-inline-css */</style><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "https://vibrez-rugby.com/#website",
"name": "Vibrez Rugby",
"url": "https://vibrez-rugby.com/",
"alternateName": "Rugby en direct",
"about": {
"@type": "Thing",
"name": "rugby",
"sameAs": "https://fr.wikipedia.org/wiki/Rugby_%C3%A0_XV"
},
"publisher": {
"@type": "Organization",
"@id": "https://vibrez-rugby.com/#organization",
"name": "Vibrez Rugby",
"url": "https://vibrez-rugby.com/",
"logo": {
"@type": "ImageObject",
"inLanguage": "fr-FR",
"url": "https://vibrez-rugby.com/wp-content/uploads/2020/08/cropped-android-chrome-512x512-1-1.webp",
"contentUrl": "https://vibrez-rugby.com/wp-content/uploads/2020/08/cropped-android-chrome-512x512-1-1.webp",
"width": 512,
"height": 512,
"caption": "Vibrez Rugby"
}
},
"sameAs": [
"https://www.facebook.com/vibrezrugby/",
"https://x.com/vibrezrugbyd2",
"https://mastodon.social/@vibrezrugby",
"https://www.youtube.com/@VibrezRugby/",
"http://linkedin.com/in/vibrez-rugby"
],
"potentialAction": {
"@type": "SearchAction",
"target": "https://vibrez-rugby.com/?s={search_term_string}",
"query-input": "required name=search_term_string"
}
}</script> <script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "ItemList",
"name": "Navigation principale et entités clés",
"itemListElement": [
{
"@type": "SiteNavigationElement",
"name": "Rugby en direct",
"url": "https://vibrez-rugby.com/"
},
{
"@type": "SiteNavigationElement",
"name": "Top 14",
"url": "https://vibrez-rugby.com/rugby/top-14/"
},
{
"@type": "SiteNavigationElement",
"name": "Pro D2",
"url": "https://vibrez-rugby.com/rugby/pro-d2/"
},
{
"@type": "SiteNavigationElement",
"name": "Nationale",
"url": "https://vibrez-rugby.com/rugby/rugby-nationale/"
},
{
"@type": "SiteNavigationElement",
"name": "XV de France",
"url": "https://vibrez-rugby.com/rugby/xv-de-france/"
},
{
"@type": "Person",
"name": "Antoine Dupont",
"sameAs": "https://vibrez-rugby.com/tag/antoine-dupont/"
},
{
"@type": "Person",
"name": "Grégory Alldritt",
"sameAs": "https://vibrez-rugby.com/tag/gregory-alldritt/"
},
{
"@type": "Person",
"name": "Louis Bielle-Biarrey",
"sameAs": "https://vibrez-rugby.com/tag/louis-bielle-biarrey/"
},
{
"@type": "Person",
"name": "Damian Penaud",
"sameAs": "https://vibrez-rugby.com/tag/damian-penaud/"
},
{
"@type": "Person",
"name": "Thomas Ramos",
"sameAs": "https://vibrez-rugby.com/tag/thomas-ramos/"
},
{
"@type": "SiteNavigationElement",
"name": "Tournoi des Six Nations",
"url": "https://vibrez-rugby.com/rugby/six-nations/"
}
]
}</script> <meta name=description content="Résultat Matchs de TOP 14 en direct. Score final et résumé du match (2026) sur Vibrez Rugby."/><link rel=canonical href="https://vibrez-rugby.com/matchs-de-top-14-en-direct/"/><meta name=author content="Vibrez Rugby"/><meta name=twitter:label1 content="Écrit par"/><meta name=twitter:data1 content="Vibrez Rugby"/><meta name=twitter:label2 content="Durée de lecture estimée"/><meta name=twitter:data2 content="4 minutes"/><title>Matchs de TOP 14 (Résultat 2026)</title><link rel=alternate type="application/rss+xml" title="Rugby en direct - Vibrez Rugby » Flux" href="https://vibrez-rugby.com/feed/"/><link rel=alternate type="application/rss+xml" title="Rugby en direct - Vibrez Rugby » Flux des commentaires" href="https://vibrez-rugby.com/comments/feed/"/><meta name=citation_title content="Matchs de TOP 14 en direct"><meta name=citation_author content="Vibrez Rugby"><meta name=citation_publication_date content=2026-05-16><meta name=citation_online_date content=2026-08-27><meta name=citation_journal_title content="Vibrez Rugby"><meta name=citation_publisher content="Vibrez Rugby"><meta name=citation_language content=fr><meta name=citation_abstract content="Matchs de TOP 14 en direct. : Suivez tous vos matchs de rugby préférés à la radio ou en score live, en cliquant simplement sur le match de votre choix ci-dessous pour ouvrir le live et les radios. Vous pouvez également accéder à toutes les rencontres via les onglets “🔴 En Direct” et “Résultats”. Ne […]"><meta name=citation_public_url content="https://vibrez-rugby.com/matchs-de-top-14-en-direct/"><meta name=DC.title content="Matchs de TOP 14 en direct"><meta name=DC.creator content="Vibrez Rugby"><meta name=DC.date content=2026-05-16><meta name=DC.description content="Matchs de TOP 14 en direct. : Suivez tous vos matchs de rugby préférés à la radio ou en score live, en cliquant simplement sur le match de votre choix ci-dessous pour ouvrir le live et les radios. Vous pouvez également accéder à toutes les rencontres via les onglets “🔴 En Direct” et “Résultats”. Ne […]"><meta name=DC.publisher content="Vibrez Rugby"><meta name=DC.language content=fr><meta name=DC.identifier content="https://vibrez-rugby.com/matchs-de-top-14-en-direct/"><meta name=DC.type content=Text.Article><meta name=DC.format content="text/html"><link rel=alternate title="oEmbed (JSON)" type="application/json+oembed" href="https://vibrez-rugby.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fvibrez-rugby.com%2Fmatchs-de-top-14-en-direct%2F"/><link rel=alternate title="oEmbed (XML)" type="text/xml+oembed" href="https://vibrez-rugby.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fvibrez-rugby.com%2Fmatchs-de-top-14-en-direct%2F&format=xml"/><style id=wp-block-image-inline-css>.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;backdrop-filter:blur(16px) saturate(180%);background-color:rgba(90,90,90,.25);border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto rgba(90,90,90,.25);outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:rgba(90,90,90,.25);border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .wp-lightbox-close-button{align-items:center;cursor:pointer;display:flex;font-family:inherit;gap:8px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 4px;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .wp-lightbox-close-button:focus,.wp-lightbox-overlay .wp-lightbox-close-button:hover,.wp-lightbox-overlay .wp-lightbox-close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .wp-lightbox-close-button:has(.wp-lightbox-close-text:not([hidden])) .wp-lightbox-close-icon svg{height:1em;width:1em}.wp-lightbox-overlay .wp-lightbox-close-icon svg{display:block}.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{align-items:center;bottom:16px;cursor:pointer;display:flex;font-family:inherit;gap:4px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 8px;position:absolute;z-index:2000002}.wp-lightbox-overlay .wp-lightbox-navigation-button-next[hidden],.wp-lightbox-overlay .wp-lightbox-navigation-button-prev[hidden]{display:none}@media (min-width:960px){.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{bottom:50%;transform:translateY(-50%)}}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:not(:hover):not(:active):not(.has-background),.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:not(:hover):not(:active):not(.has-background){background:none;border:none;padding:0 8px}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg{display:block;height:1.5em;width:1.5em}.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{left:calc(env(safe-area-inset-left) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-button-next{right:calc(env(safe-area-inset-right) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-icon svg{vertical-align:middle}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:2000001}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}
/*# sourceURL=https://vibrez-rugby.com/wp-includes/blocks/image/style.min.css */</style><style id=wp-block-list-inline-css>ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}
ul.is-style-checkmark-list {
list-style-type: "\2713";
}
ul.is-style-checkmark-list li {
padding-inline-start: 1ch;
}
/*# sourceURL=wp-block-list-inline-css */</style><style id=wp-block-post-content-inline-css>.wp-block-post-content{display:flow-root}
/*# sourceURL=https://vibrez-rugby.com/wp-includes/blocks/post-content/style.min.css */</style><style id=wp-block-site-title-inline-css>.wp-block-site-title{box-sizing:border-box}.wp-block-site-title :where(a){color:inherit;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}
/*# sourceURL=https://vibrez-rugby.com/wp-includes/blocks/site-title/style.min.css */</style><style id=wp-block-columns-inline-css>.wp-block-columns{box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns{align-items:normal!important}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}
/*# sourceURL=https://vibrez-rugby.com/wp-includes/blocks/columns/style.min.css */</style><style id=wp-emoji-styles-inline-css>img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
/*# sourceURL=wp-emoji-styles-inline-css */</style><style id=wp-block-library-inline-css>:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */</style><style id=global-styles-inline-css>:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--primary-blue: #004D90;--wp--preset--color--dark-blue: #002759;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--gradient--gradient-home: linear-gradient(to bottom, #004D90 0%, #002759 100%);--wp--preset--font-size--small: 0.9rem;--wp--preset--font-size--medium: 1.05rem;--wp--preset--font-size--large: clamp(1.39rem, 1.39rem + ((1vw - 0.2rem) * 0.698), 1.8rem);--wp--preset--font-size--x-large: clamp(1.85rem, 1.85rem + ((1vw - 0.2rem) * 1.106), 2.5rem);--wp--preset--font-size--xx-large: clamp(2.5rem, 2.5rem + ((1vw - 0.2rem) * 1.311), 3.27rem);--wp--preset--font-family--body: "Inter", sans-serif;--wp--preset--font-family--heading: Cardo;--wp--preset--font-family--system-sans-serif: -apple-system, BlinkMacSystemFont, avenir next, avenir, segoe ui, helvetica neue, helvetica, Cantarell, Ubuntu, roboto, noto, arial, sans-serif;--wp--preset--font-family--system-serif: Iowan Old Style, Apple Garamond, Baskerville, Times New Roman, Droid Serif, Times, Source Serif Pro, serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;--wp--preset--font-family--poppins: Poppins;--wp--preset--spacing--20: min(1.5rem, 2vw);--wp--preset--spacing--30: min(2.5rem, 3vw);--wp--preset--spacing--40: min(4rem, 5vw);--wp--preset--spacing--50: min(6.5rem, 8vw);--wp--preset--spacing--60: min(10.5rem, 13vw);--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--spacing--10: 1rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);--wp--preset--shadow--shadow-1: 6px 6px 10px 0px #00000017;}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:root { --wp--style--global--content-size: 1000px;--wp--style--global--wide-size: 1260px; }:where(body) { margin: 0; }.wp-site-blocks { padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom); }.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 1.2rem; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 1.2rem; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 1.2rem;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 1.2rem;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 1.2rem;}:root :where(.is-layout-grid){gap: 1.2rem;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{background-color: var(--wp--preset--color--base);color: var(--wp--preset--color--contrast);font-family: var(--wp--preset--font-family--poppins);font-size: var(--wp--preset--font-size--medium);font-style: normal;font-weight: 400;line-height: 1.55;--wp--style--root--padding-top: 0px;--wp--style--root--padding-right: var(--wp--preset--spacing--50);--wp--style--root--padding-bottom: 0px;--wp--style--root--padding-left: var(--wp--preset--spacing--50);}a:where(:not(.wp-element-button)){color: var(--wp--preset--color--contrast);font-family: var(--wp--preset--font-family--poppins);}:root :where(a:where(:not(.wp-element-button)):hover){text-decoration: none;}h1, h2, h3, h4, h5, h6{color: var(--wp--preset--color--contrast);font-family: var(--wp--preset--font-family--poppins);font-style: normal;font-weight: 600;line-height: 1.2;}h1{font-size: clamp(1.837rem, 1.837rem + ((1vw - 0.2rem) * 2.32), 3.2rem);line-height: 1.15;}h2{font-family: var(--wp--preset--font-family--poppins);font-size: clamp(1.25rem, 1.25rem + ((1vw - 0.2rem) * 1.277), 2rem);}h3{font-size: var(--wp--preset--font-size--large);}h4{font-size: clamp(1.1rem, 1.1rem + ((1vw - 0.2rem) * 0.767), 1.5rem);}h5{font-size: var(--wp--preset--font-size--medium);}h6{font-size: var(--wp--preset--font-size--small);}:root :where(.wp-element-button, .wp-block-button__link){background-color: var(--wp--preset--color--contrast);border-radius: .33rem;border-color: var(--wp--preset--color--contrast);border-width: 0;color: var(--wp--preset--color--base);font-family: inherit;font-size: var(--wp--preset--font-size--small);font-style: normal;font-weight: 500;letter-spacing: inherit;line-height: inherit;padding-top: 0.6rem;padding-right: 1rem;padding-bottom: 0.6rem;padding-left: 1rem;text-decoration: none;text-transform: inherit;}:root :where(.wp-element-button:hover, .wp-block-button__link:hover){background-color: var(--wp--preset--color--contrast-2);border-color: var(--wp--preset--color--contrast-2);color: var(--wp--preset--color--base);}:root :where(.wp-element-button:focus, .wp-block-button__link:focus){background-color: var(--wp--preset--color--contrast-2);border-color: var(--wp--preset--color--contrast-2);color: var(--wp--preset--color--base);outline-color: var(--wp--preset--color--contrast);outline-offset: 2px;}:root :where(.wp-element-button:active, .wp-block-button__link:active){background-color: var(--wp--preset--color--contrast);color: var(--wp--preset--color--base);}:root :where(.wp-element-caption, .wp-block-audio figcaption, .wp-block-embed figcaption, .wp-block-gallery figcaption, .wp-block-image figcaption, .wp-block-table figcaption, .wp-block-video figcaption){color: var(--wp--preset--color--contrast-2);font-family: var(--wp--preset--font-family--body);font-size: 0.8rem;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-blue-color{color: var(--wp--preset--color--primary-blue) !important;}.has-dark-blue-color{color: var(--wp--preset--color--dark-blue) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-blue-background-color{background-color: var(--wp--preset--color--primary-blue) !important;}.has-dark-blue-background-color{background-color: var(--wp--preset--color--dark-blue) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-blue-border-color{border-color: var(--wp--preset--color--primary-blue) !important;}.has-dark-blue-border-color{border-color: var(--wp--preset--color--dark-blue) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-gradient-home-gradient-background{background: var(--wp--preset--gradient--gradient-home) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-xx-large-font-size{font-size: var(--wp--preset--font-size--xx-large) !important;}.has-body-font-family{font-family: var(--wp--preset--font-family--body) !important;}.has-heading-font-family{font-family: var(--wp--preset--font-family--heading) !important;}.has-system-sans-serif-font-family{font-family: var(--wp--preset--font-family--system-sans-serif) !important;}.has-system-serif-font-family{font-family: var(--wp--preset--font-family--system-serif) !important;}.has-poppins-font-family{font-family: var(--wp--preset--font-family--poppins) !important;}:where(.wp-site-blocks *:focus){outline-width:2px;outline-style:solid}
:root :where(.wp-block-list){padding-left: var(--wp--preset--spacing--10);}
:root :where(.wp-block-navigation){font-style: normal;font-weight: 500;}:root :where(.wp-block-navigation-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-navigation-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-navigation-is-layout-flow) > *{margin-block-start: var(--wp--preset--spacing--20);margin-block-end: 0;}:root :where(.wp-block-navigation-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-navigation-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-navigation-is-layout-constrained) > *{margin-block-start: var(--wp--preset--spacing--20);margin-block-end: 0;}:root :where(.wp-block-navigation-is-layout-flex){gap: var(--wp--preset--spacing--20);}:root :where(.wp-block-navigation-is-layout-grid){gap: var(--wp--preset--spacing--20);}
:root :where(.wp-block-navigation a:where(:not(.wp-element-button))){text-decoration: none;}
:root :where(.wp-block-navigation a:where(:not(.wp-element-button)):hover){text-decoration: underline;}
:root :where(.wp-block-post-featured-image img, .wp-block-post-featured-image .block-editor-media-placeholder, .wp-block-post-featured-image .wp-block-post-featured-image__overlay){border-radius: var(--wp--preset--spacing--20);}
:root :where(.wp-block-post-terms){font-size: var(--wp--preset--font-size--small);}:root :where(.wp-block-post-terms .wp-block-post-terms__prefix){color: var(--wp--preset--color--contrast-2);}
:root :where(.wp-block-post-terms a:where(:not(.wp-element-button))){text-decoration: none;}
:root :where(.wp-block-post-terms a:where(:not(.wp-element-button)):hover){text-decoration: underline;}
:root :where(.wp-block-post-title){color: #000000d1;}
:root :where(.wp-block-post-title a:where(:not(.wp-element-button))){color: #000000d1;text-decoration: none;}
:root :where(.wp-block-post-title a:where(:not(.wp-element-button)):hover){text-decoration: underline;}
:root :where(.wp-block-site-title){font-family: var(--wp--preset--font-family--body);font-size: clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.553), 1.2rem);font-style: normal;font-weight: 600;}
:root :where(.wp-block-site-title a:where(:not(.wp-element-button))){text-decoration: none;}
:root :where(.wp-block-site-title a:where(:not(.wp-element-button)):hover){text-decoration: none;}
:root :where(.wp-block-heading){color: #000000d1;}
:root :where(.wp-block-heading a:where(:not(.wp-element-button))){color: #000000d1;}
:root :where(.wp-block-navigation-link){line-height: 2;}
/*# sourceURL=global-styles-inline-css */</style><style id=core-block-supports-inline-css>.wp-elements-1 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--base-2);}.wp-container-core-group-is-layout-c7f04a3e{gap:var(--wp--preset--spacing--20);}.wp-container-core-navigation-is-layout-16a73299{gap:var(--wp--preset--spacing--20);justify-content:flex-end;}.wp-container-core-group-is-layout-03504d8d{flex-wrap:nowrap;gap:2px;flex-direction:column;align-items:flex-end;}.wp-container-core-group-is-layout-1d0a7695{justify-content:space-between;}.wp-elements-2 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--primary-blue);}.wp-container-core-group-is-layout-6a058180{gap:0.3em;justify-content:flex-start;}.wp-container-core-group-is-layout-95c59878{gap:var(--wp--preset--spacing--10);flex-direction:column;align-items:stretch;}.wp-elements-3 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--white);}.wp-elements-4 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--white);}.wp-container-core-group-is-layout-36d0a666{flex-direction:column;align-items:flex-start;}.wp-elements-5 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--white);}.wp-container-core-group-is-layout-d0e65508{flex-wrap:nowrap;justify-content:center;}.wp-container-2{top:calc(0px + var(--wp-admin--admin-bar--position-offset, 0px));position:sticky;z-index:10;}.wp-elements-6 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--white);}.wp-container-core-group-is-layout-831b2db5{flex-direction:column;align-items:flex-start;}.wp-elements-7 a:where(:not(.wp-element-button)){color:var(--wp--preset--color--white);}.wp-container-core-navigation-is-layout-21d1823e{gap:var(--wp--preset--spacing--10);flex-direction:column;align-items:center;}.wp-container-core-group-is-layout-bc18b00a{flex-direction:column;align-items:center;}.wp-container-core-column-is-layout-14cbc845 > .alignfull{margin-right:calc(0px * -1);margin-left:calc(0px * -1);}.wp-container-core-column-is-layout-14cbc845 > *{margin-block-start:0;margin-block-end:0;}.wp-container-core-column-is-layout-14cbc845 > * + *{margin-block-start:0;margin-block-end:0;}.wp-container-core-columns-is-layout-3a88641f{flex-wrap:nowrap;}
/*# sourceURL=core-block-supports-inline-css */</style><style id=wp-block-template-skip-link-inline-css>/*! This file is auto-generated */
.skip-link.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important;word-break:normal!important}.skip-link.screen-reader-text:focus{background-color:#eee;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}
/*# sourceURL=/wp-includes/css/wp-block-template-skip-link.min.css */</style><style id=parent-style-css media=all>/*
Theme Name: Twenty Twenty-Four
Theme URI: https://wordpress.org/themes/twentytwentyfour/
Author: the WordPress team
Author URI: https://wordpress.org
Description: Twenty Twenty-Four is designed to be flexible, versatile and applicable to any website. Its collection of templates and patterns tailor to different needs, such as presenting a business, blogging and writing or showcasing work. A multitude of possibilities open up with just a few adjustments to color and typography. Twenty Twenty-Four comes with style variations and full page designs to help speed up the site building process, is fully compatible with the site editor, and takes advantage of new design tools introduced in WordPress 6.4.
Requires at least: 6.4
Tested up to: 7.0
Requires PHP: 7.0
Version: 1.5
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: twentytwentyfour
Tags: one-column, custom-colors, custom-menu, custom-logo, editor-style, featured-images, full-site-editing, block-patterns, rtl-language-support, sticky-post, threaded-comments, translation-ready, wide-blocks, block-styles, style-variations, accessibility-ready, blog, portfolio, news
*/
</style><link rel=stylesheet id=child-style-css href='https://vibrez-rugby.com/wp-content/themes/twentytwentyfour-child/style.css?ver=9.3' media=all /> <script id=breeze-prefetch-js-extra>var breeze_prefetch={"local_url":"https://vibrez-rugby.com","ignore_remote_prefetch":"1","ignore_list":["/","/feed/sitemap-news/","/sitemap_index.xml","/rugby/","/actualite-rugby/","/feed/","/sitemap-lives.xml","wp-admin","wp-login.php"]};</script> <link rel="https://api.w.org/" href="https://vibrez-rugby.com/wp-json/"/><link rel=alternate title=JSON type="application/json" href="https://vibrez-rugby.com/wp-json/wp/v2/posts/221082"/><link rel=EditURI type="application/rsd+xml" title=RSD href="https://vibrez-rugby.com/xmlrpc.php?rsd"/><meta name=generator content="WordPress 7.1"/><link rel=shortlink href='https://vibrez-rugby.com/?p=221082'/><meta name=onesignal-plugin content=wordpress-3.9.2> <script src="https://cdn.onesignal.com/sdks/web/v16/OneSignalSDK.page.js" defer></script> <script>window.OneSignalDeferred = window.OneSignalDeferred || [];
OneSignalDeferred.push(async function(OneSignal) {
await OneSignal.init({
appId: "1c06a74d-b0b8-4a67-ab8e-9fdee9ba212c",
serviceWorkerOverrideForTypical: true,
path: "https://vibrez-rugby.com/wp-content/plugins/onesignal-free-web-push-notifications/sdk_files/",
serviceWorkerParam: { scope: "/wp-content/plugins/onesignal-free-web-push-notifications/sdk_files/push/onesignal/" },
serviceWorkerPath: "OneSignalSDKWorker.js",
});
});
// Unregister the legacy OneSignal service worker to prevent scope conflicts
if (navigator.serviceWorker) {
navigator.serviceWorker.getRegistrations().then((registrations) => {
// Iterate through all registered service workers
registrations.forEach((registration) => {
// Check the script URL to identify the specific service worker
if (registration.active && registration.active.scriptURL.includes('OneSignalSDKWorker.js.php')) {
// Unregister the service worker
registration.unregister().then((success) => {
if (success) {
console.log('OneSignalSW: Successfully unregistered:', registration.active.scriptURL);
} else {
console.log('OneSignalSW: Failed to unregister:', registration.active.scriptURL);
}
});
}
});
}).catch((error) => {
console.error('Error fetching service worker registrations:', error);
});
}</script> <style id=vibrez-promo-styles>.promo-match{background-color:#fdeeee!important;border-left-color:#d63638!important}.promo-match strong{color:#333!important}.promo-match a{color:#c02729!important}</style> <script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}gtag('js',new Date());gtag('config','G-XMJEYXZ5FC');</script> <meta name=genre content="Actualité sportive"> <script id=wp-importmap type=importmap>{"imports":{"@wordpress/interactivity":"https://vibrez-rugby.com/wp-includes/js/dist/script-modules/interactivity/index.min.js?ver=efaa5193bbad9c60ffd1"}}</script> <link rel=modulepreload href="https://vibrez-rugby.com/wp-includes/js/dist/script-modules/interactivity/index.min.js?ver=efaa5193bbad9c60ffd1" id="@wordpress/interactivity-js-modulepreload" fetchpriority=low><style class=wp-fonts-local>@font-face{font-family:Inter;font-style:normal;font-weight:300 900;font-display:optional;src:local('Inter');}
@font-face{font-family:Cardo;font-style:normal;font-weight:400;font-display:fallback;src:url('https://vibrez-rugby.com/wp-content/themes/twentytwentyfour/assets/fonts/cardo/cardo_normal_400.woff2') format('woff2');}
@font-face{font-family:Cardo;font-style:normal;font-weight:700;font-display:fallback;src:url('https://vibrez-rugby.com/wp-content/themes/twentytwentyfour/assets/fonts/cardo/cardo_normal_700.woff2') format('woff2');}
@font-face{font-family:Cardo;font-style:italic;font-weight:400;font-display:fallback;src:url('https://vibrez-rugby.com/wp-content/themes/twentytwentyfour/assets/fonts/cardo/cardo_italic_400.woff2') format('woff2');}</style><link rel=icon href="https://vibrez-rugby.com/wp-content/uploads/2020/08/xcropped-android-chrome-512x512-1-1-150x150.webp.pagespeed.ic.2HG4NE3yOM.webp" sizes=32x32 /><link rel=icon href="https://vibrez-rugby.com/wp-content/uploads/2020/08/xcropped-android-chrome-512x512-1-1-300x300.webp.pagespeed.ic.EXEXnOAYO-.webp" sizes=192x192 /><link rel=apple-touch-icon href="https://vibrez-rugby.com/wp-content/uploads/2020/08/xcropped-android-chrome-512x512-1-1-300x300.webp.pagespeed.ic.EXEXnOAYO-.webp"/><meta name=msapplication-TileImage content="https://vibrez-rugby.com/wp-content/uploads/2020/08/cropped-android-chrome-512x512-1-1-300x300.webp"/><style id=vr-fonts-woff2-optional>@font-face{font-family:Poppins;font-style:normal;font-weight:400;font-display:optional;src:url('https://vibrez-rugby.com/wp-content/uploads/fonts/Poppins-Regular.woff2') format('woff2');}
@font-face{font-family:Poppins;font-style:normal;font-weight:600;font-display:optional;src:url('https://vibrez-rugby.com/wp-content/uploads/fonts/Poppins-SemiBold.woff2') format('woff2');}
@font-face{font-family:Poppins;font-style:normal;font-weight:300;font-display:optional;src:url('https://vibrez-rugby.com/wp-content/uploads/fonts/Poppins-Light.woff2') format('woff2');}
@font-face{font-family:Inter;font-style:normal;font-weight:300 900;font-display:optional;src:local('Inter');}</style> <script type='application/javascript' defer src='https://www.googletagmanager.com/gtag/js?id=G-XMJEYXZ5FC"'></script> <script type="text/javascript" src="https://vibrez-rugby.com/wp-content/cache/breeze-minification/js/breeze_matchs-de-top-14-en-direct-1-221082-js-js-front-end-breeze-prefetch-links.min.js?ver=1787836721"></script><script data-pagespeed-no-defer>//<![CDATA[
(function(){function f(a,b,d){if(a.addEventListener)a.addEventListener(b,d,!1);else if(a.attachEvent)a.attachEvent("on"+b,d);else{var c=a["on"+b];a["on"+b]=function(){d.call(this);c&&c.call(this)}}};window.pagespeed=window.pagespeed||{};var g=window.pagespeed;function k(a){this.g=[];this.f=0;this.h=!1;this.j=a;this.i=null;this.l=0;this.b=!1;this.a=0}function l(a,b){var d=b.getAttribute("data-pagespeed-lazy-position");if(d)return parseInt(d,0);var d=b.offsetTop,c=b.offsetParent;c&&(d+=l(a,c));d=Math.max(d,0);b.setAttribute("data-pagespeed-lazy-position",d);return d}
function m(a,b){var d,c,e;if(!a.b&&(0==b.offsetHeight||0==b.offsetWidth))return!1;a:if(b.currentStyle)c=b.currentStyle.position;else{if(document.defaultView&&document.defaultView.getComputedStyle&&(c=document.defaultView.getComputedStyle(b,null))){c=c.getPropertyValue("position");break a}c=b.style&&b.style.position?b.style.position:""}if("relative"==c)return!0;e=0;"number"==typeof window.pageYOffset?e=window.pageYOffset:document.body&&document.body.scrollTop?e=document.body.scrollTop:document.documentElement&&
document.documentElement.scrollTop&&(e=document.documentElement.scrollTop);d=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;c=e;e+=d;var h=b.getBoundingClientRect();h?(e=h.top-d,c=h.bottom):(h=l(a,b),d=h+b.offsetHeight,e=h-e,c=d-c);return e<=a.f&&0<=c+a.f}
k.prototype.m=function(a){p(a);var b=this;window.setTimeout(function(){var d=a.getAttribute("data-pagespeed-lazy-src");if(d)if((b.h||m(b,a))&&-1!=a.src.indexOf(b.j)){var c=a.parentNode,e=a.nextSibling;c&&c.removeChild(a);a.c&&(a.getAttribute=a.c);a.removeAttribute("onload");a.tagName&&"IMG"==a.tagName&&g.CriticalImages&&f(a,"load",function(){g.CriticalImages.checkImageForCriticality(this);b.b&&(b.a--,b.a||g.CriticalImages.checkCriticalImages())});a.removeAttribute("data-pagespeed-lazy-src");a.removeAttribute("data-pagespeed-lazy-replaced-functions");
c&&c.insertBefore(a,e);if(c=a.getAttribute("data-pagespeed-lazy-srcset"))a.srcset=c,a.removeAttribute("data-pagespeed-lazy-srcset");a.src=d}else b.g.push(a)},0)};k.prototype.loadIfVisibleAndMaybeBeacon=k.prototype.m;k.prototype.s=function(){this.h=!0;q(this)};k.prototype.loadAllImages=k.prototype.s;function q(a){var b=a.g,d=b.length;a.g=[];for(var c=0;c<d;++c)a.m(b[c])}function t(a,b){return a.a?null!=a.a(b):null!=a.getAttribute(b)}
k.prototype.u=function(){for(var a=document.getElementsByTagName("img"),b=0,d;d=a[b];b++)t(d,"data-pagespeed-lazy-src")&&p(d)};k.prototype.overrideAttributeFunctions=k.prototype.u;function p(a){t(a,"data-pagespeed-lazy-replaced-functions")||(a.c=a.getAttribute,a.getAttribute=function(a){"src"==a.toLowerCase()&&t(this,"data-pagespeed-lazy-src")&&(a="data-pagespeed-lazy-src");return this.c(a)},a.setAttribute("data-pagespeed-lazy-replaced-functions","1"))}
g.o=function(a,b){function d(){if(!(c.b&&a||c.i)){var b=200;200<(new Date).getTime()-c.l&&(b=0);c.i=window.setTimeout(function(){c.l=(new Date).getTime();q(c);c.i=null},b)}}var c=new k(b);g.lazyLoadImages=c;f(window,"load",function(){c.b=!0;c.h=a;c.f=200;if(g.CriticalImages){for(var b=0,d=document.getElementsByTagName("img"),r=0,n;n=d[r];r++)-1!=n.src.indexOf(c.j)&&t(n,"data-pagespeed-lazy-src")&&b++;c.a=b;c.a||g.CriticalImages.checkCriticalImages()}q(c)});b.indexOf("data")&&((new Image).src=b);f(window,
"scroll",d);f(window,"resize",d)};g.lazyLoadInit=g.o;})();
pagespeed.lazyLoadInit(true, "/pagespeed_static/1.JiBnMqyl6S.gif");
//]]></script></head><body class="wp-singular post-template-default single single-post postid-221082 single-format-standard wp-custom-logo wp-embed-responsive wp-theme-twentytwentyfour wp-child-theme-twentytwentyfour-child vr-live-page"><noscript><meta http-equiv="refresh" content="0;url='https://vibrez-rugby.com/matchs-de-top-14-en-direct/?PageSpeed=noscript'" /><style><!--table,div,span,font,p{display:none} --></style><div style="display:block">Please click <a href="https://vibrez-rugby.com/matchs-de-top-14-en-direct/?PageSpeed=noscript">here</a> if you are not redirected within a few seconds.</div></noscript><a class="skip-link screen-reader-text" id=wp-skip-link href="#wp--skip-link--target">Aller au contenu</a><div class=wp-site-blocks><header class=wp-block-template-part><div class="wp-block-group alignwide rugby-header has-base-2-color has-text-color has-background has-link-color wp-elements-1 has-global-padding is-layout-constrained wp-block-group-is-layout-constrained" style="background:linear-gradient(90deg,#004D90 0%,#002759 100%);padding-top:20px;padding-bottom:20px"><div class="wp-block-group alignwide is-content-justification-space-between is-layout-flex wp-container-core-group-is-layout-1d0a7695 wp-block-group-is-layout-flex"><div class="wp-block-group is-layout-flex wp-container-core-group-is-layout-c7f04a3e wp-block-group-is-layout-flex"><div class=wp-block-site-logo><a href="https://vibrez-rugby.com/" class=custom-logo-link rel=home><script data-pagespeed-no-defer>//<![CDATA[
(function(){for(var g="function"==typeof Object.defineProperties?Object.defineProperty:function(b,c,a){if(a.get||a.set)throw new TypeError("ES3 does not support getters and setters.");b!=Array.prototype&&b!=Object.prototype&&(b[c]=a.value)},h="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global&&null!=global?global:this,k=["String","prototype","repeat"],l=0;l<k.length-1;l++){var m=k[l];m in h||(h[m]={});h=h[m]}var n=k[k.length-1],p=h[n],q=p?p:function(b){var c;if(null==this)throw new TypeError("The 'this' value for String.prototype.repeat must not be null or undefined");c=this+"";if(0>b||1342177279<b)throw new RangeError("Invalid count value");b|=0;for(var a="";b;)if(b&1&&(a+=c),b>>>=1)c+=c;return a};q!=p&&null!=q&&g(h,n,{configurable:!0,writable:!0,value:q});var t=this;function u(b,c){var a=b.split("."),d=t;a[0]in d||!d.execScript||d.execScript("var "+a[0]);for(var e;a.length&&(e=a.shift());)a.length||void 0===c?d[e]?d=d[e]:d=d[e]={}:d[e]=c};function v(b){var c=b.length;if(0<c){for(var a=Array(c),d=0;d<c;d++)a[d]=b[d];return a}return[]};function w(b){var c=window;if(c.addEventListener)c.addEventListener("load",b,!1);else if(c.attachEvent)c.attachEvent("onload",b);else{var a=c.onload;c.onload=function(){b.call(this);a&&a.call(this)}}};var x;function y(b,c,a,d,e){this.h=b;this.j=c;this.l=a;this.f=e;this.g={height:window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight,width:window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth};this.i=d;this.b={};this.a=[];this.c={}}function z(b,c){var a,d,e=c.getAttribute("data-pagespeed-url-hash");if(a=e&&!(e in b.c))if(0>=c.offsetWidth&&0>=c.offsetHeight)a=!1;else{d=c.getBoundingClientRect();var f=document.body;a=d.top+("pageYOffset"in window?window.pageYOffset:(document.documentElement||f.parentNode||f).scrollTop);d=d.left+("pageXOffset"in window?window.pageXOffset:(document.documentElement||f.parentNode||f).scrollLeft);f=a.toString()+","+d;b.b.hasOwnProperty(f)?a=!1:(b.b[f]=!0,a=a<=b.g.height&&d<=b.g.width)}a&&(b.a.push(e),b.c[e]=!0)}y.prototype.checkImageForCriticality=function(b){b.getBoundingClientRect&&z(this,b)};u("pagespeed.CriticalImages.checkImageForCriticality",function(b){x.checkImageForCriticality(b)});u("pagespeed.CriticalImages.checkCriticalImages",function(){A(x)});function A(b){b.b={};for(var c=["IMG","INPUT"],a=[],d=0;d<c.length;++d)a=a.concat(v(document.getElementsByTagName(c[d])));if(a.length&&a[0].getBoundingClientRect){for(d=0;c=a[d];++d)z(b,c);a="oh="+b.l;b.f&&(a+="&n="+b.f);if(c=!!b.a.length)for(a+="&ci="+encodeURIComponent(b.a[0]),d=1;d<b.a.length;++d){var e=","+encodeURIComponent(b.a[d]);131072>=a.length+e.length&&(a+=e)}b.i&&(e="&rd="+encodeURIComponent(JSON.stringify(B())),131072>=a.length+e.length&&(a+=e),c=!0);C=a;if(c){d=b.h;b=b.j;var f;if(window.XMLHttpRequest)f=new XMLHttpRequest;else if(window.ActiveXObject)try{f=new ActiveXObject("Msxml2.XMLHTTP")}catch(r){try{f=new ActiveXObject("Microsoft.XMLHTTP")}catch(D){}}f&&(f.open("POST",d+(-1==d.indexOf("?")?"?":"&")+"url="+encodeURIComponent(b)),f.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),f.send(a))}}}function B(){var b={},c;c=document.getElementsByTagName("IMG");if(!c.length)return{};var a=c[0];if(!("naturalWidth"in a&&"naturalHeight"in a))return{};for(var d=0;a=c[d];++d){var e=a.getAttribute("data-pagespeed-url-hash");e&&(!(e in b)&&0<a.width&&0<a.height&&0<a.naturalWidth&&0<a.naturalHeight||e in b&&a.width>=b[e].o&&a.height>=b[e].m)&&(b[e]={rw:a.width,rh:a.height,ow:a.naturalWidth,oh:a.naturalHeight})}return b}var C="";u("pagespeed.CriticalImages.getBeaconData",function(){return C});u("pagespeed.CriticalImages.Run",function(b,c,a,d,e,f){var r=new y(b,c,a,e,f);x=r;d&&w(function(){window.setTimeout(function(){A(r)},0)})});})();pagespeed.CriticalImages.Run('/mod_pagespeed_beacon','https://vibrez-rugby.com/matchs-de-top-14-en-direct/','MMVvyUVY8Q',false,false,'czTvgZdaToA');
//]]></script><img width=60 height=60 src="https://vibrez-rugby.com/wp-content/uploads/2020/08/cropped-android-chrome-512x512-1-1.webp" class=custom-logo alt="rugby pro d2 - logo vibrez rugby" decoding=async srcset="https://vibrez-rugby.com/wp-content/uploads/2020/08/cropped-android-chrome-512x512-1-1.webp 512w, https://vibrez-rugby.com/wp-content/uploads/2020/08/cropped-android-chrome-512x512-1-1-300x300.webp 300w, https://vibrez-rugby.com/wp-content/uploads/2020/08/cropped-android-chrome-512x512-1-1-150x150.webp 150w" sizes="(max-width: 60px) 100vw, 60px" data-pagespeed-url-hash=1935545481 onload="pagespeed.CriticalImages.checkImageForCriticality(this);"></a></div></div><div class="wp-block-group is-vertical is-content-justification-right is-nowrap is-layout-flex wp-container-core-group-is-layout-03504d8d wp-block-group-is-layout-flex" style="padding-top:0;padding-right:0;padding-bottom:0;padding-left:0"><nav class="has-text-color has-white-color is-responsive items-justified-right rugby-home-nav wp-block-navigation is-horizontal is-content-justification-right is-layout-flex wp-container-core-navigation-is-layout-16a73299 wp-block-navigation-is-layout-flex" aria-label="Primary Menu" data-wp-interactive="core/navigation" data-wp-context='{"overlayOpenedBy":{"click":false,"hover":false,"focus":false},"type":"overlay","roleAttribute":"","ariaLabel":"Menu"}'><button aria-haspopup=dialog aria-label="Ouvrir le menu" class=wp-block-navigation__responsive-container-open data-wp-on--click=actions.openMenuOnClick data-wp-on--keydown=actions.handleMenuKeydown><svg width=24 height=24 xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" aria-hidden=true focusable=false><path d="M4 7.5h16v1.5H4z"></path><path d="M4 15h16v1.5H4z"></path></svg></button><div class="wp-block-navigation__responsive-container has-text-color has-white-color has-background has-primary-blue-background-color" id=modal-1 data-wp-class--has-modal-open=state.isMenuOpen data-wp-class--is-menu-open=state.isMenuOpen data-wp-watch=callbacks.initMenu data-wp-on--keydown=actions.handleMenuKeydown data-wp-on--focusout=actions.handleMenuFocusout tabindex=-1><div class=wp-block-navigation__responsive-close tabindex=-1><div class=wp-block-navigation__responsive-dialog data-wp-bind--aria-modal=state.ariaModal data-wp-bind--aria-label=state.ariaLabel data-wp-bind--role=state.roleAttribute> <button aria-label="Fermer le menu" class=wp-block-navigation__responsive-container-close data-wp-on--click=actions.closeMenuOnClick><svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24" width=24 height=24 aria-hidden=true focusable=false><path d="m13.06 12 6.47-6.47-1.06-1.06L12 10.94 5.53 4.47 4.47 5.53 10.94 12l-6.47 6.47 1.06 1.06L12 13.06l6.47 6.47 1.06-1.06L13.06 12Z"></path></svg></button><div class=wp-block-navigation__responsive-container-content data-wp-watch=callbacks.focusFirstElement id=modal-1-content><ul class="wp-block-navigation__container has-text-color has-white-color is-responsive items-justified-right rugby-home-nav wp-block-navigation"><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com"><span class=wp-block-navigation-item__label>Accueil</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="/matchs-de-rugby-en-direct/"><span class=wp-block-navigation-item__label>🔴 En direct</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="/radio-rugby/"><span class=wp-block-navigation-item__label>Radios</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/resultats/"><span class=wp-block-navigation-item__label>Résultats</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/classement/"><span class=wp-block-navigation-item__label>classement</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/rugby/xv-de-france/"><span class=wp-block-navigation-item__label>XV de France</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/rugby/top-14/"><span class=wp-block-navigation-item__label>Top 14</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/rugby/pro-d2/"><span class=wp-block-navigation-item__label>Pro D2</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/rugby/pronostic-rugby/"><span class=wp-block-navigation-item__label>Pronostics</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/programme-tv-rugby/"><span class=wp-block-navigation-item__label>Programme TV</span></a></li><li data-wp-context="{ "submenuOpenedBy": { "click": false, "hover": false, "focus": false }, "type": "submenu", "modal": null, "previousFocus": null }" data-wp-interactive="core/navigation" data-wp-on--focusout=actions.handleMenuFocusout data-wp-on--keydown=actions.handleMenuKeydown data-wp-watch=callbacks.initMenu tabindex=-1 class="wp-block-navigation-item has-child open-on-click wp-block-navigation-submenu"><button data-wp-bind--aria-expanded=state.isSubmenuOpen data-wp-on--click=actions.toggleMenuOnClick aria-label="Sous-menu ..." class="wp-block-navigation-item__content wp-block-navigation-submenu__toggle"><span class=wp-block-navigation-item__label>…</span></button><span class=wp-block-navigation__submenu-icon><svg xmlns="http://www.w3.org/2000/svg" width=12 height=12 viewbox="0 0 12 12" fill=none aria-hidden=true focusable=false><path d="M1.50002 4L6.00002 8L10.5 4" stroke-width=1.5></path></svg></span><ul data-wp-on--focus=actions.openMenuOnFocus class="wp-block-navigation__submenu-container has-text-color has-white-color has-background has-primary-blue-background-color wp-block-navigation-submenu"><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/application-rugby/"><span class=wp-block-navigation-item__label>APPLICATION RUGBY</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/mentions-legales-et-politique-de-confidentialite/"><span class=wp-block-navigation-item__label>Mentions légales et politique de confidentialité</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://vibrez-rugby.com/rugby/coupe-deurope-de-rugby/"><span class=wp-block-navigation-item__label>Coupe d’Europe</span></a></li></ul></li></ul></div></div></div></div></nav></div></div></div></script> <script async src="https://platform.twitter.com/widgets.js" charset=utf-8></script> </header><main id=wp--skip-link--target class="wp-block-group alignfull rugby-main-body is-layout-flow wp-block-group-is-layout-flow"><div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained" style="margin-bottom:var(--wp--preset--spacing--40);padding-top:var(--wp--preset--spacing--50)"><figure style="margin-bottom:var(--wp--preset--spacing--40)" class="rugby-media-img wp-block-post-featured-image"><img width=1920 height=1080 src="https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-768x432.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="Matchs de TOP 14 en direct" style="height:800px;object-fit:contain;" decoding=async fetchpriority=high srcset="https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct.png 1920w, https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-300x169.png 300w, https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-1024x576.png 1024w, https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-768x432.png 768w, https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-1536x864.png 1536w" sizes="(max-width: 1920px) 100vw, 1920px" data-pagespeed-url-hash=3413141321 onload="pagespeed.CriticalImages.checkImageForCriticality(this);"></figure><div class="wp-block-group is-vertical is-content-justification-stretch is-layout-flex wp-container-core-group-is-layout-95c59878 wp-block-group-is-layout-flex" style="padding-top:0;padding-bottom:0"><span class=vr-live-badge><span class=vr-live-dot></span>EN DIRECT</span><h1 class="wp-block-post-title has-x-large-font-size">Matchs de TOP 14 (Résultat 2026)</h1><div class=wp-block-template-part><div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained"><div class="wp-block-group is-content-justification-left is-layout-flex wp-container-core-group-is-layout-6a058180 wp-block-group-is-layout-flex"><div class="taxonomy-category has-link-color wp-elements-2 wp-block-post-terms has-text-color has-primary-blue-color"><a href="https://vibrez-rugby.com/rugby/top-14/" rel=tag>Top 14</a></div></div></div></div></div></div><div class="entry-content alignfull wp-block-post-content has-global-padding is-layout-constrained wp-block-post-content-is-layout-constrained"><div class=vr-share-buttons data-url="https://vibrez-rugby.com/matchs-de-top-14-en-direct/" data-title="Matchs de TOP 14 (Résultat 2026)"> <span class=vr-share-label>Partager :</span> <button class=vr-share-btn data-action=copy title="Copier le lien" aria-label="Copier le lien"> <svg width=20 height=20 viewbox="0 0 24 24" fill=none stroke=currentColor stroke-width=2><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg> </button> <a class="vr-share-btn vr-share-facebook" data-action=facebook target=_blank rel="noopener noreferrer" title=Facebook aria-label="Partager sur Facebook"> <svg width=20 height=20 viewbox="0 0 24 24" fill=currentColor><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg> </a> <a class="vr-share-btn vr-share-twitter" data-action=twitter target=_blank rel="noopener noreferrer" title="X / Twitter" aria-label="Partager sur X"> <svg width=20 height=20 viewbox="0 0 24 24" fill=currentColor><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg> </a> <a class="vr-share-btn vr-share-whatsapp" data-action=whatsapp target=_blank rel="noopener noreferrer" title=WhatsApp aria-label="Partager sur WhatsApp"> <svg width=20 height=20 viewbox="0 0 24 24" fill=currentColor><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/></svg> </a> <a class="vr-share-btn vr-share-linkedin" data-action=linkedin target=_blank rel="noopener noreferrer" title=LinkedIn aria-label="Partager sur LinkedIn"> <svg width=20 height=20 viewbox="0 0 24 24" fill=currentColor><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg> </a> <a class="vr-share-btn vr-share-email" data-action=email title=Email aria-label="Partager par email"> <svg width=20 height=20 viewbox="0 0 24 24" fill=none stroke=currentColor stroke-width=2><rect x=2 y=4 width=20 height=16 rx=2 /><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/></svg> </a></div><p class=wp-block-paragraph><br>Matchs de <a href="https://vibrez-rugby.com/matchs-de-rugby-en-direct/" title="top 14 en direct">TOP 14 en direct</a>. : Suivez tous vos matchs de rugby préférés à la radio ou en score live, <strong>en cliquant simplement sur le match de votre choix ci-dessous </strong>pour ouvrir le live et les radios. Vous pouvez également accéder à toutes les rencontres via les onglets “🔴 En Direct” et “Résultats”. Ne manquez rien des compétitions chaque week-end : XV de France (H/F/U20), Coupe d’Europe, Sevens, Top 14, Pro D2, Nationale, Fédérale, et bien plus encore. Plongez au cœur de l’action en un seul clic !</p><div data-post-id=80454 class="insert-page insert-page-80454"><style data-wp-block-html=css>* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
background-color: #f8fafc;
}
.competition-container {
max-width: 1000px;
margin: 0 auto;
padding: 20px;
}
.loader {
display: none;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
z-index: 1000;
}
.loader.active {
display: block;
}
/* Styles communs avec nouveau thème */
.competition-header {
background: linear-gradient(135deg, #374151 0%, #1f2937 100%);
color: white;
padding: 15px 20px;
border-radius: 8px;
margin-bottom: 20px;
text-align: center;
box-shadow: 0 4px 16px rgba(31, 41, 55, 0.3);
}
.competition-header h1 {
font-size: 1.5rem;
margin: 0;
font-weight: 600;
}
.view-toggle {
display: flex;
justify-content: center;
gap: 10px;
margin-bottom: 20px;
}
.toggle-btn {
padding: 10px 20px;
background: white;
border: 2px solid #e5e7eb;
border-radius: 25px;
cursor: pointer;
transition: all 0.3s ease;
font-weight: 500;
color: #374151;
}
.toggle-btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
.toggle-btn.active {
background: #475569;
color: white;
border-color: #475569;
box-shadow: 0 2px 8px rgba(71, 85, 105, 0.3);
}
.navigation-tabs {
display: flex;
gap: 10px;
margin-bottom: 20px;
overflow-x: auto;
padding: 10px 0;
}
.tab {
padding: 10px 20px;
background: white;
border: 2px solid #e5e7eb;
border-radius: 5px;
cursor: pointer;
transition: all 0.3s ease;
white-space: nowrap;
color: #374151;
}
.tab:hover {
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.tab.active {
background: #475569;
color: white;
border-color: #475569;
box-shadow: 0 2px 8px rgba(71, 85, 105, 0.2);
}
/* Cup/Tournament Styles */
.cup-view .phase-container {
margin-bottom: 40px;
}
.championship-view .phase-container,
.tournament-view .phase-container {
margin-bottom: 40px;
}
.phase-header {
background: linear-gradient(135deg, #374151 0%, #1f2937 100%);
color: white;
padding: 15px;
border-radius: 5px 5px 0 0;
font-weight: bold;
display: flex;
justify-content: space-between;
align-items: center;
}
.phase-type-badge {
background: rgba(255,255,255,0.2);
padding: 4px 12px;
border-radius: 12px;
font-size: 12px;
text-transform: uppercase;
}
/* Header tab buttons */
.header-tab-btn {
padding: 8px 16px !important;
font-size: 13px !important;
font-weight: 500;
transition: all 0.3s ease !important;
}
.header-tab-btn:hover {
background: rgba(255,255,255,0.3) !important;
color: white !important;
transform: translateY(-1px);
}
.header-tab-btn.active:hover {
background: rgba(255,255,255,0.25) !important;
}
/* Match Cards - Simplified */
.match-card {
background: white;
border: 2px solid #e5e7eb;
border-radius: 10px;
margin-bottom: 12px;
overflow: hidden;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
position: relative;
}
.match-card:hover {
transform: translateY(-2px) scale(1.02);
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
border-color: #475569;
}
.match-card.finished {
border-color: #1e40af;
}
.match-card.finished::before {
content: '✓';
position: absolute;
top: 8px;
right: 8px;
color: #1e40af;
font-weight: bold;
font-size: 14px;
}
.match-card.live {
border-color: #d62243;
animation: pulse-border 2s infinite;
}
.match-card.live::before {
content: '● LIVE';
position: absolute;
top: 8px;
right: 8px;
color: #d62243;
font-weight: bold;
font-size: 11px;
animation: pulse 2s infinite;
}
@keyframes pulse-border {
0% { border-color: #d62243; }
50% { border-color: #e85a75; }
100% { border-color: #d62243; }
}
/* Desktop layout */
@media (min-width: 769px) {
.match-team {
display: flex;
align-items: center;
padding: 12px 15px;
border-bottom: 1px solid #f3f4f6;
transition: all 0.2s;
position: relative;
}
.match-team:last-child {
border-bottom: none;
}
.match-team.winner {
background: linear-gradient(to right, #dbeafe 0%, #eff6ff 100%);
font-weight: 600;
}
.match-team.winner::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 4px;
background: #1e40af;
}
.match-team.loser {
opacity: 0.7;
}
.match-team-logo {
width: 32px;
height: 32px;
object-fit: contain;
margin-right: 12px;
border-radius: 4px;
background: #f9fafb;
padding: 2px;
}
.match-team-name {
flex: 1;
font-size: 14px;
font-weight: 500;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
color: #374151;
font-family: 'Poppins', sans-serif;
}
.match-team-score {
font-size: 18px;
font-weight: bold;
color: #475569;
min-width: 30px;
text-align: center;
background: #f1f5f9;
padding: 4px 10px;
border-radius: 6px;
}
}
/* Mobile layout - simplified */
@media (max-width: 768px) {
.match-card {
padding: 15px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 15px;
position: relative;
}
.match-team {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
flex: 1;
padding: 0;
border: none;
background: none !important;
}
.match-team::before {
display: none;
}
.match-team-logo {
width: 40px;
height: 40px;
margin-bottom: 6px;
border-radius: 4px;
}
.match-team-name {
font-size: 11px;
font-weight: 600;
max-width: 80px;
line-height: 1.2;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: #374151;
font-family: 'Poppins', sans-serif;
}
/* Center content (score or date) */
.match-center-score {
font-size: 20px;
font-weight: bold;
color: #475569;
background: #f1f5f9;
padding: 10px 15px;
border-radius: 8px;
text-align: center;
min-width: 70px;
}
.match-center-score.live {
background: #d62243;
color: white;
animation: pulse 2s infinite;
}
.match-center-date {
text-align: center;
padding: 5px 10px;
}
.match-date-day {
font-size: 12px;
font-weight: 600;
color: #475569;
margin-bottom: 2px;
}
.match-date-time {
font-size: 11px;
color: #6b7280;
font-weight: 500;
}
.match-info {
display: none;
}
.match-status {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 4px;
border-radius: 4px 4px 0 0;
}
.match-card.finished .match-status {
background: #1e40af;
}
.match-card.live .match-status {
background: #d62243;
animation: pulse 2s infinite;
}
}
.bracket-match-info {
background: #f9fafb;
padding: 6px 12px;
text-align: center;
font-size: 11px;
color: #6b7280;
border-top: 1px solid #e5e7eb;
}
.bracket-match-date {
font-weight: 500;
color: #374151;
}
.bracket-match-location {
margin-top: 1px;
font-size: 10px;
}
/* Match Status Indicator */
.match-status {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 3px;
background: #e5e7eb;
}
.bracket-match.finished .match-status {
background: #1e40af;
}
.bracket-match.live .match-status {
background: #d62243;
animation: pulse 2s infinite;
}
/* Bracket Navigation for Mobile */
.bracket-navigation {
display: none;
position: sticky;
top: 0;
background: white;
padding: 10px;
border-bottom: 2px solid #e5e7eb;
margin-bottom: 15px;
z-index: 100;
}
@media (max-width: 768px) {
.bracket-navigation {
display: flex;
gap: 10px;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.bracket-nav-btn {
padding: 8px 16px;
background: #f1f5f9;
border: 2px solid #475569;
border-radius: 20px;
color: #475569;
font-size: 12px;
font-weight: 600;
white-space: nowrap;
cursor: pointer;
transition: all 0.3s ease;
}
.bracket-nav-btn:hover {
transform: translateY(-1px);
box-shadow: 0 2px 8px rgba(71, 85, 105, 0.2);
}
.bracket-nav-btn.active {
background: #475569;
color: white;
}
}
/* List View for Groups */
.matches-list {
background: white;
border-radius: 0 0 5px 5px;
padding: 20px;
}
.match-row {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 15px;
padding: 15px;
background: #f9fafb;
border-radius: 8px;
margin-bottom: 10px;
cursor: pointer;
transition: all 0.3s ease;
align-items: center;
border: 2px solid transparent;
}
.match-row:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
border-color: #475569;
}
.team-info {
display: flex;
align-items: center;
gap: 10px;
}
.team-info.away {
flex-direction: row-reverse;
text-align: right;
}
.team-logo {
width: 40px;
height: 40px;
object-fit: contain;
}
.match-center {
text-align: center;
min-width: 120px;
}
.score-box {
background: #374151;
color: white;
padding: 8px 16px;
border-radius: 5px;
font-weight: bold;
display: inline-block;
}
.score-box.live {
background: #d62243;
animation: pulse 2s infinite;
}
@keyframes pulse {
0% { opacity: 1; }
50% { opacity: 0.8; }
100% { opacity: 1; }
}
.match-datetime {
font-size: 14px;
color: #6b7280;
line-height: 1.4;
}
.match-time {
display: block;
font-weight: bold;
color: #374151;
margin-top: 4px;
}
/* Enhanced Responsive Design */
@media (max-width: 1200px) {
.bracket-container {
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 20px;
}
}
@media (max-width: 768px) {
.competition-container {
padding: 10px;
}
.tournament-bracket {
padding: 0;
}
.match-row {
grid-template-columns: 1fr;
gap: 8px;
padding: 12px;
}
.team-info {
justify-content: center;
}
.team-info.away {
flex-direction: row;
text-align: left;
}
.view-toggle {
width: 100%;
justify-content: stretch;
}
.toggle-btn {
flex: 1;
padding: 12px 10px;
font-size: 14px;
}
.competition-header {
padding: 15px;
}
.competition-header h1 {
font-size: 20px;
}
.phase-header {
padding: 12px;
font-size: 14px;
}
.match-center {
min-width: 80px;
}
.score-box {
padding: 6px 12px;
font-size: 14px;
}
}
/* Ultra small devices */
@media (max-width: 480px) {
.bracket-match {
margin-bottom: 8px;
}
.team-logo {
width: 30px;
height: 30px;
}
.rounds-dropdown-btn {
padding: 10px 15px;
font-size: 14px;
}
}
/* Phase type specific styling */
.phase-container.knockout .phase-header {
background: linear-gradient(135deg, #ea580c 0%, #dc2626 100%);
}
.phase-container.group .phase-header {
background: linear-gradient(135deg, #004382 0%, #003770 100%);
}
/* Dropdown selector styles */
.rounds-dropdown-btn:hover {
background: #1f2937 !important;
transform: translateY(-2px);
box-shadow: 0 6px 16px rgba(31, 41, 55, 0.3);
}
.rounds-dropdown-option:hover {
background-color: #f9fafb !important;
}
.rounds-dropdown-option:first-child {
border-radius: 6px 6px 0 0;
}
.rounds-dropdown-option:last-child {
border-radius: 0 0 6px 6px;
border-bottom: none !important;
}
/* Responsive dropdown */
@media (max-width: 768px) {
.rounds-dropdown-btn {
min-width: 100% !important;
justify-content: center !important;
}
.rounds-dropdown-menu {
left: 0 !important;
right: 0 !important;
}
}
/* Bracket Card View for Complex Brackets on Mobile */
.bracket-cards-view {
display: none;
}
@media (max-width: 768px) {
.bracket-cards-view {
display: block;
padding: 15px;
}
.bracket-phase-card {
background: white;
border-radius: 12px;
margin-bottom: 20px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
overflow: hidden;
}
.bracket-phase-card-header {
background: linear-gradient(135deg, #374151 0%, #1f2937 100%);
color: white;
padding: 15px;
font-weight: 600;
font-size: 16px;
text-align: center;
}
.bracket-phase-card-content {
padding: 15px;
}
.bracket-phase-card.final .bracket-phase-card-header {
background: linear-gradient(135deg, #d97706 0%, #f59e0b 100%);
}
.bracket-phase-card.semifinal .bracket-phase-card-header {
background: linear-gradient(135deg, #ea580c 0%, #dc2626 100%);
}
}</style> <script data-wp-block-html=js>class CompetitionManager {
constructor() {
this.competitionId = this.getCompetitionIdFromUrl();
this.apiBase = 'https://rugby-app-4ebacff10fda.herokuapp.com';
this.currentData = null;
this.updateInterval = null;
this.cable = null;
this.competitionChannel = null;
}
getCompetitionIdFromUrl() {
const urlParams = new URLSearchParams(window.location.search);
return urlParams.get('competition') || 'top-14';
}
async init() {
await this.loadCompetitionData();
this.setupResponsiveHandler();
this.setupWebSocket();
this.startAutoUpdate();
}
setupResponsiveHandler() {
let resizeTimeout;
window.addEventListener('resize', () => {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(() => {
this.render();
}, 250);
});
}
setupWebSocket() {
try {
// Configuration basique du WebSocket
const wsUrl = this.apiBase.replace('http://', 'ws://').replace('https://', 'wss://') + '/cable';
console.log('Tentative de connexion WebSocket à:', wsUrl);
this.cable = new WebSocket(wsUrl);
this.cable.onopen = () => {
console.log('WebSocket connecté avec succès');
this.subscribeToCompetition();
};
this.cable.onmessage = (event) => {
try {
const data = JSON.parse(event.data);
this.handleWebSocketMessage(data);
} catch (parseError) {
console.warn('Erreur parsing message WebSocket:', parseError);
}
};
this.cable.onclose = (event) => {
console.log('WebSocket fermé:', event.code, event.reason);
console.log('Tentative de reconnexion dans 5 secondes...');
setTimeout(() => this.setupWebSocket(), 5000);
};
this.cable.onerror = (error) => {
console.error('Erreur WebSocket:', error);
};
} catch (error) {
console.warn('WebSocket non disponible, utilisation du polling seulement:', error);
// Fallback: augmenter la fréquence du polling si WebSocket échoue
this.startAutoUpdate(10000); // Polling toutes les 10 secondes
}
}
subscribeToCompetition() {
if (this.cable && this.cable.readyState === WebSocket.OPEN) {
const subscription = {
command: 'subscribe',
identifier: JSON.stringify({
channel: 'CompetitionChannel',
competition_id: this.competitionId
})
};
this.cable.send(JSON.stringify(subscription));
}
}
handleWebSocketMessage(data) {
if (data.type === 'ping') return;
console.log('Message WebSocket reçu:', data);
if (data.message) {
const message = data.message;
switch (message.type) {
case 'score_update':
case 'live_score_update':
this.updateMatchInUI(message.rencontre);
this.showNotification(`Score mis à jour: ${message.rencontre.local_team.name} vs ${message.rencontre.visitor_team.name}`);
break;
case 'state_change':
this.updateMatchStateInUI(message.rencontre_id, message.state);
this.showNotification(`État du match changé: ${message.state}`);
break;
}
}
}
updateMatchInUI(rencontreData) {
console.log('Updating match UI for:', rencontreData);
// Trouver et mettre à jour les éléments de match dans l'interface
const matchElements = document.querySelectorAll(`[data-match-id="${rencontreData.id}"]`);
console.log('Found match elements:', matchElements.length);
matchElements.forEach(element => {
const homeScore = rencontreData.score_locale || 0;
const awayScore = rencontreData.score_visiteuse || 0;
const isLive = rencontreData.etat === 'endirect' || rencontreData.etat === 'mi-temps';
const isFinished = rencontreData.etat === 'termine';
console.log('Updating element with scores:', homeScore, awayScore, 'state:', rencontreData.etat);
// Mobile layout
if (window.innerWidth <= 768) {
let centerElement = element.querySelector('.match-center-score, .match-center-date');
if (isLive || isFinished) {
// Si le match est live ou terminé, on doit afficher le score
if (!element.querySelector('.match-center-score')) {
// Remplacer le container de date par le container de score
const dateElement = element.querySelector('.match-center-date');
if (dateElement) {
const scoreElement = document.createElement('div');
scoreElement.className = `match-center-score ${isLive ? 'live' : ''}`;
scoreElement.textContent = `${homeScore} - ${awayScore}`;
dateElement.parentNode.replaceChild(scoreElement, dateElement);
}
} else {
// Mettre à jour le score existant
const centerScore = element.querySelector('.match-center-score');
if (centerScore) {
centerScore.textContent = `${homeScore} - ${awayScore}`;
if (isLive) {
centerScore.classList.add('live');
} else {
centerScore.classList.remove('live');
}
}
}
}
} else {
// Desktop layout
const matchCenter = element.querySelector('.match-center');
if (matchCenter) {
if (isLive || isFinished) {
// Si le match est live ou terminé, remplacer par score-box
if (!element.querySelector('.score-box')) {
matchCenter.innerHTML = `<div class="score-box ${isLive ? 'live' : ''}">${homeScore} - ${awayScore}</div>`;
} else {
// Mettre à jour le score existant
const scoreBox = element.querySelector('.score-box');
if (scoreBox) {
scoreBox.textContent = `${homeScore} - ${awayScore}`;
if (isLive) {
scoreBox.classList.add('live');
} else {
scoreBox.classList.remove('live');
}
}
}
}
}
}
// Mettre à jour l'état visuel de la card
element.classList.remove('finished', 'live');
if (isFinished) {
element.classList.add('finished');
} else if (isLive) {
element.classList.add('live');
}
console.log('Updated match state classes');
});
}
updateMatchStateInUI(rencontreId, newState) {
const matchElements = document.querySelectorAll(`[data-match-id="${rencontreId}"]`);
matchElements.forEach(element => {
// Réinitialiser les classes d'état
element.className = element.className.replace(/\b(finished|live|scheduled)\b/g, '');
// Ajouter la nouvelle classe selon l'état
switch (newState) {
case 'termine':
element.classList.add('finished');
break;
case 'endirect':
case 'mi-temps':
element.classList.add('live');
break;
case 'programme':
element.classList.add('scheduled');
break;
}
});
}
showNotification(message) {
// Créer une notification simple
const notification = document.createElement('div');
notification.style.cssText = `
position: fixed;
top: 20px;
right: 20px;
background: #374151;
color: white;
padding: 15px 20px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0,0,0,0.3);
z-index: 10000;
font-size: 14px;
max-width: 300px;
transition: all 0.3s ease;
`;
notification.textContent = message;
document.body.appendChild(notification);
// Animation d'apparition
setTimeout(() => {
notification.style.transform = 'translateX(0)';
notification.style.opacity = '1';
}, 100);
// Supprimer après 5 secondes
setTimeout(() => {
notification.style.transform = 'translateX(100%)';
notification.style.opacity = '0';
setTimeout(() => {
if (notification.parentNode) {
notification.parentNode.removeChild(notification);
}
}, 300);
}, 5000);
}
showLoader() {
document.getElementById('loader').classList.add('active');
}
hideLoader() {
document.getElementById('loader').classList.remove('active');
}
async loadCompetitionData() {
this.showLoader();
try {
const response = await fetch(`${this.apiBase}/competitions/${this.competitionId}/adaptive`);
this.currentData = await response.json();
this.render();
} catch (error) {
console.error('Erreur lors du chargement:', error);
this.showError('Erreur lors du chargement des données');
} finally {
this.hideLoader();
}
}
render() {
if (!this.currentData) return;
// Update header (only title, no date)
document.getElementById('competitionTitle').textContent = this.currentData.competition.display_name;
document.getElementById('competitionInfo').textContent = '';
// Store competition date for inline display
this.competitionDate = this.currentData.competition.years || '';
// Render based on competition type
const mainContent = document.getElementById('mainContent');
mainContent.innerHTML = '';
switch (this.currentData.type) {
case 'championship':
this.renderChampionship(mainContent);
break;
case 'cup':
this.renderCup(mainContent);
break;
case 'tournament':
this.renderTournament(mainContent);
break;
default:
this.renderDefault(mainContent);
}
// Update inline competition dates after rendering
this.updateInlineCompetitionDates();
}
updateInlineCompetitionDates() {
// Update all inline competition date elements
const inlineDateElements = document.querySelectorAll('.competition-date-inline');
inlineDateElements.forEach(element => {
element.textContent = this.competitionDate;
});
}
renderCup(container) {
const view = document.createElement('div');
view.className = 'cup-view';
// Render all phases as list
this.renderListView(view, this.currentData.phases);
container.appendChild(view);
}
groupPhasesByType(phases) {
const grouped = {
group: [],
knockout: []
};
phases.forEach(phase => {
if (phase.type === 'knockout') {
grouped.knockout.push(phase);
} else {
grouped.group.push(phase);
}
});
return grouped;
}
renderListView(container, phases) {
phases.forEach(phase => {
const phaseContainer = this.createPhaseContainer(phase, false);
container.appendChild(phaseContainer);
});
}
createPhaseContainer(phase) {
const phaseContainer = document.createElement('div');
phaseContainer.className = `phase-container ${phase.type}`;
const phaseHeader = document.createElement('div');
phaseHeader.className = 'phase-header';
phaseHeader.innerHTML = `
<div style="display: flex; align-items: center; gap: 12px; flex: 1;">
<span>${phase.name}</span>
<select class="journee-selector-header" style="padding: 6px 12px; background: rgba(255,255,255,0.15); color: white; border: 1px solid rgba(255,255,255,0.3); border-radius: 4px; cursor: pointer; font-size: 12px; font-weight: 500; min-width: 140px; outline: none;">
<option value="">Choisir une journée...</option>
</select>
</div>
<div style="display: flex; gap: 8px; align-items: center;">
${phase.type === 'group' ? '<button class="header-tab-btn active" data-tab="rounds" style="padding: 6px 12px; background: rgba(255,255,255,0.2); border: 1px solid rgba(255,255,255,0.3); border-radius: 4px; color: white; font-size: 12px; cursor: pointer; transition: all 0.2s; font-weight: 500;">Journées</button>' : ''}
${phase.type === 'group' ? '<button class="header-tab-btn" data-tab="standings" style="padding: 6px 12px; background: transparent; border: 1px solid rgba(255,255,255,0.3); border-radius: 4px; color: rgba(255,255,255,0.7); font-size: 12px; cursor: pointer; transition: all 0.2s; font-weight: 500;">Classement</button>' : ''}
</div>
`;
phaseContainer.appendChild(phaseHeader);
// Add event listeners to header buttons
const headerBtns = phaseHeader.querySelectorAll('.header-tab-btn');
headerBtns.forEach(btn => {
btn.addEventListener('click', (e) => {
e.stopPropagation();
const tabType = btn.dataset.tab;
// Update button styles for all tabs
headerBtns.forEach(b => {
b.classList.remove('active');
b.style.background = 'transparent';
b.style.color = 'rgba(255,255,255,0.7)';
});
btn.classList.add('active');
btn.style.background = 'rgba(255,255,255,0.2)';
btn.style.color = 'white';
this.showPhaseTab(phaseContainer, phase, tabType);
});
});
// Initial content
const contentContainer = document.createElement('div');
contentContainer.className = 'phase-content';
phaseContainer.appendChild(contentContainer);
// Show rounds by default (matches)
this.showPhaseTab(phaseContainer, phase, 'rounds');
return phaseContainer;
}
showPhaseTab(container, phase, tab) {
// Update content
const contentArea = container.querySelector('.phase-content');
contentArea.innerHTML = '';
if (tab === 'rounds') {
const matchesContainer = this.createMatchesListGrouped(phase.matches);
contentArea.appendChild(matchesContainer);
// Initialize header selector with journée data
const headerSelector = container.querySelector('.journee-selector-header');
if (headerSelector && matchesContainer.journeeData) {
const { sortedJournees, defaultJournee } = matchesContainer.journeeData;
// Clear existing options
headerSelector.innerHTML = '';
// Add journée options
console.log('Initializing selector with default journée:', defaultJournee);
sortedJournees.forEach(journee => {
const option = document.createElement('option');
option.value = journee;
option.textContent = journee;
if (journee === defaultJournee) {
option.selected = true;
console.log('Selected option:', journee);
}
headerSelector.appendChild(option);
});
// Set the selected value explicitly
headerSelector.value = defaultJournee;
console.log('Set selector value to:', headerSelector.value);
// Remove existing event listeners and add new one
const newHeaderSelector = headerSelector.cloneNode(true);
newHeaderSelector.value = defaultJournee; // Ensure value is maintained after cloning
headerSelector.parentNode.replaceChild(newHeaderSelector, headerSelector);
newHeaderSelector.addEventListener('change', (e) => {
if (matchesContainer.showJourneeMatches) {
matchesContainer.showJourneeMatches(e.target.value);
}
});
// Show the selector
newHeaderSelector.style.display = 'block';
console.log('Final selector value:', newHeaderSelector.value);
}
} else if (tab === 'standings') {
// Keep header selector visible
const headerSelector = container.querySelector('.journee-selector-header');
if (headerSelector) {
headerSelector.style.display = 'block';
}
this.renderPhaseStandings(contentArea, phase);
}
}
renderPhaseStandings(container, phase) {
const standingsContainer = document.createElement('div');
standingsContainer.className = 'standings-table';
standingsContainer.style.cssText = 'background: white; border-radius: 5px; overflow: hidden; margin-top: 20px;';
if (phase.standings && phase.standings.length > 0) {
const table = document.createElement('table');
table.style.cssText = 'width: 100%; border-collapse: collapse;';
// Header
const thead = document.createElement('thead');
const headerRow = document.createElement('tr');
headerRow.style.cssText = 'background: #f3f4f6; border-bottom: 2px solid #e5e7eb;';
headerRow.innerHTML = `
<th style="padding: 12px; text-align: left; font-weight: 600; color: #374151;">Équipe</th>
<th style="padding: 12px; text-align: center; font-weight: 600; color: #374151; width: 50px;">J</th>
<th style="padding: 12px; text-align: center; font-weight: 600; color: #374151; width: 50px;">V</th>
<th style="padding: 12px; text-align: center; font-weight: 600; color: #374151; width: 50px;">D</th>
<th style="padding: 12px; text-align: center; font-weight: 600; color: #374151; width: 60px;">+/-</th>
<th style="padding: 12px; text-align: center; font-weight: 600; color: #374151; width: 60px;">Pts</th>
`;
thead.appendChild(headerRow);
table.appendChild(thead);
// Body
const tbody = document.createElement('tbody');
phase.standings.forEach((team, index) => {
const row = document.createElement('tr');
row.style.cssText = `border-bottom: 1px solid #e5e7eb; ${index % 2 === 0 ? 'background: #f9fafb;' : ''} transition: background-color 0.2s ease;`;
row.innerHTML = `
<td style="padding: 12px;">
<div style="display: flex; align-items: center; gap: 8px;">
<span style="color: #6b7280; font-weight: 500; min-width: 20px;">${team.rank || index + 1}.</span>
<img decoding="async" src="${team.team_img_url || '/default-team.png'}" alt="${team.team_name}" style="width: 24px; height: 24px; object-fit: cover; border-radius: 3px;" onerror="this.style.display='none'" data-pagespeed-no-transform>
<span style="font-weight: 500; color: #111827;">${team.team_name}</span>
</div>
</td>
<td style="padding: 12px; text-align: center; color: #6b7280;">${team.matchs_joues}</td>
<td style="padding: 12px; text-align: center; color: #059669; font-weight: 500;">${team.matchs_gagnes}</td>
<td style="padding: 12px; text-align: center; color: #dc2626; font-weight: 500;">${team.matchs_perdus}</td>
<td style="padding: 12px; text-align: center; color: ${team.diff_buts >= 0 ? '#059669' : '#dc2626'}; font-weight: 500;">${team.diff_buts >= 0 ? '+' : ''}${team.diff_buts}</td>
<td style="padding: 12px; text-align: center;">
<span style="background: #3b82f6; color: white; padding: 4px 8px; border-radius: 4px; font-weight: 600; font-size: 13px;">${team.points}</span>
</td>
`;
tbody.appendChild(row);
});
table.appendChild(tbody);
standingsContainer.appendChild(table);
} else {
const noStandings = document.createElement('p');
noStandings.textContent = 'Aucun classement disponible';
noStandings.style.cssText = 'color: #6b7280; text-align: center; padding: 40px;';
standingsContainer.appendChild(noStandings);
}
container.appendChild(standingsContainer);
}
renderChampionship(container) {
const view = document.createElement('div');
view.className = 'championship-view';
// Render each group
this.currentData.groups.forEach(group => {
const groupContainer = this.createGroupContainer(group);
view.appendChild(groupContainer);
});
container.appendChild(view);
}
createGroupContainer(group) {
const groupContainer = document.createElement('div');
groupContainer.className = 'phase-container group';
const groupHeader = document.createElement('div');
groupHeader.className = 'phase-header';
groupHeader.innerHTML = `
<div style="display: flex; align-items: center; gap: 12px;">
<span>${group.name === '1' ? 'Top 14' : `Groupe ${group.name}`}</span>
<span style="font-size: 0.85rem; opacity: 0.7; font-weight: 400;" class="competition-date-inline"></span>
</div>
<div style="display: flex; gap: 8px; align-items: center;">
<button class="header-tab-btn active" data-tab="rounds" style="padding: 6px 12px; background: rgba(255,255,255,0.2); border: 1px solid rgba(255,255,255,0.3); border-radius: 4px; color: white; font-size: 12px; cursor: pointer; transition: all 0.2s; font-weight: 500;">Journées</button>
<button class="header-tab-btn" data-tab="standings" style="padding: 6px 12px; background: transparent; border: 1px solid rgba(255,255,255,0.3); border-radius: 4px; color: rgba(255,255,255,0.7); font-size: 12px; cursor: pointer; transition: all 0.2s; font-weight: 500;">Classement</button>
</div>
`;
groupContainer.appendChild(groupHeader);
// Add event listeners to header buttons
const headerBtns = groupHeader.querySelectorAll('.header-tab-btn');
headerBtns.forEach(btn => {
btn.addEventListener('click', (e) => {
e.stopPropagation();
const tabType = btn.dataset.tab;
// Update button styles with smooth transition
headerBtns.forEach(b => {
b.classList.remove('active');
b.style.transition = 'all 0.3s ease';
b.style.background = 'transparent';
b.style.color = 'rgba(255,255,255,0.7)';
});
btn.classList.add('active');
btn.style.transition = 'all 0.3s ease';
btn.style.background = 'rgba(255,255,255,0.2)';
btn.style.color = 'white';
this.switchGroupTab(groupContainer, tabType, group);
// Update inline dates after tab switch
setTimeout(() => this.updateInlineCompetitionDates(), 50);
});
});
// Content area
const contentArea = document.createElement('div');
contentArea.className = 'group-content';
groupContainer.appendChild(contentArea);
// Initially show rounds
this.renderGroupRounds(contentArea, group);
return groupContainer;
}
switchGroupTab(container, tab, group) {
// Update tab styles
const tabs = container.querySelectorAll('.tab');
tabs.forEach(t => t.classList.remove('active'));
const activeTab = Array.from(tabs).find(t =>
(tab === 'rounds' && t.textContent === 'Journées') ||
(tab === 'standings' && t.textContent === 'Classement')
);
if (activeTab) activeTab.classList.add('active');
// Update content
const contentArea = container.querySelector('.group-content');
contentArea.innerHTML = '';
if (tab === 'rounds') {
this.renderGroupRounds(contentArea, group);
} else {
this.renderGroupStandings(contentArea, group);
}
}
renderGroupRounds(container, group) {
const roundsContainer = document.createElement('div');
roundsContainer.className = 'matches-list';
if (group.rounds && group.rounds.length > 0) {
group.rounds.forEach(round => {
const roundHeader = document.createElement('h3');
roundHeader.textContent = round.name;
roundHeader.style.cssText = 'margin: 20px 0 10px 0; color: #475569;';
roundsContainer.appendChild(roundHeader);
if (round.matches && round.matches.length > 0) {
round.matches.forEach(match => {
const matchCard = this.createMatchCard(match);
roundsContainer.appendChild(matchCard);
});
} else {
const noMatches = document.createElement('p');
noMatches.textContent = 'Aucun match programmé';
noMatches.style.cssText = 'color: #6b7280; font-style: italic; margin-bottom: 20px; padding-left: 20px;';
roundsContainer.appendChild(noMatches);
}
});
} else {
const noRounds = document.createElement('p');
noRounds.textContent = 'Aucune journée disponible';
noRounds.style.cssText = 'color: #6b7280; text-align: center; padding: 40px;';
roundsContainer.appendChild(noRounds);
}
container.appendChild(roundsContainer);
}
renderGroupStandings(container, group) {
const standingsContainer = document.createElement('div');
standingsContainer.className = 'standings-table';
standingsContainer.style.cssText = 'background: white; border-radius: 5px; overflow: hidden; margin-top: 20px;';
if (group.standings && group.standings.length > 0) {
const table = document.createElement('table');
table.style.cssText = 'width: 100%; border-collapse: collapse;';
// Header
const header = document.createElement('thead');
header.innerHTML = `
<tr style="background: #374151; color: white;">
<th style="padding: 12px; text-align: left;">Pos</th>
<th style="padding: 12px; text-align: left;">Équipe</th>
<th style="padding: 12px; text-align: center;">J</th>
<th style="padding: 12px; text-align: center;">G</th>
<th style="padding: 12px; text-align: center;">N</th>
<th style="padding: 12px; text-align: center;">P</th>
<th style="padding: 12px; text-align: center;">+/-</th>
<th style="padding: 12px; text-align: center;">Pts</th>
</tr>
`;
table.appendChild(header);
// Body
const tbody = document.createElement('tbody');
group.standings.forEach((team, index) => {
const row = document.createElement('tr');
row.style.cssText = `border-bottom: 1px solid #e5e7eb; ${index % 2 === 0 ? 'background: #f9fafb;' : ''} transition: background-color 0.2s ease;`;
row.innerHTML = `
<td style="padding: 12px; font-weight: bold;">${index + 1}</td>
<td style="padding: 12px;">
<div style="display: flex; align-items: center; gap: 10px;">
<img decoding="async" src="${team.team_img_url}" alt="${team.team_name}" style="width: 24px; height: 24px; object-fit: contain;" data-pagespeed-no-transform>
<span style="font-family: 'Poppins', sans-serif;">${team.team_name}</span>
</div>
</td>
<td style="padding: 12px; text-align: center;">${team.matchs_joues || 0}</td>
<td style="padding: 12px; text-align: center;">${team.matchs_gagnes || 0}</td>
<td style="padding: 12px; text-align: center;">${team.matchs_nuls || 0}</td>
<td style="padding: 12px; text-align: center;">${team.matchs_perdus || 0}</td>
<td style="padding: 12px; text-align: center;">${team.diff_buts || 0}</td>
<td style="padding: 12px; text-align: center; font-weight: bold;">${team.points || 0}</td>
`;
tbody.appendChild(row);
});
table.appendChild(tbody);
standingsContainer.appendChild(table);
} else {
const noStandings = document.createElement('p');
noStandings.textContent = 'Aucun classement disponible';
noStandings.style.cssText = 'color: #6b7280; text-align: center; padding: 40px;';
standingsContainer.appendChild(noStandings);
}
container.appendChild(standingsContainer);
}
renderTournament(container) {
const view = document.createElement('div');
view.className = 'tournament-view';
// Group phases by type for better organization
const groupedPhases = this.groupPhasesByType(this.currentData.phases);
// Render championship phase with rounds navigation
if (groupedPhases.group.length > 0) {
const championshipPhase = groupedPhases.group[0];
this.renderChampionshipPhase(view, championshipPhase);
}
// Render knockout phases as list
if (groupedPhases.knockout.length > 0) {
this.renderListView(view, groupedPhases.knockout);
}
container.appendChild(view);
}
renderChampionshipPhase(container, phase) {
const phaseContainer = document.createElement('div');
phaseContainer.className = 'phase-container group';
const phaseHeader = document.createElement('div');
phaseHeader.className = 'phase-header';
phaseHeader.innerHTML = `
<div style="display: flex; align-items: center; gap: 12px;">
<span>${phase.name}</span>
<span style="font-size: 0.85rem; opacity: 0.7; font-weight: 400;" class="competition-date-inline"></span>
<div class="rounds-selector-header" style="position: relative; display: inline-block; margin-left: 12px;">
<button class="rounds-dropdown-btn-header" style="padding: 6px 12px; background: rgba(255,255,255,0.15); color: white; border: 1px solid rgba(255,255,255,0.3); border-radius: 4px; cursor: pointer; font-size: 12px; font-weight: 500; display: flex; align-items: center; gap: 6px; min-width: 120px; justify-content: space-between; transition: all 0.3s;">
<span>${phase.rounds && phase.rounds.length > 0 ? phase.rounds[0].name : 'Journée'}</span>
<span style="font-size: 10px;">▼</span>
</button>
<div class="rounds-dropdown-menu-header" style="position: absolute; top: 100%; left: 0; right: 0; background: white; border: 2px solid #374151; border-radius: 6px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); z-index: 1000; margin-top: 4px; max-height: 250px; overflow-y: auto; display: none;"></div>
</div>
</div>
<div style="display: flex; gap: 8px; align-items: center;">
<button class="header-tab-btn active" data-tab="rounds" style="padding: 6px 12px; background: rgba(255,255,255,0.2); border: 1px solid rgba(255,255,255,0.3); border-radius: 4px; color: white; font-size: 12px; cursor: pointer; transition: all 0.2s; font-weight: 500;">Journées</button>
<button class="header-tab-btn" data-tab="standings" style="padding: 6px 12px; background: transparent; border: 1px solid rgba(255,255,255,0.3); border-radius: 4px; color: rgba(255,255,255,0.7); font-size: 12px; cursor: pointer; transition: all 0.2s; font-weight: 500;">Classement</button>
</div>
`;
phaseContainer.appendChild(phaseHeader);
// Add event listeners to header buttons
const headerBtns = phaseHeader.querySelectorAll('.header-tab-btn');
headerBtns.forEach(btn => {
btn.addEventListener('click', (e) => {
e.stopPropagation();
const tabType = btn.dataset.tab;
// Update button styles with smooth transition
headerBtns.forEach(b => {
b.classList.remove('active');
b.style.transition = 'all 0.3s ease';
b.style.background = 'transparent';
b.style.color = 'rgba(255,255,255,0.7)';
});
btn.classList.add('active');
btn.style.transition = 'all 0.3s ease';
btn.style.background = 'rgba(255,255,255,0.2)';
btn.style.color = 'white';
this.switchChampionshipTab(phaseContainer, tabType, phase);
// Update inline dates after tab switch
setTimeout(() => this.updateInlineCompetitionDates(), 50);
});
});
// Setup rounds dropdown in header
this.setupHeaderRoundsDropdown(phaseHeader, phase, phaseContainer);
// Content area
const contentArea = document.createElement('div');
contentArea.className = 'championship-content';
phaseContainer.appendChild(contentArea);
// Initially show rounds with navigation
this.renderChampionshipRounds(contentArea, phase);
container.appendChild(phaseContainer);
}
switchChampionshipTab(container, tab, phase) {
// Update tab styles
const tabs = container.querySelectorAll('.tab');
tabs.forEach(t => t.classList.remove('active'));
const activeTab = Array.from(tabs).find(t =>
(tab === 'rounds' && t.textContent === 'Journées') ||
(tab === 'standings' && t.textContent === 'Classement')
);
if (activeTab) activeTab.classList.add('active');
// Update content
const contentArea = container.querySelector('.championship-content');
contentArea.innerHTML = '';
if (tab === 'rounds') {
this.renderChampionshipRounds(contentArea, phase);
} else {
this.renderChampionshipStandings(contentArea, phase);
}
}
renderChampionshipRounds(container, phase) {
// Matches container only - selector is now in header
const matchesContainer = document.createElement('div');
matchesContainer.className = 'round-matches';
container.appendChild(matchesContainer);
// Show first round by default
if (phase.rounds && phase.rounds.length > 0) {
this.loadRoundMatches(matchesContainer, phase.rounds[0]);
}
}
setupHeaderRoundsDropdown(phaseHeader, phase, phaseContainer) {
const dropdownBtn = phaseHeader.querySelector('.rounds-dropdown-btn-header');
const dropdownMenu = phaseHeader.querySelector('.rounds-dropdown-menu-header');
if (!dropdownBtn || !dropdownMenu) return;
// Populate dropdown menu with rounds
if (phase.rounds && phase.rounds.length > 0) {
phase.rounds.forEach((round, index) => {
const option = document.createElement('div');
option.className = 'rounds-dropdown-option-header';
option.style.cssText = `
padding: 8px 12px;
cursor: pointer;
border-bottom: 1px solid #e5e7eb;
transition: all 0.3s ease;
font-size: 12px;
color: #374151;
`;
option.textContent = round.name;
// Hover effects
option.onmouseenter = () => {
option.style.backgroundColor = '#f9fafb';
};
option.onmouseleave = () => {
option.style.backgroundColor = 'transparent';
};
// Click handler
option.onclick = () => {
// Update button text
dropdownBtn.querySelector('span:first-child').textContent = round.name;
// Hide dropdown
dropdownMenu.style.display = 'none';
dropdownBtn.querySelector('span:last-child').textContent = '▼';
// Load round matches
const matchesContainer = phaseContainer.querySelector('.round-matches');
if (matchesContainer) {
this.loadRoundMatches(matchesContainer, round);
}
};
if (index === phase.rounds.length - 1) {
option.style.borderBottom = 'none';
}
dropdownMenu.appendChild(option);
});
}
// Toggle dropdown on button click
dropdownBtn.onclick = (e) => {
e.stopPropagation();
const isVisible = dropdownMenu.style.display === 'block';
dropdownMenu.style.display = isVisible ? 'none' : 'block';
dropdownBtn.querySelector('span:last-child').textContent = isVisible ? '▼' : '▲';
};
// Close dropdown when clicking outside
document.addEventListener('click', (e) => {
if (!phaseHeader.querySelector('.rounds-selector-header').contains(e.target)) {
dropdownMenu.style.display = 'none';
dropdownBtn.querySelector('span:last-child').textContent = '▼';
}
});
}
async selectRoundById(container, round, selectedOption) {
// Display matches for selected round
const matchesContainer = container.querySelector('.round-matches');
this.loadRoundMatches(matchesContainer, round);
}
async loadRoundMatches(container, round) {
// Show loading
container.innerHTML = '<div style="text-align: center; padding: 40px; color: #6b7280;">Chargement...</div>';
try {
const response = await fetch(`${this.apiBase}/competitions/${this.competitionId}/rounds/${round.id}`);
const data = await response.json();
this.displayRoundMatches(container, data.matches);
} catch (error) {
console.error('Error loading round matches:', error);
container.innerHTML = '<div style="text-align: center; padding: 40px; color: #d62243;">Erreur lors du chargement des matches</div>';
}
}
groupMatchesByRound(matches) {
const grouped = {};
matches.forEach(match => {
const roundName = this.extractRoundName(match);
if (!grouped[roundName]) {
grouped[roundName] = [];
}
grouped[roundName].push(match);
});
return grouped;
}
extractRoundName(match) {
// Try to extract round name from match data
if (match.phase_name) {
return match.phase_name;
}
// Fallback to date-based grouping
const date = new Date(match.date);
return `Journée du ${date.toLocaleDateString('fr-FR', { day: 'numeric', month: 'short' })}`;
}
selectRound(container, roundName, matchesByRound, selectedBtn) {
// Update button styles
const buttons = container.querySelectorAll('.round-btn');
buttons.forEach(btn => {
btn.style.background = 'white';
btn.style.color = '#374151';
btn.style.borderColor = '#e5e7eb';
btn.classList.remove('active');
});
selectedBtn.style.background = '#475569';
selectedBtn.style.color = 'white';
selectedBtn.style.borderColor = '#475569';
selectedBtn.classList.add('active');
// Display matches for selected round
const matchesContainer = container.querySelector('.round-matches');
this.displayRoundMatches(matchesContainer, matchesByRound[roundName]);
}
displayRoundMatches(container, matches) {
container.innerHTML = '';
const matchesList = document.createElement('div');
matchesList.className = 'matches-list';
matches.forEach(match => {
const matchCard = this.createMatchCard(match);
matchesList.appendChild(matchCard);
});
container.appendChild(matchesList);
}
renderChampionshipStandings(container, phase) {
const standingsContainer = document.createElement('div');
standingsContainer.className = 'standings-table';
standingsContainer.style.cssText = 'background: white; border-radius: 5px; overflow: hidden; margin-top: 20px;';
if (phase.standings && phase.standings.length > 0) {
const table = document.createElement('table');
table.style.cssText = 'width: 100%; border-collapse: collapse;';
// Header
const header = document.createElement('thead');
header.innerHTML = `
<tr style="background: #374151; color: white;">
<th style="padding: 12px; text-align: left;">Pos</th>
<th style="padding: 12px; text-align: left;">Équipe</th>
<th style="padding: 12px; text-align: center;">J</th>
<th style="padding: 12px; text-align: center;">G</th>
<th style="padding: 12px; text-align: center;">N</th>
<th style="padding: 12px; text-align: center;">P</th>
<th style="padding: 12px; text-align: center;">+/-</th>
<th style="padding: 12px; text-align: center;">Pts</th>
</tr>
`;
table.appendChild(header);
// Body
const tbody = document.createElement('tbody');
phase.standings.forEach((team, index) => {
const row = document.createElement('tr');
row.style.cssText = `border-bottom: 1px solid #e5e7eb; ${index % 2 === 0 ? 'background: #f9fafb;' : ''} transition: background-color 0.2s ease;`;
row.innerHTML = `
<td style="padding: 12px; font-weight: bold;">${index + 1}</td>
<td style="padding: 12px;">
<div style="display: flex; align-items: center; gap: 10px;">
<img decoding="async" src="${team.team_img_url}" alt="${team.team_name}" style="width: 24px; height: 24px; object-fit: contain;" data-pagespeed-no-transform>
<span style="font-family: 'Poppins', sans-serif;">${team.team_name}</span>
</div>
</td>
<td style="padding: 12px; text-align: center;">${team.matchs_joues || 0}</td>
<td style="padding: 12px; text-align: center;">${team.matchs_gagnes || 0}</td>
<td style="padding: 12px; text-align: center;">${team.matchs_nuls || 0}</td>
<td style="padding: 12px; text-align: center;">${team.matchs_perdus || 0}</td>
<td style="padding: 12px; text-align: center;">${team.diff_buts || 0}</td>
<td style="padding: 12px; text-align: center; font-weight: bold;">${team.points || 0}</td>
`;
tbody.appendChild(row);
});
table.appendChild(tbody);
standingsContainer.appendChild(table);
} else {
const noStandings = document.createElement('p');
noStandings.textContent = 'Aucun classement disponible';
noStandings.style.cssText = 'color: #6b7280; text-align: center; padding: 40px;';
standingsContainer.appendChild(noStandings);
}
container.appendChild(standingsContainer);
}
renderDefault(container) {
// Fallback rendering
const matchesList = this.createMatchesList(this.currentData.matches || []);
container.appendChild(matchesList);
}
createMatchesListGrouped(matches) {
const container = document.createElement('div');
container.className = 'matches-list-grouped';
// Group matches by journée (phase_name)
const matchesByJournee = {};
matches.forEach(match => {
const journee = match.phase_name || 'Matches';
if (!matchesByJournee[journee]) {
matchesByJournee[journee] = [];
}
matchesByJournee[journee].push(match);
});
// Sort journées chronologically
const sortedJournees = Object.keys(matchesByJournee).sort((a, b) => {
// Extract number from "1re journée", "2e journée", etc.
const getJourneeNumber = (str) => {
const match = str.match(/(\d+)[re]+\s+journ/i);
return match ? parseInt(match[1]) : 999;
};
return getJourneeNumber(a) - getJourneeNumber(b);
});
if (sortedJournees.length === 0) {
const noMatches = document.createElement('div');
noMatches.style.cssText = 'text-align: center; padding: 40px; color: #6b7280; background: white; border-radius: 8px;';
noMatches.innerHTML = `
<div style="font-size: 48px; opacity: 0.3; margin-bottom: 16px;">⚽</div>
<p style="font-size: 16px; margin: 0;">Aucun match disponible</p>
`;
container.appendChild(noMatches);
return container;
}
// Find the closest journée to current date
const getCurrentClosestJournee = () => {
const today = new Date();
today.setHours(0, 0, 0, 0); // Reset time to compare only dates
let closestJournee = sortedJournees[0];
let minDiff = Infinity;
console.log('Looking for closest journée to today:', today.toDateString());
sortedJournees.forEach(journee => {
const journeeMatches = matchesByJournee[journee];
if (journeeMatches.length > 0) {
// Get the earliest match date in this journée
const earliestMatch = journeeMatches.reduce((earliest, match) => {
const matchDate = new Date(match.date);
const earliestDate = new Date(earliest.date);
return matchDate < earliestDate ? match : earliest;
});
const matchDate = new Date(earliestMatch.date);
matchDate.setHours(0, 0, 0, 0); // Reset time to compare only dates
const diff = Math.abs(matchDate - today);
console.log(`Journée "${journee}": earliest match ${matchDate.toDateString()}, diff: ${diff} days`);
if (diff < minDiff) {
minDiff = diff;
closestJournee = journee;
}
}
});
console.log('Selected closest journée:', closestJournee);
return closestJournee;
};
const defaultJournee = getCurrentClosestJournee();
// Store journée data for header selector
container.journeeData = {
matchesByJournee,
sortedJournees,
defaultJournee
};
// Content area for matches
const contentArea = document.createElement('div');
contentArea.className = 'journee-content-area';
container.appendChild(contentArea);
// Function to show matches for selected journée
const showJourneeMatches = (selectedJournee) => {
contentArea.innerHTML = '';
if (!matchesByJournee[selectedJournee]) return;
const journeeSection = document.createElement('div');
journeeSection.className = 'journee-section';
// Matches container (sans header vert)
const matchesContainer = document.createElement('div');
matchesContainer.className = 'journee-matches';
matchesContainer.style.cssText = 'background: white; border-radius: 8px; overflow: hidden; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);';
matchesByJournee[selectedJournee].forEach((match, index) => {
const matchCard = this.createMatchCard(match);
matchCard.style.borderRadius = '0';
matchCard.style.marginBottom = '0';
if (index < matchesByJournee[selectedJournee].length - 1) {
matchCard.style.borderBottom = '1px solid #e5e7eb';
}
matchesContainer.appendChild(matchCard);
});
journeeSection.appendChild(matchesContainer);
contentArea.appendChild(journeeSection);
};
// Store function for header selector to use
container.showJourneeMatches = showJourneeMatches;
// Show default journée (closest to current date)
showJourneeMatches(defaultJournee);
return container;
}
createMatchesList(matches) {
const container = document.createElement('div');
container.className = 'matches-list';
matches.forEach(match => {
const matchCard = this.createMatchCard(match);
container.appendChild(matchCard);
});
return container;
}
createMatchCard(match) {
const isFinished = match.etat === 'termine';
const isLive = match.etat === 'endirect';
const card = document.createElement('div');
card.className = `match-card ${isFinished ? 'finished' : ''} ${isLive ? 'live' : ''}`;
card.setAttribute('data-match-id', match.id);
card.onclick = () => window.location.href = `https://vibrez-rugby.com/live-en-direct/?id=${match.id}`;
// Add status indicator
const statusBar = document.createElement('div');
statusBar.className = 'match-status';
card.appendChild(statusBar);
// Determine winner if match is finished
let homeWinner = false, awayWinner = false;
if (isFinished && match.score_locale !== null && match.score_visiteuse !== null) {
const homeScore = parseInt(match.score_locale) || 0;
const awayScore = parseInt(match.score_visiteuse) || 0;
if (homeScore > awayScore) {
homeWinner = true;
} else if (awayScore > homeScore) {
awayWinner = true;
}
}
// Mobile layout (default)
if (window.innerWidth <= 768) {
// Determine what to show in center (score or date)
let centerContent;
if (isFinished || isLive) {
// Show score
const homeScore = match.score_locale || '0';
const awayScore = match.score_visiteuse || '0';
centerContent = `
<div class="match-center-score ${isLive ? 'live' : ''}">
${homeScore} - ${awayScore}
</div>
`;
} else {
// Show date/time
const matchDate = new Date(match.date);
centerContent = `
<div class="match-center-date">
<div class="match-date-day">${matchDate.toLocaleDateString('fr-FR', { day: 'numeric', month: 'short' })}</div>
<div class="match-date-time">${matchDate.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' })}</div>
</div>
`;
}
card.innerHTML += `
<div class="match-team ${homeWinner ? 'winner' : (awayWinner ? 'loser' : '')}">
<img decoding="async" class="match-team-logo"
src="${match.local_team.img_url}"
alt="${match.local_team.name}"
onerror="this.src='data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 100 100\'%3E%3Crect width=\'100\' height=\'100\' fill=\'%23e5e7eb\'/%3E%3Ctext x=\'50\' y=\'50\' text-anchor=\'middle\' dy=\'.3em\' fill=\'%236b7280\' font-family=\'Poppins\' font-size=\'20\'%3E${match.local_team.name.charAt(0).toUpperCase()}%3C/text%3E%3C/svg%3E'" data-pagespeed-no-transform>
<span class="match-team-name" title="${match.local_team.name}">${match.local_team.name}</span>
</div>
${centerContent}
<div class="match-team ${awayWinner ? 'winner' : (homeWinner ? 'loser' : '')}">
<img decoding="async" class="match-team-logo"
src="${match.visitor_team.img_url}"
alt="${match.visitor_team.name}"
onerror="this.src='data:image/svg+xml,%3Csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 100 100\'%3E%3Crect width=\'100\' height=\'100\' fill=\'%23e5e7eb\'/%3E%3Ctext x=\'50\' y=\'50\' text-anchor=\'middle\' dy=\'.3em\' fill=\'%236b7280\' font-family=\'Poppins\' font-size=\'20\'%3E${match.visitor_team.name.charAt(0).toUpperCase()}%3C/text%3E%3C/svg%3E'" data-pagespeed-no-transform>
<span class="match-team-name" title="${match.visitor_team.name}">${match.visitor_team.name}</span>
</div>
`;
} else {
// Desktop layout - back to original row format
card.className = 'match-row';
card.setAttribute('data-match-id', match.id);
card.innerHTML = `
<div class="team-info">
<img decoding="async" class="team-logo" src="${match.local_team.img_url}" alt="${match.local_team.name}" data-pagespeed-no-transform>
<span style="font-family: 'Poppins', sans-serif;">${match.local_team.name}</span>
</div>
<div class="match-center">
${(isFinished || isLive) ?
`<div class="score-box ${isLive ? 'live' : ''}">${match.score_locale || 0} - ${match.score_visiteuse || 0}</div>` :
`<div class="match-datetime">
${new Date(match.date).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric' })}
<span class="match-time">${new Date(match.date).toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' })}</span>
</div>`
}
</div>
<div class="team-info away">
<img decoding="async" class="team-logo" src="${match.visitor_team.img_url}" alt="${match.visitor_team.name}" data-pagespeed-no-transform>
<span style="font-family: 'Poppins', sans-serif;">${match.visitor_team.name}</span>
</div>
`;
}
return card;
}
createMatchRow(match) {
const row = document.createElement('div');
row.className = 'match-row';
row.onclick = () => window.location.href = `https://vibrez-rugby.com/live-en-direct/?id=${match.id}`;
// Home team
const homeTeam = document.createElement('div');
homeTeam.className = 'team-info';
homeTeam.innerHTML = `
<img decoding="async" class="team-logo" src="${match.local_team.img_url}" alt="${match.local_team.display_name}" data-pagespeed-no-transform>
<span style="font-family: 'Poppins', sans-serif;">${match.local_team.display_name}</span>
`;
row.appendChild(homeTeam);
// Center (score or datetime)
const center = document.createElement('div');
center.className = 'match-center';
if (match.etat === 'termine' || match.etat === 'endirect') {
const scoreBox = document.createElement('div');
scoreBox.className = 'score-box' + (match.etat === 'endirect' ? ' live' : '');
scoreBox.textContent = `${match.score_locale || 0} - ${match.score_visiteuse || 0}`;
center.appendChild(scoreBox);
} else {
const datetime = new Date(match.date);
center.innerHTML = `
<div class="match-datetime">
${datetime.toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric' })}
<span class="match-time">${datetime.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' })}</span>
</div>
`;
}
row.appendChild(center);
// Away team
const awayTeam = document.createElement('div');
awayTeam.className = 'team-info away';
awayTeam.innerHTML = `
<img decoding="async" class="team-logo" src="${match.visitor_team.img_url}" alt="${match.visitor_team.display_name}" data-pagespeed-no-transform>
<span style="font-family: 'Poppins', sans-serif;">${match.visitor_team.display_name}</span>
`;
row.appendChild(awayTeam);
return row;
}
startAutoUpdate() {
// Update scores every 30 seconds
this.updateInterval = setInterval(() => {
this.updateLiveScores();
}, 30000);
}
async updateLiveScores() {
// Only update if there are live matches
if (!this.hasLiveMatches()) return;
try {
const response = await fetch(`${this.apiBase}/competitions/${this.competitionId}/live_scores`);
const liveData = await response.json();
// Update UI with new scores
this.updateScoresInUI(liveData);
} catch (error) {
console.error('Erreur lors de la mise à jour des scores:', error);
}
}
hasLiveMatches() {
// Check if any match is live
return true; // Simplified
}
updateScoresInUI(liveData) {
// Update scores without full re-render
// Implementation depends on your needs
}
showError(message) {
const mainContent = document.getElementById('mainContent');
mainContent.innerHTML = `
<div style="text-align: center; padding: 40px; color: #d62243;">
<h2>Erreur</h2>
<p>${message}</p>
</div>
`;
}
destroy() {
if (this.updateInterval) {
clearInterval(this.updateInterval);
}
if (this.cable) {
this.cable.close();
}
}
}
// Initialize on page load
document.addEventListener('DOMContentLoaded', () => {
const manager = new CompetitionManager();
manager.init();
// Cleanup on page unload
window.addEventListener('beforeunload', () => {
manager.destroy();
});
});</script> <div class=competition-container><div class=loader id=loader><div>Chargement…</div></div><div class=competition-header><h2 id=competitionTitle>Chargement de la compétition…</h2><p id=competitionInfo></p><p class=lien-interne-conseil><strong>À lire aussi</strong> | <a href="https://vibrez-rugby.com/samuel-bielle-biarrey-un-nouveau-defi-a-nissa-rugby/">Samuel Bielle-Biarrey : un nouveau défi à Nissa Rugby</a></p></div><div id=mainContent></div></div><h2 id=h-resultats-top-14 class=wp-block-heading>Résultats TOP 14</h2><p class=wp-block-paragraph>Les <strong><a href="https://vibrez-rugby.com/resultats-top-14/" title="Résultats Top 14">résultats Top 14</a></strong> rythment chaque week-end la saison du rugby français. Chaque journée livre son lot de suspense, de matchs serrés et de retournements spectaculaires. En effet, trois enjeux majeurs animent le championnat. Les prétendants visent le <strong>Bouclier de Brennus</strong>. D’autres équipes courent après une qualification européenne. Enfin, certaines luttent pour éviter la relégation. Cette page centralise ainsi tous les <strong>résultats <a href="https://vibrez-rugby.com/rugby/top-14/" title="Top 14">Top 14</a></strong> mis à jour en temps réel.</p><figure class="wp-block-image aligncenter size-large is-resized"><img decoding=async data-pagespeed-lazy-src="https://vibrez-rugby.com/wp-content/uploads/2022/09/d74ed801b1f1bacb01717d50acef77e8-rugby-top-14-rugby-programme-tv-1024x575.webp" alt="résultats Top 14 en direct" style="width:330px;height:auto" data-pagespeed-url-hash=3249040288 src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"><figcaption class=wp-element-caption>Résultats Top 14 : suivez tous les scores du championnat</figcaption></figure><h2 class=wp-block-heading>Résultats Top 14 : comment fonctionne le système de points</h2><p class=wp-block-paragraph>Comprendre les <strong>résultats <a href="https://vibrez-rugby.com/rugby/top-14/" title="Top 14">Top 14</a></strong> passe d’abord par le système de points. Ainsi, une victoire rapporte <strong>quatre points</strong> à l’équipe gagnante. Un match nul, plus rare dans le rugby professionnel, octroie <strong>deux points</strong> à chaque formation. Une défaite, en revanche, ne rapporte aucun point au perdant, sauf cas particulier du bonus défensif.</p><p class=wp-block-paragraph>Par ailleurs, deux bonus viennent enrichir les <strong>résultats Top 14</strong> et récompenser les équipes offensives ou combatives. Le <strong>bonus offensif</strong> s’obtient en inscrivant au moins trois essais de plus que l’adversaire. Cette règle pousse notamment les équipes à jouer sans calcul, même en cas d’avance confortable. Le <strong>bonus défensif</strong>, quant à lui, récompense l’équipe qui perd avec un écart inférieur ou égal à sept points. De ce fait, une défaite honorable peut rapporter un point précieux pour la course au classement.</p><h2 class=wp-block-heading>L’impact direct des résultats Top 14 sur le classement</h2><p class=wp-block-paragraph>Les <strong>résultats Top 14</strong> conditionnent l’ensemble du classement général. En effet, chaque victoire rapproche une équipe des <strong>phases finales</strong>. À l’inverse, une défaite peut la faire reculer de plusieurs places. Les tableaux mis à jour sur cette page reflètent instantanément l’impact de chaque rencontre. Ainsi, les supporters suivent en direct les évolutions et anticipent les rapports de forces à venir.</p><p class=lien-interne-conseil><strong>À lire aussi</strong> | <a href="https://vibrez-rugby.com/stade-francais-un-ex-international-francais-reprend-du-service/">Stade Français : un ex-international français reprend du service</a></p><p class=wp-block-paragraph>De plus, cette lecture du<strong> Top 14</strong> permet d’identifier les dynamiques du championnat. Certaines équipes enchaînent parfois plusieurs victoires consécutives et grimpent rapidement dans la hiérarchie. D’autres, en revanche, traversent des périodes plus délicates et doivent réagir vite pour redresser la barre. La régularité constitue généralement la clé pour se maintenir dans le haut du classement tout au long de la saison régulière.</p><h2 class=wp-block-heading>Résultats Top 14 et qualification en Coupe d’Europe</h2><p class=wp-block-paragraph>Les <strong>résultats Top 14</strong> déterminent également les clubs qualifiés pour les compétitions européennes. Les meilleures formations du championnat français décrochent en effet une place en <strong><a href="https://vibrez-rugby.com/rugby/coupe-deurope-de-rugby/champions-cup/" title="Champions Cup">Champions Cup</a></strong>, la compétition la plus prestigieuse du rugby européen. D’autres clubs bien classés se qualifient pour la <strong><a href="https://vibrez-rugby.com/rugby/coupe-deurope-de-rugby/challenge-cup/" title="Challenge Cup">Challenge Cup</a></strong>, seconde compétition continentale. De ce fait, chaque victoire acquise pendant la saison régulière peut ouvrir la porte à une aventure européenne.</p><p class=wp-block-paragraph>Cette dimension européenne ajoute une pression supplémentaire sur les épaules des joueurs et des entraîneurs. En effet, participer à la <strong><a href="https://vibrez-rugby.com/rugby/coupe-deurope-de-rugby/champions-cup/" title="Champions Cup">Champions Cup</a></strong> représente un objectif stratégique majeur pour tous les clubs français. Les meilleurs <strong>résultats Top 14</strong> deviennent donc le passeport pour affronter les cadors anglais, irlandais et sud-africains sur la scène continentale. Le prestige et les revenus générés par ces compétitions attirent notamment de nombreux sponsors.</p><h2 class=wp-block-heading>L’enjeu de la relégation</h2><p class=wp-block-paragraph>À l’autre bout du classement, les <strong>résultats Top 14</strong> conditionnent la lutte pour le maintien. L’équipe classée dernière en fin de saison régulière est en effet directement reléguée en <strong><a href="https://vibrez-rugby.com/rugby/pro-d2/" title="Pro D2">Pro D2</a></strong>. L’avant-dernier, quant à lui, dispute un <strong>match de barrage</strong> face au finaliste de <a href="https://vibrez-rugby.com/rugby/pro-d2/" title="Pro D2">Pro D2</a>. Cette rencontre décisive peut bouleverser le destin de plusieurs clubs et sceller leur avenir sportif.</p><p class=lien-interne-conseil><strong>À lire aussi</strong> | <a href="https://vibrez-rugby.com/stade-toulousain-qui-pour-remplacer-naoto-saito/">Stade Toulousain : qui pour remplacer Naoto Saito ?</a></p><p class=wp-block-paragraph>Par conséquent, les <strong>résultats Top 14</strong> des équipes de bas de tableau captivent tout autant que ceux des favoris. Chaque point compte notamment lors des confrontations directes entre équipes menacées. Un bonus défensif arraché à la dernière minute peut ainsi faire toute la différence en fin de saison. Les supporters de ces clubs suivent alors les résultats avec une attention particulière, conscients que chaque match peut faire basculer la saison entière.</p><h2 class=wp-block-heading>Un calendrier structuré pour une saison intense</h2><p class=wp-block-paragraph>Le <strong><a href="https://vibrez-rugby.com/calendrier-top-14/" title="Calendrier Top 14">calendrier Top 14</a></strong> compte <strong>26 journées</strong> de saison régulière. Chaque équipe affronte les treize autres formations en matchs aller-retour, ce qui garantit une équité totale entre les prétendants. Les rencontres se déroulent principalement le week-end, avec quelques matchs programmés le vendredi soir pour la diffusion télévisée. En outre, certaines journées peuvent être décalées en raison des tournois internationaux, notamment lors du <a href="https://vibrez-rugby.com/rugby/six-nations/" title="Tournoi des Six Nations">Tournoi des Six Nations</a>.</p><p class=wp-block-paragraph>Après la saison régulière, les six meilleurs clubs se qualifient pour les <strong>phases finales</strong>. Les deux premiers accèdent directement aux <strong>demi-finales</strong>, tandis que les équipes classées de la troisième à la sixième place disputent d’abord des <strong>barrages</strong>. La finale, jouée sur terrain neutre, désigne le champion de France et l’attributaire du <strong>Bouclier de Brennus</strong>. Le Stade de France accueille traditionnellement ce rendez-vous majeur du rugby hexagonal.</p><h2 class=wp-block-heading>Où consulter les résultats Top 14 en direct</h2><p class=wp-block-paragraph>Suivre les <strong>résultats Top 14</strong> n’a jamais été aussi accessible. Cette page rassemble tous les scores mis à jour en temps réel après chaque coup de sifflet final. Par ailleurs, les diffuseurs officiels du championnat proposent également des retransmissions en direct des matchs. Canal+ détient notamment les droits historiques du Top 14 et diffuse l’intégralité des rencontres de la saison régulière et des phases finales.</p><p class=lien-interne-conseil><strong>À lire aussi</strong> | <a href="https://vibrez-rugby.com/francois-cros-toulouse-perd-un-cadre-au-profit-de-lyon/">François Cros : Toulouse perd un cadre au profit de Lyon</a></p><p class=wp-block-paragraph>Pour le suivi mobile, plusieurs applications dédiées offrent les <strong>résultats Top 14</strong> minute par minute. La <a href="https://www.lnr.fr/rugby-top-14" target=_blank rel=noopener>Ligue Nationale de Rugby</a> publie par ailleurs les scores institutionnels sur son site officiel. Les réseaux sociaux relaient également en temps réel les faits marquants. Ainsi, les supporters restent connectés en permanence à l’actualité de leur club favori.</p><h2 class=wp-block-heading>Combien de clubs disputent le Top 14 ?</h2><p class=wp-block-paragraph>Comme son nom l’indique, le <strong>Top 14</strong> réunit quatorze clubs professionnels. Ces formations s’affrontent sur 26 journées de saison régulière avant les phases finales. Chaque saison, le champion en titre défend son <strong>Bouclier de Brennus</strong> face aux nouveaux prétendants promus de Pro D2. Le nombre de clubs reste stable depuis plusieurs saisons, ce qui garantit une bonne lisibilité du championnat.</p><h2 class=wp-block-heading>Quand ont lieu les matchs du Top 14 ?</h2><p class=wp-block-paragraph>Les <strong>résultats Top 14</strong> tombent principalement le week-end, du vendredi soir au dimanche après-midi. Certaines journées débutent notamment le vendredi à 21h avec un match en prime time diffusé sur Canal+. Le samedi accueille traditionnellement plusieurs affiches à 15h et à 17h. Le dimanche complète enfin le programme avec des rencontres décalées, notamment lors des multiplex de fin d’après-midi.</p><h2 class=wp-block-heading>Comment sont attribués les bonus dans le Top 14 ?</h2><p class=wp-block-paragraph>Deux types de bonus s’ajoutent aux <strong>résultats Top 14</strong>. Le bonus offensif récompense d’abord les équipes qui marquent trois essais de plus que leur adversaire. Le bonus défensif s’attribue quant à lui aux formations qui perdent avec un écart maximum de sept points. Ces règles favorisent le jeu offensif et maintiennent notamment le suspense jusqu’au bout des rencontres, même en cas de score déséquilibré.</p><h2 class=wp-block-heading>Quel club a remporté le plus de titres du Top 14 ?</h2><p class=wp-block-paragraph>Le <a href="https://vibrez-rugby.com/rugby/top-14/stade-toulousain/" title="Stade Toulousain">Stade Toulousain</a> domine largement le palmarès historique du championnat français. Le club haut-garonnais compte notamment de nombreux titres de champion de France, ce qui en fait le club le plus titré du rugby hexagonal. Ses <strong>résultats Top 14</strong> restent scrutés de près chaque saison, tant sa capacité à jouer les premiers rôles se confirme au fil des années. D’autres clubs comme le <a href="https://vibrez-rugby.com/rugby/top-14/stade-francais/" title="Stade Français">Stade Français</a>, <a href="https://vibrez-rugby.com/rugby/top-14/clermont-ferrand/" title=Clermont>Clermont</a> ou <a href="https://vibrez-rugby.com/rugby/top-14/toulon/" title=Toulon>Toulon</a> figurent également au palmarès récent.</p><h2 class=wp-block-heading>Pour résumer</h2><p class=wp-block-paragraph>Les <strong>résultats Top 14</strong> constituent le fil rouge de la saison de rugby français. Chaque journée redistribue en effet les cartes du classement et influence à la fois la course aux phases finales, les qualifications européennes et la lutte pour le maintien. Grâce à un système de bonus incitatif et à un calendrier structuré, le championnat garantit du spectacle et du suspense jusqu’à la dernière journée. Cette page vous accompagne tout au long de la saison en centralisant l’ensemble des <strong>résultats Top 14</strong> mis à jour en temps réel.</p></div><br><br><br><br><br><br><h2 class=wp-block-heading id=h-matchs-de-top-14-en-direct>Matchs de TOP 14 en direct</h2><p class=wp-block-paragraph>Le TOP 14 est le championnat de rugby le plus prestigieux en France. Chaque saison, il propose des matchs captivants qui attirent les amateurs de rugby. Si vous cherchez à suivre les <strong>matchs de TOP 14 en direct</strong>, Vibrez Rugby est la plateforme idéale. Nous vous offrons une couverture complète pour vous immerger dans chaque rencontre du championnat.</p><h4 class=wp-block-heading id=h-pourquoi-choisir-vibrez-rugby-pour-suivre-les-matchs-en-direct>Pourquoi choisir Vibrez Rugby pour suivre les matchs en direct ?</h4><ol class=wp-block-list><li><strong>Couverture complète du championnat</strong> Vibrez Rugby vous propose une couverture détaillée des matchs du TOP 14. Vous pourrez suivre chaque rencontre en direct, grâce à nos retransmissions en temps réel. De plus, vous bénéficierez de commentaires précis et d’analyses détaillées pour mieux comprendre les enjeux de chaque match.</li><li><strong>Accès aux statistiques en temps réel</strong> Les statistiques sont essentielles pour analyser les performances des équipes et des joueurs. Sur Vibrez Rugby, vous avez accès à des données en temps réel pendant les matchs. Vous pouvez suivre les performances individuelles et les statistiques d’équipe, enrichissant ainsi votre expérience de spectateur.</li><li><strong>Analyse approfondie et commentaires d’experts</strong> En plus de la diffusion en direct, Vibrez Rugby offre des analyses approfondies des matchs. Nos experts décortiquent les moments clés et les stratégies des équipes. Vous aurez ainsi un aperçu détaillé des performances sur le terrain et des décisions importantes qui influencent le déroulement du jeu.</li><li><strong>Interface conviviale et accessible</strong> Vibrez Rugby est conçu pour offrir une expérience utilisateur optimale. L’interface est intuitive et facile à utiliser. Que vous soyez sur un ordinateur, une tablette ou un smartphone, notre plateforme s’adapte à tous vos appareils pour vous garantir un confort de visionnage.</li><li><strong>Actualités et highlights des matchs</strong> En plus des retransmissions en direct, Vibrez Rugby propose des actualités et des résumés des matchs. Vous pouvez rester informé des derniers résultats et des moments forts même si vous ne pouvez pas suivre les matchs en direct.</li></ol><h4 class=wp-block-heading id=h-comment-acceder-aux-matchs-de-top-14-en-direct-sur-vibrez-rugby>Comment accéder aux matchs de TOP 14 en direct sur Vibrez Rugby ?</h4><p class=wp-block-paragraph>Pour suivre les matchs de TOP 14 en direct sur Vibrez Rugby, rendez-vous sur notre site web. Nous vous recommandons de vous inscrire à notre newsletter pour recevoir des mises à jour et des notifications sur les matchs à venir. Une fois connecté, vous accédez à une liste complète des matchs de la saison. Sélectionnez la rencontre que vous souhaitez suivre et profitez de notre diffusion en direct.</p><h4 class=wp-block-heading id=h-les-avantages-de-suivre-les-matchs-de-top-14-en-direct-sur-vibrez-rugby>Les avantages de suivre les matchs de TOP 14 en direct sur Vibrez Rugby</h4><ol class=wp-block-list><li><strong>Expérience immersive</strong> Vibrez Rugby vous offre une expérience immersive avec des images de haute qualité et des commentaires en direct. Vous vivrez chaque action comme si vous étiez au stade, rendant chaque moment encore plus intense.</li><li><strong>Interactivité</strong> En suivant les matchs sur Vibrez Rugby, vous pouvez participer à des discussions en direct avec d’autres fans. Partagez vos impressions, posez des questions et échangez sur les moments forts des matchs.</li><li><strong>Accès exclusif</strong> En tant que membre de la communauté Vibrez Rugby, vous bénéficiez d’un accès exclusif à des contenus supplémentaires. Cela inclut des interviews de joueurs, des analyses post-match et des reportages sur les coulisses du championnat.</li></ol><h4 class=wp-block-heading id=h-pour-resumer>Pour résumer :</h4><p class=wp-block-paragraph>Vibrez Rugby est la plateforme parfaite pour suivre les <strong>matchs de TOP 14 en direct</strong>. Avec une couverture complète, des statistiques en temps réel, des analyses approfondies et une interface conviviale, nous vous offrons une expérience de spectateur inégalée. Ne manquez aucun moment de ce championnat passionnant. Rejoignez-nous dès maintenant sur Vibrez Rugby pour vivre chaque instant du TOP 14 avec intensité.</p><figure class="wp-block-image aligncenter size-large is-resized"><img decoding=async width=1024 height=576 data-pagespeed-lazy-src="https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-1024x576.png" alt="Matchs de TOP 14 en direct" class=wp-image-283187 style="width:293px;height:auto" data-pagespeed-lazy-srcset="https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-1024x576.png 1024w, https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-300x169.png 300w, https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-768x432.png 768w, https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct-1536x864.png 1536w, https://vibrez-rugby.com/wp-content/uploads/2024/09/Matchs-du-top-14-en-direct.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" data-pagespeed-url-hash=3872358122 src="/pagespeed_static/1.JiBnMqyl6S.gif" onload="pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);" onerror="this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);"></figure><aside class="bloc-conseille bloc-conseille-final"><h3 class=bloc-conseille-titre>Articles les plus populaires :</h3><div class=bloc-conseille-item><a class=bloc-conseille-lien href="https://vibrez-rugby.com/stade-toulousain-qui-pour-remplacer-naoto-saito/"><span class=bloc-conseille-icone>→</span> Stade Toulousain : qui pour remplacer Naoto Saito ?</a></div><div class=bloc-conseille-item><a class=bloc-conseille-lien href="https://vibrez-rugby.com/stade-toulousain-un-autre-international-devrait-suivre-la-voie-ouverte-par-le-depart-de-ramos/"><span class=bloc-conseille-icone>→</span> Stade Toulousain : un autre international devrait suivre la voie ouverte par le départ de Ramos</a></div><div class=bloc-conseille-item><a class=bloc-conseille-lien href="https://vibrez-rugby.com/francois-cros-toulouse-perd-un-cadre-au-profit-de-lyon/"><span class=bloc-conseille-icone>→</span> François Cros : Toulouse perd un cadre au profit de Lyon</a></div></aside></div></main><div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained"></div><div class="wp-block-group has-global-padding is-content-justification-center is-layout-constrained wp-block-group-is-layout-constrained"></div><br><br><br><br><br><br><br><br><br><footer class=wp-block-template-part><div class="wp-block-group header-mobile has-white-color has-text-color has-background has-link-color wp-elements-3 is-content-justification-center is-nowrap is-layout-flex wp-container-core-group-is-layout-d0e65508 wp-block-group-is-layout-flex wp-container-2 is-position-sticky" style="background-color:#e40f28;margin-top:0;margin-bottom:0;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0"><div class="wp-block-group has-white-color has-text-color has-link-color wp-elements-4 is-vertical is-layout-flex wp-container-core-group-is-layout-36d0a666 wp-block-group-is-layout-flex"><figure class="wp-block-image size-full is-resized mobile-img is-style-default"><a href="/"><img decoding=async width=500 height=500 src="https://vibrez-rugby.com/wp-content/uploads/2024/11/accueil.png" alt="" class=wp-image-302713 style=width:40px srcset="https://vibrez-rugby.com/wp-content/uploads/2024/11/accueil.png 500w, https://vibrez-rugby.com/wp-content/uploads/2024/11/accueil-300x300.png 300w, https://vibrez-rugby.com/wp-content/uploads/2024/11/accueil-150x150.png 150w" sizes="(max-width: 500px) 100vw, 500px" data-pagespeed-url-hash=138013547 onload="pagespeed.CriticalImages.checkImageForCriticality(this);"></a><figcaption class=wp-element-caption><a href="/" data-type=category data-id=1081>Accueil</a></figcaption></figure></div><div class="wp-block-group has-white-color has-text-color has-link-color wp-elements-5 is-vertical is-layout-flex wp-container-core-group-is-layout-36d0a666 wp-block-group-is-layout-flex"><figure class="wp-block-image size-full is-resized mobile-img"><a href="/matchs-de-rugby-en-direct/"><img loading=lazy decoding=async width=500 height=500 src="https://vibrez-rugby.com/wp-content/uploads/2024/11/en-direct.png" alt="" class=wp-image-302714 style=width:40px srcset="https://vibrez-rugby.com/wp-content/uploads/2024/11/en-direct.png 500w, https://vibrez-rugby.com/wp-content/uploads/2024/11/en-direct-300x300.png 300w, https://vibrez-rugby.com/wp-content/uploads/2024/11/en-direct-150x150.png 150w" sizes="auto, (max-width: 500px) 100vw, 500px" data-pagespeed-url-hash=2076089316 onload="pagespeed.CriticalImages.checkImageForCriticality(this);"></a><figcaption class=wp-element-caption><a href="/matchs-de-rugby-en-direct/" data-type=category data-id=1081>En Direct</a></figcaption></figure></div><div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-36d0a666 wp-block-group-is-layout-flex"><figure class="wp-block-image size-full is-resized mobile-img"><a href="/radio-rugby/"><img loading=lazy decoding=async width=500 height=500 src="https://vibrez-rugby.com/wp-content/uploads/2024/11/radios.png" alt="" class=wp-image-302715 style=width:40px srcset="https://vibrez-rugby.com/wp-content/uploads/2024/11/radios.png 500w, https://vibrez-rugby.com/wp-content/uploads/2024/11/radios-300x300.png 300w, https://vibrez-rugby.com/wp-content/uploads/2024/11/radios-150x150.png 150w" sizes="auto, (max-width: 500px) 100vw, 500px" data-pagespeed-url-hash=2635128127 onload="pagespeed.CriticalImages.checkImageForCriticality(this);"></a><figcaption class=wp-element-caption><a href="/radio-rugby/" data-type=category data-id=1081>Radios</a></figcaption></figure></div><div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-36d0a666 wp-block-group-is-layout-flex"><figure class="wp-block-image size-full is-resized mobile-img"><a href="/resultats/"><img loading=lazy decoding=async width=500 height=500 src="https://vibrez-rugby.com/wp-content/uploads/2024/11/resultat.png" alt="" class=wp-image-302716 style=width:40px srcset="https://vibrez-rugby.com/wp-content/uploads/2024/11/resultat.png 500w, https://vibrez-rugby.com/wp-content/uploads/2024/11/resultat-300x300.png 300w, https://vibrez-rugby.com/wp-content/uploads/2024/11/resultat-150x150.png 150w" sizes="auto, (max-width: 500px) 100vw, 500px" data-pagespeed-url-hash=3367419227 onload="pagespeed.CriticalImages.checkImageForCriticality(this);"></a><figcaption class=wp-element-caption><a href="/resultats/" data-type=category data-id=1081>Résultats</a></figcaption></figure></div><div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-36d0a666 wp-block-group-is-layout-flex"><figure class="wp-block-image size-full is-resized mobile-img mobile-img-others"><img loading=lazy decoding=async width=40 height=40 src="https://vibrez-rugby.com/wp-content/uploads/2024/11/icons8-plus-40.png" alt="" class=wp-image-300091 style=width:40px data-pagespeed-url-hash=1051913639 onload="pagespeed.CriticalImages.checkImageForCriticality(this);"><figcaption class=wp-element-caption>Autres</figcaption></figure></div></div><div class="wp-block-group header-desktop has-white-color has-gradient-home-gradient-background has-text-color has-background has-link-color wp-elements-6 has-global-padding is-layout-constrained wp-block-group-is-layout-constrained" style="padding-top:var(--wp--preset--spacing--10);padding-bottom:var(--wp--preset--spacing--10)"><div class="wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-3a88641f wp-block-columns-is-layout-flex"><div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%"><div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-831b2db5 wp-block-group-is-layout-flex"><p class="wp-block-site-title has-medium-font-size"><a href="https://vibrez-rugby.com" target=_self rel=home>Rugby en direct – Vibrez Rugby</a></p><p class="has-small-font-size wp-block-paragraph"><a href="https://vibrez-rugby.com/resultats-top-14/">Résultats Top 14</a>, <a href="https://vibrez-rugby.com/resultats-pro-d2/">résultats Pro D2</a>, <a href="https://vibrez-rugby.com/classement-top-14/">classement Top 14</a>, <a href="https://vibrez-rugby.com/classement-pro-d2/">classement Pro D2</a>, <a href="https://vibrez-rugby.com/matchs-de-rugby-en-direct/">Rugby en direct</a>, <a href="https://vibrez-rugby.com/live-en-direct/">score live</a> , <a href="https://vibrez-rugby.com/rugby/xv-de-france/">XV de france</a>, <a href="https://vibrez-rugby.com/rugby/six-nations/">6 nations</a>, <a href="https://vibrez-rugby.com/rugby/internationale/" data-type=category>rugby international</a>, <a href="https://vibrez-rugby.com/rsl/antoine-dupont/">Antoine Dupont,</a> <a href="https://vibrez-rugby.com/rugby/top-14/stade-toulousain/">Stade Toulousain</a>, <a href="https://vibrez-rugby.com/rugby/top-14/bordeaux-begles/" data-type=link data-id="https://vibrez-rugby.com/rugby/top-14/bordeaux-begles/">UBB</a>, <a href="https://vibrez-rugby.com/rugby/">rugby</a>, <a href="https://vibrez-rugby.com/rugby/pronostic-rugby/">Pronostics rugby</a>, <a href="https://www.liverugby.fr/" data-type=page data-id=330488>Live Rugby</a> , <a href="https://vibrez-rugby.com/programme-tv-rugby/" data-type=page data-id=330488>programme tv rugby</a></p><p class="has-text-align-center wp-block-paragraph">© CREATIF STUDIO Ltd</p></div></div><div class="wp-block-column has-global-padding is-layout-constrained wp-container-core-column-is-layout-14cbc845 wp-block-column-is-layout-constrained" style="padding-right:0;padding-left:0;flex-basis:50%"><div class="wp-block-group is-vertical is-content-justification-center is-layout-flex wp-container-core-group-is-layout-bc18b00a wp-block-group-is-layout-flex"><h2 class="wp-block-heading has-medium-font-size has-white-color has-text-color has-link-color has-body-font-family wp-elements-7" id=h-reseaux-sociaux style="font-style:normal;font-weight:600">Réseaux sociaux</h2><nav style="font-style:normal;font-weight:400" class="has-small-font-size items-justified-center is-vertical wp-block-navigation is-content-justification-center is-layout-flex wp-container-core-navigation-is-layout-21d1823e wp-block-navigation-is-layout-flex" aria-label="Navigation 5"><ul style="font-style:normal;font-weight:400" class="wp-block-navigation__container has-small-font-size items-justified-center is-vertical wp-block-navigation"><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://facebook.com/vibrezrugby" rel=nofollow><span class=wp-block-navigation-item__label>Facebook</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://linkedin.com/in/vibrez-rugby" rel=nofollow><span class=wp-block-navigation-item__label>Linkedin</span></a></li><li class="wp-block-navigation-item wp-block-navigation-link"><a class=wp-block-navigation-item__content href="https://twitter.com/vibrezrugbyd2" rel=nofollow><span class=wp-block-navigation-item__label>Twitter/X</span></a></li></ul></nav></div></div></div></div></footer></div> <script type="text/javascript" data-pagespeed-no-defer>pagespeed.lazyLoadImages.overrideAttributeFunctions();</script><script type=speculationrules>{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/twentytwentyfour-child/*","/wp-content/themes/twentytwentyfour/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}</script> <script id=hamburger-fallback-fix>(function(){'use strict';document.addEventListener('click',function(e){if(!e.target.closest)return;if(e.target.closest('.wp-block-navigation__responsive-container-open')){var c=document.querySelector('.wp-block-navigation__responsive-container');if(!c)return;setTimeout(function(){if(!c.classList.contains('is-menu-open')){c.classList.add('is-menu-open','has-modal-open');document.documentElement.style.overflow='hidden';}},80);return;}if(e.target.closest('.wp-block-navigation__responsive-container-close')){var c=document.querySelector('.wp-block-navigation__responsive-container');if(!c)return;setTimeout(function(){c.classList.remove('is-menu-open','has-modal-open');document.documentElement.style.overflow='';},80);return;}},false);document.addEventListener('DOMContentLoaded',function(){var c=document.querySelector('.wp-block-navigation__responsive-container');if(c&&c.classList.contains('is-menu-open')){c.classList.remove('is-menu-open','has-modal-open');document.documentElement.style.overflow='';}});})();</script> <style id=vr-share-css>.vr-share-buttons {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 1.5rem;
}
.vr-share-label {
font-weight: 600;
font-size: 0.95rem;
color: #333;
margin-right: 4px;
}
.vr-share-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
border-radius: 50%;
border: 1px solid #ccc;
background: transparent;
color: #555;
cursor: pointer;
text-decoration: none;
transition: all 0.2s ease;
}
.vr-share-btn:hover {
transform: scale(1.1);
}
.vr-share-btn svg {
width: 20px;
height: 20px;
}
.vr-share-btn[data-action="copy"]:hover,
.vr-share-btn.copied {
background: #004D90;
color: #fff;
border-color: #004D90;
}
.vr-share-btn.copied {
background: #22c55e !important;
border-color: #22c55e !important;
}
.vr-share-facebook:hover { background: #1877F2; color: #fff; border-color: #1877F2; }
.vr-share-twitter:hover { background: #000; color: #fff; border-color: #000; }
.vr-share-whatsapp:hover { background: #25D366; color: #fff; border-color: #25D366; }
.vr-share-linkedin:hover { background: #0A66C2; color: #fff; border-color: #0A66C2; }
.vr-share-email:hover { background: #004D90; color: #fff; border-color: #004D90; }
@media (max-width: 768px) {
.vr-share-buttons {
justify-content: center;
}
.vr-share-label {
width: 100%;
text-align: center;
margin-bottom: 4px;
}
.vr-share-btn {
width: 38px;
height: 38px;
}
.vr-share-btn svg {
width: 18px;
height: 18px;
}
}</style> <script id=vr-share-js>(function(){var wrap=document.querySelector('.vr-share-buttons');if(!wrap)return;var shareUrl=wrap.dataset.url||window.location.href;var shareTitle=wrap.dataset.title||document.title;var encoded=encodeURIComponent(shareUrl);var encTitle=encodeURIComponent(shareTitle);wrap.querySelectorAll('.vr-share-btn').forEach(function(btn){btn.addEventListener('click',function(e){var action=btn.dataset.action;if(action==='copy'){e.preventDefault();navigator.clipboard.writeText(shareUrl).then(function(){var original=btn.innerHTML;btn.classList.add('copied');btn.innerHTML='<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M20 6L9 17l-5-5"/></svg>';setTimeout(function(){btn.classList.remove('copied');btn.innerHTML=original;},2000);}).catch(function(){});}else if(action==='twitter'){btn.href='https://twitter.com/intent/tweet?text='+encTitle+'&url='+encoded;}else if(action==='facebook'){btn.href='https://www.facebook.com/sharer/sharer.php?u='+encoded;}else if(action==='whatsapp'){btn.href='https://wa.me/?text='+encTitle+'%20'+encoded;}else if(action==='linkedin'){btn.href='https://www.linkedin.com/sharing/share-offsite/?url='+encoded;}else if(action==='email'){btn.href='mailto:?subject='+encTitle+'&body='+encoded;}});});})();</script> <script data-wp-router-options="{"loadOnClientNavigation":true}" fetchpriority=low id="@wordpress/block-library/navigation/view-js-module" src="https://vibrez-rugby.com/wp-includes/js/dist/script-modules/block-library/navigation/view.min.js,qver=1bf28ded04f9f188bdcb.pagespeed.ce.-kDdhRrKe4.js" type=module></script> <script id=vsc-inline-js-after>document.addEventListener('DOMContentLoaded',function(){function getOgTitle(){var og=document.querySelector('meta[property="og:title"],meta[name="og:title"]');return og?og.getAttribute('content'):''}function getH1(){var el=document.querySelector('h1.entry-title')||document.querySelector('h1');return el?el.textContent.trim():''}function getBestTitle(){var t=getOgTitle();if(!t)t=getH1();if(!t)t=document.title||'';return(t||'').trim()}var objectUrl=window.location.href,sent=false;function sendView(){if(sent)return;sent=true;if(navigator.webdriver){return;}var finalTitle=getBestTitle()||'Page';var isNewSession=!sessionStorage.getItem('vsc_session_recorded');if(isNewSession){sessionStorage.setItem('vsc_session_recorded','1');}var isNewDailyUser=document.cookie.indexOf('vsc_daily_user=1')===-1;if(isNewDailyUser){const now=new Date();const midnight=new Date(now.getFullYear(),now.getMonth(),now.getDate()+1,0,0,0);document.cookie='vsc_daily_user=1; expires='+midnight.toUTCString()+'; path=/';}var body='action=vsc_record_view&object_id=221082&object_title='+encodeURIComponent(finalTitle)+'&object_url='+encodeURIComponent(objectUrl)+'&nonce=e8cd561b47';if(isNewSession){body+='&is_new_session=1';}if(isNewDailyUser){body+='&is_new_daily_user=1';}fetch('https://vibrez-rugby.com/wp-admin/admin-ajax.php',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},body:body}).catch(function(){});}['scroll','mousemove','touchstart','keydown'].forEach(function(e){document.addEventListener(e,sendView,{once:true,passive:true});});setTimeout(sendView,6000);});</script> <script id=wp-consent-api-js-extra>var consent_api={"consent_type":"","waitfor_consent_hook":"","cookie_expiration":"30","cookie_prefix":"wp_consent","services":[]};</script> <script id=wp-emoji-settings type="application/json">{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://vibrez-rugby.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1"}}</script> <script type=module>/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://vibrez-rugby.com/wp-includes/js/wp-emoji-loader.min.js</script> <script>document.addEventListener('DOMContentLoaded',function(){var wpMenuContainer=document.querySelector('.wp-block-navigation__responsive-container');var wpOpenBtn=document.querySelector('.wp-block-navigation__responsive-container-open');var wpCloseBtn=document.querySelector('.wp-block-navigation__responsive-container-close');var mobileImg=document.querySelector('.mobile-img-others');var headerMobile=document.querySelector('.header-mobile');var wpUL=wpMenuContainer?wpMenuContainer.querySelector('ul.wp-block-navigation__container, ul.wp-block-navigation'):null;if(!wpUL&&wpMenuContainer)wpUL=wpMenuContainer.querySelector('ul');if(!wpUL)return;var overlay=document.createElement('div');overlay.id='vbr-mobile-menu-overlay';overlay.setAttribute('aria-hidden','true');overlay.style.cssText=['position: fixed','top: 0','left: 0','right: 0','bottom: 0','width: 100%','height: 100%','background: #12325a','z-index: 2147483000','display: none','overflow-y: auto','padding: 60px 24px 40px 24px','box-sizing: border-box','color: #fff'].join(';');var closeBtn=document.createElement('button');closeBtn.setAttribute('aria-label','Fermer le menu');closeBtn.innerHTML='×';closeBtn.style.cssText=['position: absolute','top: 12px','right: 16px','width: 44px','height: 44px','background: transparent','border: none','color: #fff','font-size: 32px','line-height: 1','cursor: pointer','z-index: 2147483001'].join(';');overlay.appendChild(closeBtn);var content=document.createElement('div');content.id='vbr-mobile-menu-content';content.style.cssText='margin-top: 20px;';overlay.appendChild(content);document.body.appendChild(overlay);if(headerMobile)headerMobile.style.display='';var style=document.createElement('style');style.textContent=['#vbr-mobile-menu-overlay ul,','#vbr-mobile-menu-overlay ul.wp-block-navigation,','#vbr-mobile-menu-overlay ul.wp-block-navigation__container {',' list-style: none !important; padding: 0 !important; margin: 0 !important;',' display: block !important; flex-direction: column !important;',' flex-wrap: nowrap !important; gap: 0 !important; width: 100% !important;','}','#vbr-mobile-menu-overlay li,','#vbr-mobile-menu-overlay li.wp-block-navigation-item,','#vbr-mobile-menu-overlay li.wp-block-navigation-link,','#vbr-mobile-menu-overlay li.wp-block-navigation-submenu {',' display: block !important; width: 100% !important;',' margin: 0 !important; padding: 14px 0 !important;',' border-bottom: 1px solid rgba(255,255,255,0.15) !important;','}','#vbr-mobile-menu-overlay a {',' color: #fff !important; text-decoration: none !important;',' font-size: 18px !important; font-weight: 500 !important;',' display: block !important; padding: 0 !important;','}','#vbr-mobile-menu-overlay a:hover { color: #ffd700 !important; }','#vbr-mobile-menu-overlay .wp-block-navigation__submenu-container {',' padding-left: 20px !important; margin-top: 8px !important;',' position: static !important; opacity: 1 !important; visibility: visible !important;',' background: transparent !important; box-shadow: none !important;',' min-width: 0 !important;','}','#vbr-mobile-menu-overlay button.wp-block-navigation__submenu-icon,','#vbr-mobile-menu-overlay .wp-block-navigation-submenu__toggle { display: none !important; }','body.vbr-menu-open { overflow: hidden !important; }'].join('\n');document.head.appendChild(style);function openOverlay(){if(overlay.style.display==='block')return;content.innerHTML='';var clone=wpUL.cloneNode(true);content.appendChild(clone);overlay.style.display='block';overlay.setAttribute('aria-hidden','false');document.body.classList.add('vbr-menu-open');if(headerMobile)headerMobile.style.display='none';}function closeOverlay(){overlay.style.display='none';overlay.setAttribute('aria-hidden','true');document.body.classList.remove('vbr-menu-open');if(headerMobile)headerMobile.style.display='';document.body.style.overflow='';document.documentElement.style.overflow='';document.body.classList.remove('has-modal-open');if(wpMenuContainer&&wpMenuContainer.classList.contains('is-menu-open')){if(wpCloseBtn){wpCloseBtn.click();}else{wpMenuContainer.classList.remove('is-menu-open');}}}if(wpMenuContainer){var mo=new MutationObserver(function(mutations){for(var i=0;i<mutations.length;i++){if(mutations[i].attributeName==='class'){var isOpen=wpMenuContainer.classList.contains('is-menu-open');if(isOpen&&overlay.style.display!=='block'){openOverlay();}else if(!isOpen&&overlay.style.display==='block'){closeOverlay();}}}});mo.observe(wpMenuContainer,{attributes:true,attributeFilter:['class']});}document.addEventListener('click',function(e){if(!e.target.closest)return;var img=e.target.closest('.mobile-img-others');if(img){e.preventDefault();e.stopPropagation();openOverlay();return;}var openBtn=e.target.closest('.wp-block-navigation__responsive-container-open');if(openBtn){openOverlay();}});closeBtn.addEventListener('click',closeOverlay);content.addEventListener('click',function(e){if(e.target.tagName==='A'||e.target.closest('a')){closeOverlay();}});document.addEventListener('keydown',function(e){if(e.key==='Escape'&&overlay.style.display==='block')closeOverlay();});});</script> <script type="text/javascript">window.addEventListener("DOMContentLoaded",(e=>{document.querySelectorAll('img[loading="lazy"]').forEach((e=>{e.getBoundingClientRect().top<=window.innerHeight&&(e.loading="eager")}))}));</script><script type=module>gtag('event', 'conversion', {'send_to': 'AW-882060157/waagCNj7ockDEP3WzKQD'});</script> <script type='application/javascript' defer src='https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4334035645452469"'></script> <script type="text/javascript" src="https://vibrez-rugby.com/wp-content/cache/breeze-minification/js/breeze_matchs-de-top-14-en-direct-1-221082-assets-js-wp-consent-api.min.js?ver=1787836721"></script></body></html>