1<!doctype html> 2<html dir="ltr" lang="fr-CA" prefix="og: https://ogp.me/ns#"> 3<head> 4<meta charset="UTF-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1"> 6<title>Contact - nextlevel-hockey.com</title> 7 8 <!-- All in One SEO 5.0.1.1 - aioseo.com --> 9 <meta name="robots" content="max-image-preview:large" /> 10 <link rel="canonical" href="https://nextlevel-hockey.com/contact/" /> 11 <meta name="generator" content="All in One SEO (AIOSEO) 5.0.1.1" /> 12 <meta property="og:locale" content="fr_CA" /> 13 <meta property="og:site_name" content="nextlevel-hockey.com -" /> 14 <meta property="og:type" content="article" /> 15 <meta property="og:title" content="Contact - nextlevel-hockey.com" /> 16 <meta property="og:url" content="https://nextlevel-hockey.com/contact/" /> 17 <meta property="article:published_time" content="2026-07-22T00:05:03+00:00" /> 18 <meta property="article:modified_time" content="2026-07-22T00:07:43+00:00" /> 19 <meta name="twitter:card" content="summary_large_image" /> 20 <meta name="twitter:title" content="Contact - nextlevel-hockey.com" /> 21
21<script type="application/ld+json" class="aioseo-schema"> 22 {"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/nextlevel-hockey.com\/contact\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/nextlevel-hockey.com#listItem","position":1,"name":"Home","item":"https:\/\/nextlevel-hockey.com","nextItem":{"@type":"ListItem","@id":"https:\/\/nextlevel-hockey.com\/contact\/#listItem","name":"Contact"}},{"@type":"ListItem","@id":"https:\/\/nextlevel-hockey.com\/contact\/#listItem","position":2,"name":"Contact","previousItem":{"@type":"ListItem","@id":"https:\/\/nextlevel-hockey.com#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/nextlevel-hockey.com\/#organization","name":"nextlevel-hockey.com","url":"https:\/\/nextlevel-hockey.com\/"},{"@type":"WebPage","@id":"https:\/\/nextlevel-hockey.com\/contact\/#webpage","url":"https:\/\/nextlevel-hockey.com\/contact\/","name":"Contact - nextlevel-hockey.com","inLanguage":"fr-CA","isPartOf":{"@id":"https:\/\/nextlevel-hockey.com\/#website"},"breadcrumb":{"@id":"https:\/\/nextlevel-hockey.com\/contact\/#breadcrumblist"},"datePublished":"2026-07-22T00:05:03-04:00","dateModified":"2026-07-22T00:07:43-04:00"},{"@type":"WebSite","@id":"https:\/\/nextlevel-hockey.com\/#website","url":"https:\/\/nextlevel-hockey.com\/","name":"nextlevel-hockey.com","inLanguage":"fr-CA","publisher":{"@id":"https:\/\/nextlevel-hockey.com\/#organization"}}]} 23 </script>
23 24 <!-- All in One SEO --> 25 26<link rel='dns-prefetch' href='//cdn-reach.hostinger.com' /> 27<link rel='dns-prefetch' href='//fonts.googleapis.com' /> 28<link rel='dns-prefetch' href='//www.googletagmanager.com' /> 29<link rel="alternate" type="application/rss+xml" title="nextlevel-hockey.com » Flux" href="https://nextlevel-hockey.com/feed/" /> 30<link rel="alternate" type="application/rss+xml" title="nextlevel-hockey.com » Flux des commentaires" href="https://nextlevel-hockey.com/comments/feed/" /> 31 <link rel="manifest" href="https://nextlevel-hockey.com/nlh-manifest.json"> 32 <meta name="theme-color" content="#050605"> 33 <meta name="mobile-web-app-capable" content="yes"> 34 <meta name="apple-mobile-web-app-capable" content="yes"> 35 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> 36 <meta name="apple-mobile-web-app-title" content="NLH"> 37 <link rel="apple-touch-icon" href="https://nextlevel-hockey.com/wp-content/themes/nlh-theme/apple-touch-icon.png"> 38 <link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://nextlevel-hockey.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fnextlevel-hockey.com%2Fcontact%2F&lang=fr" /> 39<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://nextlevel-hockey.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fnextlevel-hockey.com%2Fcontact%2F&format=xml&lang=fr" /> 40<style id="wp-img-auto-sizes-contain-inline-css"> 41img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 42/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 43</style> 44 45<style id="wp-emoji-styles-inline-css"> 46 47 img.wp-smiley, img.emoji { 48 display: inline !important; 49 border: none !important; 50 box-shadow: none !important; 51 height: 1em !important; 52 width: 1em !important; 53 margin: 0 0.07em !important; 54 vertical-align: -0.1em !important; 55 background: none !important; 56 padding: 0 !important; 57 } 58/*# sourceURL=wp-emoji-styles-inline-css */ 59</style> 60<link rel='stylesheet' id='wp-block-library-css' href='https://nextlevel-hockey.com/wp-includes/css/dist/block-library/style.min.css?ver=7.0.6' media='all' /> 61<link rel='stylesheet' id='hostinger-reach-subscription-block-css' href='https://nextlevel-hockey.com/wp-content/plugins/hostinger-reach/frontend/dist/blocks/subscription.css?ver=1790879951' media='all' /> 62<link rel='stylesheet' id='aioseo/css/src/vue/standalone/blocks/table-of-contents/global.scss-css' href='https://nextlevel-hockey.com/wp-content/plugins/all-in-one-seo-pack/dist/Lite/assets/css/table-of-contents/global.e90f6d47.css?ver=5.0.1.1' media='all' /> 63<style id="global-styles-inline-css"> 64: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--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%);
64--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--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--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);}:root { --wp--style--global--content-size: 800px;--wp--style--global--wide-size: 1200px; }:where(body) { margin: 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: 24px; 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: 24px; }: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: 24px;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: 24px;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 24px;}:root :where(.is-layout-grid){gap: 24px;}.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{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.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-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-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-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;}
64.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-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;} 65:root :where(.wp-block-icon svg){width: 24px;} 66:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} 67/*# sourceURL=global-styles-inline-css */ 68</style> 69<link rel='stylesheet' id='woocommerce-layout-css' href='https://nextlevel-hockey.com/wp-content/plugins/woocommerce/assets/css/woocommerce-layout.css?ver=11.1.0' media='all' /> 70<link rel='stylesheet' id='woocommerce-smallscreen-css' href='https://nextlevel-hockey.com/wp-content/plugins/woocommerce/assets/css/woocommerce-smallscreen.css?ver=11.1.0' media='only screen and (max-width: 768px)' /> 71<link rel='stylesheet' id='woocommerce-general-css' href='https://nextlevel-hockey.com/wp-content/plugins/woocommerce/assets/css/woocommerce.css?ver=11.1.0' media='all' /> 72<style id="woocommerce-inline-inline-css"> 73.woocommerce form .form-row .required { visibility: visible; } 74/*# sourceURL=woocommerce-inline-inline-css */ 75</style> 76<link rel='stylesheet' id='hello-elementor-style-css' href='https://nextlevel-hockey.com/wp-content/themes/hello-elementor/style.css?ver=7.0.6' media='all' /> 77<link rel='stylesheet' id='nlh-theme-style-css' href='https://nextlevel-hockey.com/wp-content/themes/nlh-theme/style.css?ver=7.0.6' media='all' /> 78<link rel='stylesheet' id='nlh-fonts-css' href='https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Barlow+Condensed:wght@300;400;500;600;700;800&family=Barlow:wght@300;400;500&display=swap&ver=7.0.6' media='all' /> 79<link rel='stylesheet' id='hello-elementor-css' href='https://nextlevel-hockey.com/wp-content/themes/hello-elementor/assets/css/reset.css?ver=3.4.9' media='all' /> 80<link rel='stylesheet' id='hello-elementor-theme-style-css' href='https://nextlevel-hockey.com/wp-content/themes/hello-elementor/assets/css/theme.css?ver=3.4.9' media='all' /> 81<link rel='stylesheet' id='hello-elementor-header-footer-css' href='https://nextlevel-hockey.com/wp-content/themes/hello-elementor/assets/css/header-footer.css?ver=3.4.9' media='all' /> 82<link rel='stylesheet' id='elementor-frontend-css' href='https://nextlevel-hockey.com/wp-content/plugins/elementor/assets/css/frontend.min.css?ver=4.1.4' media='all' /> 83<link rel='stylesheet' id='elementor-post-11-css' href='https://nextlevel-hockey.com/wp-content/uploads/elementor/css/post-11.css?ver=1790894723' media='all' /> 84<link rel='stylesheet' id='elementor-gf-roboto-css' href='https://fonts.googleapis.com/css?family=Roboto:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic&display=swap' media='all' /> 85<link rel='stylesheet' id='elementor-gf-robotoslab-css' href='https://fonts.googleapis.com/css?family=Roboto+Slab:100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic&display=swap' media='all' />
86<script id="jquery-core-js" src="https://nextlevel-hockey.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 86
86
87<script id="jquery-migrate-js" src="https://nextlevel-hockey.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
vendor: 1 bytes, line 87
87
88<script data-wp-strategy="defer" defer id="wc-jquery-blockui-js" src="https://nextlevel-hockey.com/wp-content/plugins/woocommerce/assets/js/jquery-blockui/jquery.blockUI.min.js?ver=2.7.0-wc.11.1.0"></script>
vendor: 1 bytes, line 88
88
89<script id="wc-add-to-cart-js-extra"> 90var wc_add_to_cart_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_view_cart":"Voir le panier","cart_url":"https://nextlevel-hockey.com/cart/","is_cart":"","cart_redirect_after_add":"no"}; 91//# sourceURL=wc-add-to-cart-js-extra 92</script>
vendor: 1 bytes, line 92
92
93<script data-wp-strategy="defer" defer id="wc-add-to-cart-js" src="https://nextlevel-hockey.com/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart.min.js?ver=11.1.0"></script>
vendor: 1 bytes, line 93
93
94<script data-wp-strategy="defer" defer id="wc-js-cookie-js" src="https://nextlevel-hockey.com/wp-content/plugins/woocommerce/assets/js/js-cookie/js.cookie.min.js?ver=2.1.4-wc.11.1.0"></script>
vendor: 1 bytes, line 94
94
95<script id="woocommerce-js-extra"> 96var woocommerce_params = {"ajax_url":"/wp-admin/admin-ajax.php","wc_ajax_url":"/?wc-ajax=%%endpoint%%","i18n_password_show":"Afficher le mot de passe","i18n_password_hide":"Cacher le mot de passe"}; 97//# sourceURL=woocommerce-js-extra 98</script>
vendor: 1 bytes, line 98
98
99<script data-wp-strategy="defer" defer id="woocommerce-js" src="https://nextlevel-hockey.com/wp-content/plugins/woocommerce/assets/js/frontend/woocommerce.min.js?ver=11.1.0"></script>
99 100<link rel="https://api.w.org/" href="https://nextlevel-hockey.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://nextlevel-hockey.com/wp-json/wp/v2/pages/301" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://nextlevel-hockey.com/xmlrpc.php?rsd" /> 101<meta name="generator" content="WordPress 7.0.6" /> 102<meta name="generator" content="WooCommerce 11.1.0" /> 103<link rel='shortlink' href='https://nextlevel-hockey.com/?p=301' /> 104<meta name="generator" content="Site Kit by Google 1.187.0" /><style> 105 body, html { 106 background: #020504 !important; 107 margin: 0 !important; 108 padding: 0 !important; 109 color: #e0ede1 !important; 110 font-family: Barlow, sans-serif !important; 111 } 112 .site-header, .site-footer { display: none; } 113 114 /* Menu mobile â bouton et panneau déroulant */ 115 .nlh2-header .menu-btn{ 116 display:none; background:none !important; border:none !important; 117 color:#e0ede1 !important; font-size:26px; line-height:1; cursor:pointer; 118 padding:4px 8px; 119 } 120 /* 1000 px, comme dans nlh.css. à 880 px, il restait une zone entre les 121 deux largeurs où nlh.css masquait déjà les liens alors que le bouton 122 du menu, lui, nâapparaissait pas encore : aucune navigation du tout. */ 123 @media (max-width: 1000px){ 124 .nlh2-header .nav-links, 125 .nlh2-header .header-cta{ display:none; } 126 .nlh2-header .menu-btn{ display:inline-block; } 127 .nlh2-header .nav{ flex-wrap:wrap; position:relative; } 128 .nlh2-header .nav.nlh-menu-ouvert .nav-links, 129 .nlh2-header .nav.nlh-menu-ouvert .header-cta{ 130 display:flex !important; flex-direction:column; align-items:flex-start; 131 width:100%; gap:14px; padding:18px 4px 22px; 132 background:#0b0f0d !important; border-top:1px solid #1f2b23; 133 } 134 /* Rubriques principales en vert, sous-liens de Programmes en blanc : 135 sur une liste à plat, câest la seule chose qui distingue un 136 niveau de lâautre. Le vert est celui du survol au bureau. */ 137 .nlh2-header .nav.nlh-menu-ouvert .nav-links > a, 138 .nlh2-header .nav.nlh-menu-ouvert .nav-groupe-tete{ 139 color:#79ff35 !important; font-size:15px; 140 } 141 .nlh2-header .nav.nlh-menu-ouvert .nav-sous a, 142 .nlh2-header .nav.nlh-menu-ouvert .header-cta{ 143 color:#e0ede1 !important; font-size:15px; 144 } 145 } 146 </style><link rel="manifest" href="https://nextlevel-hockey.com/wp-content/themes/nlh-theme/manifest.json"> 147<meta name="theme-color" content="#020504"> 148<link rel="apple-touch-icon" href="https://nextlevel-hockey.com/wp-content/themes/nlh-theme/apple-touch-icon.png"> 149<meta name="apple-mobile-web-app-capable" content="yes"> 150<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> 151<meta name="apple-mobile-web-app-title" content="NLH"> 152 <noscript><style>.woocommerce-product-gallery{ opacity: 1 !important; }</style></noscript> 153 <meta name="generator" content="Elementor 4.1.4; features: e_font_icon_svg, additional_custom_breakpoints; settings: css_print_method-external, google_font-enabled, font_display-swap"> 154 <style> 155 .e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload), 156 .e-con.e-parent:nth-of-type(n+4):not(.e-lazyloaded):not(.e-no-lazyload) * { 157 background-image: none !important; 158 } 159 @media screen and (max-height: 1024px) { 160 .e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload), 161 .e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload) * { 162 background-image: none !important; 163 } 164 } 165 @media screen and (max-height: 640px) { 166 .e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload), 167 .e-con.e-parent:nth-of-type(n+2):not(.e-lazyloaded):not(.e-no-lazyload) * { 168 background-image: none !important; 169 } 170 } 171 </style> 172 <meta name="theme-color" content="#020504"> 173<title>Contact â Next Level Hockey</title> 174<link rel="stylesheet" href="https://nextlevel-hockey.com/wp-content/themes/nlh-theme/nlh.css?v=1788978843"> 175<style> 176.nlh-contact-shell{ max-width:640px;margin:0 auto;padding:56px 24px 90px; } 177.nlh-contact-hero{ text-align:center;margin-bottom:32px; } 178.nlh-contact-hero h1{ font-family:'Bebas Neue',sans-serif;font-size:clamp(30px,5vw,46px);color:#e6f5ea;margin:10px 0 12px; } 179.nlh-contact-hero p{ color:#9db3a5;font-size:15px;line-height:1.6; } 180.nlh-eyebrow{ font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#0fdb6c; } 181 182.nlh-c-form{ background:#0b0f0d;border:1px solid #1f2b23;border-radius:14px;padding:28px; } 183.nlh-c-champ{ margin-bottom:16px; } 184.nlh-c-champ label{ display:block;color:#cfe8da;font-size:13.5px;font-weight:600;margin-bottom:6px; } 185.nlh-c-champ label i{ color:#0fdb6c;font-style:normal; } 186.nlh-c-champ input, .nlh-c-champ textarea{ 187 width:100%;background:#152018;border:1px solid #21301f;color:#e6f5ea;border-radius:8px; 188 padding:11px 12px;font-size:14px;font-family:Barlow,sans-serif;box-sizing:border-box; 189} 190.nlh-c-champ textarea{ resize:vertical;min-height:90px; } 191.nlh-c-note{ font-size:12px;color:#7d9488;margin-top:4px; } 192.nlh-c-bouton{ 193 width:100%;background:#0fdb6c;color:#03150a;border:none;border-radius:8px;padding:13px; 194 font-weight:700;font-size:15px;cursor:pointer;margin-top:6px; 195} 196.nlh-c-erreur{ background:#2a1414;border:1px solid #5c2626;color:#ff9d9d;padding:12px 16px;border-radius:8px;margin-bottom:18px;font-size:13.5px; } 197.nlh-c-succes{ background:#0d1f14;border:1px solid #1c4a2f;color:#7fe3a8;padding:16px 18px;border-radius:8px;margin-bottom:18px;font-size:14px;line-height:1.5; } 198</style> 199</head> 200<body class="wp-singular page-template page-template-page-nlh-contact page-template-page-nlh-contact-php page page-id-301 wp-embed-responsive wp-theme-hello-elementor wp-child-theme-nlh-theme theme-hello-elementor en woocommerce-no-js nlh-dark hello-elementor-default elementor-default elementor-kit-11"> 201 202<header class="nlh2-header"> 203 <nav class="nav"> 204 <a class="brand" href="https://nextlevel-hockey.com/"> 205 <img class="brand-logo" src="https://nextlevel-hockey.com/wp-content/themes/nlh-theme/nlh-logo.webp" alt="Logo Next Level Hockey">
206 <span class="brand-text"><strong>NEXT LEVEL HOCKEY</strong><small><span data-lang="fr">Développement Ãlite</span><span data-lang="en">Elite Development</span></small></span> 207 </a> 208 <div class="nav-links"> 209 210 <div class="nav-groupe"> 211 <a class="nav-groupe-tete" href="https://nextlevel-hockey.com/programmes/" aria-haspopup="true"> 212 <span data-lang="fr">Programmes</span><span data-lang="en">Programs</span> 213 <i class="nav-fleche" aria-hidden="true">â¾</i> 214 </a> 215 <div class="nav-sous"> 216 <a href="https://nextlevel-hockey.com/programmes/"><span data-lang="fr">NLH Développement du joueur</span><span data-lang="en">NLH Player Development</span></a> 217 <a href="https://nextlevel-hockey.com/horaire/"><span data-lang="fr">NLH Horaires</span><span data-lang="en">NLH Schedule</span></a> 218 <a href="https://nextlevel-hockey.com/gardiens/"><span data-lang="fr">NLH Gardien de but</span><span data-lang="en">NLH Goaltending</span></a> 219 <a href="https://nextlevel-hockey.com/montreal-elite-stars/">Montreal Elite Stars</a> 220 <a href="https://nextlevel-hockey.com/quebec-stars/">Quebec Stars</a> 221 </div> 222 </div> 223 224 <a href="https://nextlevel-hockey.com/perfection-zone/">Perfection Zone</a> 225 226 <a href="https://nextlevel-hockey.com/pro-shop/">Pro-Shop</a> 227 228 <a href="https://nextlevel-hockey.com/notre-approche/"><span data-lang="fr">NLH Hockey Operations</span><span data-lang="en">NLH Hockey Operations</span></a> 229 <a href="https://nextlevel-hockey.com/my-account/"><span data-lang="fr">Connexion membre</span><span data-lang="en">Member login</span></a> 230 </div> 231 <div class="lang-toggle" aria-label="Choix de langue"> 232 <button id="enBtn" class="active" type="button">EN</button> 233 <button id="frBtn" type="button">FR</button> 234 </div> 235 <a href="https://nextlevel-hockey.com/cart/" aria-label="Panier" style="position:relative;color:#e0ede1;font-size:20px;display:inline-flex;align-items:center"> 236 ð 237 </a> 238 <button class="menu-btn" type="button" aria-label="Menu">â°</button> 239 </nav> 240 </header> 241 242<main style="background:#020504"> 243<div class="nlh-contact-shell"> 244 245 <div class="nlh-contact-hero"> 246 <div class="nlh-eyebrow"><span data-lang="fr">Contact</span><span data-lang="en">Contact</span></div> 247 <h1> 248 <span data-lang="fr">Une question ? Parlons-en.</span> 249 <span data-lang="en">Got a question? Let's talk.</span> 250 </h1> 251 <p data-lang="fr">Remplis le formulaire et un membre de l'équipe NLH te répond rapidement.</p> 252 <p data-lang="en">Fill out the form and a member of the NLH team will get back to you soon.</p> 253 </div> 254 255 256 257 <form class="nlh-c-form" method="post"> 258 <input type="hidden" id="nlh_contact_nonce" name="nlh_contact_nonce" value="2412553e77" /><input type="hidden" name="_wp_http_referer" value="/contact/" /> 259 <div class="nlh-c-champ"> 260 <label for="nlh_c_joueur"><span data-lang="fr">Nom complet du joueur</span><span data-lang="en">Player's full name</span> <i>*</i></label> 261 <input type="text" name="nlh_c_joueur" id="nlh_c_joueur" required> 262 </div> 263 264 <div class="nlh-c-champ"> 265 <label for="nlh_c_naissance"><span data-lang="fr">Année de naissance</span><span data-lang="en">Birth year</span></label> 266 <input type="text" name="nlh_c_naissance" id="nlh_c_naissance" placeholder="2015"> 267 </div> 268 269 <div class="nlh-c-champ"> 270 <label for="nlh_c_parent"><span data-lang="fr">Nom complet du parent / tuteur</span><span data-lang="en">Parent / guardian full name</span> <i>*</i></label> 271 <input type="text" name="nlh_c_parent" id="nlh_c_parent" required> 272 </div> 273 274 <div class="nlh-c-champ"> 275 <label for="nlh_c_courriel"><span data-lang="fr">Courriel</span><span data-lang="en">Email</span> <i>*</i></label> 276 <input type="email" name="nlh_c_courriel" id="nlh_c_courriel" required> 277 </div> 278 279 <div class="nlh-c-champ"> 280 <label for="nlh_c_telephone"><span data-lang="fr">Téléphone</span><span data-lang="en">Phone number</span> <i>*</i></label> 281 <input type="tel" name="nlh_c_telephone" id="nlh_c_telephone" required> 282 </div> 283 284 <div class="nlh-c-champ"> 285 <label for="nlh_c_message"><span data-lang="fr">Message / Question</span><span data-lang="en">Message / Question</span></label> 286 <textarea name="nlh_c_message" id="nlh_c_message"></textarea> 287 </div> 288 289 <button type="submit" class="nlh-c-bouton"> 290 <span data-lang="fr">Envoyer</span><span data-lang="en">Send</span> 291 </button> 292 </form> 293 294 295</div> 296</main> 297 298<footer> 299 <div class="footer-grid"> 300 <div> 301 <div class="brand"> 302 <img class="brand-logo footer-logo" src="https://nextlevel-hockey.com/wp-content/themes/nlh-theme/nlh-logo.webp" alt="Logo Next Level Hockey">
303 <span class="brand-text"><strong>NEXT LEVEL HOCKEY</strong><small><span data-lang="fr">Développement Ãlite</span><span data-lang="en">Elite Development</span></small></span> 304 </div> 305 <p style="max-width:380px"><span data-lang="fr">Souvent imité, jamais égalé. Développement de hockey à Montréal, M7 à M18.</span><span data-lang="en">Often imitated, never duplicated. Hockey development in Montreal, U7 to U18.</span></p> 306 </div> 307 <div> 308 <h4><span data-lang="fr">Programmes</span><span data-lang="en">Programs</span></h4> 309 <a href="https://nextlevel-hockey.com/programmes/#start"><span data-lang="fr">Débuter</span><span data-lang="en">Start</span></a> 310 <a href="https://nextlevel-hockey.com/perfection-zone/">Perfection Zone</a> 311 <a href="https://nextlevel-hockey.com/programmes/#compete"><span data-lang="fr">Compétitionner</span><span data-lang="en">Compete</span></a> 312 <a href="https://nextlevel-hockey.com/pro-shop/">Pro-Shop</a> 313 </div> 314 <div> 315 <h4>Information</h4> 316 <a href="https://nextlevel-hockey.com/notre-approche/"><span data-lang="fr">NLH Hockey Operations</span><span data-lang="en">NLH Hockey Operations</span></a> 317 <a href="https://nextlevel-hockey.com/#faq">FAQ</a> 318 <a href="https://nextlevel-hockey.com/contact/">Contact</a> 319 <a href="https://nextlevel-hockey.com/pratique-equipe/"><span data-lang="fr">Réserver une pratique dâéquipe</span><span data-lang="en">Book a team practice</span></a> 320 <a href="https://nextlevel-hockey.com/journees-pedagogiques/"><span data-lang="fr">Journées pédagogiques</span><span data-lang="en">Ped days</span></a> 321 </div> 322 <div> 323 <h4><span data-lang="fr">Connexion membre</span><span data-lang="en">Member login</span></h4> 324 <a href="https://nextlevel-hockey.com/my-account/"><span data-lang="fr">Connexion</span><span data-lang="en">Log in</span></a> 325 <a href="https://nextlevel-hockey.com/my-account/"><span data-lang="fr">Créer un compte</span><span data-lang="en">Create an account</span></a> 326 <a href="https://nextlevel-hockey.com/contact/"><span data-lang="fr">Soutien</span><span data-lang="en">Support</span></a> 327 </div> 328 <div> 329 <h4><span data-lang="fr">Suivez-nous</span><span data-lang="en">Follow us</span></h4> 330 <a href="https://www.instagram.com/nextlevelhockey__/" target="_blank" rel="noopener" style="font-weight:700"><svg class="nlh-ig" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="2.5" y="2.5" width="19" height="19" rx="5.4"/><circle cx="12" cy="12" r="4.2"/><circle cx="17.6" cy="6.4" r="1.15" fill="currentColor" stroke="none"/></svg> Next Level Hockey</a> 331 <a href="https://www.instagram.com/mtl_elite_stars/" target="_blank" rel="noopener" style="font-weight:700"><svg class="nlh-ig" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="2.5" y="2.5" width="19" height="19" rx="5.4"/><circle cx="12" cy="12" r="4.2"/><circle cx="17.6" cy="6.4" r="1.15" fill="currentColor" stroke="none"/></svg> Montreal Elite Stars</a> 332 <a href="https://www.instagram.com/quebec.stars/" target="_blank" rel="noopener" style="font-weight:700"><svg class="nlh-ig" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="2.5" y="2.5" width="19" height="19" rx="5.4"/><circle cx="12" cy="12" r="4.2"/><circle cx="17.6" cy="6.4" r="1.15" fill="currentColor" stroke="none"/></svg> Quebec Stars</a> 333 <a href="https://www.instagram.com/perfection_zone_nlh/" target="_blank" rel="noopener" style="font-weight:700"><svg class="nlh-ig" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="2.5" y="2.5" width="19" height="19" rx="5.4"/><circle cx="12" cy="12" r="4.2"/><circle cx="17.6" cy="6.4" r="1.15" fill="currentColor" stroke="none"/></svg> Perfection Zone</a> 334 <a href="https://www.instagram.com/nlh_summercamp/" target="_blank" rel="noopener" style="font-weight:700">
334<svg class="nlh-ig" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="2.5" y="2.5" width="19" height="19" rx="5.4"/><circle cx="12" cy="12" r="4.2"/><circle cx="17.6" cy="6.4" r="1.15" fill="currentColor" stroke="none"/></svg> NLH Summer Camp</a> 335 <a href="https://www.instagram.com/rookie_hockey_program/" target="_blank" rel="noopener" style="font-weight:700"><svg class="nlh-ig" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="2.5" y="2.5" width="19" height="19" rx="5.4"/><circle cx="12" cy="12" r="4.2"/><circle cx="17.6" cy="6.4" r="1.15" fill="currentColor" stroke="none"/></svg> Rookie Hockey Program</a> 336 </div> 337 </div> 338 <div class="footer-bottom"> 339 <span>© 2026 Next Level Hockey</span> 340 <span><span data-lang="fr">Montréal, Québec</span><span data-lang="en">Montreal, Quebec</span></span> 341 </div> 342 </footer> 343
344<script src="https://nextlevel-hockey.com/wp-content/themes/nlh-theme/nlh.js?v=1789317202"></script>
vendor: 1 bytes, line 344
344
345<script type="speculationrules"> 346{"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/nlh-theme/*","/wp-content/themes/hello-elementor/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 347</script>
347 348
348<script> 349 (function () { 350 // Hostinger injecte son propre <link rel="manifest"> cassé sur les 351 // domaines de prévisualisation temporaires (xxx.hostingersite.com). 352 // On le retire et on impose le nôtre, pour que l'icône NLH s'affiche 353 // correctement même avant de brancher le vrai domaine. 354 var nlhManifestUrl = 'https://nextlevel-hockey.com/wp-content/themes/nlh-theme/manifest.json'; 355 var liens = document.querySelectorAll('link[rel="manifest"]'); 356 var dejaBon = false; 357 358 liens.forEach(function (lien) { 359 if (lien.href.indexOf('nlh-theme') !== -1) { 360 dejaBon = true; 361 } else { 362 lien.parentNode.removeChild(lien); 363 } 364 }); 365 366 if (!dejaBon) { 367 var nouveauLien = document.createElement('link'); 368 nouveauLien.rel = 'manifest'; 369 nouveauLien.href = nlhManifestUrl; 370 document.head.appendChild(nouveauLien); 371 } 372 })(); 373 374 if ('serviceWorker' in navigator) { 375 window.addEventListener('load', function () { 376 navigator.serviceWorker.register('/nlh-sw.js').catch(function () {}); 377 }); 378 } 379 </script>
379 380 <style> 381 #nlh-chat-bulle{ 382 position:fixed;bottom:20px;right:20px;width:60px;height:60px;border-radius:50%; 383 background:#0fdb6c;color:#03150a;display:flex;align-items:center;justify-content:center; 384 font-size:26px;cursor:pointer;z-index:99998;box-shadow:0 8px 22px rgba(15,219,108,.35); 385 border:none;transition:transform .15s ease; 386 } 387 #nlh-chat-bulle:hover{ transform:scale(1.06); } 388 #nlh-chat-fenetre{ 389 position:fixed;bottom:96px;right:20px;width:360px;max-width:calc(100vw - 32px); 390 height:520px;max-height:calc(100vh - 140px);background:#0b0f0d;border:1px solid #1f2b23; 391 border-radius:18px;display:none;flex-direction:column;overflow:hidden;z-index:99999; 392 font-family:Barlow,sans-serif;box-shadow:0 16px 40px rgba(0,0,0,.55); 393 } 394 #nlh-chat-fenetre.ouvert{ display:flex; animation:nlhApparait .18s ease; } 395 @keyframes nlhApparait{ from{ opacity:0; transform:translateY(8px); } to{ opacity:1; transform:translateY(0); } } 396 397 #nlh-chat-entete{ 398 background:linear-gradient(135deg,#0fdb6c,#0bb85a);color:#03150a;padding:18px 18px 16px; 399 display:flex;flex-direction:column;gap:2px; 400 } 401 #nlh-chat-entete-haut{ display:flex;justify-content:space-between;align-items:center; } 402 #nlh-chat-avatars{ display:flex;align-items:center;gap:8px; } 403 #nlh-chat-avatars img{ width:26px;height:26px;border-radius:50%;border:2px solid rgba(3,21,10,.25);object-fit:cover;background:#03150a; } 404 #nlh-chat-fermer{ cursor:pointer;font-size:20px;line-height:1;background:none;border:none;color:#03150a;opacity:.75; } 405 #nlh-chat-titre{ font-family:'Bebas Neue',sans-serif;font-size:22px;letter-spacing:.01em;margin-top:6px; } 406 #nlh-chat-sous-titre{ font-size:13px;font-weight:500;opacity:.85; } 407 408 #nlh-chat-corps{ 409 flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px; 410 background:#0b0f0d; 411 } 412 .nlh-msg{ max-width:85%;padding:10px 13px;border-radius:12px;font-size:14px;line-height:1.45; } 413 .nlh-msg.bot{ background:#152018;color:#e6f5ea;align-self:flex-start;border:1px solid #21301f; } 414 .nlh-msg.moi{ background:#0fdb6c;color:#03150a;align-self:flex-end; } 415 .nlh-msg a{ color:#0fdb6c; } 416 .nlh-msg.bot a{ text-decoration:underline; } 417 .nlh-chat-actions{ display:flex;flex-wrap:wrap;gap:8px;margin-top:12px; } 418 .nlh-chat-action{ 419 display:inline-flex;align-items:center;justify-content:center;gap:5px; 420 background:#0fdb6c!important;color:#03150a!important;text-decoration:none!important; 421 border:1px solid #0fdb6c;border-radius:999px;padding:8px 12px; 422 font-size:12px;font-weight:800;line-height:1.2;transition:transform .12s ease,filter .12s ease; 423 } 424 .nlh-chat-action:hover{ transform:translateY(-1px);filter:brightness(1.04); } 425 .nlh-chat-action.secondaire{ background:#152018!important;color:#dff6e8!important;border-color:#355441; } 426 427 #nlh-chat-puces{ display:flex;flex-wrap:wrap;gap:8px;padding:0 16px 14px; } 428 /* Limité au robot de clavardage. Sans le préfixe, cette règle écrasait 429 les pastilles de filtre du site â même nom de classe, et ce style-ci 430 est chargé après nlh.css. Les filtres de l'accueil et de la page 431 Horaire étaient donc habillés par le robot sans que personne l'ait 432 voulu. */ 433 #nlh-chat-puces .nlh-puce{ 434 background:#152018;border:1px solid #2a3b30;color:#cfe8da;border-radius:999px; 435 padding:8px 14px;font-size:13px;font-weight:600;cursor:pointer;transition:background .12s ease,border-color .12s ease; 436 } 437 #nlh-chat-puces .nlh-puce:hover{ background:#1c2b21;border-color:#0fdb6c; } 438 439 #nlh-chat-lead{ padding:16px;display:flex;flex-direction:column;gap:9px;background:#0b0f0d; } 440 #nlh-chat-lead p{ color:#c7d8cd;font-size:13px;margin:0 0 4px;line-height:1.5; } 441 #nlh-chat-lead input{ 442 background:#152018;border:1px solid #21301f;color:#e6f5ea;border-radius:9px; 443 padding:10px 11px;font-size:14px; 444 } 445 #nlh-chat-lead button{ 446 background:#0fdb6c;color:#03150a;border:none;border-radius:9px;padding:11px; 447 font-weight:700;cursor:pointer;font-size:14px; 448 } 449 #nlh-chat-lead .nlh-erreur{ color:#ff8080;font-size:12px;display:none; } 450 451 #nlh-chat-pied{ 452 display:none;padding:12px;gap:8px;border-top:1px solid #1f2b23;background:#0b0f0d; 453 } 454 #nlh-chat-pied.actif{ display:flex; } 455 #nlh-chat-input{ 456 flex:1;background:#152018;border:1px solid #21301f;color:#e6f5ea;border-radius:999px; 457 padding:10px 16px;font-size:14px; 458 } 459 #nlh-chat-envoyer{ 460 background:#0fdb6c;color:#03150a;border:none;border-radius:50%;width:38px;height:38px; 461 font-weight:700;cursor:pointer;flex-shrink:0; 462 } 463 </style> 464 465 <button id="nlh-chat-bulle" aria-label="Ouvrir le clavardage">ð¬</button> 466 467 <div id="nlh-chat-fenetre"> 468 <div id="nlh-chat-entete"> 469 <div id="nlh-chat-entete-haut"> 470 <div id="nlh-chat-avatars"> 471 <img src="https://nextlevel-hockey.com/wp-content/themes/nlh-theme/nlh-logo.webp" alt="NLH">
472 </div> 473 <button id="nlh-chat-fermer" aria-label="Fermer">Ã</button> 474 </div> 475 <div id="nlh-chat-titre"><span data-lang="fr">Salut</span><span data-lang="en">Hello</span> <span id="nlh-chat-prenom"></span>ð</div> 476 <div id="nlh-chat-sous-titre"> 477 <span data-lang="fr">Comment on peut t'aider ?</span> 478 <span data-lang="en">How can we help?</span> 479 </div> 480 </div> 481 482 <div id="nlh-chat-corps"></div> 483 <div id="nlh-chat-puces"></div> 484 485 <div id="nlh-chat-lead"> 486 <p data-lang="fr">Avant de commencer, laisse-nous ton nom et ton courriel â on tâajoute à notre liste pour les places disponibles et les nouveautés NLH !</p> 487 <p data-lang="en">Before we start, leave us your name and email â weâll add you to our list for open spots and NLH news.</p> 488 <input type="text" id="nlh-chat-nom" placeholder="Ton nom" 489 data-fr-placeholder="Ton nom" data-en-placeholder="Your name"> 490 <input type="email" id="nlh-chat-email" placeholder="Ton courriel" 491 data-fr-placeholder="Ton courriel" data-en-placeholder="Your email"> 492 <span class="nlh-erreur" id="nlh-chat-erreur"> 493 <span data-lang="fr">
493Merci dâentrer un nom et un courriel valide.</span> 494 <span data-lang="en">Please enter a name and a valid email.</span> 495 </span> 496 <button id="nlh-chat-lead-envoyer"> 497 <span data-lang="fr">Continuer</span><span data-lang="en">Continue</span> 498 </button> 499 </div> 500 501 <div id="nlh-chat-pied"> 502 <input type="text" id="nlh-chat-input" placeholder="Ãcris ta questionâ¦" 503 data-fr-placeholder="Ãcris ta questionâ¦" data-en-placeholder="Type your questionâ¦"> 504 <button id="nlh-chat-envoyer">â</button> 505 </div> 506 </div> 507 508
508<script> 509 ( function () { 510 var AJAX_URL = "https:\/\/nextlevel-hockey.com\/wp-admin\/admin-ajax.php"; 511 var NONCE = "11e921553a"; 512 var CONNECTE = false; 513 var PRENOM_CONNECTE = ""; 514 var HORAIRE_HTML = "Rookie Hockey Program \u2014 2 octobre (17:30, 18:30)<br>Apprendre \u00e0 patiner | Introduction au hockey \u2014 2 octobre (16:30)<br>Masterclass | Perfection Zone \u2014 2 octobre (19:30)"; 515 var URL_PROGRAMMES = "https:\/\/nextlevel-hockey.com\/programmes"; 516 var URL_HORAIRE = "https:\/\/nextlevel-hockey.com\/horaire"; 517 var URL_PZ = "https:\/\/nextlevel-hockey.com\/perfection-zone\/"; 518 var URL_PROSHOP = "https:\/\/nextlevel-hockey.com\/pro-shop\/"; 519 var URL_MES = "https:\/\/nextlevel-hockey.com\/montreal-elite-stars\/"; 520 var URL_RHL = "https:\/\/nextlevel-hockey.com\/rookie-hockey-league\/"; 521 var URL_COMPETITION = "https:\/\/nextlevel-hockey.com\/programmes\/#compete"; 522 var URL_SPRING = "https:\/\/nextlevel-hockey.com\/program\/spring-hockey-aaa-hockey-printemps-aaa\/"; 523 524 var bulle = document.getElementById( 'nlh-chat-bulle' ); 525 var fenetre = document.getElementById( 'nlh-chat-fenetre' ); 526 var fermer = document.getElementById( 'nlh-chat-fermer' ); 527 var corps = document.getElementById( 'nlh-chat-corps' ); 528 var pucesBox = document.getElementById( 'nlh-chat-puces' ); 529 var leadBox = document.getElementById( 'nlh-chat-lead' ); 530 var pied = document.getElementById( 'nlh-chat-pied' ); 531 var input = document.getElementById( 'nlh-chat-input' ); 532 var envoyer = document.getElementById( 'nlh-chat-envoyer' ); 533 var leadNom = document.getElementById( 'nlh-chat-nom' ); 534 var leadMail = document.getElementById( 'nlh-chat-email' ); 535 var leadBtn = document.getElementById( 'nlh-chat-lead-envoyer' ); 536 var leadErr = document.getElementById( 'nlh-chat-erreur' ); 537 var prenomSpan = document.getElementById( 'nlh-chat-prenom' ); 538 539 var dejaOuvert = false; 540 var leadEnvoye = ( localStorage.getItem( 'nlh_chat_lead_ok' ) === '1' ); 541 var prenomSauvegarde = localStorage.getItem( 'nlh_chat_prenom' ) || ''; 542 543 function ajouterMessage( texte, type ) { 544 var div = document.createElement( 'div' ); 545 div.className = 'nlh-msg ' + type; 546 div.innerHTML = texte; 547 corps.appendChild( div ); 548 corps.scrollTop = corps.scrollHeight; 549 } 550 551 // --- Langue : le site marque l'anglais par la classe « en » sur body -- 552 function estAnglais() { 553 return document.body.classList.contains( 'en' ); 554 } 555 function T( fr, en ) { 556 return estAnglais() ? en : fr; 557 } 558 559 // --- Boutons de réponses rapides --------------------------------- 560 var SUGGESTIONS = [ 561 { fr: 'ð Horaire des séances', en: 'ð Session schedule', question: 'horaire' }, 562 { fr: 'ð° Prix des programmes', en: 'ð° Program pricing', question: 'prix' }, 563 { fr: 'ð Comment s\u2019inscrire', en: 'ð How to register', question: 'inscription' }, 564 { fr: 'ð Annulation', en: 'ð Cancellation', question: 'annulation' } 565 ]; 566 567 function afficherPuces() { 568 pucesBox.innerHTML = ''; 569 SUGGESTIONS.forEach( function ( s ) { 570 var b = document.createElement( 'button' ); 571 b.className = 'nlh-puce'; 572 b.type = 'button'; 573 b.textContent = T( s.fr, s.en ); 574 b.addEventListener( 'click', function () { 575 pucesBox.innerHTML = ''; 576 ajouterMessage( T( s.fr, s.en ), 'moi' ); 577 setTimeout( function () { 578 ajouterMessage( repondre( s.question ), 'bot' ); 579 }, 250 ); 580 } ); 581 pucesBox.appendChild( b ); 582 } ); 583 } 584 585 function debloquerChat( prenom, estConnecte ) { 586 leadBox.style.display = 'none'; 587 pied.classList.add( 'actif' ); 588 if ( prenom ) { 589 prenomSpan.textContent = prenom.split( ' ' )[ 0 ] + ' '; 590 } 591 if ( corps.children.length === 0 ) { 592 var accueil = estConnecte 593 ? T( 594 "Content de te revoir ! Je peux t'aider avec nos programmes, les équipes, la Perfection Zone, le Pro-Shop, l'horaire, les prix, l'inscription et les crédits. Choisis une option ou écris directement ta question :", 595 "Welcome back! I can help with our programs, teams, Perfection Zone, Pro-Shop, schedule, pricing, registration and credits. Pick an option or type your question:" 596 ) 597 : T( 598 "Je peux t'aider avec nos programmes, les équipes, la Perfection Zone, le Pro-Shop, l'horaire, les prix, l'inscription et les crédits. Choisis une option ou écris directement ta question :", 599 "I can help with our programs, teams, Perfection Zone, Pro-Shop, schedule, pricing, registration and credits. Pick an option or type your question:" 600 ); 601 ajouterMessage( accueil, 'bot' ); 602 afficherPuces(); 603 } 604 } 605 606 bulle.addEventListener( 'click', function () { 607 dejaOuvert = ! dejaOuvert; 608 fenetre.classList.toggle( 'ouvert', dejaOuvert ); 609 if ( dejaOuvert && CONNECTE ) { 610 debloquerChat( PRENOM_CONNECTE, true ); 611 } else if ( dejaOuvert && leadEnvoye ) { 612 debloquerChat( prenomSauvegarde, false ); 613 } 614 } ); 615 fermer.addEventListener( 'click', function () { 616 dejaOuvert = false;
617 fenetre.classList.remove( 'ouvert' ); 618 } ); 619 620 leadBtn.addEventListener( 'click', function () { 621 var nom = leadNom.value.trim(); 622 var email = leadMail.value.trim(); 623 var okEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test( email ); 624 625 if ( ! nom || ! okEmail ) { 626 leadErr.style.display = 'block'; 627 return; 628 } 629 leadErr.style.display = 'none'; 630 leadBtn.disabled = true; 631 leadBtn.textContent = T( 'Un instantâ¦', 'One momentâ¦' ); 632 633 var donnees = new URLSearchParams(); 634 donnees.append( 'action', 'nlh_chatbot_lead' ); 635 donnees.append( 'nonce', NONCE ); 636 donnees.append( 'nom', nom ); 637 donnees.append( 'email', email ); 638 donnees.append( 'page', window.location.href ); 639 640 function terminer() { 641 localStorage.setItem( 'nlh_chat_lead_ok', '1' ); 642 localStorage.setItem( 'nlh_chat_prenom', nom ); 643 debloquerChat( nom, false ); 644 } 645 646 fetch( AJAX_URL, { method: 'POST', body: donnees } ) 647 .then( terminer ) 648 .catch( terminer ) // pas de friction supplémentaire si le webhook échoue 649 .finally( function () { 650 leadBtn.disabled = false; 651 leadBtn.textContent = T( 'Continuer', 'Continue' ); 652 } ); 653 } ); 654 655 // --- FAQ intelligente : le meilleur sujet gagne ---------------------------- 656 /* 657 * L'ancienne version retournait la PREMIÃRE règle contenant un mot. 658 * Donc un mot générique comme « programme » pouvait voler une question 659 * précise sur la Perfection Zone. Ici, chaque sujet reçoit un score : 660 * les expressions précises valent plus que les mots génériques. 661 */ 662 function normaliserQuestion( texte ) { 663 var q = String( texte || '' ).toLowerCase(); 664 if ( q.normalize ) { 665 q = q.normalize( 'NFD' ).replace( /[\u0300-\u036f]/g, '' ); 666 } 667 return q.replace( /[â']/g, ' ' ).replace( /\s+/g, ' ' ).trim(); 668 } 669 670 var REGLES = [ 671 { 672 id: 'perfection-zone', priorite: 30, 673 phrases: [ 'perfection zone', 'masterclass', 'master class', 'impact class' ], 674 mots: [ 'perfection', 'masterclass', 'impact' ], 675 fr: 'La <strong>Perfection Zone</strong> offre présentement deux programmes : <strong>Masterclass</strong> et <strong>Impact Class</strong>.<br><br>Tu peux consulter les détails, les disponibilités et les inscriptions directement dans la section Perfection Zone.<br><br><a href="' + URL_PZ + '" target="_blank">Voir la Perfection Zone â</a>', 676 en: '<strong>Perfection Zone</strong> currently offers two programs: <strong>Masterclass</strong> and <strong>Impact Class</strong>.<br><br>You can view the details, availability and registration options directly in the Perfection Zone section.<br><br><a href="' + URL_PZ + '" target="_blank">View Perfection Zone â</a>' 677 }, 678 { 679 id: 'rhl', priorite: 32, 680 phrases: [ 'rookie hockey league', 'ligue rookie', 'ligue de hockey recrue', 'rookie league' ], 681 mots: [ 'rhl' ], 682 fr: 'La <strong>Rookie Hockey League</strong> est offerte aux joueurs nés en <strong>2019, 2020, 2021 et 2022</strong>.<br><br>La saison comprend <strong>15 parties</strong>, les <strong>mardis à Glace de lâEst</strong>, sans pratique. Lâinscription est de <strong>475 $</strong> et comprend le <strong>jersey et les bas</strong>.<br><br><a href="' + URL_RHL + '" target="_blank">Voir la Rookie Hockey League â</a>', 683 en: 'The <strong>Rookie Hockey League</strong> is open to players born in <strong>2019, 2020, 2021 and 2022</strong>.<br><br>The season includes <strong>15 games</strong> on <strong>Tuesdays at Glace de lâEst</strong>, with no practices. Registration is <strong>$475</strong> and includes the <strong>jersey and socks</strong>.<br><br><a href="' + URL_RHL + '" target="_blank">View the Rookie Hockey League â</a>' 684 }, 685 { 686 id: 'proshop', priorite: 28, 687 phrases: [ 'pro shop', 'pro-shop', 'acheter un chandail', 'acheter des chandails', 'acheter un jersey', 'acheter des jerseys', 'buy a jersey', 'buy jerseys' ], 688 mots: [ 'jersey', 'jerseys', 'chandail', 'chandails', 'vetement', 'vetements', 'hoodie', 'tuque', 'merch', 'apparel' ], 689 fr: 'Oui. Le <strong>Pro-Shop NLH</strong> offre des chandails, jerseys et vêtements pour <strong>enfants et adultes</strong>.<br><br>Tu peux consulter les modèles et les tailles disponibles, puis commander directement dans le Pro-Shop.<br><br><a href="' + URL_PROSHOP + '" target="_blank">Voir le Pro-Shop â</a>', 690 en: 'Yes. The <strong>NLH Pro-Shop</strong> offers jerseys and apparel for <strong>kids and adults</strong>.<br><br>You can view the available styles and sizes and order directly from the Pro-Shop.<br><br><a href="' + URL_PROSHOP + '" target="_blank">View the Pro-Shop â</a>' 691 }, 692 { 693 id: 'equipes', priorite: 26, 694 phrases: [ 'faire partie d une equipe', 'jouer dans une equipe', 'ligue d hiver', 'ligue hiver', 'ligue de printemps', 'montreal elite stars', 'elite stars', 'spring hockey', 'winter league', 'spring league', 'join a team' ], 695 mots: [ 'equipe', 'equipes', 'team', 'teams' ], 696 fr: 'Oui. Next Level Hockey offre des possibilités de jouer dans une équipe.<br><br>Pour lâhiver, il y a notamment les <strong>Montreal Elite Stars</strong>. NLH offre aussi du <strong>Hockey Printemps AAA</strong>. Les groupes et les possibilités dépendent notamment de lââge et du niveau du joueur.<div class="nlh-chat-actions"><a class="nlh-chat-action" href="' + URL_MES + '" target="_blank" rel="noopener">â Montreal Elite Stars</a><a class="nlh-chat-action secondaire" href="' + URL_SPRING + '" target="_blank" rel="noopener">ð Hockey Printemps AAA</a></div>', 697 en: 'Yes. Next Level Hockey offers opportunities to play on a team.<br><br>For the winter season, one option is the <strong>Montreal Elite Stars</strong>. NLH also offers <strong>Spring Hockey AAA</strong>. Available teams and groups depend in part on the playerâs age and level.<div class="nlh-chat-actions"><a class="nlh-chat-action" href="' + URL_MES + '" target="_blank" rel="noopener">â Montreal Elite Stars</a><a class="nlh-chat-action secondaire" href="' + URL_SPRING + '" target="_blank" rel="noopener">ð Spring Hockey AAA</a></div>' 698 }, 699 { 700 id: 'horaire', priorite: 15, 701 phrases: [ 'prochaine seance', 'prochaines seances', 'session schedule', 'next session', 'next sessions' ], 702 mots: [ 'horaire', 'heure', 'quand', 'date', 'prochaine', 'seance', 'schedule', 'time', 'when', 'session', 'next' ], 703 fr: 'Voici les <strong>prochaines séances publiées</strong> :<br><br>' + HORAIRE_HTML + '<br><br><a href="' + URL_HORAIRE + '" target="_blank">Voir lâhoraire complet â</a>', 704 en: 'Here are the <strong>next published sessions</strong>:<br><br>' + HORAIRE_HTML + '<br><br><a href="' + URL_HORAIRE + '" target="_blank">View the full schedule â</a>' 705 }, 706 { 707 id: 'prix', priorite: 12,
708 phrases: [ 'combien ca coute', 'combien ça coute', 'how much does it cost', 'program pricing' ], 709 mots: [ 'prix', 'cout', 'combien', 'tarif', 'price', 'cost', 'pricing', 'fee' ], 710 fr: 'Le prix dépend du programme ou de la séance. Le <strong>montant exact est affiché sur la fiche</strong> avant lâajout au panier, donc tu peux le vérifier avant de tâinscrire.<br><br><a href="' + URL_PROGRAMMES + '" target="_blank">Voir les programmes et les prix â</a>', 711 en: 'Pricing depends on the program or session. The <strong>exact amount is shown on the listing</strong> before you add it to your cart, so you can confirm the price before registering.<br><br><a href="' + URL_PROGRAMMES + '" target="_blank">View programs and pricing â</a>' 712 }, 713 { 714 id: 'inscription', priorite: 14, 715 phrases: [ 'comment s inscrire', 'how to register', 'how do i register', 'sign up' ], 716 mots: [ 'inscri', 'reserv', 'payer', 'paiement', 'register', 'registration', 'book', 'pay', 'payment', 'checkout' ], 717 fr: 'Pour tâinscrire, ouvre le programme qui tâintéresse, choisis une date ou une option disponible et ajoute-la au panier. Tu pourras ensuite compléter les informations du joueur et le paiement.<br><br><a href="' + URL_PROGRAMMES + '" target="_blank">Choisir un programme â</a>', 718 en: 'To register, open the program you want, choose an available date or option and add it to your cart. You can then complete the player information and payment.<br><br><a href="' + URL_PROGRAMMES + '" target="_blank">Choose a program â</a>' 719 }, 720 { 721 id: 'annulation', priorite: 18, 722 phrases: [ 'politique d annulation', 'cancellation policy', 'do you refund', 'etre rembourse' ], 723 mots: [ 'annul', 'rembours', 'credit', 'cancel', 'refund', 'reschedule' ], 724 fr: 'NLH <strong>nâémet pas de remboursement</strong>. Lorsquâune annulation respecte les conditions applicables, un <strong>crédit NLH</strong> peut être accordé. Pour les séances visées par la politique actuelle, lâannulation doit être faite au moins <strong>48 h avant</strong>, et le crédit doit être utilisé dans les <strong>40 jours</strong> suivant son émission.', 725 en: 'NLH <strong>does not issue refunds</strong>. When a cancellation meets the applicable conditions, an <strong>NLH credit</strong> may be issued. For sessions covered by the current policy, cancellation must be made at least <strong>48 hours in advance</strong>, and the credit must be used within <strong>40 days</strong> of being issued.' 726 }, 727 { 728 id: 'age', priorite: 9, 729 phrases: [ 'quel programme', 'pour quel age', 'what program', 'what age' ], 730 mots: [ 'age', 'categorie', 'niveau', 'level', 'category', 'old', 'group' ], 731 fr: 'Le bon programme dépend de lââge et du niveau du joueur. Utilise lâoutil <strong>« Trouver mon programme »</strong> sur la page dâaccueil pour obtenir les options qui correspondent à ton joueur.', 732 en: 'The best program depends on the playerâs age and level. Use the <strong>âFind my programâ</strong> tool on the home page to see the options that match your player.' 733 }, 734 { 735 id: 'lieu', priorite: 8, 736 phrases: [ 'ou est', 'ou se trouve', 'ou jouer', 'dans quel arena', 'where is', 'where do', 'which arena', 'quel arena' ], 737 mots: [ 'adresse', 'lieu', 'arena', 'where', 'address', 'location', 'rink' ], 738 fr: 'Le lieu varie selon le programme et la séance. Lâaréna ou lâadresse est indiqué directement dans lâhoraire ou sur la fiche de la séance.<br><br><a href="' + URL_HORAIRE + '" target="_blank">Voir lâhoraire â</a>', 739 en: 'Location varies by program and session. The arena or address is shown directly in the schedule or on the session listing.<br><br><a href="' + URL_HORAIRE + '" target="_blank">View the schedule â</a>' 740 }, 741 { 742 id: 'contact', priorite: 7, 743 phrases: [ 'parler a quelqu un', 'talk to someone', 'contact nlh' ], 744 mots: [ 'contact', 'courriel', 'telephone', 'rejoindre', 'parler', 'email', 'phone', 'reach', 'talk', 'speak' ], 745 fr: 'Tu peux nous laisser ta question ici. Si elle demande une réponse plus précise, un membre de lâéquipe NLH pourra faire le suivi avec toi par courriel.', 746 en: 'You can leave your question here. If it needs a more specific answer, an NLH team member can follow up with you by email.' 747 }, 748 { 749 id: 'programmes', priorite: 2, 750 phrases: [ 'quels programmes', 'what programs', 'what do you offer', 'qu est ce que vous offrez' ], 751 mots: [ 'programme', 'programmes', 'cours', 'camp', 'entrainement', 'program', 'programs', 'class', 'training' ], 752 fr: 'NLH offre plusieurs options de développement : patinage, habiletés, Perfection Zone, gardiens, programmes Rookie et équipes de compétition hiver/printemps.<br><br><a href="' + URL_PROGRAMMES + '" target="_blank">Voir tous les programmes â</a>', 753 en: 'NLH offers several development options: skating, skills, Perfection Zone, goaltending, Rookie programs and winter/spring competition teams.<br><br><a href="' + URL_PROGRAMMES + '" target="_blank">View all programs â</a>' 754 } 755 ]; 756 757 function scoreRegle( regle, q ) { 758 var score = 0; 759 var motsQuestion = q.replace( /[^a-z0-9]+/g, ' ' ).trim().split( /\s+/ ); 760 var racines = [ 'inscri', 'reserv', 'annul', 'rembours' ]; 761 762 ( regle.phrases || [] ).forEach( function ( phrase ) { 763 var p = normaliserQuestion( phrase ); 764 if ( p && q.indexOf( p ) !== -1 ) { score += 8; } 765 } ); 766 767 ( regle.mots || [] ).forEach( function ( mot ) { 768 var m = normaliserQuestion( mot ); 769 if ( ! m ) { return; } 770 771 // Les quelques racines servent volontairement à reconnaître 772 // « inscription / inscrire », « réservation / réserver », etc. 773 if ( racines.indexOf( m ) !== -1 ) { 774 if ( q.indexOf( m ) !== -1 ) { score += 2; } 775 return; 776 } 777 778 // Tous les autres mots doivent exister comme vrais mots. 779 // Ainsi « où » ne peut plus correspondre à « couleur ». 780 if ( motsQuestion.indexOf( m ) !== -1 ) { score += 2; } 781 } ); 782 783 return score; 784 } 785 786 function repondre( question ) {
787 var q = normaliserQuestion( question ); 788 var meilleure = null; 789 var meilleurScore = 0; 790 791 REGLES.forEach( function ( regle ) { 792 var score = scoreRegle( regle, q ); 793 if ( score > meilleurScore || ( score === meilleurScore && score > 0 && regle.priorite > ( meilleure ? meilleure.priorite : 0 ) ) ) { 794 meilleure = regle; 795 meilleurScore = score; 796 } 797 } ); 798 799 // Un seul petit mot générique ne suffit plus pour inventer une réponse. 800 if ( ! meilleure || meilleurScore < 2 ) { 801 return T( 802 "Je ne suis pas certain dâavoir bien compris ta question ð¤ Reformule-la avec un peu plus de détails. Je peux notamment tâaider avec les programmes, les équipes, la Perfection Zone, le Pro-Shop, lâhoraire, les prix, lâinscription et les crédits.", 803 "Iâm not completely sure I understood your question ð¤ Try rephrasing it with a little more detail. I can help with programs, teams, Perfection Zone, Pro-Shop, schedule, pricing, registration and credits." 804 ); 805 } 806 807 return T( meilleure.fr, meilleure.en ); 808 } 809 810 function envoyerMessage() { 811 var texte = input.value.trim(); 812 if ( ! texte ) { return; } 813 pucesBox.innerHTML = ''; 814 ajouterMessage( texte, 'moi' ); 815 input.value = ''; 816 setTimeout( function () { 817 ajouterMessage( repondre( texte ), 'bot' ); 818 }, 300 ); 819 } 820 821 envoyer.addEventListener( 'click', envoyerMessage ); 822 input.addEventListener( 'keydown', function ( e ) { 823 if ( e.key === 'Enter' ) { envoyerMessage(); } 824 } ); 825 } )(); 826 </script>
826 827
827<script> 828 const lazyloadRunObserver = () => { 829 const lazyloadBackgrounds = document.querySelectorAll( `.e-con.e-parent:not(.e-lazyloaded)` ); 830 const lazyloadBackgroundObserver = new IntersectionObserver( ( entries ) => { 831 entries.forEach( ( entry ) => { 832 if ( entry.isIntersecting ) { 833 let lazyloadBackground = entry.target; 834 if( lazyloadBackground ) { 835 lazyloadBackground.classList.add( 'e-lazyloaded' ); 836 } 837 lazyloadBackgroundObserver.unobserve( entry.target ); 838 } 839 }); 840 }, { rootMargin: '200px 0px 200px 0px' } ); 841 lazyloadBackgrounds.forEach( ( lazyloadBackground ) => { 842 lazyloadBackgroundObserver.observe( lazyloadBackground ); 843 } ); 844 }; 845 const events = [ 846 'DOMContentLoaded', 847 'elementor/lazyload/observe', 848 ]; 849 events.forEach( ( event ) => { 850 document.addEventListener( event, lazyloadRunObserver ); 851 } ); 852 </script>
852 853
853<script> 854 (function () { 855 var c = document.body.className; 856 c = c.replace(/woocommerce-no-js/, 'woocommerce-js'); 857 document.body.className = c; 858 })(); 859 </script>
859 860
860<script id="pll_cookie_script-js-after"> 861(function() { 862 var expirationDate = new Date(); 863 expirationDate.setTime( expirationDate.getTime() + 31536000 * 1000 ); 864 document.cookie = "pll_language=fr; expires=" + expirationDate.toUTCString() + "; path=/; secure; SameSite=Lax"; 865 }()); 866 867//# sourceURL=pll_cookie_script-js-after 868</script>
vendor: 1 bytes, line 868
868
869<script data-wp-strategy="defer" defer id="hostinger-reach-embed-js" src="https://cdn-reach.hostinger.com/js/embed.js"></script>
vendor: 1 bytes, line 869
869
870<script id="hello-theme-frontend-js" src="https://nextlevel-hockey.com/wp-content/themes/hello-elementor/assets/js/hello-frontend.js?ver=3.4.9"></script>
vendor: 1 bytes, line 870
870
871<script id="sourcebuster-js-js" src="https://nextlevel-hockey.com/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js?ver=11.1.0"></script>
vendor: 1 bytes, line 871
871
872<script id="wc-order-attribution-js-extra"> 873var wc_order_attribution = {"params":{"lifetime":1.0e-5,"session":30,"base64":false,"ajaxurl":"https://nextlevel-hockey.com/wp-admin/admin-ajax.php","prefix":"wc_order_attribution_","allowTracking":true},"fields":{"source_type":"current.typ","referrer":"current_add.rf","utm_campaign":"current.cmp","utm_source":"current.src","utm_medium":"current.mdm","utm_content":"current.cnt","utm_id":"current.id","utm_term":"current.trm","utm_source_platform":"current.plt","utm_creative_format":"current.fmt","utm_marketing_tactic":"current.tct","session_entry":"current_add.ep","session_start_time":"current_add.fd","session_pages":"session.pgs","session_count":"udata.vst","user_agent":"udata.uag"}}; 874//# sourceURL=wc-order-attribution-js-extra 875</script>
vendor: 1 bytes, line 875
875
876<script id="wc-order-attribution-js" src="https://nextlevel-hockey.com/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js?ver=11.1.0"></script>
vendor: 1 bytes, line 876
876
877<script id="wp-emoji-settings" type="application/json"> 878{"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://nextlevel-hockey.com/wp-includes/js/wp-emoji-release.min.js?ver=7.0.6"}} 879</script>
vendor: 1 bytes, line 879
879
880<script type="module"> 881/*! This file is auto-generated */ 882var 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)))}); 883//# sourceURL=https://nextlevel-hockey.com/wp-includes/js/wp-emoji-loader.min.js 884</script>
884 885 <style> 886 .nlh-rich-wrap{margin-top:5px;max-width:850px} 887 .nlh-rich-toolbar{display:flex;align-items:center;gap:6px;padding:6px 7px;background:#f6f7f7;border:1px solid #c3c4c7;border-bottom:0;border-radius:7px 7px 0 0} 888 .nlh-rich-bold{min-width:34px;height:30px;border:1px solid #a7aaad;border-radius:5px;background:#fff;color:#1d2327;font:700 15px/1 system-ui;cursor:pointer} 889 .nlh-rich-bold:hover,.nlh-rich-bold:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none} 890 .nlh-rich-editor{min-height:118px;padding:10px 12px;border:1px solid #c3c4c7;border-radius:0 0 7px 7px;background:#fff;color:#1d2327;font:14px/1.55 system-ui;white-space:pre-wrap;overflow:auto;box-sizing:border-box} 891 .nlh-rich-editor:focus{border-color:#2271b1;box-shadow:0 0 0 1px #2271b1;outline:none} 892 textarea.nlh-rich-email.nlh-rich-source{position:absolute!important;left:-10000px!important;width:1px!important;height:1px!important;opacity:0!important;pointer-events:none!important} 893 .nlh-mgr-panel .nlh-rich-toolbar{background:#111713;border-color:#344039} 894 .nlh-mgr-panel .nlh-rich-bold{background:#18201a;border-color:#46534b;color:#fff} 895 .nlh-mgr-panel .nlh-rich-editor{background:#0b0f0d;border-color:#344039;color:#fff} 896 .nlh-rich-help{margin-left:4px;color:#646970;font-size:11px}
897 .nlh-mgr-panel .nlh-rich-help{color:#95a29a} 898 </style> 899
899<script> 900 (function(){ 901 function plainText(html){ 902 var box=document.createElement('div'); 903 box.innerHTML=String(html||'').replace(/<br\s*\/?\s*>/gi,'\n').replace(/<\/(?:p|div)>/gi,'\n'); 904 return (box.textContent||box.innerText||'').trim(); 905 } 906 function init(textarea){ 907 if(!textarea || textarea.dataset.nlhRichReady==='1') return; 908 textarea.dataset.nlhRichReady='1'; 909 910 var wrap=document.createElement('div'); wrap.className='nlh-rich-wrap'; 911 var toolbar=document.createElement('div'); toolbar.className='nlh-rich-toolbar'; 912 var bold=document.createElement('button'); bold.type='button'; bold.className='nlh-rich-bold'; bold.innerHTML='<strong>B</strong>'; bold.title='Bold / Gras'; bold.setAttribute('aria-label','Bold / Gras'); 913 var help=document.createElement('span'); help.className='nlh-rich-help'; help.textContent='Select text, then B · Sélectionnez le texte, puis B'; 914 var editor=document.createElement('div'); editor.className='nlh-rich-editor'; editor.contentEditable='true'; editor.setAttribute('role','textbox'); editor.setAttribute('aria-multiline','true'); 915 916 var original=textarea.value||''; 917 if(/<\/?(?:strong|b|br|p|div)\b/i.test(original)) editor.innerHTML=original; else editor.textContent=original; 918 toolbar.appendChild(bold); toolbar.appendChild(help); wrap.appendChild(toolbar); wrap.appendChild(editor); 919 textarea.parentNode.insertBefore(wrap,textarea); textarea.classList.add('nlh-rich-source'); 920 921 function sync(){ textarea.value=editor.innerHTML.trim(); } 922 editor.addEventListener('input',sync); 923 bold.addEventListener('mousedown',function(e){e.preventDefault();}); 924 bold.addEventListener('click',function(){editor.focus();try{document.execCommand('bold',false,null);}catch(e){}sync();}); 925 if(textarea.form){textarea.form.addEventListener('submit',function(e){sync();if(textarea.required && !plainText(textarea.value)){e.preventDefault();editor.focus();alert('Please write a message. / Veuillez écrire un message.');}});} 926 } 927 function run(){document.querySelectorAll('textarea.nlh-rich-email').forEach(init);} 928 if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',run); else run(); 929 if(window.MutationObserver){new MutationObserver(function(){run();}).observe(document.documentElement,{childList:true,subtree:true});} 930 })(); 931 </script>
931 932
932<script> 933 (function(){ 934 var nlhTurnstileSiteKey = "0x4AAAAAAFKmYMj2PU7oV18HdG-rBwLfS5I"; 935 936 function nlhContactForms(){ 937 return Array.prototype.slice.call(document.querySelectorAll('form')).filter(function(form){ 938 return form.querySelector('input[type="email"]') && form.querySelector('textarea'); 939 }); 940 } 941 942 function nlhContactSecurityFields(){ 943 nlhContactForms().forEach(function(form){ 944 if (!form.querySelector('[name="nlh_website"]')) { 945 var hpWrap = document.createElement('div'); 946 hpWrap.setAttribute('aria-hidden','true'); 947 hpWrap.style.position = 'absolute'; 948 hpWrap.style.left = '-10000px'; 949 hpWrap.style.width = '1px'; 950 hpWrap.style.height = '1px'; 951 hpWrap.style.overflow = 'hidden'; 952 953 var hp = document.createElement('input'); 954 hp.type = 'text'; 955 hp.name = 'nlh_website'; 956 hp.value = ''; 957 hp.tabIndex = -1; 958 hp.autocomplete = 'off'; 959 hp.setAttribute('aria-hidden','true'); 960 hpWrap.appendChild(hp); 961 form.appendChild(hpWrap); 962 } 963 964 if (!form.querySelector('[name="nlh_contact_started"]')) { 965 var started = document.createElement('input'); 966 started.type = 'hidden'; 967 started.name = 'nlh_contact_started'; 968 started.value = String(Math.floor(Date.now()/1000)); 969 form.appendChild(started); 970 } 971 972 if (nlhTurnstileSiteKey && !form.querySelector('.nlh-turnstile-wrap')) { 973 var wrap = document.createElement('div'); 974 wrap.className = 'nlh-turnstile-wrap'; 975 wrap.style.margin = '12px 0'; 976 wrap.setAttribute('aria-label', 'Security check'); 977 var submit = form.querySelector('button[type="submit"], input[type="submit"]'); 978 if (submit && submit.parentNode) submit.parentNode.insertBefore(wrap, submit); 979 else form.appendChild(wrap); 980 } 981 }); 982 } 983 984 window.nlhRenderTurnstile = function(){ 985 if (!nlhTurnstileSiteKey || !window.turnstile) return; 986 nlhContactSecurityFields();
987 nlhContactForms().forEach(function(form){ 988 var wrap = form.querySelector('.nlh-turnstile-wrap'); 989 if (!wrap || wrap.getAttribute('data-nlh-rendered') === '1') return; 990 try { 991 window.turnstile.render(wrap, { 992 sitekey: nlhTurnstileSiteKey, 993 theme: 'auto', 994 appearance: 'interaction-only', 995 action: 'nlh_contact', 996 'response-field': true, 997 'response-field-name': 'cf-turnstile-response', 998 'refresh-expired': 'auto', 999 'retry': 'auto' 1000 }); 1001 wrap.setAttribute('data-nlh-rendered','1'); 1002 } catch(e) {} 1003 }); 1004 }; 1005 1006 function boot(){ 1007 nlhContactSecurityFields(); 1008 if (window.turnstile) window.nlhRenderTurnstile(); 1009 } 1010 1011 if (document.readyState === 'loading') { 1012 document.addEventListener('DOMContentLoaded', boot); 1013 } else { 1014 boot(); 1015 } 1016 })(); 1017 </script>
1017 1018
1018<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" async defer onload="window.nlhRenderTurnstile&&window.nlhRenderTurnstile()"></script>
1018 1019
1019<script id="nlh-public-age-level-dropdowns"> 1020 (function(){ 1021 'use strict'; 1022 1023 var AGE_GROUPS = ["U5","U7","U9","U11","U13","U15","U18"]; 1024 var LEVELS = {"U5":[],"U7":[{"value":"Beginner","fr":"D\u00e9butant","en":"Beginner"},{"value":"Intermediate","fr":"Interm\u00e9diaire","en":"Intermediate"},{"value":"Elite","fr":"\u00c9lite","en":"Elite"}],"U9":[{"value":"Novice 1","fr":"Novice 1","en":"Novice 1"},{"value":"Novice 2","fr":"Novice 2","en":"Novice 2"},{"value":"Novice 3","fr":"Novice 3","en":"Novice 3"},{"value":"Novice 4","fr":"Novice 4","en":"Novice 4"}],"U11":[{"value":"AA","fr":"AA","en":"AA"},{"value":"BB","fr":"BB","en":"BB"},{"value":"A","fr":"A","en":"A"},{"value":"B","fr":"B","en":"B"},{"value":"School Hockey","fr":"Hockey scolaire","en":"School Hockey"}],"U13":[{"value":"AAA","fr":"AAA","en":"AAA"},{"value":"AA","fr":"AA","en":"AA"},{"value":"BB","fr":"BB","en":"BB"},{"value":"A","fr":"A","en":"A"},{"value":"B","fr":"B","en":"B"},{"value":"School Hockey D1","fr":"Scolaire D1","en":"School Hockey D1"},{"value":"School Hockey D2","fr":"Scolaire D2","en":"School Hockey D2"},{"value":"School Hockey D3","fr":"Scolaire D3","en":"School Hockey D3"}],"U15":[{"value":"AAA","fr":"AAA","en":"AAA"},{"value":"AA","fr":"AA","en":"AA"},{"value":"BB","fr":"BB","en":"BB"},{"value":"A","fr":"A","en":"A"},{"value":"B","fr":"B","en":"B"},{"value":"School Hockey D1","fr":"Scolaire D1","en":"School Hockey D1"},{"value":"School Hockey D2","fr":"Scolaire D2","en":"School Hockey D2"},{"value":"School Hockey D3","fr":"Scolaire D3","en":"School Hockey D3"}],"U18":[{"value":"AAA","fr":"AAA","en":"AAA"},{"value":"School Hockey","fr":"Hockey scolaire","en":"School Hockey"}]}; 1025 var SEASON_START = 2026; 1026 1027 function lang(){ 1028 return document.body && document.body.classList.contains('en') ? 'en' : 'fr'; 1029 } 1030 1031 function copyFieldLook(from, to){ 1032 if (!from || !to) return; 1033 to.className = from.className || ''; 1034 if (from.getAttribute('style')) to.setAttribute('style', from.getAttribute('style')); 1035 if (from.id) to.id = from.id; 1036 if (from.required) to.required = true; 1037 if (from.disabled) to.disabled = true; 1038 if (from.getAttribute('aria-label')) to.setAttribute('aria-label', from.getAttribute('aria-label')); 1039 } 1040 1041 function option(value, fr, en){ 1042 var o=document.createElement('option'); 1043 o.value=value; 1044 o.setAttribute('data-fr', fr); 1045 o.setAttribute('data-en', en); 1046 o.textContent = lang()==='en' ? en : fr; 1047 return o; 1048 } 1049 1050 function suggestAge(year){ 1051 year=parseInt(String(year||'').replace(/\D/g,''),10); 1052 if (!year || !SEASON_START) return ''; 1053 var age=SEASON_START-year; 1054 if (age<=4) return 'U5'; 1055 if (age<=6) return 'U7'; 1056 if (age<=8) return 'U9'; 1057 if (age<=10) return 'U11'; 1058 if (age<=12) return 'U13'; 1059 if (age<=14) return 'U15'; 1060 if (age<=17) return 'U18'; 1061 return ''; 1062 } 1063 1064 function makeAgeSelect(oldField){ 1065 var sel=document.createElement('select'); 1066 sel.name='nlh_age_group'; 1067 copyFieldLook(oldField,sel); 1068 sel.id = oldField && oldField.id ? oldField.id : 'nlh_age_group'; 1069 sel.required=true; 1070 sel.appendChild(option('', 'Choisir', 'Select')); 1071 AGE_GROUPS.forEach(function(a){ sel.appendChild(option(a,a,a)); }); 1072 if (oldField && oldField.value && AGE_GROUPS.indexOf(oldField.value)!==-1) sel.value=oldField.value; 1073 return sel; 1074 } 1075 1076 function fillLevels(level, age, keep){ 1077 var current = keep ? (level.value || level.getAttribute('data-current') || '') : ''; 1078 level.innerHTML=''; 1079 var ag=age.value || ''; 1080 if (ag==='U5') { 1081 level.appendChild(option('', 'Aucun niveau requis', 'No level required')); 1082 level.required=false; 1083 level.disabled=true; 1084 return; 1085 } 1086 level.disabled=false; 1087 level.required=true; 1088 level.appendChild(option('', 'Choisir', 'Select')); 1089 (LEVELS[ag]||[]).forEach(function(x){ 1090 var o=option(x.value, x.fr||x.value, x.en||x.value); 1091 if (current===x.value) o.selected=true; 1092 level.appendChild(o); 1093 }); 1094 // Ne jamais perdre une ancienne valeur déjà enregistrée. 1095 if (current && !(LEVELS[ag]||[]).some(function(x){return x.value===current;})) { 1096 var legacy=option(current,current,current); 1097 legacy.selected=true; 1098 level.appendChild(legacy); 1099 } 1100 level.setAttribute('data-current', level.value || current || ''); 1101 } 1102 1103 function makeLevelSelect(oldField){ 1104 var sel=document.createElement('select'); 1105 sel.name='nlh_niveau';
1106 copyFieldLook(oldField,sel); 1107 sel.id = oldField && oldField.id ? oldField.id : 'nlh_niveau'; 1108 sel.required=true; 1109 sel.setAttribute('data-current', oldField && oldField.value ? oldField.value : ''); 1110 return sel; 1111 } 1112 1113 function fieldWrapper(field){ 1114 if (!field) return null; 1115 return field.closest('label') || field.parentElement; 1116 } 1117 1118 function addAgeFieldBefore(level, form){ 1119 var levelWrap=fieldWrapper(level); 1120 if (!levelWrap || !levelWrap.parentNode) return null; 1121 1122 var wrap; 1123 if (levelWrap.tagName && levelWrap.tagName.toLowerCase()==='label') { 1124 wrap=document.createElement('label'); 1125 } else { 1126 wrap=document.createElement(levelWrap.tagName || 'div'); 1127 } 1128 wrap.className=levelWrap.className || ''; 1129 if (levelWrap.getAttribute && levelWrap.getAttribute('style')) wrap.setAttribute('style',levelWrap.getAttribute('style')); 1130 wrap.setAttribute('data-nlh-generated-age','1'); 1131 1132 var title=document.createElement('span'); 1133 title.setAttribute('data-fr','Groupe dââge *'); 1134 title.setAttribute('data-en','Age group *'); 1135 title.textContent = lang()==='en' ? 'Age group *' : 'Groupe dââge *'; 1136 wrap.appendChild(title); 1137 1138 // Les formulaires NLH ont leur libellé et leur champ sur deux lignes. 1139 wrap.appendChild(document.createElement('br')); 1140 var age=makeAgeSelect(level); 1141 age.removeAttribute('id'); 1142 age.id='nlh_age_group'; 1143 wrap.appendChild(age); 1144 levelWrap.parentNode.insertBefore(wrap,levelWrap); 1145 return age; 1146 } 1147 1148 function enhanceForm(form){ 1149 if (!form || form.getAttribute('data-nlh-age-level-ready')==='1') return; 1150 var oldLevel=form.querySelector('[name="nlh_niveau"]'); 1151 if (!oldLevel) return; 1152 1153 var level=oldLevel; 1154 if (oldLevel.tagName.toLowerCase()!=='select') { 1155 level=makeLevelSelect(oldLevel); 1156 oldLevel.parentNode.replaceChild(level,oldLevel); 1157 } 1158 1159 var oldAge=form.querySelector('[name="nlh_age_group"]'); 1160 var age=oldAge; 1161 if (oldAge && oldAge.tagName.toLowerCase()!=='select') { 1162 age=makeAgeSelect(oldAge); 1163 oldAge.parentNode.replaceChild(age,oldAge); 1164 } else if (!oldAge) { 1165 age=addAgeFieldBefore(level,form); 1166 } 1167 if (!age) return; 1168 1169 // Toujours garantir les options, même si le template avait rendu un select vide. 1170 if (!age.options || age.options.length<2) { 1171 var previous=age.value || ''; 1172 age.innerHTML=''; 1173 age.appendChild(option('', 'Choisir', 'Select')); 1174 AGE_GROUPS.forEach(function(a){ age.appendChild(option(a,a,a)); }); 1175 if (previous) age.value=previous; 1176 } 1177 1178 var birth=form.querySelector('[name="nlh_naissance"]'); 1179 if (!age.value && birth && birth.value) { 1180 var suggested=suggestAge(birth.value); 1181 if (suggested) age.value=suggested; 1182 } 1183 fillLevels(level,age,true); 1184 1185 age.addEventListener('change',function(){ 1186 level.setAttribute('data-current',''); 1187 fillLevels(level,age,false); 1188 }); 1189 if (birth) { 1190 birth.addEventListener('change',function(){ 1191 var suggested=suggestAge(birth.value); 1192 if (suggested) { 1193 age.value=suggested; 1194 level.setAttribute('data-current',''); 1195 fillLevels(level,age,false); 1196 } 1197 }); 1198 } 1199 form.setAttribute('data-nlh-age-level-ready','1'); 1200 } 1201 1202 function scan(){ 1203 document.querySelectorAll('form').forEach(function(form){ 1204 if (form.querySelector('[name="nlh_niveau"]')) enhanceForm(form); 1205 }); 1206 } 1207 1208 if (document.readyState==='loading') document.addEventListener('DOMContentLoaded',scan); 1209 else scan(); 1210 window.setTimeout(scan,150); 1211 window.setTimeout(scan,600); 1212 })(); 1213 </script>
1213 1214 </body> 1215</html> 1216 1217 1218<!-- Page cached by LiteSpeed Cache 7.9.1 on 2026-10-01 20:53:48 -->
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.