PageSourceSearch

https://nextlevel-hockey.com/contact/

html nextlevel-hockey.com collected 2026-10-02 00:53:48 UTC 86,202 bytes, 1,218 lines download raw bytes

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 &raquo; Flux" href="https://nextlevel-hockey.com/feed/" />
30<link rel="alternate" type="application/rss+xml" title="nextlevel-hockey.com &raquo; 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&#038;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&#038;format=xml&#038;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&#038;family=Barlow+Condensed:wght@300;400;500;600;700;800&#038;family=Barlow:wght@300;400;500&#038;display=swap&#038;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&#038;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&#038;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.