{"id":614,"date":"2026-09-04T19:38:25","date_gmt":"2026-09-04T19:38:25","guid":{"rendered":"http:\/\/customhockeypuck.com\/?page_id=614"},"modified":"2026-10-16T07:19:16","modified_gmt":"2026-10-16T12:19:16","slug":"estime-choisir-le-type-de-rondelles","status":"publish","type":"page","link":"https:\/\/customhockeypuck.com\/fr\/estime-choisir-le-type-de-rondelles\/","title":{"rendered":"Estim\u00e9 &#8211; choisir le type de rondelles"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"614\" class=\"elementor elementor-614\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7b54bb8 e-flex e-con-boxed e-con e-parent\" data-id=\"7b54bb8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a94a6a elementor-widget elementor-widget-woocommerce-breadcrumb\" data-id=\"3a94a6a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"woocommerce-breadcrumb.default\">\n\t\t\t\t\t<nav class=\"woocommerce-breadcrumb\" aria-label=\"Breadcrumb\">Accueil<\/nav>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7c5a750 e-flex e-con-boxed e-con e-parent\" data-id=\"7c5a750\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-18992bc elementor-widget elementor-widget-heading\" data-id=\"18992bc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Estim\u00e9 - choisir le type de rondelles<\/h1>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a613fa6 e-con-full e-flex e-con e-child\" data-id=\"a613fa6\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fa0c155 elementor-widget elementor-widget-shortcode\" data-id=\"fa0c155\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t\t<style>\n\t\t\t.chp-master{max-width:1100px;margin:0 auto}\n\t\t\t.chp-choice-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:22px}\n\t\t\t.chp-choice-card{appearance:none;border:1px solid #ddd;background:#fff;padding:0;cursor:pointer;text-align:left;overflow:hidden;border-radius:10px;transition:.2s ease;box-shadow:0 2px 10px rgba(0,0,0,.05)}\n\t\t\t.chp-choice-card:hover,.chp-choice-card:focus{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.10);outline:none}\n\t\t\t.chp-choice-card img{width:100%;aspect-ratio:1\/1;object-fit:cover;display:block}\n\t\t\t.chp-choice-card span{display:block;padding:16px;font-weight:700;font-size:18px;line-height:1.25}\n\t\t\t.chp-panel{display:none}\n\t\t\t.chp-panel.is-open{display:block}\n\t\t\t.chp-panels{margin-top:24px}\n\t\t\t.chp-back{border:0;background:none;padding:0;margin:0 0 18px;cursor:pointer;text-decoration:underline}\n\t\t\t.chp-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px;margin:22px 0}\n\t\t\t.chp-field{display:flex;flex-direction:column;gap:7px}\n\t\t\t.chp-field>span{font-weight:700}\n\t\t\t.chp-field input,.chp-field select{width:100%;min-height:46px;padding:9px 12px;border:1px solid #ccc;border-radius:5px;background:#fff}\n\t\t\t.chp-field small{opacity:.7}\n\t\t\t.chp-estimate-button{min-height:46px;padding:10px 22px;border:0;border-radius:5px;cursor:pointer}\n\t\t\t.chp-country-warning{margin:14px 0;padding:12px 14px;border:1px solid currentColor;border-radius:5px}\n\t\t\t.chp-result{margin-top:22px;padding:18px;border:1px solid #ddd;border-radius:8px}\n\t\t\t.chp-result>div{display:flex;justify-content:space-between;gap:20px;padding:7px 0}\n\t\t\t.chp-result .chp-grand-row{border-top:1px solid #ddd;margin-top:8px;padding-top:14px;font-size:1.1em}\n\t\t\t.chp-result-note{display:block;margin-top:10px;opacity:1;font-size:15px;line-height:1.5}\n\t\t\t.chp-rate-name{font-size:15px;line-height:1.5;opacity:1;margin-top:8px}\n\n\t\t\t\/* v2.5: bilingual product banner, isolated to this estimator *\/\n\t\t\t.chp-master .chp-estimator-hero { position:relative; height:clamp(200px,32vw,325px); width:100%; overflow:hidden; isolation:isolate; margin:0 0 16px; }\n\t\t\t.chp-master .chp-estimator-hero-image { display:block; width:100%; height:100%; object-fit:cover; object-position:center center; }\n\t\t\t.chp-master .chp-estimator-hero::after { content:'';position:absolute;inset:0;background:linear-gradient(90deg,rgba(8,24,65,.64) 0%,rgba(8,24,65,.08) 55%,transparent 100%);pointer-events:none; }\n\t\t\t.chp-master .chp-estimator-hero-controls { position:absolute;z-index:1;left:24px;top:19px;max-width:75%;color:#fff; }\n\t\t\t.chp-master .chp-estimator-hero-title { font-size:clamp(18px,2.4vw,28px);font-weight:700;color:#fff;line-height:1.15;margin:0 0 18px; }\n\t\t\t.chp-master .chp-hero-back { margin:0!important; padding:9px 14px!important; border:1px solid rgba(255,255,255,.75)!important;border-radius:4px!important;background:rgba(11,31,79,.25)!important;color:#fff!important;box-shadow:none!important;text-decoration:none!important;font-size:14px!important; }\n\t\t\t.chp-master .chp-hero-back:hover { background:rgba(11,31,79,.70)!important;color:#fff!important; }\n\t\t\t@media(max-width:650px){.chp-master .chp-estimator-hero{height:205px}.chp-master .chp-estimator-hero-controls{left:15px;top:15px;max-width:85%}.chp-master .chp-estimator-hero-title{font-size:19px;margin-bottom:14px}.chp-master .chp-hero-back{font-size:12px!important;padding:7px 10px!important}}\n\t\t\t.chp-master.is-selected .chp-choice-grid{display:none}\n\t\t\t.chp-field.is-hidden{display:none}\n\t\t\t@media(max-width:900px){.chp-choice-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}\n\t\t\t@media(max-width:600px){.chp-choice-grid,.chp-form-grid{grid-template-columns:1fr}}\n\t\t<\/style>\n\t\t\t\t<div class=\"chp-master\" id=\"chp-estimator-1\">\n\t\t\t<div class=\"chp-choice-grid\">\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"chp-choice-card\" data-open=\"logo\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/Rondelles-avec-votre-logo-768x506.jpg\" alt=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span>Rondelles avec votre logo<\/span>\n\t\t\t\t\t<\/button>\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"chp-choice-card\" data-open=\"photo\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product14b-F1.jpg-768x506.jpg\" alt=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span>Rondelles avec votre photo\/image et texte<\/span>\n\t\t\t\t\t<\/button>\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"chp-choice-card\" data-open=\"roster\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product161.jpg-768x506.jpg\" alt=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span>Logo d&#039;\u00e9quipe et liste de joueurs<\/span>\n\t\t\t\t\t<\/button>\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"chp-choice-card\" data-open=\"cases\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product71.jpg-768x506.jpg\" alt=\"\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span>Boitier pour rondelle de hockey<\/span>\n\t\t\t\t\t<\/button>\n\t\t\t\t\t\t\t<\/div>\n\n\t\t\t<div class=\"chp-panels\">\n\t\t\t\t\t\t<div class=\"chp-panel\" data-type=\"logo\" data-product-id=\"37\">\n\t\t\t\t\t\t<div class=\"chp-estimator-hero\">\n\t\t\t\t<img class=\"chp-estimator-hero-image\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/10\/logo-fr.png\" alt=\"Rondelles avec votre logo\" loading=\"eager\" decoding=\"async\">\n\t\t\t\t<div class=\"chp-estimator-hero-controls\">\n\t\t\t\t\t<div class=\"chp-estimator-hero-title\">Estim\u00e9 \u2013 CustomHockeyPuck.com<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"chp-back chp-hero-back\">&larr; Changer de type<\/button>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t<h3>Rondelles avec votre logo<\/h3>\n\n\t\t\t<div class=\"chp-form-grid\">\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Pays de livraison *<\/span>\n\t\t\t\t\t<select class=\"chp-country\">\n\t\t\t\t\t\t<option value=\"CA\">Canada<\/option>\n\t\t\t\t\t\t<option value=\"US\">\u00c9tats-Unis<\/option>\n\t\t\t\t\t<\/select>\n\t\t\t\t<\/label>\n\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Marque de rondelle *<\/span>\n\t\t\t\t\t\t<select class=\"chp-model\">\n\t\t\t\t\t\t\t<option value=\"viceroy\">Viceroy rondelles<\/option>\n\t\t\t\t\t\t\t<option value=\"proflex\">ProFlex rondelles fabriqu\u00e9es au Canada<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Imprimer sur un c\u00f4t\u00e9 ou deux *<\/span>\n\t\t\t\t\t\t<select class=\"chp-sides\">\n\t\t\t\t\t\t\t<option value=\"1\">Un c\u00f4t\u00e9<\/option>\n\t\t\t\t\t\t\t<option value=\"2\">Deux c\u00f4t\u00e9s<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Nombre de rondelles (10\u20131500) *<\/span>\n\t\t\t\t\t<input class=\"chp-qty\" type=\"number\" step=\"1\" required min=\"10\" max=\"1500\" value=\"10\">\n\t\t\t\t<\/label>\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field chp-case-field\">\n\t\t\t\t\t\t<span>Ajouter des bo\u00eetiers<\/span>\n\t\t\t\t\t\t<select class=\"chp-add-cases\">\n\t\t\t\t\t\t\t<option value=\"0\">Non<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">Oui \u2014 1.90 $ CAD \/ chaque<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\n\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Temps de pr\u00e9paration<\/span>\n\t\t\t\t\t\t<select class=\"chp-rush\">\n\t\t\t\t\t\t\t<option value=\"0\">Standard \u2014 7 jours ouvrables<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">URGENT \u2014 3 jours ouvrables (+15%)<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Code postal \/ ZIP *<\/span>\n\t\t\t\t\t<input class=\"chp-postcode\" type=\"text\" autocomplete=\"postal-code\" placeholder=\"H2X 1Y4 ou 10001\">\n\t\t\t\t<\/label>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"chp-country-warning\" hidden><\/div>\n\n\t\t\t<button type=\"button\" class=\"chp-estimate-button\">Calculer l\u2019estimation<\/button>\n\n\t\t\t<div class=\"chp-result\" aria-live=\"polite\">\n\t\t\t\t<div><span>Produits<\/span><strong class=\"chp-product-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div><span>Livraison<\/span><strong class=\"chp-shipping-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div class=\"chp-grand-row\"><span>Estimation totale<\/span><strong class=\"chp-grand-total\">\u2014<\/strong><\/div>\n\t\t\t\t<small class=\"chp-result-note\" data-canada-only=\"1\">Avant taxes. Les frais de livraison affich\u00e9s correspondent au taux le plus bas disponible.<\/small>\n\t\t\t\t<div class=\"chp-rate-name\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<script type=\"application\/json\" class=\"chp-panel-data\">{\"type\":\"logo\",\"fr\":true,\"product_id\":37,\"language\":\"fr\",\"min\":10,\"max\":1500,\"options\":{\"logo_viceroy\":\"10:10.15,20:6.95,40:4.60,80:3.60,100:3.24,200:2.99,400:2.75,600:2.65,1000:2.55\",\"logo_proflex\":\"10:10.55,20:7.40,40:4.95,80:3.98,100:3.74,200:3.50,400:3.25,600:3.15,1000:3.05\",\"photo_viceroy\":\"1:15.25,3:12.20,8:11.20,16:9.80,31:7.20,61:5.20,100:3.40,200:2.99,400:2.75,1000:2.51\",\"photo_proflex\":\"1:15.95,3:12.95,8:11.95,16:10.95,31:8.20,61:6.20,100:4.40,200:3.85,400:3.35,1000:3.10\",\"roster_viceroy\":\"10:12.35,16:10.85,21:9.95,29:8.95\",\"roster_proflex\":\"10:12.95,16:11.45,21:10.55,29:9.75\",\"case_price\":\"1.90\",\"second_side\":\"1.45\",\"different_photo\":\"1.45\",\"rush\":\"15\",\"logo_product_id\":37,\"photo_product_id\":89,\"roster_product_id\":141,\"cases_product_id\":172,\"logo_image_id\":4899,\"photo_image_id\":5012,\"roster_image_id\":5010,\"cases_image_id\":5013,\"logo_banner_fr_image_id\":5519,\"logo_banner_en_image_id\":5525,\"photo_banner_fr_image_id\":5521,\"photo_banner_en_image_id\":5520,\"roster_banner_fr_image_id\":5523,\"roster_banner_en_image_id\":5522,\"cases_banner_fr_image_id\":5524,\"cases_banner_en_image_id\":5524,\"clickship_match\":\"clickship\"},\"availability\":{\"CA\":{\"viceroy\":true,\"proflex\":true},\"US\":{\"viceroy\":false,\"proflex\":true}},\"cases_us\":false,\"ajax_url\":\"https:\\\/\\\/customhockeypuck.com\\\/wp-admin\\\/admin-ajax.php\",\"action\":\"chp_estimator_shipping\",\"nonce\":\"a61dfda24a\",\"i18n\":{\"not_available_us\":\"Cette option ne peut pas \\u00eatre exp\\u00e9di\\u00e9e aux \\u00c9tats-Unis.\",\"brand_unavailable\":\"Cette marque n\\u2019est pas disponible pour ce pays.\",\"enter_postcode\":\"Entrez un code postal \\\/ ZIP valide.\",\"loading\":\"Calcul de la livraison\\u2026\",\"no_rate\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"error\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"invalid_quantity\":\"Veuillez entrer une quantit\\u00e9 enti\\u00e8re entre %1$d et %2$d.\"}}<\/script>\n\t\t\t\t<div class=\"chp-panel\" data-type=\"photo\" data-product-id=\"89\">\n\t\t\t\t\t\t<div class=\"chp-estimator-hero\">\n\t\t\t\t<img class=\"chp-estimator-hero-image\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/10\/photo-fr.png\" alt=\"Rondelles avec votre photo\/image et texte\" loading=\"eager\" decoding=\"async\">\n\t\t\t\t<div class=\"chp-estimator-hero-controls\">\n\t\t\t\t\t<div class=\"chp-estimator-hero-title\">Estim\u00e9 \u2013 CustomHockeyPuck.com<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"chp-back chp-hero-back\">&larr; Changer de type<\/button>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t<h3>Rondelles avec votre photo\/image et texte<\/h3>\n\n\t\t\t<div class=\"chp-form-grid\">\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Pays de livraison *<\/span>\n\t\t\t\t\t<select class=\"chp-country\">\n\t\t\t\t\t\t<option value=\"CA\">Canada<\/option>\n\t\t\t\t\t\t<option value=\"US\">\u00c9tats-Unis<\/option>\n\t\t\t\t\t<\/select>\n\t\t\t\t<\/label>\n\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Marque de rondelle *<\/span>\n\t\t\t\t\t\t<select class=\"chp-model\">\n\t\t\t\t\t\t\t<option value=\"viceroy\">Viceroy rondelles<\/option>\n\t\t\t\t\t\t\t<option value=\"proflex\">ProFlex rondelles fabriqu\u00e9es au Canada<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Imprimer sur un c\u00f4t\u00e9 ou deux *<\/span>\n\t\t\t\t\t\t<select class=\"chp-sides\">\n\t\t\t\t\t\t\t<option value=\"1\">Un c\u00f4t\u00e9<\/option>\n\t\t\t\t\t\t\t<option value=\"2\">Deux c\u00f4t\u00e9s<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Nombre de rondelles (1\u20131500) *<\/span>\n\t\t\t\t\t<input class=\"chp-qty\" type=\"number\" step=\"1\" required min=\"1\" max=\"1500\" value=\"1\">\n\t\t\t\t<\/label>\n\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Toute la m\u00eame photo\/texte *<\/span>\n\t\t\t\t\t\t<select class=\"chp-same-art\">\n\t\t\t\t\t\t\t<option value=\"yes\">Oui<\/option>\n\t\t\t\t\t\t\t<option value=\"no\">Non<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field chp-case-field\">\n\t\t\t\t\t\t<span>Ajouter des bo\u00eetiers<\/span>\n\t\t\t\t\t\t<select class=\"chp-add-cases\">\n\t\t\t\t\t\t\t<option value=\"0\">Non<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">Oui \u2014 1.90 $ CAD \/ chaque<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\n\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Temps de pr\u00e9paration<\/span>\n\t\t\t\t\t\t<select class=\"chp-rush\">\n\t\t\t\t\t\t\t<option value=\"0\">Standard \u2014 7 jours ouvrables<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">URGENT \u2014 3 jours ouvrables (+15%)<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Code postal \/ ZIP *<\/span>\n\t\t\t\t\t<input class=\"chp-postcode\" type=\"text\" autocomplete=\"postal-code\" placeholder=\"H2X 1Y4 ou 10001\">\n\t\t\t\t<\/label>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"chp-country-warning\" hidden><\/div>\n\n\t\t\t<button type=\"button\" class=\"chp-estimate-button\">Calculer l\u2019estimation<\/button>\n\n\t\t\t<div class=\"chp-result\" aria-live=\"polite\">\n\t\t\t\t<div><span>Produits<\/span><strong class=\"chp-product-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div><span>Livraison<\/span><strong class=\"chp-shipping-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div class=\"chp-grand-row\"><span>Estimation totale<\/span><strong class=\"chp-grand-total\">\u2014<\/strong><\/div>\n\t\t\t\t<small class=\"chp-result-note\" data-canada-only=\"1\">Avant taxes. Les frais de livraison affich\u00e9s correspondent au taux le plus bas disponible.<\/small>\n\t\t\t\t<div class=\"chp-rate-name\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<script type=\"application\/json\" class=\"chp-panel-data\">{\"type\":\"photo\",\"fr\":true,\"product_id\":89,\"language\":\"fr\",\"min\":1,\"max\":1500,\"options\":{\"logo_viceroy\":\"10:10.15,20:6.95,40:4.60,80:3.60,100:3.24,200:2.99,400:2.75,600:2.65,1000:2.55\",\"logo_proflex\":\"10:10.55,20:7.40,40:4.95,80:3.98,100:3.74,200:3.50,400:3.25,600:3.15,1000:3.05\",\"photo_viceroy\":\"1:15.25,3:12.20,8:11.20,16:9.80,31:7.20,61:5.20,100:3.40,200:2.99,400:2.75,1000:2.51\",\"photo_proflex\":\"1:15.95,3:12.95,8:11.95,16:10.95,31:8.20,61:6.20,100:4.40,200:3.85,400:3.35,1000:3.10\",\"roster_viceroy\":\"10:12.35,16:10.85,21:9.95,29:8.95\",\"roster_proflex\":\"10:12.95,16:11.45,21:10.55,29:9.75\",\"case_price\":\"1.90\",\"second_side\":\"1.45\",\"different_photo\":\"1.45\",\"rush\":\"15\",\"logo_product_id\":37,\"photo_product_id\":89,\"roster_product_id\":141,\"cases_product_id\":172,\"logo_image_id\":4899,\"photo_image_id\":5012,\"roster_image_id\":5010,\"cases_image_id\":5013,\"logo_banner_fr_image_id\":5519,\"logo_banner_en_image_id\":5525,\"photo_banner_fr_image_id\":5521,\"photo_banner_en_image_id\":5520,\"roster_banner_fr_image_id\":5523,\"roster_banner_en_image_id\":5522,\"cases_banner_fr_image_id\":5524,\"cases_banner_en_image_id\":5524,\"clickship_match\":\"clickship\"},\"availability\":{\"CA\":{\"viceroy\":true,\"proflex\":true},\"US\":{\"viceroy\":false,\"proflex\":true}},\"cases_us\":false,\"ajax_url\":\"https:\\\/\\\/customhockeypuck.com\\\/wp-admin\\\/admin-ajax.php\",\"action\":\"chp_estimator_shipping\",\"nonce\":\"a61dfda24a\",\"i18n\":{\"not_available_us\":\"Cette option ne peut pas \\u00eatre exp\\u00e9di\\u00e9e aux \\u00c9tats-Unis.\",\"brand_unavailable\":\"Cette marque n\\u2019est pas disponible pour ce pays.\",\"enter_postcode\":\"Entrez un code postal \\\/ ZIP valide.\",\"loading\":\"Calcul de la livraison\\u2026\",\"no_rate\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"error\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"invalid_quantity\":\"Veuillez entrer une quantit\\u00e9 enti\\u00e8re entre %1$d et %2$d.\"}}<\/script>\n\t\t\t\t<div class=\"chp-panel\" data-type=\"roster\" data-product-id=\"141\">\n\t\t\t\t\t\t<div class=\"chp-estimator-hero\">\n\t\t\t\t<img class=\"chp-estimator-hero-image\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/10\/team-fr.png\" alt=\"Logo d\u2019\u00e9quipe et liste de joueurs\" loading=\"eager\" decoding=\"async\">\n\t\t\t\t<div class=\"chp-estimator-hero-controls\">\n\t\t\t\t\t<div class=\"chp-estimator-hero-title\">Estim\u00e9 \u2013 CustomHockeyPuck.com<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"chp-back chp-hero-back\">&larr; Changer de type<\/button>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t<h3>Logo d\u2019\u00e9quipe et liste de joueurs<\/h3>\n\n\t\t\t<div class=\"chp-form-grid\">\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Pays de livraison *<\/span>\n\t\t\t\t\t<select class=\"chp-country\">\n\t\t\t\t\t\t<option value=\"CA\">Canada<\/option>\n\t\t\t\t\t\t<option value=\"US\">\u00c9tats-Unis<\/option>\n\t\t\t\t\t<\/select>\n\t\t\t\t<\/label>\n\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Marque de rondelle *<\/span>\n\t\t\t\t\t\t<select class=\"chp-model\">\n\t\t\t\t\t\t\t<option value=\"viceroy\">Viceroy rondelles<\/option>\n\t\t\t\t\t\t\t<option value=\"proflex\">ProFlex rondelles fabriqu\u00e9es au Canada<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Nombre de rondelles (10\u201350) *<\/span>\n\t\t\t\t\t<input class=\"chp-qty\" type=\"number\" step=\"1\" required min=\"10\" max=\"50\" value=\"10\">\n\t\t\t\t<\/label>\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field chp-case-field\">\n\t\t\t\t\t\t<span>Ajouter des bo\u00eetiers<\/span>\n\t\t\t\t\t\t<select class=\"chp-add-cases\">\n\t\t\t\t\t\t\t<option value=\"0\">Non<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">Oui \u2014 1.90 $ CAD \/ chaque<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\n\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Temps de pr\u00e9paration<\/span>\n\t\t\t\t\t\t<select class=\"chp-rush\">\n\t\t\t\t\t\t\t<option value=\"0\">Standard \u2014 7 jours ouvrables<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">URGENT \u2014 3 jours ouvrables (+15%)<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Code postal \/ ZIP *<\/span>\n\t\t\t\t\t<input class=\"chp-postcode\" type=\"text\" autocomplete=\"postal-code\" placeholder=\"H2X 1Y4 ou 10001\">\n\t\t\t\t<\/label>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"chp-country-warning\" hidden><\/div>\n\n\t\t\t<button type=\"button\" class=\"chp-estimate-button\">Calculer l\u2019estimation<\/button>\n\n\t\t\t<div class=\"chp-result\" aria-live=\"polite\">\n\t\t\t\t<div><span>Produits<\/span><strong class=\"chp-product-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div><span>Livraison<\/span><strong class=\"chp-shipping-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div class=\"chp-grand-row\"><span>Estimation totale<\/span><strong class=\"chp-grand-total\">\u2014<\/strong><\/div>\n\t\t\t\t<small class=\"chp-result-note\" data-canada-only=\"1\">Avant taxes. Les frais de livraison affich\u00e9s correspondent au taux le plus bas disponible.<\/small>\n\t\t\t\t<div class=\"chp-rate-name\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<script type=\"application\/json\" class=\"chp-panel-data\">{\"type\":\"roster\",\"fr\":true,\"product_id\":141,\"language\":\"fr\",\"min\":10,\"max\":50,\"options\":{\"logo_viceroy\":\"10:10.15,20:6.95,40:4.60,80:3.60,100:3.24,200:2.99,400:2.75,600:2.65,1000:2.55\",\"logo_proflex\":\"10:10.55,20:7.40,40:4.95,80:3.98,100:3.74,200:3.50,400:3.25,600:3.15,1000:3.05\",\"photo_viceroy\":\"1:15.25,3:12.20,8:11.20,16:9.80,31:7.20,61:5.20,100:3.40,200:2.99,400:2.75,1000:2.51\",\"photo_proflex\":\"1:15.95,3:12.95,8:11.95,16:10.95,31:8.20,61:6.20,100:4.40,200:3.85,400:3.35,1000:3.10\",\"roster_viceroy\":\"10:12.35,16:10.85,21:9.95,29:8.95\",\"roster_proflex\":\"10:12.95,16:11.45,21:10.55,29:9.75\",\"case_price\":\"1.90\",\"second_side\":\"1.45\",\"different_photo\":\"1.45\",\"rush\":\"15\",\"logo_product_id\":37,\"photo_product_id\":89,\"roster_product_id\":141,\"cases_product_id\":172,\"logo_image_id\":4899,\"photo_image_id\":5012,\"roster_image_id\":5010,\"cases_image_id\":5013,\"logo_banner_fr_image_id\":5519,\"logo_banner_en_image_id\":5525,\"photo_banner_fr_image_id\":5521,\"photo_banner_en_image_id\":5520,\"roster_banner_fr_image_id\":5523,\"roster_banner_en_image_id\":5522,\"cases_banner_fr_image_id\":5524,\"cases_banner_en_image_id\":5524,\"clickship_match\":\"clickship\"},\"availability\":{\"CA\":{\"viceroy\":true,\"proflex\":true},\"US\":{\"viceroy\":false,\"proflex\":true}},\"cases_us\":false,\"ajax_url\":\"https:\\\/\\\/customhockeypuck.com\\\/wp-admin\\\/admin-ajax.php\",\"action\":\"chp_estimator_shipping\",\"nonce\":\"a61dfda24a\",\"i18n\":{\"not_available_us\":\"Cette option ne peut pas \\u00eatre exp\\u00e9di\\u00e9e aux \\u00c9tats-Unis.\",\"brand_unavailable\":\"Cette marque n\\u2019est pas disponible pour ce pays.\",\"enter_postcode\":\"Entrez un code postal \\\/ ZIP valide.\",\"loading\":\"Calcul de la livraison\\u2026\",\"no_rate\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"error\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"invalid_quantity\":\"Veuillez entrer une quantit\\u00e9 enti\\u00e8re entre %1$d et %2$d.\"}}<\/script>\n\t\t\t\t<div class=\"chp-panel\" data-type=\"cases\" data-product-id=\"172\">\n\t\t\t\t\t\t<div class=\"chp-estimator-hero\">\n\t\t\t\t<img class=\"chp-estimator-hero-image\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/10\/cases.png\" alt=\"Bo\u00eetiers pour rondelles de hockey\" loading=\"eager\" decoding=\"async\">\n\t\t\t\t<div class=\"chp-estimator-hero-controls\">\n\t\t\t\t\t<div class=\"chp-estimator-hero-title\">Estim\u00e9 \u2013 CustomHockeyPuck.com<\/div>\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"chp-back chp-hero-back\">&larr; Changer de type<\/button>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t<h3>Bo\u00eetiers pour rondelles de hockey<\/h3>\n\n\t\t\t<div class=\"chp-form-grid\">\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Pays de livraison *<\/span>\n\t\t\t\t\t<select class=\"chp-country\">\n\t\t\t\t\t\t<option value=\"CA\">Canada<\/option>\n\t\t\t\t\t\t<option value=\"US\">\u00c9tats-Unis<\/option>\n\t\t\t\t\t<\/select>\n\t\t\t\t<\/label>\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Nombre de bo\u00eetiers (10\u2013500) *<\/span>\n\t\t\t\t\t<input class=\"chp-qty\" type=\"number\" step=\"1\" required min=\"10\" max=\"500\" value=\"10\">\n\t\t\t\t<\/label>\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Code postal \/ ZIP *<\/span>\n\t\t\t\t\t<input class=\"chp-postcode\" type=\"text\" autocomplete=\"postal-code\" placeholder=\"H2X 1Y4 ou 10001\">\n\t\t\t\t<\/label>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"chp-country-warning\" hidden><\/div>\n\n\t\t\t<button type=\"button\" class=\"chp-estimate-button\">Calculer l\u2019estimation<\/button>\n\n\t\t\t<div class=\"chp-result\" aria-live=\"polite\">\n\t\t\t\t<div><span>Produits<\/span><strong class=\"chp-product-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div><span>Livraison<\/span><strong class=\"chp-shipping-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div class=\"chp-grand-row\"><span>Estimation totale<\/span><strong class=\"chp-grand-total\">\u2014<\/strong><\/div>\n\t\t\t\t<small class=\"chp-result-note\" data-canada-only=\"1\">Avant taxes. Les frais de livraison affich\u00e9s correspondent au taux le plus bas disponible.<\/small>\n\t\t\t\t<div class=\"chp-rate-name\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<script type=\"application\/json\" class=\"chp-panel-data\">{\"type\":\"cases\",\"fr\":true,\"product_id\":172,\"language\":\"fr\",\"min\":10,\"max\":500,\"options\":{\"logo_viceroy\":\"10:10.15,20:6.95,40:4.60,80:3.60,100:3.24,200:2.99,400:2.75,600:2.65,1000:2.55\",\"logo_proflex\":\"10:10.55,20:7.40,40:4.95,80:3.98,100:3.74,200:3.50,400:3.25,600:3.15,1000:3.05\",\"photo_viceroy\":\"1:15.25,3:12.20,8:11.20,16:9.80,31:7.20,61:5.20,100:3.40,200:2.99,400:2.75,1000:2.51\",\"photo_proflex\":\"1:15.95,3:12.95,8:11.95,16:10.95,31:8.20,61:6.20,100:4.40,200:3.85,400:3.35,1000:3.10\",\"roster_viceroy\":\"10:12.35,16:10.85,21:9.95,29:8.95\",\"roster_proflex\":\"10:12.95,16:11.45,21:10.55,29:9.75\",\"case_price\":\"1.90\",\"second_side\":\"1.45\",\"different_photo\":\"1.45\",\"rush\":\"15\",\"logo_product_id\":37,\"photo_product_id\":89,\"roster_product_id\":141,\"cases_product_id\":172,\"logo_image_id\":4899,\"photo_image_id\":5012,\"roster_image_id\":5010,\"cases_image_id\":5013,\"logo_banner_fr_image_id\":5519,\"logo_banner_en_image_id\":5525,\"photo_banner_fr_image_id\":5521,\"photo_banner_en_image_id\":5520,\"roster_banner_fr_image_id\":5523,\"roster_banner_en_image_id\":5522,\"cases_banner_fr_image_id\":5524,\"cases_banner_en_image_id\":5524,\"clickship_match\":\"clickship\"},\"availability\":{\"CA\":{\"viceroy\":true,\"proflex\":true},\"US\":{\"viceroy\":false,\"proflex\":true}},\"cases_us\":false,\"ajax_url\":\"https:\\\/\\\/customhockeypuck.com\\\/wp-admin\\\/admin-ajax.php\",\"action\":\"chp_estimator_shipping\",\"nonce\":\"a61dfda24a\",\"i18n\":{\"not_available_us\":\"Cette option ne peut pas \\u00eatre exp\\u00e9di\\u00e9e aux \\u00c9tats-Unis.\",\"brand_unavailable\":\"Cette marque n\\u2019est pas disponible pour ce pays.\",\"enter_postcode\":\"Entrez un code postal \\\/ ZIP valide.\",\"loading\":\"Calcul de la livraison\\u2026\",\"no_rate\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"error\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"invalid_quantity\":\"Veuillez entrer une quantit\\u00e9 enti\\u00e8re entre %1$d et %2$d.\"}}<\/script>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<script>\n\t\t(function(){\n\t\t\tfunction money(n,fr){\n\t\t\t\treturn new Intl.NumberFormat(fr?'fr-CA':'en-CA',{style:'currency',currency:'CAD'}).format(Number(n||0));\n\t\t\t}\n\t\t\tfunction grandMoney(n,fr,country){\n\t\t\t\treturn (country==='US'?'USD':'CAD')+' '+money(n,fr);\n\t\t\t}\n\t\t\tfunction refreshEstimateNotes(panel){\n\t\t\t\tvar d=panelData(panel);if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar note=panel.querySelector('.chp-result-note');\n\t\t\t\tif(note)note.hidden=false;\n\t\t\t\tvar label=panel.querySelector('.chp-rate-name');\n\t\t\t\tif(label && panel.dataset.shippingLabel){\n\t\t\t\t\tvar days=panel.querySelector('.chp-rush')?.value==='1'?3:7;\n\t\t\t\t\tvar rate=panel.dataset.shippingLabel;\n\t\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e : ':'Estimated delivery: ')+rate;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e = ':'Estimated delivery = ')+days+(d.fr?' jours ouvrables + ':' business days + ')+rate;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction tiers(s){\n\t\t\t\treturn String(s||'').split(',').map(function(x){\n\t\t\t\t\treturn x.split(':').map(Number);\n\t\t\t\t}).filter(function(x){\n\t\t\t\t\treturn x.length===2 && Number.isFinite(x[0]) && Number.isFinite(x[1]);\n\t\t\t\t}).sort(function(a,b){return a[0]-b[0]});\n\t\t\t}\n\t\t\tfunction tierPrice(list,qty){\n\t\t\t\tvar price=0;\n\t\t\t\tlist.forEach(function(row){\n\t\t\t\t\tif(qty>=row[0]) price=row[1];\n\t\t\t\t});\n\t\t\t\treturn price;\n\t\t\t}\n\t\t\tfunction panelData(panel){\n\t\t\t\tvar node=panel.nextElementSibling;\n\t\t\t\tif(!node || !node.classList.contains('chp-panel-data')) return null;\n\t\t\t\ttry{return JSON.parse(node.textContent)}catch(e){return null}\n\t\t\t}\n\t\t\tfunction setup(root){\n\t\t\t\troot.querySelectorAll('.chp-choice-card').forEach(function(card){\n\t\t\t\t\tcard.addEventListener('click',function(){\n\t\t\t\t\t\tvar type=card.dataset.open;\n\t\t\t\t\t\troot.classList.add('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){\n\t\t\t\t\t\t\tp.classList.toggle('is-open',p.dataset.type===type);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvar active=root.querySelector('.chp-panel.is-open');\n\t\t\t\t\t\tif(active){updateAvailability(active);active.scrollIntoView({behavior:'smooth',block:'start'});}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-back').forEach(function(btn){\n\t\t\t\t\tbtn.addEventListener('click',function(){\n\t\t\t\t\t\troot.classList.remove('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){p.classList.remove('is-open')});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(panel){\n\t\t\t\t\tpanel.addEventListener('input',function(){updateAvailability(panel);calculateProduct(panel,false);refreshEstimateNotes(panel)});\n\t\t\t\t\tpanel.addEventListener('change',function(e){updateAvailability(panel);calculateProduct(panel,false);if(e.target.matches('.chp-rush') && panel.dataset.shippingTotal!==undefined && panel.dataset.shippingTotal!==''){\n\t\t\t\t\t\tvar productTotal=Number(panel.dataset.productTotal||0);\n\t\t\t\t\t\tvar shipping=Number(panel.dataset.shippingTotal||0);\n\t\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,panelData(panel).fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\t}else if(e.target.matches('.chp-country,.chp-model,.chp-qty,.chp-sides,.chp-same-art,.chp-add-cases,.chp-postcode')){\n\t\t\t\t\t\tpanel.dataset.shippingLabel='';panel.dataset.shippingTotal='';panel.querySelector('.chp-shipping-total').textContent='\u2014';panel.querySelector('.chp-grand-total').textContent='\u2014';panel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\t}refreshEstimateNotes(panel)});\n\t\t\t\t\tvar button=panel.querySelector('.chp-estimate-button');\n\t\t\t\t\tif(button) button.addEventListener('click',function(){estimate(panel)});\n\t\t\t\t\tupdateAvailability(panel);\n\t\t\t\t\tcalculateProduct(panel,false);\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction updateAvailability(panel){\n\t\t\t\tvar d=panelData(panel); if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\t\t\t\tvar model=panel.querySelector('.chp-model');\n\t\t\t\tvar casesField=panel.querySelector('.chp-case-field');\n\t\t\t\tvar addCases=panel.querySelector('.chp-add-cases');\n\t\t\t\tvar blocked=false;\n\t\t\t\tvar msg='';\n\n\t\t\t\tif(d.type==='cases' && country==='US'){\n\t\t\t\t\tblocked=true;\n\t\t\t\t\tmsg=d.i18n.not_available_us;\n\t\t\t\t}\n\n\t\t\t\tif(model){\n\t\t\t\t\t\/\/ Keep an immutable list and rebuild the select so blocked brands\n\t\t\t\t\t\/\/ cannot remain selected or appear in the native dropdown.\n\t\t\t\t\tif(!model._allCountryOptions){\n\t\t\t\t\t\tmodel._allCountryOptions=Array.from(model.options).map(function(opt){\n\t\t\t\t\t\t\treturn {value:opt.value,text:opt.textContent};\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tvar previous=model.value;\n\t\t\t\t\tvar available=model._allCountryOptions.filter(function(opt){\n\t\t\t\t\t\treturn !!(d.availability[country] && d.availability[country][opt.value]);\n\t\t\t\t\t});\n\t\t\t\t\tvar values=available.map(function(opt){return opt.value}).join('|');\n\t\t\t\t\tif(model.dataset.availableBrands!==values){\n\t\t\t\t\t\tmodel.replaceChildren();\n\t\t\t\t\t\tavailable.forEach(function(opt){model.add(new Option(opt.text,opt.value));});\n\t\t\t\t\t\tmodel.dataset.availableBrands=values;\n\t\t\t\t\t}\n\t\t\t\t\tif(!available.length){\n\t\t\t\t\t\tblocked=true;\n\t\t\t\t\t\tmsg=d.i18n.brand_unavailable;\n\t\t\t\t\t}else if(available.some(function(opt){return opt.value===previous;})){\n\t\t\t\t\t\tmodel.value=previous;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tmodel.value=available[0].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(casesField){\n\t\t\t\t\tvar us=country==='US';\n\t\t\t\t\tcasesField.classList.toggle('is-hidden',us);\n\t\t\t\t\tif(us && addCases) addCases.value='0';\n\t\t\t\t}\n\n\t\t\t\twarning.hidden=!blocked;\n\t\t\t\twarning.textContent=blocked?msg:'';\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tif(btn) btn.disabled=blocked;\n\t\t\t\tpanel.dataset.blocked=blocked?'1':'0';\n\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t}\n\t\t\tfunction calculateProduct(panel,resetShipping){\n\t\t\t\tvar d=panelData(panel); if(!d)return 0;\n\t\t\t\tvar q=Math.max(0,Number(panel.querySelector('.chp-qty')?.value)||0);\n\t\t\t\tvar total=0,unit=0;\n\n\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\tunit=Number(d.options.case_price||0);\n\t\t\t\t}else{\n\t\t\t\t\tvar brand=panel.querySelector('.chp-model')?.value||'viceroy';\n\t\t\t\t\tunit=tierPrice(tiers(d.options[d.type+'_'+brand]),q);\n\t\t\t\t\ttotal=q*unit;\n\n\t\t\t\t\tif(['logo','photo'].includes(d.type) && panel.querySelector('.chp-sides')?.value==='2'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.second_side||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(d.type==='photo' && panel.querySelector('.chp-same-art')?.value==='no'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.different_photo||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-add-cases')?.value==='1'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.case_price||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-rush')?.value==='1'){\n\t\t\t\t\t\ttotal*=1+(Number(d.options.rush||0)\/100);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(d.type==='cases') total=q*unit;\n\n\t\t\t\tpanel.dataset.productTotal=String(total);\n\t\t\t\tpanel.querySelector('.chp-product-total').textContent=money(total,d.fr);\n\n\t\t\t\tif(resetShipping){\n\t\t\t\t\tpanel.dataset.shippingTotal='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t}\n\t\t\tfunction estimate(panel){\n\t\t\t\tvar d=panelData(panel); if(!d || panel.dataset.blocked==='1')return;\n\t\t\t\tvar quantityField=panel.querySelector('.chp-qty');\n\t\t\t\tvar rawQuantity=quantityField ? quantityField.value.trim() : '';\n\t\t\t\tvar quantity=Number(rawQuantity);\n\t\t\t\tvar min=Number(d.min),max=Number(d.max);\n\t\t\t\tif(!rawQuantity || !Number.isFinite(quantity) || !Number.isInteger(quantity) || quantity<min || quantity>max){\n\t\t\t\t\tvar quantityWarning=panel.querySelector('.chp-country-warning');\n\t\t\t\t\tif(quantityWarning){quantityWarning.textContent=d.i18n.invalid_quantity.replace('%1$d',min).replace('%2$d',max);quantityWarning.hidden=false;}\n\t\t\t\t\tpanel.dataset.shippingTotal='';panel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tif(quantityField){quantityField.focus();quantityField.scrollIntoView({behavior:'smooth',block:'center'});}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar postcodeField=panel.querySelector('.chp-postcode');\n\t\t\t\tvar postcode=(postcodeField?.value||'').trim();\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\n\t\t\t\tif(!postcode){\n\t\t\t\t\tif(warning){\n\t\t\t\t\t\twarning.textContent=d.i18n.enter_postcode;\n\t\t\t\t\t\twarning.hidden=false;\n\t\t\t\t\t}\n\t\t\t\t\tif(postcodeField){\n\t\t\t\t\t\tpostcodeField.focus();\n\t\t\t\t\t\tpostcodeField.scrollIntoView({behavior:'smooth',block:'center'});\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\/* Clear a previous postcode warning before calculating. *\/\n\t\t\t\tif(warning && panel.dataset.blocked!=='1'){\n\t\t\t\t\twarning.textContent='';\n\t\t\t\t\twarning.hidden=true;\n\t\t\t\t}\n\n\t\t\t\tvar productTotal=calculateProduct(panel,false);\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tvar original=btn.textContent;\n\t\t\t\tbtn.disabled=true;\n\t\t\t\tbtn.textContent=d.i18n.loading;\n\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\n\t\t\t\tvar body=new URLSearchParams();\n\t\t\t\tbody.set('action',d.action);\n\t\t\t\tbody.set('nonce',d.nonce);\n\t\t\t\tbody.set('type',d.type);\n\t\t\t\tbody.set('product_id',d.product_id);\n\t\t\t\tbody.set('language',d.language||'');\n\t\t\t\tbody.set('quantity',panel.querySelector('.chp-qty')?.value||'1');\n\t\t\t\tbody.set('country',panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\tbody.set('postcode',postcode);\n\t\t\t\tbody.set('brand',panel.querySelector('.chp-model')?.value||'');\n\n\t\t\t\tfetch(d.ajax_url,{\n\t\t\t\t\tmethod:'POST',\n\t\t\t\t\theaders:{'Content-Type':'application\/x-www-form-urlencoded; charset=UTF-8'},\n\t\t\t\t\tbody:body.toString(),\n\t\t\t\t\tcredentials:'same-origin'\n\t\t\t\t})\n\t\t\t\t.then(function(r){return r.json()})\n\t\t\t\t.then(function(resp){\n\t\t\t\t\tif(!resp || !resp.success) throw new Error(resp?.data?.message||d.i18n.no_rate);\n\t\t\t\t\tvar shipping=Number(resp.data.cost||0);\n\t\t\t\t\tpanel.dataset.shippingTotal=String(shipping);\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent=money(shipping,d.fr);\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,d.fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\tpanel.dataset.shippingLabel=resp.data.label||'';\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t})\n\t\t\t\t.catch(function(err){\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent=err.message||d.i18n.error;\n\t\t\t\t})\n\t\t\t\t.finally(function(){\n\t\t\t\t\tbtn.disabled=false;\n\t\t\t\t\tbtn.textContent=original;\n\t\t\t\t});\n\t\t\t}\n\t\t\tdocument.querySelectorAll('.chp-master').forEach(setup);\n\t\t})();\n\t\t<\/script>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2b1fb77 e-con-full e-grid elementor-hidden-widescreen elementor-hidden-desktop elementor-hidden-laptop elementor-hidden-tablet_extra elementor-hidden-tablet elementor-hidden-mobile_extra elementor-hidden-mobile e-con e-child\" data-id=\"2b1fb77\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-e8b49aa e-con-full e-flex e-con e-child\" data-id=\"e8b49aa\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3540773 image-estimate elementor-widget elementor-widget-image\" data-id=\"3540773\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"527\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/Rondelles-avec-votre-logo.jpg-1024x675.jpg\" class=\"attachment-large size-large wp-image-5011\" alt=\"Rondelle promotionnelle personnalis\u00e9e Gretzky Hockey School.\" srcset=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/Rondelles-avec-votre-logo.jpg-1024x675.jpg 1024w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/Rondelles-avec-votre-logo.jpg-300x198.jpg 300w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/Rondelles-avec-votre-logo.jpg-768x506.jpg 768w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/Rondelles-avec-votre-logo.jpg-1536x1013.jpg 1536w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/Rondelles-avec-votre-logo.jpg-2048x1350.jpg 2048w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/Rondelles-avec-votre-logo.jpg-600x396.jpg 600w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-adf3b2f r_config elementor-widget elementor-widget-shortcode\" data-id=\"adf3b2f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"chp-master chp-single\">\t\t<div class=\"chp-panel is-open\" data-type=\"logo\" data-product-id=\"37\">\n\t\t\t\t\t\t<div class=\"chp-estimator-hero\">\n\t\t\t\t<img class=\"chp-estimator-hero-image\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/10\/logo-fr.png\" alt=\"Rondelles avec votre logo\" loading=\"eager\" decoding=\"async\">\n\t\t\t\t<div class=\"chp-estimator-hero-controls\">\n\t\t\t\t\t<div class=\"chp-estimator-hero-title\">Estim\u00e9 \u2013 CustomHockeyPuck.com<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t<h3>Rondelles avec votre logo<\/h3>\n\n\t\t\t<div class=\"chp-form-grid\">\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Pays de livraison *<\/span>\n\t\t\t\t\t<select class=\"chp-country\">\n\t\t\t\t\t\t<option value=\"CA\">Canada<\/option>\n\t\t\t\t\t\t<option value=\"US\">\u00c9tats-Unis<\/option>\n\t\t\t\t\t<\/select>\n\t\t\t\t<\/label>\n\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Marque de rondelle *<\/span>\n\t\t\t\t\t\t<select class=\"chp-model\">\n\t\t\t\t\t\t\t<option value=\"viceroy\">Viceroy rondelles<\/option>\n\t\t\t\t\t\t\t<option value=\"proflex\">ProFlex rondelles fabriqu\u00e9es au Canada<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Imprimer sur un c\u00f4t\u00e9 ou deux *<\/span>\n\t\t\t\t\t\t<select class=\"chp-sides\">\n\t\t\t\t\t\t\t<option value=\"1\">Un c\u00f4t\u00e9<\/option>\n\t\t\t\t\t\t\t<option value=\"2\">Deux c\u00f4t\u00e9s<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Nombre de rondelles (10\u20131500) *<\/span>\n\t\t\t\t\t<input class=\"chp-qty\" type=\"number\" step=\"1\" required min=\"10\" max=\"1500\" value=\"10\">\n\t\t\t\t<\/label>\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field chp-case-field\">\n\t\t\t\t\t\t<span>Ajouter des bo\u00eetiers<\/span>\n\t\t\t\t\t\t<select class=\"chp-add-cases\">\n\t\t\t\t\t\t\t<option value=\"0\">Non<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">Oui \u2014 1.90 $ CAD \/ chaque<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\n\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Temps de pr\u00e9paration<\/span>\n\t\t\t\t\t\t<select class=\"chp-rush\">\n\t\t\t\t\t\t\t<option value=\"0\">Standard \u2014 7 jours ouvrables<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">URGENT \u2014 3 jours ouvrables (+15%)<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Code postal \/ ZIP *<\/span>\n\t\t\t\t\t<input class=\"chp-postcode\" type=\"text\" autocomplete=\"postal-code\" placeholder=\"H2X 1Y4 ou 10001\">\n\t\t\t\t<\/label>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"chp-country-warning\" hidden><\/div>\n\n\t\t\t<button type=\"button\" class=\"chp-estimate-button\">Calculer l\u2019estimation<\/button>\n\n\t\t\t<div class=\"chp-result\" aria-live=\"polite\">\n\t\t\t\t<div><span>Produits<\/span><strong class=\"chp-product-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div><span>Livraison<\/span><strong class=\"chp-shipping-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div class=\"chp-grand-row\"><span>Estimation totale<\/span><strong class=\"chp-grand-total\">\u2014<\/strong><\/div>\n\t\t\t\t<small class=\"chp-result-note\" data-canada-only=\"1\">Avant taxes. Les frais de livraison affich\u00e9s correspondent au taux le plus bas disponible.<\/small>\n\t\t\t\t<div class=\"chp-rate-name\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<script type=\"application\/json\" class=\"chp-panel-data\">{\"type\":\"logo\",\"fr\":true,\"product_id\":37,\"language\":\"fr\",\"min\":10,\"max\":1500,\"options\":{\"logo_viceroy\":\"10:10.15,20:6.95,40:4.60,80:3.60,100:3.24,200:2.99,400:2.75,600:2.65,1000:2.55\",\"logo_proflex\":\"10:10.55,20:7.40,40:4.95,80:3.98,100:3.74,200:3.50,400:3.25,600:3.15,1000:3.05\",\"photo_viceroy\":\"1:15.25,3:12.20,8:11.20,16:9.80,31:7.20,61:5.20,100:3.40,200:2.99,400:2.75,1000:2.51\",\"photo_proflex\":\"1:15.95,3:12.95,8:11.95,16:10.95,31:8.20,61:6.20,100:4.40,200:3.85,400:3.35,1000:3.10\",\"roster_viceroy\":\"10:12.35,16:10.85,21:9.95,29:8.95\",\"roster_proflex\":\"10:12.95,16:11.45,21:10.55,29:9.75\",\"case_price\":\"1.90\",\"second_side\":\"1.45\",\"different_photo\":\"1.45\",\"rush\":\"15\",\"logo_product_id\":37,\"photo_product_id\":89,\"roster_product_id\":141,\"cases_product_id\":172,\"logo_image_id\":4899,\"photo_image_id\":5012,\"roster_image_id\":5010,\"cases_image_id\":5013,\"logo_banner_fr_image_id\":5519,\"logo_banner_en_image_id\":5525,\"photo_banner_fr_image_id\":5521,\"photo_banner_en_image_id\":5520,\"roster_banner_fr_image_id\":5523,\"roster_banner_en_image_id\":5522,\"cases_banner_fr_image_id\":5524,\"cases_banner_en_image_id\":5524,\"clickship_match\":\"clickship\"},\"availability\":{\"CA\":{\"viceroy\":true,\"proflex\":true},\"US\":{\"viceroy\":false,\"proflex\":true}},\"cases_us\":false,\"ajax_url\":\"https:\\\/\\\/customhockeypuck.com\\\/wp-admin\\\/admin-ajax.php\",\"action\":\"chp_estimator_shipping\",\"nonce\":\"a61dfda24a\",\"i18n\":{\"not_available_us\":\"Cette option ne peut pas \\u00eatre exp\\u00e9di\\u00e9e aux \\u00c9tats-Unis.\",\"brand_unavailable\":\"Cette marque n\\u2019est pas disponible pour ce pays.\",\"enter_postcode\":\"Entrez un code postal \\\/ ZIP valide.\",\"loading\":\"Calcul de la livraison\\u2026\",\"no_rate\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"error\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"invalid_quantity\":\"Veuillez entrer une quantit\\u00e9 enti\\u00e8re entre %1$d et %2$d.\"}}<\/script>\n\t\t<\/div>\t\t<script>\n\t\t(function(){\n\t\t\tfunction money(n,fr){\n\t\t\t\treturn new Intl.NumberFormat(fr?'fr-CA':'en-CA',{style:'currency',currency:'CAD'}).format(Number(n||0));\n\t\t\t}\n\t\t\tfunction grandMoney(n,fr,country){\n\t\t\t\treturn (country==='US'?'USD':'CAD')+' '+money(n,fr);\n\t\t\t}\n\t\t\tfunction refreshEstimateNotes(panel){\n\t\t\t\tvar d=panelData(panel);if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar note=panel.querySelector('.chp-result-note');\n\t\t\t\tif(note)note.hidden=false;\n\t\t\t\tvar label=panel.querySelector('.chp-rate-name');\n\t\t\t\tif(label && panel.dataset.shippingLabel){\n\t\t\t\t\tvar days=panel.querySelector('.chp-rush')?.value==='1'?3:7;\n\t\t\t\t\tvar rate=panel.dataset.shippingLabel;\n\t\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e : ':'Estimated delivery: ')+rate;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e = ':'Estimated delivery = ')+days+(d.fr?' jours ouvrables + ':' business days + ')+rate;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction tiers(s){\n\t\t\t\treturn String(s||'').split(',').map(function(x){\n\t\t\t\t\treturn x.split(':').map(Number);\n\t\t\t\t}).filter(function(x){\n\t\t\t\t\treturn x.length===2 && Number.isFinite(x[0]) && Number.isFinite(x[1]);\n\t\t\t\t}).sort(function(a,b){return a[0]-b[0]});\n\t\t\t}\n\t\t\tfunction tierPrice(list,qty){\n\t\t\t\tvar price=0;\n\t\t\t\tlist.forEach(function(row){\n\t\t\t\t\tif(qty>=row[0]) price=row[1];\n\t\t\t\t});\n\t\t\t\treturn price;\n\t\t\t}\n\t\t\tfunction panelData(panel){\n\t\t\t\tvar node=panel.nextElementSibling;\n\t\t\t\tif(!node || !node.classList.contains('chp-panel-data')) return null;\n\t\t\t\ttry{return JSON.parse(node.textContent)}catch(e){return null}\n\t\t\t}\n\t\t\tfunction setup(root){\n\t\t\t\troot.querySelectorAll('.chp-choice-card').forEach(function(card){\n\t\t\t\t\tcard.addEventListener('click',function(){\n\t\t\t\t\t\tvar type=card.dataset.open;\n\t\t\t\t\t\troot.classList.add('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){\n\t\t\t\t\t\t\tp.classList.toggle('is-open',p.dataset.type===type);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvar active=root.querySelector('.chp-panel.is-open');\n\t\t\t\t\t\tif(active){updateAvailability(active);active.scrollIntoView({behavior:'smooth',block:'start'});}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-back').forEach(function(btn){\n\t\t\t\t\tbtn.addEventListener('click',function(){\n\t\t\t\t\t\troot.classList.remove('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){p.classList.remove('is-open')});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(panel){\n\t\t\t\t\tpanel.addEventListener('input',function(){updateAvailability(panel);calculateProduct(panel,false);refreshEstimateNotes(panel)});\n\t\t\t\t\tpanel.addEventListener('change',function(e){updateAvailability(panel);calculateProduct(panel,false);if(e.target.matches('.chp-rush') && panel.dataset.shippingTotal!==undefined && panel.dataset.shippingTotal!==''){\n\t\t\t\t\t\tvar productTotal=Number(panel.dataset.productTotal||0);\n\t\t\t\t\t\tvar shipping=Number(panel.dataset.shippingTotal||0);\n\t\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,panelData(panel).fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\t}else if(e.target.matches('.chp-country,.chp-model,.chp-qty,.chp-sides,.chp-same-art,.chp-add-cases,.chp-postcode')){\n\t\t\t\t\t\tpanel.dataset.shippingLabel='';panel.dataset.shippingTotal='';panel.querySelector('.chp-shipping-total').textContent='\u2014';panel.querySelector('.chp-grand-total').textContent='\u2014';panel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\t}refreshEstimateNotes(panel)});\n\t\t\t\t\tvar button=panel.querySelector('.chp-estimate-button');\n\t\t\t\t\tif(button) button.addEventListener('click',function(){estimate(panel)});\n\t\t\t\t\tupdateAvailability(panel);\n\t\t\t\t\tcalculateProduct(panel,false);\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction updateAvailability(panel){\n\t\t\t\tvar d=panelData(panel); if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\t\t\t\tvar model=panel.querySelector('.chp-model');\n\t\t\t\tvar casesField=panel.querySelector('.chp-case-field');\n\t\t\t\tvar addCases=panel.querySelector('.chp-add-cases');\n\t\t\t\tvar blocked=false;\n\t\t\t\tvar msg='';\n\n\t\t\t\tif(d.type==='cases' && country==='US'){\n\t\t\t\t\tblocked=true;\n\t\t\t\t\tmsg=d.i18n.not_available_us;\n\t\t\t\t}\n\n\t\t\t\tif(model){\n\t\t\t\t\t\/\/ Keep an immutable list and rebuild the select so blocked brands\n\t\t\t\t\t\/\/ cannot remain selected or appear in the native dropdown.\n\t\t\t\t\tif(!model._allCountryOptions){\n\t\t\t\t\t\tmodel._allCountryOptions=Array.from(model.options).map(function(opt){\n\t\t\t\t\t\t\treturn {value:opt.value,text:opt.textContent};\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tvar previous=model.value;\n\t\t\t\t\tvar available=model._allCountryOptions.filter(function(opt){\n\t\t\t\t\t\treturn !!(d.availability[country] && d.availability[country][opt.value]);\n\t\t\t\t\t});\n\t\t\t\t\tvar values=available.map(function(opt){return opt.value}).join('|');\n\t\t\t\t\tif(model.dataset.availableBrands!==values){\n\t\t\t\t\t\tmodel.replaceChildren();\n\t\t\t\t\t\tavailable.forEach(function(opt){model.add(new Option(opt.text,opt.value));});\n\t\t\t\t\t\tmodel.dataset.availableBrands=values;\n\t\t\t\t\t}\n\t\t\t\t\tif(!available.length){\n\t\t\t\t\t\tblocked=true;\n\t\t\t\t\t\tmsg=d.i18n.brand_unavailable;\n\t\t\t\t\t}else if(available.some(function(opt){return opt.value===previous;})){\n\t\t\t\t\t\tmodel.value=previous;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tmodel.value=available[0].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(casesField){\n\t\t\t\t\tvar us=country==='US';\n\t\t\t\t\tcasesField.classList.toggle('is-hidden',us);\n\t\t\t\t\tif(us && addCases) addCases.value='0';\n\t\t\t\t}\n\n\t\t\t\twarning.hidden=!blocked;\n\t\t\t\twarning.textContent=blocked?msg:'';\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tif(btn) btn.disabled=blocked;\n\t\t\t\tpanel.dataset.blocked=blocked?'1':'0';\n\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t}\n\t\t\tfunction calculateProduct(panel,resetShipping){\n\t\t\t\tvar d=panelData(panel); if(!d)return 0;\n\t\t\t\tvar q=Math.max(0,Number(panel.querySelector('.chp-qty')?.value)||0);\n\t\t\t\tvar total=0,unit=0;\n\n\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\tunit=Number(d.options.case_price||0);\n\t\t\t\t}else{\n\t\t\t\t\tvar brand=panel.querySelector('.chp-model')?.value||'viceroy';\n\t\t\t\t\tunit=tierPrice(tiers(d.options[d.type+'_'+brand]),q);\n\t\t\t\t\ttotal=q*unit;\n\n\t\t\t\t\tif(['logo','photo'].includes(d.type) && panel.querySelector('.chp-sides')?.value==='2'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.second_side||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(d.type==='photo' && panel.querySelector('.chp-same-art')?.value==='no'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.different_photo||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-add-cases')?.value==='1'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.case_price||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-rush')?.value==='1'){\n\t\t\t\t\t\ttotal*=1+(Number(d.options.rush||0)\/100);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(d.type==='cases') total=q*unit;\n\n\t\t\t\tpanel.dataset.productTotal=String(total);\n\t\t\t\tpanel.querySelector('.chp-product-total').textContent=money(total,d.fr);\n\n\t\t\t\tif(resetShipping){\n\t\t\t\t\tpanel.dataset.shippingTotal='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t}\n\t\t\tfunction estimate(panel){\n\t\t\t\tvar d=panelData(panel); if(!d || panel.dataset.blocked==='1')return;\n\t\t\t\tvar quantityField=panel.querySelector('.chp-qty');\n\t\t\t\tvar rawQuantity=quantityField ? quantityField.value.trim() : '';\n\t\t\t\tvar quantity=Number(rawQuantity);\n\t\t\t\tvar min=Number(d.min),max=Number(d.max);\n\t\t\t\tif(!rawQuantity || !Number.isFinite(quantity) || !Number.isInteger(quantity) || quantity<min || quantity>max){\n\t\t\t\t\tvar quantityWarning=panel.querySelector('.chp-country-warning');\n\t\t\t\t\tif(quantityWarning){quantityWarning.textContent=d.i18n.invalid_quantity.replace('%1$d',min).replace('%2$d',max);quantityWarning.hidden=false;}\n\t\t\t\t\tpanel.dataset.shippingTotal='';panel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tif(quantityField){quantityField.focus();quantityField.scrollIntoView({behavior:'smooth',block:'center'});}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar postcodeField=panel.querySelector('.chp-postcode');\n\t\t\t\tvar postcode=(postcodeField?.value||'').trim();\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\n\t\t\t\tif(!postcode){\n\t\t\t\t\tif(warning){\n\t\t\t\t\t\twarning.textContent=d.i18n.enter_postcode;\n\t\t\t\t\t\twarning.hidden=false;\n\t\t\t\t\t}\n\t\t\t\t\tif(postcodeField){\n\t\t\t\t\t\tpostcodeField.focus();\n\t\t\t\t\t\tpostcodeField.scrollIntoView({behavior:'smooth',block:'center'});\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\/* Clear a previous postcode warning before calculating. *\/\n\t\t\t\tif(warning && panel.dataset.blocked!=='1'){\n\t\t\t\t\twarning.textContent='';\n\t\t\t\t\twarning.hidden=true;\n\t\t\t\t}\n\n\t\t\t\tvar productTotal=calculateProduct(panel,false);\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tvar original=btn.textContent;\n\t\t\t\tbtn.disabled=true;\n\t\t\t\tbtn.textContent=d.i18n.loading;\n\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\n\t\t\t\tvar body=new URLSearchParams();\n\t\t\t\tbody.set('action',d.action);\n\t\t\t\tbody.set('nonce',d.nonce);\n\t\t\t\tbody.set('type',d.type);\n\t\t\t\tbody.set('product_id',d.product_id);\n\t\t\t\tbody.set('language',d.language||'');\n\t\t\t\tbody.set('quantity',panel.querySelector('.chp-qty')?.value||'1');\n\t\t\t\tbody.set('country',panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\tbody.set('postcode',postcode);\n\t\t\t\tbody.set('brand',panel.querySelector('.chp-model')?.value||'');\n\n\t\t\t\tfetch(d.ajax_url,{\n\t\t\t\t\tmethod:'POST',\n\t\t\t\t\theaders:{'Content-Type':'application\/x-www-form-urlencoded; charset=UTF-8'},\n\t\t\t\t\tbody:body.toString(),\n\t\t\t\t\tcredentials:'same-origin'\n\t\t\t\t})\n\t\t\t\t.then(function(r){return r.json()})\n\t\t\t\t.then(function(resp){\n\t\t\t\t\tif(!resp || !resp.success) throw new Error(resp?.data?.message||d.i18n.no_rate);\n\t\t\t\t\tvar shipping=Number(resp.data.cost||0);\n\t\t\t\t\tpanel.dataset.shippingTotal=String(shipping);\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent=money(shipping,d.fr);\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,d.fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\tpanel.dataset.shippingLabel=resp.data.label||'';\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t})\n\t\t\t\t.catch(function(err){\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent=err.message||d.i18n.error;\n\t\t\t\t})\n\t\t\t\t.finally(function(){\n\t\t\t\t\tbtn.disabled=false;\n\t\t\t\t\tbtn.textContent=original;\n\t\t\t\t});\n\t\t\t}\n\t\t\tdocument.querySelectorAll('.chp-master').forEach(setup);\n\t\t})();\n\t\t<\/script>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-adc2b4e e-con-full e-flex e-con e-child\" data-id=\"adc2b4e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0dcb1e1 image-estimate elementor-widget elementor-widget-image\" data-id=\"0dcb1e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"527\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product14b-F1.jpg-1024x675.jpg\" class=\"attachment-large size-large wp-image-5012\" alt=\"Rondelles promotionnelles personnalis\u00e9es avec logo d&apos;entreprise et \u00e9quipe sportive.\" srcset=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product14b-F1.jpg-1024x675.jpg 1024w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product14b-F1.jpg-300x198.jpg 300w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product14b-F1.jpg-768x506.jpg 768w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product14b-F1.jpg-1536x1013.jpg 1536w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product14b-F1.jpg-2048x1350.jpg 2048w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product14b-F1.jpg-600x396.jpg 600w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d74c36b r_config elementor-widget elementor-widget-shortcode\" data-id=\"d74c36b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"chp-master chp-single\">\t\t<div class=\"chp-panel is-open\" data-type=\"photo\" data-product-id=\"89\">\n\t\t\t\t\t\t<div class=\"chp-estimator-hero\">\n\t\t\t\t<img class=\"chp-estimator-hero-image\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/10\/photo-fr.png\" alt=\"Rondelles avec votre photo\/image et texte\" loading=\"eager\" decoding=\"async\">\n\t\t\t\t<div class=\"chp-estimator-hero-controls\">\n\t\t\t\t\t<div class=\"chp-estimator-hero-title\">Estim\u00e9 \u2013 CustomHockeyPuck.com<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t<h3>Rondelles avec votre photo\/image et texte<\/h3>\n\n\t\t\t<div class=\"chp-form-grid\">\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Pays de livraison *<\/span>\n\t\t\t\t\t<select class=\"chp-country\">\n\t\t\t\t\t\t<option value=\"CA\">Canada<\/option>\n\t\t\t\t\t\t<option value=\"US\">\u00c9tats-Unis<\/option>\n\t\t\t\t\t<\/select>\n\t\t\t\t<\/label>\n\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Marque de rondelle *<\/span>\n\t\t\t\t\t\t<select class=\"chp-model\">\n\t\t\t\t\t\t\t<option value=\"viceroy\">Viceroy rondelles<\/option>\n\t\t\t\t\t\t\t<option value=\"proflex\">ProFlex rondelles fabriqu\u00e9es au Canada<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Imprimer sur un c\u00f4t\u00e9 ou deux *<\/span>\n\t\t\t\t\t\t<select class=\"chp-sides\">\n\t\t\t\t\t\t\t<option value=\"1\">Un c\u00f4t\u00e9<\/option>\n\t\t\t\t\t\t\t<option value=\"2\">Deux c\u00f4t\u00e9s<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Nombre de rondelles (1\u20131500) *<\/span>\n\t\t\t\t\t<input class=\"chp-qty\" type=\"number\" step=\"1\" required min=\"1\" max=\"1500\" value=\"1\">\n\t\t\t\t<\/label>\n\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Toute la m\u00eame photo\/texte *<\/span>\n\t\t\t\t\t\t<select class=\"chp-same-art\">\n\t\t\t\t\t\t\t<option value=\"yes\">Oui<\/option>\n\t\t\t\t\t\t\t<option value=\"no\">Non<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field chp-case-field\">\n\t\t\t\t\t\t<span>Ajouter des bo\u00eetiers<\/span>\n\t\t\t\t\t\t<select class=\"chp-add-cases\">\n\t\t\t\t\t\t\t<option value=\"0\">Non<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">Oui \u2014 1.90 $ CAD \/ chaque<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\n\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Temps de pr\u00e9paration<\/span>\n\t\t\t\t\t\t<select class=\"chp-rush\">\n\t\t\t\t\t\t\t<option value=\"0\">Standard \u2014 7 jours ouvrables<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">URGENT \u2014 3 jours ouvrables (+15%)<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Code postal \/ ZIP *<\/span>\n\t\t\t\t\t<input class=\"chp-postcode\" type=\"text\" autocomplete=\"postal-code\" placeholder=\"H2X 1Y4 ou 10001\">\n\t\t\t\t<\/label>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"chp-country-warning\" hidden><\/div>\n\n\t\t\t<button type=\"button\" class=\"chp-estimate-button\">Calculer l\u2019estimation<\/button>\n\n\t\t\t<div class=\"chp-result\" aria-live=\"polite\">\n\t\t\t\t<div><span>Produits<\/span><strong class=\"chp-product-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div><span>Livraison<\/span><strong class=\"chp-shipping-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div class=\"chp-grand-row\"><span>Estimation totale<\/span><strong class=\"chp-grand-total\">\u2014<\/strong><\/div>\n\t\t\t\t<small class=\"chp-result-note\" data-canada-only=\"1\">Avant taxes. Les frais de livraison affich\u00e9s correspondent au taux le plus bas disponible.<\/small>\n\t\t\t\t<div class=\"chp-rate-name\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<script type=\"application\/json\" class=\"chp-panel-data\">{\"type\":\"photo\",\"fr\":true,\"product_id\":89,\"language\":\"fr\",\"min\":1,\"max\":1500,\"options\":{\"logo_viceroy\":\"10:10.15,20:6.95,40:4.60,80:3.60,100:3.24,200:2.99,400:2.75,600:2.65,1000:2.55\",\"logo_proflex\":\"10:10.55,20:7.40,40:4.95,80:3.98,100:3.74,200:3.50,400:3.25,600:3.15,1000:3.05\",\"photo_viceroy\":\"1:15.25,3:12.20,8:11.20,16:9.80,31:7.20,61:5.20,100:3.40,200:2.99,400:2.75,1000:2.51\",\"photo_proflex\":\"1:15.95,3:12.95,8:11.95,16:10.95,31:8.20,61:6.20,100:4.40,200:3.85,400:3.35,1000:3.10\",\"roster_viceroy\":\"10:12.35,16:10.85,21:9.95,29:8.95\",\"roster_proflex\":\"10:12.95,16:11.45,21:10.55,29:9.75\",\"case_price\":\"1.90\",\"second_side\":\"1.45\",\"different_photo\":\"1.45\",\"rush\":\"15\",\"logo_product_id\":37,\"photo_product_id\":89,\"roster_product_id\":141,\"cases_product_id\":172,\"logo_image_id\":4899,\"photo_image_id\":5012,\"roster_image_id\":5010,\"cases_image_id\":5013,\"logo_banner_fr_image_id\":5519,\"logo_banner_en_image_id\":5525,\"photo_banner_fr_image_id\":5521,\"photo_banner_en_image_id\":5520,\"roster_banner_fr_image_id\":5523,\"roster_banner_en_image_id\":5522,\"cases_banner_fr_image_id\":5524,\"cases_banner_en_image_id\":5524,\"clickship_match\":\"clickship\"},\"availability\":{\"CA\":{\"viceroy\":true,\"proflex\":true},\"US\":{\"viceroy\":false,\"proflex\":true}},\"cases_us\":false,\"ajax_url\":\"https:\\\/\\\/customhockeypuck.com\\\/wp-admin\\\/admin-ajax.php\",\"action\":\"chp_estimator_shipping\",\"nonce\":\"a61dfda24a\",\"i18n\":{\"not_available_us\":\"Cette option ne peut pas \\u00eatre exp\\u00e9di\\u00e9e aux \\u00c9tats-Unis.\",\"brand_unavailable\":\"Cette marque n\\u2019est pas disponible pour ce pays.\",\"enter_postcode\":\"Entrez un code postal \\\/ ZIP valide.\",\"loading\":\"Calcul de la livraison\\u2026\",\"no_rate\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"error\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"invalid_quantity\":\"Veuillez entrer une quantit\\u00e9 enti\\u00e8re entre %1$d et %2$d.\"}}<\/script>\n\t\t<\/div>\t\t<script>\n\t\t(function(){\n\t\t\tfunction money(n,fr){\n\t\t\t\treturn new Intl.NumberFormat(fr?'fr-CA':'en-CA',{style:'currency',currency:'CAD'}).format(Number(n||0));\n\t\t\t}\n\t\t\tfunction grandMoney(n,fr,country){\n\t\t\t\treturn (country==='US'?'USD':'CAD')+' '+money(n,fr);\n\t\t\t}\n\t\t\tfunction refreshEstimateNotes(panel){\n\t\t\t\tvar d=panelData(panel);if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar note=panel.querySelector('.chp-result-note');\n\t\t\t\tif(note)note.hidden=false;\n\t\t\t\tvar label=panel.querySelector('.chp-rate-name');\n\t\t\t\tif(label && panel.dataset.shippingLabel){\n\t\t\t\t\tvar days=panel.querySelector('.chp-rush')?.value==='1'?3:7;\n\t\t\t\t\tvar rate=panel.dataset.shippingLabel;\n\t\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e : ':'Estimated delivery: ')+rate;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e = ':'Estimated delivery = ')+days+(d.fr?' jours ouvrables + ':' business days + ')+rate;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction tiers(s){\n\t\t\t\treturn String(s||'').split(',').map(function(x){\n\t\t\t\t\treturn x.split(':').map(Number);\n\t\t\t\t}).filter(function(x){\n\t\t\t\t\treturn x.length===2 && Number.isFinite(x[0]) && Number.isFinite(x[1]);\n\t\t\t\t}).sort(function(a,b){return a[0]-b[0]});\n\t\t\t}\n\t\t\tfunction tierPrice(list,qty){\n\t\t\t\tvar price=0;\n\t\t\t\tlist.forEach(function(row){\n\t\t\t\t\tif(qty>=row[0]) price=row[1];\n\t\t\t\t});\n\t\t\t\treturn price;\n\t\t\t}\n\t\t\tfunction panelData(panel){\n\t\t\t\tvar node=panel.nextElementSibling;\n\t\t\t\tif(!node || !node.classList.contains('chp-panel-data')) return null;\n\t\t\t\ttry{return JSON.parse(node.textContent)}catch(e){return null}\n\t\t\t}\n\t\t\tfunction setup(root){\n\t\t\t\troot.querySelectorAll('.chp-choice-card').forEach(function(card){\n\t\t\t\t\tcard.addEventListener('click',function(){\n\t\t\t\t\t\tvar type=card.dataset.open;\n\t\t\t\t\t\troot.classList.add('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){\n\t\t\t\t\t\t\tp.classList.toggle('is-open',p.dataset.type===type);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvar active=root.querySelector('.chp-panel.is-open');\n\t\t\t\t\t\tif(active){updateAvailability(active);active.scrollIntoView({behavior:'smooth',block:'start'});}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-back').forEach(function(btn){\n\t\t\t\t\tbtn.addEventListener('click',function(){\n\t\t\t\t\t\troot.classList.remove('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){p.classList.remove('is-open')});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(panel){\n\t\t\t\t\tpanel.addEventListener('input',function(){updateAvailability(panel);calculateProduct(panel,false);refreshEstimateNotes(panel)});\n\t\t\t\t\tpanel.addEventListener('change',function(e){updateAvailability(panel);calculateProduct(panel,false);if(e.target.matches('.chp-rush') && panel.dataset.shippingTotal!==undefined && panel.dataset.shippingTotal!==''){\n\t\t\t\t\t\tvar productTotal=Number(panel.dataset.productTotal||0);\n\t\t\t\t\t\tvar shipping=Number(panel.dataset.shippingTotal||0);\n\t\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,panelData(panel).fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\t}else if(e.target.matches('.chp-country,.chp-model,.chp-qty,.chp-sides,.chp-same-art,.chp-add-cases,.chp-postcode')){\n\t\t\t\t\t\tpanel.dataset.shippingLabel='';panel.dataset.shippingTotal='';panel.querySelector('.chp-shipping-total').textContent='\u2014';panel.querySelector('.chp-grand-total').textContent='\u2014';panel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\t}refreshEstimateNotes(panel)});\n\t\t\t\t\tvar button=panel.querySelector('.chp-estimate-button');\n\t\t\t\t\tif(button) button.addEventListener('click',function(){estimate(panel)});\n\t\t\t\t\tupdateAvailability(panel);\n\t\t\t\t\tcalculateProduct(panel,false);\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction updateAvailability(panel){\n\t\t\t\tvar d=panelData(panel); if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\t\t\t\tvar model=panel.querySelector('.chp-model');\n\t\t\t\tvar casesField=panel.querySelector('.chp-case-field');\n\t\t\t\tvar addCases=panel.querySelector('.chp-add-cases');\n\t\t\t\tvar blocked=false;\n\t\t\t\tvar msg='';\n\n\t\t\t\tif(d.type==='cases' && country==='US'){\n\t\t\t\t\tblocked=true;\n\t\t\t\t\tmsg=d.i18n.not_available_us;\n\t\t\t\t}\n\n\t\t\t\tif(model){\n\t\t\t\t\t\/\/ Keep an immutable list and rebuild the select so blocked brands\n\t\t\t\t\t\/\/ cannot remain selected or appear in the native dropdown.\n\t\t\t\t\tif(!model._allCountryOptions){\n\t\t\t\t\t\tmodel._allCountryOptions=Array.from(model.options).map(function(opt){\n\t\t\t\t\t\t\treturn {value:opt.value,text:opt.textContent};\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tvar previous=model.value;\n\t\t\t\t\tvar available=model._allCountryOptions.filter(function(opt){\n\t\t\t\t\t\treturn !!(d.availability[country] && d.availability[country][opt.value]);\n\t\t\t\t\t});\n\t\t\t\t\tvar values=available.map(function(opt){return opt.value}).join('|');\n\t\t\t\t\tif(model.dataset.availableBrands!==values){\n\t\t\t\t\t\tmodel.replaceChildren();\n\t\t\t\t\t\tavailable.forEach(function(opt){model.add(new Option(opt.text,opt.value));});\n\t\t\t\t\t\tmodel.dataset.availableBrands=values;\n\t\t\t\t\t}\n\t\t\t\t\tif(!available.length){\n\t\t\t\t\t\tblocked=true;\n\t\t\t\t\t\tmsg=d.i18n.brand_unavailable;\n\t\t\t\t\t}else if(available.some(function(opt){return opt.value===previous;})){\n\t\t\t\t\t\tmodel.value=previous;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tmodel.value=available[0].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(casesField){\n\t\t\t\t\tvar us=country==='US';\n\t\t\t\t\tcasesField.classList.toggle('is-hidden',us);\n\t\t\t\t\tif(us && addCases) addCases.value='0';\n\t\t\t\t}\n\n\t\t\t\twarning.hidden=!blocked;\n\t\t\t\twarning.textContent=blocked?msg:'';\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tif(btn) btn.disabled=blocked;\n\t\t\t\tpanel.dataset.blocked=blocked?'1':'0';\n\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t}\n\t\t\tfunction calculateProduct(panel,resetShipping){\n\t\t\t\tvar d=panelData(panel); if(!d)return 0;\n\t\t\t\tvar q=Math.max(0,Number(panel.querySelector('.chp-qty')?.value)||0);\n\t\t\t\tvar total=0,unit=0;\n\n\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\tunit=Number(d.options.case_price||0);\n\t\t\t\t}else{\n\t\t\t\t\tvar brand=panel.querySelector('.chp-model')?.value||'viceroy';\n\t\t\t\t\tunit=tierPrice(tiers(d.options[d.type+'_'+brand]),q);\n\t\t\t\t\ttotal=q*unit;\n\n\t\t\t\t\tif(['logo','photo'].includes(d.type) && panel.querySelector('.chp-sides')?.value==='2'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.second_side||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(d.type==='photo' && panel.querySelector('.chp-same-art')?.value==='no'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.different_photo||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-add-cases')?.value==='1'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.case_price||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-rush')?.value==='1'){\n\t\t\t\t\t\ttotal*=1+(Number(d.options.rush||0)\/100);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(d.type==='cases') total=q*unit;\n\n\t\t\t\tpanel.dataset.productTotal=String(total);\n\t\t\t\tpanel.querySelector('.chp-product-total').textContent=money(total,d.fr);\n\n\t\t\t\tif(resetShipping){\n\t\t\t\t\tpanel.dataset.shippingTotal='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t}\n\t\t\tfunction estimate(panel){\n\t\t\t\tvar d=panelData(panel); if(!d || panel.dataset.blocked==='1')return;\n\t\t\t\tvar quantityField=panel.querySelector('.chp-qty');\n\t\t\t\tvar rawQuantity=quantityField ? quantityField.value.trim() : '';\n\t\t\t\tvar quantity=Number(rawQuantity);\n\t\t\t\tvar min=Number(d.min),max=Number(d.max);\n\t\t\t\tif(!rawQuantity || !Number.isFinite(quantity) || !Number.isInteger(quantity) || quantity<min || quantity>max){\n\t\t\t\t\tvar quantityWarning=panel.querySelector('.chp-country-warning');\n\t\t\t\t\tif(quantityWarning){quantityWarning.textContent=d.i18n.invalid_quantity.replace('%1$d',min).replace('%2$d',max);quantityWarning.hidden=false;}\n\t\t\t\t\tpanel.dataset.shippingTotal='';panel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tif(quantityField){quantityField.focus();quantityField.scrollIntoView({behavior:'smooth',block:'center'});}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar postcodeField=panel.querySelector('.chp-postcode');\n\t\t\t\tvar postcode=(postcodeField?.value||'').trim();\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\n\t\t\t\tif(!postcode){\n\t\t\t\t\tif(warning){\n\t\t\t\t\t\twarning.textContent=d.i18n.enter_postcode;\n\t\t\t\t\t\twarning.hidden=false;\n\t\t\t\t\t}\n\t\t\t\t\tif(postcodeField){\n\t\t\t\t\t\tpostcodeField.focus();\n\t\t\t\t\t\tpostcodeField.scrollIntoView({behavior:'smooth',block:'center'});\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\/* Clear a previous postcode warning before calculating. *\/\n\t\t\t\tif(warning && panel.dataset.blocked!=='1'){\n\t\t\t\t\twarning.textContent='';\n\t\t\t\t\twarning.hidden=true;\n\t\t\t\t}\n\n\t\t\t\tvar productTotal=calculateProduct(panel,false);\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tvar original=btn.textContent;\n\t\t\t\tbtn.disabled=true;\n\t\t\t\tbtn.textContent=d.i18n.loading;\n\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\n\t\t\t\tvar body=new URLSearchParams();\n\t\t\t\tbody.set('action',d.action);\n\t\t\t\tbody.set('nonce',d.nonce);\n\t\t\t\tbody.set('type',d.type);\n\t\t\t\tbody.set('product_id',d.product_id);\n\t\t\t\tbody.set('language',d.language||'');\n\t\t\t\tbody.set('quantity',panel.querySelector('.chp-qty')?.value||'1');\n\t\t\t\tbody.set('country',panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\tbody.set('postcode',postcode);\n\t\t\t\tbody.set('brand',panel.querySelector('.chp-model')?.value||'');\n\n\t\t\t\tfetch(d.ajax_url,{\n\t\t\t\t\tmethod:'POST',\n\t\t\t\t\theaders:{'Content-Type':'application\/x-www-form-urlencoded; charset=UTF-8'},\n\t\t\t\t\tbody:body.toString(),\n\t\t\t\t\tcredentials:'same-origin'\n\t\t\t\t})\n\t\t\t\t.then(function(r){return r.json()})\n\t\t\t\t.then(function(resp){\n\t\t\t\t\tif(!resp || !resp.success) throw new Error(resp?.data?.message||d.i18n.no_rate);\n\t\t\t\t\tvar shipping=Number(resp.data.cost||0);\n\t\t\t\t\tpanel.dataset.shippingTotal=String(shipping);\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent=money(shipping,d.fr);\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,d.fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\tpanel.dataset.shippingLabel=resp.data.label||'';\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t})\n\t\t\t\t.catch(function(err){\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent=err.message||d.i18n.error;\n\t\t\t\t})\n\t\t\t\t.finally(function(){\n\t\t\t\t\tbtn.disabled=false;\n\t\t\t\t\tbtn.textContent=original;\n\t\t\t\t});\n\t\t\t}\n\t\t\tdocument.querySelectorAll('.chp-master').forEach(setup);\n\t\t})();\n\t\t<\/script>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ca81921 e-con-full e-flex e-con e-child\" data-id=\"ca81921\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-04f31e6 image-estimate elementor-widget elementor-widget-image\" data-id=\"04f31e6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"527\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product161.jpg-1024x675.jpg\" class=\"attachment-large size-large wp-image-5010\" alt=\"Rondelles de hockey comm\u00e9moratives personnalis\u00e9es\" srcset=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product161.jpg-1024x675.jpg 1024w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product161.jpg-300x198.jpg 300w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product161.jpg-768x506.jpg 768w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product161.jpg-1536x1013.jpg 1536w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product161.jpg-2048x1350.jpg 2048w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product161.jpg-600x396.jpg 600w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2cd2308 r_config elementor-widget elementor-widget-shortcode\" data-id=\"2cd2308\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"chp-master chp-single\">\t\t<div class=\"chp-panel is-open\" data-type=\"roster\" data-product-id=\"141\">\n\t\t\t\t\t\t<div class=\"chp-estimator-hero\">\n\t\t\t\t<img class=\"chp-estimator-hero-image\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/10\/team-fr.png\" alt=\"Logo d\u2019\u00e9quipe et liste de joueurs\" loading=\"eager\" decoding=\"async\">\n\t\t\t\t<div class=\"chp-estimator-hero-controls\">\n\t\t\t\t\t<div class=\"chp-estimator-hero-title\">Estim\u00e9 \u2013 CustomHockeyPuck.com<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t<h3>Logo d\u2019\u00e9quipe et liste de joueurs<\/h3>\n\n\t\t\t<div class=\"chp-form-grid\">\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Pays de livraison *<\/span>\n\t\t\t\t\t<select class=\"chp-country\">\n\t\t\t\t\t\t<option value=\"CA\">Canada<\/option>\n\t\t\t\t\t\t<option value=\"US\">\u00c9tats-Unis<\/option>\n\t\t\t\t\t<\/select>\n\t\t\t\t<\/label>\n\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Marque de rondelle *<\/span>\n\t\t\t\t\t\t<select class=\"chp-model\">\n\t\t\t\t\t\t\t<option value=\"viceroy\">Viceroy rondelles<\/option>\n\t\t\t\t\t\t\t<option value=\"proflex\">ProFlex rondelles fabriqu\u00e9es au Canada<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Nombre de rondelles (10\u201350) *<\/span>\n\t\t\t\t\t<input class=\"chp-qty\" type=\"number\" step=\"1\" required min=\"10\" max=\"50\" value=\"10\">\n\t\t\t\t<\/label>\n\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<label class=\"chp-field chp-case-field\">\n\t\t\t\t\t\t<span>Ajouter des bo\u00eetiers<\/span>\n\t\t\t\t\t\t<select class=\"chp-add-cases\">\n\t\t\t\t\t\t\t<option value=\"0\">Non<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">Oui \u2014 1.90 $ CAD \/ chaque<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\n\t\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t\t<span>Temps de pr\u00e9paration<\/span>\n\t\t\t\t\t\t<select class=\"chp-rush\">\n\t\t\t\t\t\t\t<option value=\"0\">Standard \u2014 7 jours ouvrables<\/option>\n\t\t\t\t\t\t\t<option value=\"1\">URGENT \u2014 3 jours ouvrables (+15%)<\/option>\n\t\t\t\t\t\t<\/select>\n\t\t\t\t\t<\/label>\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Code postal \/ ZIP *<\/span>\n\t\t\t\t\t<input class=\"chp-postcode\" type=\"text\" autocomplete=\"postal-code\" placeholder=\"H2X 1Y4 ou 10001\">\n\t\t\t\t<\/label>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"chp-country-warning\" hidden><\/div>\n\n\t\t\t<button type=\"button\" class=\"chp-estimate-button\">Calculer l\u2019estimation<\/button>\n\n\t\t\t<div class=\"chp-result\" aria-live=\"polite\">\n\t\t\t\t<div><span>Produits<\/span><strong class=\"chp-product-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div><span>Livraison<\/span><strong class=\"chp-shipping-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div class=\"chp-grand-row\"><span>Estimation totale<\/span><strong class=\"chp-grand-total\">\u2014<\/strong><\/div>\n\t\t\t\t<small class=\"chp-result-note\" data-canada-only=\"1\">Avant taxes. Les frais de livraison affich\u00e9s correspondent au taux le plus bas disponible.<\/small>\n\t\t\t\t<div class=\"chp-rate-name\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<script type=\"application\/json\" class=\"chp-panel-data\">{\"type\":\"roster\",\"fr\":true,\"product_id\":141,\"language\":\"fr\",\"min\":10,\"max\":50,\"options\":{\"logo_viceroy\":\"10:10.15,20:6.95,40:4.60,80:3.60,100:3.24,200:2.99,400:2.75,600:2.65,1000:2.55\",\"logo_proflex\":\"10:10.55,20:7.40,40:4.95,80:3.98,100:3.74,200:3.50,400:3.25,600:3.15,1000:3.05\",\"photo_viceroy\":\"1:15.25,3:12.20,8:11.20,16:9.80,31:7.20,61:5.20,100:3.40,200:2.99,400:2.75,1000:2.51\",\"photo_proflex\":\"1:15.95,3:12.95,8:11.95,16:10.95,31:8.20,61:6.20,100:4.40,200:3.85,400:3.35,1000:3.10\",\"roster_viceroy\":\"10:12.35,16:10.85,21:9.95,29:8.95\",\"roster_proflex\":\"10:12.95,16:11.45,21:10.55,29:9.75\",\"case_price\":\"1.90\",\"second_side\":\"1.45\",\"different_photo\":\"1.45\",\"rush\":\"15\",\"logo_product_id\":37,\"photo_product_id\":89,\"roster_product_id\":141,\"cases_product_id\":172,\"logo_image_id\":4899,\"photo_image_id\":5012,\"roster_image_id\":5010,\"cases_image_id\":5013,\"logo_banner_fr_image_id\":5519,\"logo_banner_en_image_id\":5525,\"photo_banner_fr_image_id\":5521,\"photo_banner_en_image_id\":5520,\"roster_banner_fr_image_id\":5523,\"roster_banner_en_image_id\":5522,\"cases_banner_fr_image_id\":5524,\"cases_banner_en_image_id\":5524,\"clickship_match\":\"clickship\"},\"availability\":{\"CA\":{\"viceroy\":true,\"proflex\":true},\"US\":{\"viceroy\":false,\"proflex\":true}},\"cases_us\":false,\"ajax_url\":\"https:\\\/\\\/customhockeypuck.com\\\/wp-admin\\\/admin-ajax.php\",\"action\":\"chp_estimator_shipping\",\"nonce\":\"a61dfda24a\",\"i18n\":{\"not_available_us\":\"Cette option ne peut pas \\u00eatre exp\\u00e9di\\u00e9e aux \\u00c9tats-Unis.\",\"brand_unavailable\":\"Cette marque n\\u2019est pas disponible pour ce pays.\",\"enter_postcode\":\"Entrez un code postal \\\/ ZIP valide.\",\"loading\":\"Calcul de la livraison\\u2026\",\"no_rate\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"error\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"invalid_quantity\":\"Veuillez entrer une quantit\\u00e9 enti\\u00e8re entre %1$d et %2$d.\"}}<\/script>\n\t\t<\/div>\t\t<script>\n\t\t(function(){\n\t\t\tfunction money(n,fr){\n\t\t\t\treturn new Intl.NumberFormat(fr?'fr-CA':'en-CA',{style:'currency',currency:'CAD'}).format(Number(n||0));\n\t\t\t}\n\t\t\tfunction grandMoney(n,fr,country){\n\t\t\t\treturn (country==='US'?'USD':'CAD')+' '+money(n,fr);\n\t\t\t}\n\t\t\tfunction refreshEstimateNotes(panel){\n\t\t\t\tvar d=panelData(panel);if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar note=panel.querySelector('.chp-result-note');\n\t\t\t\tif(note)note.hidden=false;\n\t\t\t\tvar label=panel.querySelector('.chp-rate-name');\n\t\t\t\tif(label && panel.dataset.shippingLabel){\n\t\t\t\t\tvar days=panel.querySelector('.chp-rush')?.value==='1'?3:7;\n\t\t\t\t\tvar rate=panel.dataset.shippingLabel;\n\t\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e : ':'Estimated delivery: ')+rate;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e = ':'Estimated delivery = ')+days+(d.fr?' jours ouvrables + ':' business days + ')+rate;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction tiers(s){\n\t\t\t\treturn String(s||'').split(',').map(function(x){\n\t\t\t\t\treturn x.split(':').map(Number);\n\t\t\t\t}).filter(function(x){\n\t\t\t\t\treturn x.length===2 && Number.isFinite(x[0]) && Number.isFinite(x[1]);\n\t\t\t\t}).sort(function(a,b){return a[0]-b[0]});\n\t\t\t}\n\t\t\tfunction tierPrice(list,qty){\n\t\t\t\tvar price=0;\n\t\t\t\tlist.forEach(function(row){\n\t\t\t\t\tif(qty>=row[0]) price=row[1];\n\t\t\t\t});\n\t\t\t\treturn price;\n\t\t\t}\n\t\t\tfunction panelData(panel){\n\t\t\t\tvar node=panel.nextElementSibling;\n\t\t\t\tif(!node || !node.classList.contains('chp-panel-data')) return null;\n\t\t\t\ttry{return JSON.parse(node.textContent)}catch(e){return null}\n\t\t\t}\n\t\t\tfunction setup(root){\n\t\t\t\troot.querySelectorAll('.chp-choice-card').forEach(function(card){\n\t\t\t\t\tcard.addEventListener('click',function(){\n\t\t\t\t\t\tvar type=card.dataset.open;\n\t\t\t\t\t\troot.classList.add('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){\n\t\t\t\t\t\t\tp.classList.toggle('is-open',p.dataset.type===type);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvar active=root.querySelector('.chp-panel.is-open');\n\t\t\t\t\t\tif(active){updateAvailability(active);active.scrollIntoView({behavior:'smooth',block:'start'});}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-back').forEach(function(btn){\n\t\t\t\t\tbtn.addEventListener('click',function(){\n\t\t\t\t\t\troot.classList.remove('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){p.classList.remove('is-open')});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(panel){\n\t\t\t\t\tpanel.addEventListener('input',function(){updateAvailability(panel);calculateProduct(panel,false);refreshEstimateNotes(panel)});\n\t\t\t\t\tpanel.addEventListener('change',function(e){updateAvailability(panel);calculateProduct(panel,false);if(e.target.matches('.chp-rush') && panel.dataset.shippingTotal!==undefined && panel.dataset.shippingTotal!==''){\n\t\t\t\t\t\tvar productTotal=Number(panel.dataset.productTotal||0);\n\t\t\t\t\t\tvar shipping=Number(panel.dataset.shippingTotal||0);\n\t\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,panelData(panel).fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\t}else if(e.target.matches('.chp-country,.chp-model,.chp-qty,.chp-sides,.chp-same-art,.chp-add-cases,.chp-postcode')){\n\t\t\t\t\t\tpanel.dataset.shippingLabel='';panel.dataset.shippingTotal='';panel.querySelector('.chp-shipping-total').textContent='\u2014';panel.querySelector('.chp-grand-total').textContent='\u2014';panel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\t}refreshEstimateNotes(panel)});\n\t\t\t\t\tvar button=panel.querySelector('.chp-estimate-button');\n\t\t\t\t\tif(button) button.addEventListener('click',function(){estimate(panel)});\n\t\t\t\t\tupdateAvailability(panel);\n\t\t\t\t\tcalculateProduct(panel,false);\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction updateAvailability(panel){\n\t\t\t\tvar d=panelData(panel); if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\t\t\t\tvar model=panel.querySelector('.chp-model');\n\t\t\t\tvar casesField=panel.querySelector('.chp-case-field');\n\t\t\t\tvar addCases=panel.querySelector('.chp-add-cases');\n\t\t\t\tvar blocked=false;\n\t\t\t\tvar msg='';\n\n\t\t\t\tif(d.type==='cases' && country==='US'){\n\t\t\t\t\tblocked=true;\n\t\t\t\t\tmsg=d.i18n.not_available_us;\n\t\t\t\t}\n\n\t\t\t\tif(model){\n\t\t\t\t\t\/\/ Keep an immutable list and rebuild the select so blocked brands\n\t\t\t\t\t\/\/ cannot remain selected or appear in the native dropdown.\n\t\t\t\t\tif(!model._allCountryOptions){\n\t\t\t\t\t\tmodel._allCountryOptions=Array.from(model.options).map(function(opt){\n\t\t\t\t\t\t\treturn {value:opt.value,text:opt.textContent};\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tvar previous=model.value;\n\t\t\t\t\tvar available=model._allCountryOptions.filter(function(opt){\n\t\t\t\t\t\treturn !!(d.availability[country] && d.availability[country][opt.value]);\n\t\t\t\t\t});\n\t\t\t\t\tvar values=available.map(function(opt){return opt.value}).join('|');\n\t\t\t\t\tif(model.dataset.availableBrands!==values){\n\t\t\t\t\t\tmodel.replaceChildren();\n\t\t\t\t\t\tavailable.forEach(function(opt){model.add(new Option(opt.text,opt.value));});\n\t\t\t\t\t\tmodel.dataset.availableBrands=values;\n\t\t\t\t\t}\n\t\t\t\t\tif(!available.length){\n\t\t\t\t\t\tblocked=true;\n\t\t\t\t\t\tmsg=d.i18n.brand_unavailable;\n\t\t\t\t\t}else if(available.some(function(opt){return opt.value===previous;})){\n\t\t\t\t\t\tmodel.value=previous;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tmodel.value=available[0].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(casesField){\n\t\t\t\t\tvar us=country==='US';\n\t\t\t\t\tcasesField.classList.toggle('is-hidden',us);\n\t\t\t\t\tif(us && addCases) addCases.value='0';\n\t\t\t\t}\n\n\t\t\t\twarning.hidden=!blocked;\n\t\t\t\twarning.textContent=blocked?msg:'';\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tif(btn) btn.disabled=blocked;\n\t\t\t\tpanel.dataset.blocked=blocked?'1':'0';\n\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t}\n\t\t\tfunction calculateProduct(panel,resetShipping){\n\t\t\t\tvar d=panelData(panel); if(!d)return 0;\n\t\t\t\tvar q=Math.max(0,Number(panel.querySelector('.chp-qty')?.value)||0);\n\t\t\t\tvar total=0,unit=0;\n\n\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\tunit=Number(d.options.case_price||0);\n\t\t\t\t}else{\n\t\t\t\t\tvar brand=panel.querySelector('.chp-model')?.value||'viceroy';\n\t\t\t\t\tunit=tierPrice(tiers(d.options[d.type+'_'+brand]),q);\n\t\t\t\t\ttotal=q*unit;\n\n\t\t\t\t\tif(['logo','photo'].includes(d.type) && panel.querySelector('.chp-sides')?.value==='2'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.second_side||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(d.type==='photo' && panel.querySelector('.chp-same-art')?.value==='no'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.different_photo||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-add-cases')?.value==='1'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.case_price||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-rush')?.value==='1'){\n\t\t\t\t\t\ttotal*=1+(Number(d.options.rush||0)\/100);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(d.type==='cases') total=q*unit;\n\n\t\t\t\tpanel.dataset.productTotal=String(total);\n\t\t\t\tpanel.querySelector('.chp-product-total').textContent=money(total,d.fr);\n\n\t\t\t\tif(resetShipping){\n\t\t\t\t\tpanel.dataset.shippingTotal='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t}\n\t\t\tfunction estimate(panel){\n\t\t\t\tvar d=panelData(panel); if(!d || panel.dataset.blocked==='1')return;\n\t\t\t\tvar quantityField=panel.querySelector('.chp-qty');\n\t\t\t\tvar rawQuantity=quantityField ? quantityField.value.trim() : '';\n\t\t\t\tvar quantity=Number(rawQuantity);\n\t\t\t\tvar min=Number(d.min),max=Number(d.max);\n\t\t\t\tif(!rawQuantity || !Number.isFinite(quantity) || !Number.isInteger(quantity) || quantity<min || quantity>max){\n\t\t\t\t\tvar quantityWarning=panel.querySelector('.chp-country-warning');\n\t\t\t\t\tif(quantityWarning){quantityWarning.textContent=d.i18n.invalid_quantity.replace('%1$d',min).replace('%2$d',max);quantityWarning.hidden=false;}\n\t\t\t\t\tpanel.dataset.shippingTotal='';panel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tif(quantityField){quantityField.focus();quantityField.scrollIntoView({behavior:'smooth',block:'center'});}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar postcodeField=panel.querySelector('.chp-postcode');\n\t\t\t\tvar postcode=(postcodeField?.value||'').trim();\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\n\t\t\t\tif(!postcode){\n\t\t\t\t\tif(warning){\n\t\t\t\t\t\twarning.textContent=d.i18n.enter_postcode;\n\t\t\t\t\t\twarning.hidden=false;\n\t\t\t\t\t}\n\t\t\t\t\tif(postcodeField){\n\t\t\t\t\t\tpostcodeField.focus();\n\t\t\t\t\t\tpostcodeField.scrollIntoView({behavior:'smooth',block:'center'});\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\/* Clear a previous postcode warning before calculating. *\/\n\t\t\t\tif(warning && panel.dataset.blocked!=='1'){\n\t\t\t\t\twarning.textContent='';\n\t\t\t\t\twarning.hidden=true;\n\t\t\t\t}\n\n\t\t\t\tvar productTotal=calculateProduct(panel,false);\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tvar original=btn.textContent;\n\t\t\t\tbtn.disabled=true;\n\t\t\t\tbtn.textContent=d.i18n.loading;\n\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\n\t\t\t\tvar body=new URLSearchParams();\n\t\t\t\tbody.set('action',d.action);\n\t\t\t\tbody.set('nonce',d.nonce);\n\t\t\t\tbody.set('type',d.type);\n\t\t\t\tbody.set('product_id',d.product_id);\n\t\t\t\tbody.set('language',d.language||'');\n\t\t\t\tbody.set('quantity',panel.querySelector('.chp-qty')?.value||'1');\n\t\t\t\tbody.set('country',panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\tbody.set('postcode',postcode);\n\t\t\t\tbody.set('brand',panel.querySelector('.chp-model')?.value||'');\n\n\t\t\t\tfetch(d.ajax_url,{\n\t\t\t\t\tmethod:'POST',\n\t\t\t\t\theaders:{'Content-Type':'application\/x-www-form-urlencoded; charset=UTF-8'},\n\t\t\t\t\tbody:body.toString(),\n\t\t\t\t\tcredentials:'same-origin'\n\t\t\t\t})\n\t\t\t\t.then(function(r){return r.json()})\n\t\t\t\t.then(function(resp){\n\t\t\t\t\tif(!resp || !resp.success) throw new Error(resp?.data?.message||d.i18n.no_rate);\n\t\t\t\t\tvar shipping=Number(resp.data.cost||0);\n\t\t\t\t\tpanel.dataset.shippingTotal=String(shipping);\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent=money(shipping,d.fr);\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,d.fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\tpanel.dataset.shippingLabel=resp.data.label||'';\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t})\n\t\t\t\t.catch(function(err){\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent=err.message||d.i18n.error;\n\t\t\t\t})\n\t\t\t\t.finally(function(){\n\t\t\t\t\tbtn.disabled=false;\n\t\t\t\t\tbtn.textContent=original;\n\t\t\t\t});\n\t\t\t}\n\t\t\tdocument.querySelectorAll('.chp-master').forEach(setup);\n\t\t})();\n\t\t<\/script>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7e45206 e-con-full e-flex e-con e-child\" data-id=\"7e45206\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-49842bf image-estimate elementor-widget elementor-widget-image\" data-id=\"49842bf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"527\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product71.jpg-1024x675.jpg\" class=\"attachment-large size-large wp-image-5013\" alt=\"Pr\u00e9sentoir transparent pour rondelle de hockey avec rondelle noire\" srcset=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product71.jpg-1024x675.jpg 1024w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product71.jpg-300x198.jpg 300w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product71.jpg-768x506.jpg 768w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product71.jpg-1536x1013.jpg 1536w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product71.jpg-2048x1350.jpg 2048w, https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/09\/product71.jpg-600x396.jpg 600w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ec7af8 r_config elementor-widget elementor-widget-shortcode\" data-id=\"1ec7af8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class=\"chp-master chp-single\">\t\t<div class=\"chp-panel is-open\" data-type=\"cases\" data-product-id=\"172\">\n\t\t\t\t\t\t<div class=\"chp-estimator-hero\">\n\t\t\t\t<img class=\"chp-estimator-hero-image\" src=\"https:\/\/customhockeypuck.com\/wp-content\/uploads\/2026\/10\/cases.png\" alt=\"Bo\u00eetiers pour rondelles de hockey\" loading=\"eager\" decoding=\"async\">\n\t\t\t\t<div class=\"chp-estimator-hero-controls\">\n\t\t\t\t\t<div class=\"chp-estimator-hero-title\">Estim\u00e9 \u2013 CustomHockeyPuck.com<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t<h3>Bo\u00eetiers pour rondelles de hockey<\/h3>\n\n\t\t\t<div class=\"chp-form-grid\">\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Pays de livraison *<\/span>\n\t\t\t\t\t<select class=\"chp-country\">\n\t\t\t\t\t\t<option value=\"CA\">Canada<\/option>\n\t\t\t\t\t\t<option value=\"US\">\u00c9tats-Unis<\/option>\n\t\t\t\t\t<\/select>\n\t\t\t\t<\/label>\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Nombre de bo\u00eetiers (10\u2013500) *<\/span>\n\t\t\t\t\t<input class=\"chp-qty\" type=\"number\" step=\"1\" required min=\"10\" max=\"500\" value=\"10\">\n\t\t\t\t<\/label>\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<label class=\"chp-field\">\n\t\t\t\t\t<span>Code postal \/ ZIP *<\/span>\n\t\t\t\t\t<input class=\"chp-postcode\" type=\"text\" autocomplete=\"postal-code\" placeholder=\"H2X 1Y4 ou 10001\">\n\t\t\t\t<\/label>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"chp-country-warning\" hidden><\/div>\n\n\t\t\t<button type=\"button\" class=\"chp-estimate-button\">Calculer l\u2019estimation<\/button>\n\n\t\t\t<div class=\"chp-result\" aria-live=\"polite\">\n\t\t\t\t<div><span>Produits<\/span><strong class=\"chp-product-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div><span>Livraison<\/span><strong class=\"chp-shipping-total\">\u2014<\/strong><\/div>\n\t\t\t\t<div class=\"chp-grand-row\"><span>Estimation totale<\/span><strong class=\"chp-grand-total\">\u2014<\/strong><\/div>\n\t\t\t\t<small class=\"chp-result-note\" data-canada-only=\"1\">Avant taxes. Les frais de livraison affich\u00e9s correspondent au taux le plus bas disponible.<\/small>\n\t\t\t\t<div class=\"chp-rate-name\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t\t<script type=\"application\/json\" class=\"chp-panel-data\">{\"type\":\"cases\",\"fr\":true,\"product_id\":172,\"language\":\"fr\",\"min\":10,\"max\":500,\"options\":{\"logo_viceroy\":\"10:10.15,20:6.95,40:4.60,80:3.60,100:3.24,200:2.99,400:2.75,600:2.65,1000:2.55\",\"logo_proflex\":\"10:10.55,20:7.40,40:4.95,80:3.98,100:3.74,200:3.50,400:3.25,600:3.15,1000:3.05\",\"photo_viceroy\":\"1:15.25,3:12.20,8:11.20,16:9.80,31:7.20,61:5.20,100:3.40,200:2.99,400:2.75,1000:2.51\",\"photo_proflex\":\"1:15.95,3:12.95,8:11.95,16:10.95,31:8.20,61:6.20,100:4.40,200:3.85,400:3.35,1000:3.10\",\"roster_viceroy\":\"10:12.35,16:10.85,21:9.95,29:8.95\",\"roster_proflex\":\"10:12.95,16:11.45,21:10.55,29:9.75\",\"case_price\":\"1.90\",\"second_side\":\"1.45\",\"different_photo\":\"1.45\",\"rush\":\"15\",\"logo_product_id\":37,\"photo_product_id\":89,\"roster_product_id\":141,\"cases_product_id\":172,\"logo_image_id\":4899,\"photo_image_id\":5012,\"roster_image_id\":5010,\"cases_image_id\":5013,\"logo_banner_fr_image_id\":5519,\"logo_banner_en_image_id\":5525,\"photo_banner_fr_image_id\":5521,\"photo_banner_en_image_id\":5520,\"roster_banner_fr_image_id\":5523,\"roster_banner_en_image_id\":5522,\"cases_banner_fr_image_id\":5524,\"cases_banner_en_image_id\":5524,\"clickship_match\":\"clickship\"},\"availability\":{\"CA\":{\"viceroy\":true,\"proflex\":true},\"US\":{\"viceroy\":false,\"proflex\":true}},\"cases_us\":false,\"ajax_url\":\"https:\\\/\\\/customhockeypuck.com\\\/wp-admin\\\/admin-ajax.php\",\"action\":\"chp_estimator_shipping\",\"nonce\":\"a61dfda24a\",\"i18n\":{\"not_available_us\":\"Cette option ne peut pas \\u00eatre exp\\u00e9di\\u00e9e aux \\u00c9tats-Unis.\",\"brand_unavailable\":\"Cette marque n\\u2019est pas disponible pour ce pays.\",\"enter_postcode\":\"Entrez un code postal \\\/ ZIP valide.\",\"loading\":\"Calcul de la livraison\\u2026\",\"no_rate\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"error\":\"Aucun frais de livraison n\\u2019est disponible pour cette destination.\",\"invalid_quantity\":\"Veuillez entrer une quantit\\u00e9 enti\\u00e8re entre %1$d et %2$d.\"}}<\/script>\n\t\t<\/div>\t\t<script>\n\t\t(function(){\n\t\t\tfunction money(n,fr){\n\t\t\t\treturn new Intl.NumberFormat(fr?'fr-CA':'en-CA',{style:'currency',currency:'CAD'}).format(Number(n||0));\n\t\t\t}\n\t\t\tfunction grandMoney(n,fr,country){\n\t\t\t\treturn (country==='US'?'USD':'CAD')+' '+money(n,fr);\n\t\t\t}\n\t\t\tfunction refreshEstimateNotes(panel){\n\t\t\t\tvar d=panelData(panel);if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar note=panel.querySelector('.chp-result-note');\n\t\t\t\tif(note)note.hidden=false;\n\t\t\t\tvar label=panel.querySelector('.chp-rate-name');\n\t\t\t\tif(label && panel.dataset.shippingLabel){\n\t\t\t\t\tvar days=panel.querySelector('.chp-rush')?.value==='1'?3:7;\n\t\t\t\t\tvar rate=panel.dataset.shippingLabel;\n\t\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e : ':'Estimated delivery: ')+rate;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tlabel.textContent=(d.fr?'Livraison estim\u00e9e = ':'Estimated delivery = ')+days+(d.fr?' jours ouvrables + ':' business days + ')+rate;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction tiers(s){\n\t\t\t\treturn String(s||'').split(',').map(function(x){\n\t\t\t\t\treturn x.split(':').map(Number);\n\t\t\t\t}).filter(function(x){\n\t\t\t\t\treturn x.length===2 && Number.isFinite(x[0]) && Number.isFinite(x[1]);\n\t\t\t\t}).sort(function(a,b){return a[0]-b[0]});\n\t\t\t}\n\t\t\tfunction tierPrice(list,qty){\n\t\t\t\tvar price=0;\n\t\t\t\tlist.forEach(function(row){\n\t\t\t\t\tif(qty>=row[0]) price=row[1];\n\t\t\t\t});\n\t\t\t\treturn price;\n\t\t\t}\n\t\t\tfunction panelData(panel){\n\t\t\t\tvar node=panel.nextElementSibling;\n\t\t\t\tif(!node || !node.classList.contains('chp-panel-data')) return null;\n\t\t\t\ttry{return JSON.parse(node.textContent)}catch(e){return null}\n\t\t\t}\n\t\t\tfunction setup(root){\n\t\t\t\troot.querySelectorAll('.chp-choice-card').forEach(function(card){\n\t\t\t\t\tcard.addEventListener('click',function(){\n\t\t\t\t\t\tvar type=card.dataset.open;\n\t\t\t\t\t\troot.classList.add('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){\n\t\t\t\t\t\t\tp.classList.toggle('is-open',p.dataset.type===type);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tvar active=root.querySelector('.chp-panel.is-open');\n\t\t\t\t\t\tif(active){updateAvailability(active);active.scrollIntoView({behavior:'smooth',block:'start'});}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-back').forEach(function(btn){\n\t\t\t\t\tbtn.addEventListener('click',function(){\n\t\t\t\t\t\troot.classList.remove('is-selected');\n\t\t\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(p){p.classList.remove('is-open')});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\troot.querySelectorAll('.chp-panel').forEach(function(panel){\n\t\t\t\t\tpanel.addEventListener('input',function(){updateAvailability(panel);calculateProduct(panel,false);refreshEstimateNotes(panel)});\n\t\t\t\t\tpanel.addEventListener('change',function(e){updateAvailability(panel);calculateProduct(panel,false);if(e.target.matches('.chp-rush') && panel.dataset.shippingTotal!==undefined && panel.dataset.shippingTotal!==''){\n\t\t\t\t\t\tvar productTotal=Number(panel.dataset.productTotal||0);\n\t\t\t\t\t\tvar shipping=Number(panel.dataset.shippingTotal||0);\n\t\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,panelData(panel).fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\t}else if(e.target.matches('.chp-country,.chp-model,.chp-qty,.chp-sides,.chp-same-art,.chp-add-cases,.chp-postcode')){\n\t\t\t\t\t\tpanel.dataset.shippingLabel='';panel.dataset.shippingTotal='';panel.querySelector('.chp-shipping-total').textContent='\u2014';panel.querySelector('.chp-grand-total').textContent='\u2014';panel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\t}refreshEstimateNotes(panel)});\n\t\t\t\t\tvar button=panel.querySelector('.chp-estimate-button');\n\t\t\t\t\tif(button) button.addEventListener('click',function(){estimate(panel)});\n\t\t\t\t\tupdateAvailability(panel);\n\t\t\t\t\tcalculateProduct(panel,false);\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction updateAvailability(panel){\n\t\t\t\tvar d=panelData(panel); if(!d)return;\n\t\t\t\tvar country=panel.querySelector('.chp-country')?.value||'CA';\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\t\t\t\tvar model=panel.querySelector('.chp-model');\n\t\t\t\tvar casesField=panel.querySelector('.chp-case-field');\n\t\t\t\tvar addCases=panel.querySelector('.chp-add-cases');\n\t\t\t\tvar blocked=false;\n\t\t\t\tvar msg='';\n\n\t\t\t\tif(d.type==='cases' && country==='US'){\n\t\t\t\t\tblocked=true;\n\t\t\t\t\tmsg=d.i18n.not_available_us;\n\t\t\t\t}\n\n\t\t\t\tif(model){\n\t\t\t\t\t\/\/ Keep an immutable list and rebuild the select so blocked brands\n\t\t\t\t\t\/\/ cannot remain selected or appear in the native dropdown.\n\t\t\t\t\tif(!model._allCountryOptions){\n\t\t\t\t\t\tmodel._allCountryOptions=Array.from(model.options).map(function(opt){\n\t\t\t\t\t\t\treturn {value:opt.value,text:opt.textContent};\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tvar previous=model.value;\n\t\t\t\t\tvar available=model._allCountryOptions.filter(function(opt){\n\t\t\t\t\t\treturn !!(d.availability[country] && d.availability[country][opt.value]);\n\t\t\t\t\t});\n\t\t\t\t\tvar values=available.map(function(opt){return opt.value}).join('|');\n\t\t\t\t\tif(model.dataset.availableBrands!==values){\n\t\t\t\t\t\tmodel.replaceChildren();\n\t\t\t\t\t\tavailable.forEach(function(opt){model.add(new Option(opt.text,opt.value));});\n\t\t\t\t\t\tmodel.dataset.availableBrands=values;\n\t\t\t\t\t}\n\t\t\t\t\tif(!available.length){\n\t\t\t\t\t\tblocked=true;\n\t\t\t\t\t\tmsg=d.i18n.brand_unavailable;\n\t\t\t\t\t}else if(available.some(function(opt){return opt.value===previous;})){\n\t\t\t\t\t\tmodel.value=previous;\n\t\t\t\t\t}else{\n\t\t\t\t\t\tmodel.value=available[0].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(casesField){\n\t\t\t\t\tvar us=country==='US';\n\t\t\t\t\tcasesField.classList.toggle('is-hidden',us);\n\t\t\t\t\tif(us && addCases) addCases.value='0';\n\t\t\t\t}\n\n\t\t\t\twarning.hidden=!blocked;\n\t\t\t\twarning.textContent=blocked?msg:'';\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tif(btn) btn.disabled=blocked;\n\t\t\t\tpanel.dataset.blocked=blocked?'1':'0';\n\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t}\n\t\t\tfunction calculateProduct(panel,resetShipping){\n\t\t\t\tvar d=panelData(panel); if(!d)return 0;\n\t\t\t\tvar q=Math.max(0,Number(panel.querySelector('.chp-qty')?.value)||0);\n\t\t\t\tvar total=0,unit=0;\n\n\t\t\t\tif(d.type==='cases'){\n\t\t\t\t\tunit=Number(d.options.case_price||0);\n\t\t\t\t}else{\n\t\t\t\t\tvar brand=panel.querySelector('.chp-model')?.value||'viceroy';\n\t\t\t\t\tunit=tierPrice(tiers(d.options[d.type+'_'+brand]),q);\n\t\t\t\t\ttotal=q*unit;\n\n\t\t\t\t\tif(['logo','photo'].includes(d.type) && panel.querySelector('.chp-sides')?.value==='2'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.second_side||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(d.type==='photo' && panel.querySelector('.chp-same-art')?.value==='no'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.different_photo||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-add-cases')?.value==='1'){\n\t\t\t\t\t\ttotal+=q*Number(d.options.case_price||0);\n\t\t\t\t\t}\n\t\t\t\t\tif(panel.querySelector('.chp-rush')?.value==='1'){\n\t\t\t\t\t\ttotal*=1+(Number(d.options.rush||0)\/100);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(d.type==='cases') total=q*unit;\n\n\t\t\t\tpanel.dataset.productTotal=String(total);\n\t\t\t\tpanel.querySelector('.chp-product-total').textContent=money(total,d.fr);\n\n\t\t\t\tif(resetShipping){\n\t\t\t\t\tpanel.dataset.shippingTotal='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t}\n\t\t\t\treturn total;\n\t\t\t}\n\t\t\tfunction estimate(panel){\n\t\t\t\tvar d=panelData(panel); if(!d || panel.dataset.blocked==='1')return;\n\t\t\t\tvar quantityField=panel.querySelector('.chp-qty');\n\t\t\t\tvar rawQuantity=quantityField ? quantityField.value.trim() : '';\n\t\t\t\tvar quantity=Number(rawQuantity);\n\t\t\t\tvar min=Number(d.min),max=Number(d.max);\n\t\t\t\tif(!rawQuantity || !Number.isFinite(quantity) || !Number.isInteger(quantity) || quantity<min || quantity>max){\n\t\t\t\t\tvar quantityWarning=panel.querySelector('.chp-country-warning');\n\t\t\t\t\tif(quantityWarning){quantityWarning.textContent=d.i18n.invalid_quantity.replace('%1$d',min).replace('%2$d',max);quantityWarning.hidden=false;}\n\t\t\t\t\tpanel.dataset.shippingTotal='';panel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tif(quantityField){quantityField.focus();quantityField.scrollIntoView({behavior:'smooth',block:'center'});}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar postcodeField=panel.querySelector('.chp-postcode');\n\t\t\t\tvar postcode=(postcodeField?.value||'').trim();\n\t\t\t\tvar warning=panel.querySelector('.chp-country-warning');\n\n\t\t\t\tif(!postcode){\n\t\t\t\t\tif(warning){\n\t\t\t\t\t\twarning.textContent=d.i18n.enter_postcode;\n\t\t\t\t\t\twarning.hidden=false;\n\t\t\t\t\t}\n\t\t\t\t\tif(postcodeField){\n\t\t\t\t\t\tpostcodeField.focus();\n\t\t\t\t\t\tpostcodeField.scrollIntoView({behavior:'smooth',block:'center'});\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t\/* Clear a previous postcode warning before calculating. *\/\n\t\t\t\tif(warning && panel.dataset.blocked!=='1'){\n\t\t\t\t\twarning.textContent='';\n\t\t\t\t\twarning.hidden=true;\n\t\t\t\t}\n\n\t\t\t\tvar productTotal=calculateProduct(panel,false);\n\t\t\t\tvar btn=panel.querySelector('.chp-estimate-button');\n\t\t\t\tvar original=btn.textContent;\n\t\t\t\tbtn.disabled=true;\n\t\t\t\tbtn.textContent=d.i18n.loading;\n\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2026';\n\t\t\t\tpanel.querySelector('.chp-rate-name').textContent='';\n\n\t\t\t\tvar body=new URLSearchParams();\n\t\t\t\tbody.set('action',d.action);\n\t\t\t\tbody.set('nonce',d.nonce);\n\t\t\t\tbody.set('type',d.type);\n\t\t\t\tbody.set('product_id',d.product_id);\n\t\t\t\tbody.set('language',d.language||'');\n\t\t\t\tbody.set('quantity',panel.querySelector('.chp-qty')?.value||'1');\n\t\t\t\tbody.set('country',panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\tbody.set('postcode',postcode);\n\t\t\t\tbody.set('brand',panel.querySelector('.chp-model')?.value||'');\n\n\t\t\t\tfetch(d.ajax_url,{\n\t\t\t\t\tmethod:'POST',\n\t\t\t\t\theaders:{'Content-Type':'application\/x-www-form-urlencoded; charset=UTF-8'},\n\t\t\t\t\tbody:body.toString(),\n\t\t\t\t\tcredentials:'same-origin'\n\t\t\t\t})\n\t\t\t\t.then(function(r){return r.json()})\n\t\t\t\t.then(function(resp){\n\t\t\t\t\tif(!resp || !resp.success) throw new Error(resp?.data?.message||d.i18n.no_rate);\n\t\t\t\t\tvar shipping=Number(resp.data.cost||0);\n\t\t\t\t\tpanel.dataset.shippingTotal=String(shipping);\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent=money(shipping,d.fr);\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent=grandMoney(productTotal+shipping,d.fr,panel.querySelector('.chp-country')?.value||'CA');\n\t\t\t\t\tpanel.dataset.shippingLabel=resp.data.label||'';\n\t\t\t\t\trefreshEstimateNotes(panel);\n\t\t\t\t})\n\t\t\t\t.catch(function(err){\n\t\t\t\t\tpanel.querySelector('.chp-shipping-total').textContent='\u2014';\n\t\t\t\t\tpanel.querySelector('.chp-grand-total').textContent='\u2014';\n\t\t\t\t\tpanel.dataset.shippingLabel='';\n\t\t\t\t\tpanel.querySelector('.chp-rate-name').textContent=err.message||d.i18n.error;\n\t\t\t\t})\n\t\t\t\t.finally(function(){\n\t\t\t\t\tbtn.disabled=false;\n\t\t\t\t\tbtn.textContent=original;\n\t\t\t\t});\n\t\t\t}\n\t\t\tdocument.querySelectorAll('.chp-master').forEach(setup);\n\t\t})();\n\t\t<\/script>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7557dc2 e-con e-atomic-element e-flexbox-base e-default-div e-7557dc2-8eb9e40 \" data-id=\"7557dc2\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"7557dc2\" data-e-type=\"e-flexbox\" data-id=\"7557dc2\">\n    <div class=\"elementor-element elementor-element-e87c766 e-con e-atomic-element e-flexbox-base e-default-div e-e87c766-0e0368b \" data-id=\"e87c766\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"e87c766\" data-e-type=\"e-flexbox\" data-id=\"e87c766\">\n    \t\t<div class=\"elementor-element elementor-element-e6fcd87 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"e6fcd87\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Demander un devis en ligne pour rondelles de hockey personnalis\u00e9es.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-83a222c elementor-widget elementor-widget-text-editor\" data-id=\"83a222c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Si vous recherchez des\u00a0<strong>rondelles de hockey personnalis\u00e9es<\/strong>\u00a0avec votre logo ou votre design, vous \u00eates au bon endroit. Les rondelles personnalis\u00e9es sont une excellente fa\u00e7on de promouvoir votre \u00e9quipe, de c\u00e9l\u00e9brer un tournoi, de cr\u00e9er des produits uniques ou d\u2019offrir des souvenirs m\u00e9morables aux fans et aux participants. Utilisez notre devis en ligne pour des rondelles de hockey personnalis\u00e9es. Entrez simplement la quantit\u00e9 de rondelles et votre code postal ou code postal.<\/p><p>Chez CustomHockeyPuck.com, nous sommes sp\u00e9cialis\u00e9s dans la production de\u00a0<strong>rondelles de hockey durables<\/strong>\u00a0et professionnelles personnalis\u00e9es avec votre image. Que vous commandiez pour une \u00e9quipe de hockey, une organisation sportive, un \u00e9v\u00e9nement corporatif ou une campagne promotionnelle, nous pouvons vous aider \u00e0 cr\u00e9er des rondelles qui repr\u00e9sentent votre marque et qui se d\u00e9marquent.<\/p><p>Notre objectif est de rendre le processus de commande simple, rapide et flexible. En demandant un devis, vous recevrez des informations d\u00e9taill\u00e9es sur les prix et la production adapt\u00e9es \u00e0 votre projet.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-6333c17 e-con e-atomic-element e-flexbox-base e-default-div e-6333c17-c6d870a \" data-id=\"6333c17\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"6333c17\" data-e-type=\"e-flexbox\" data-id=\"6333c17\">\n    \t\t<div class=\"elementor-element elementor-element-3fd0ff2 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"3fd0ff2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Rondelles de hockey personnalis\u00e9es pour \u00e9quipes, \u00e9v\u00e9nements et entreprises<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a213d7c elementor-widget elementor-widget-text-editor\" data-id=\"a213d7c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Les rondelles de hockey imprim\u00e9es personnalis\u00e9es sont utilis\u00e9es par de nombreuses organisations dans la communaut\u00e9 du hockey. Les \u00e9quipes, les ligues et les organisateurs d\u2019\u00e9v\u00e9nements les utilisent souvent comme souvenirs, articles promotionnels ou produits d\u00e9riv\u00e9s.<\/p><p>Voici quelques utilisations populaires des rondelles de hockey personnalis\u00e9es :<\/p><ul><li>Produits d\u00e9riv\u00e9s pour \u00e9quipes de hockey et articles pour les fans<\/li><li>Souvenirs de tournois ou de championnats<\/li><li>Articles promotionnels pour entreprises<\/li><li>Objets promotionnels lors d\u2019\u00e9v\u00e9nements sportifs<\/li><li>Campagnes de financement pour \u00e9quipes ou associations<\/li><li>Produits pour boutiques sportives et ar\u00e9nas<\/li><\/ul><p><br \/>Parce que les rondelles de hockey sont des objets embl\u00e9matiques du sport, elles deviennent souvent des objets de collection et des souvenirs durables. Une rondelle personnalis\u00e9e avec le logo de votre \u00e9quipe, l\u2019image de votre \u00e9v\u00e9nement ou le message d\u2019un commanditaire peut devenir un produit m\u00e9morable que les gens conservent pendant des ann\u00e9es.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n\n<\/div>\n<div class=\"elementor-element elementor-element-e962bd3 e-flex e-con-boxed e-con e-parent\" data-id=\"e962bd3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-889ee13 elementor-widget elementor-widget-heading\" data-id=\"889ee13\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Impression de haute qualit\u00e9 et rondelles durables<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3497224 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"3497224\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>La qualit\u00e9 est essentielle lorsqu\u2019il s\u2019agit de produire des rondelles de hockey personnalis\u00e9es. Nous utilisons des rondelles de taille officielle con\u00e7ues pour r\u00e9pondre aux attentes des joueurs, des collectionneurs et des fans.<\/p><p>Votre logo, votre texte ou votre design graphique peut \u00eatre imprim\u00e9 clairement sur la rondelle afin d\u2019obtenir un r\u00e9sultat professionnel. Que votre design soit simple ou d\u00e9taill\u00e9, nous veillons \u00e0 assurer une impression nette et une finition propre.<\/p><p>Les rondelles personnalis\u00e9es sont souvent utilis\u00e9es comme objets d\u00e9coratifs, souvenirs ou articles promotionnels. Une impression claire et durable permet de pr\u00e9server leur apparence pendant longtemps.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5439f58 e-flex e-con-boxed e-con e-parent\" data-id=\"5439f58\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-03cc562 e-con-full e-flex e-con e-child\" data-id=\"03cc562\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-e9e380a e-con-full e-flex e-con e-child\" data-id=\"e9e380a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-009ad03 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"009ad03\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Prix avantageux pour commandes en quantit\u00e9<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e80402 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"9e80402\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Nous comprenons que les besoins varient selon les clients. Certaines \u00e9quipes ont besoin d\u2019un petit nombre de rondelles pour un \u00e9v\u00e9nement sp\u00e9cial, tandis que de grandes organisations peuvent n\u00e9cessiter des centaines d\u2019unit\u00e9s pour des tournois ou pour la vente au d\u00e9tail.<\/p><p>Pour r\u00e9pondre \u00e0 ces besoins, nous offrons des prix bas\u00e9s sur la quantit\u00e9 command\u00e9e. Les quantit\u00e9s les plus courantes comprennent :<\/p><ul><li>50 rondelles de hockey personnalis\u00e9es<\/li><li>100 rondelles de hockey personnalis\u00e9es<\/li><li>250 rondelles de hockey personnalis\u00e9es<\/li><li>500 rondelles de hockey personnalis\u00e9es ou plus<\/li><\/ul><p><br \/>Les commandes plus importantes b\u00e9n\u00e9ficient g\u00e9n\u00e9ralement d\u2019un\u00a0<strong>prix par unit\u00e9 plus avantageux<\/strong>, ce qui est id\u00e9al pour les tournois, les ligues ou les campagnes promotionnelles.<\/p><p>Si vous n\u2019\u00eates pas certain de la quantit\u00e9 dont vous avez besoin, notre \u00e9quipe peut vous aider \u00e0 choisir la meilleure option selon votre projet.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a7f322a e-con-full e-flex e-con e-child\" data-id=\"a7f322a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e7abab8 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"e7abab8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Production rapide et livraison fiable<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-623c78c elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"623c78c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Lors de l\u2019organisation d\u2019un \u00e9v\u00e9nement ou d\u2019une saison de hockey, les d\u00e9lais sont importants. Notre processus de production est con\u00e7u pour pr\u00e9parer vos rondelles de hockey personnalis\u00e9es efficacement tout en maintenant une qualit\u00e9 constante.<\/p><p>Nous exp\u00e9dions les commandes partout au Canada et \u00e0 l\u2019international, ce qui permet aux \u00e9quipes, organisations et entreprises de recevoir leurs produits o\u00f9 qu\u2019elles se trouvent.<\/p><p>Lorsque vous demandez un devis, nous pouvons vous fournir un d\u00e9lai de production estim\u00e9 ainsi que les informations de livraison selon les d\u00e9tails de votre commande et votre lieu de livraison.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-26cf4b9 e-flex e-con-boxed e-con e-parent\" data-id=\"26cf4b9\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-baacc0f e-con-full e-flex e-con e-child\" data-id=\"baacc0f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-6277efd e-con-full e-flex e-con e-child\" data-id=\"6277efd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7854e2f elementor-widget elementor-widget-heading\" data-id=\"7854e2f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Demandez votre devis pour des rondelles personnalis\u00e9es<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7915ae0 e-con-full e-flex e-con e-child\" data-id=\"7915ae0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0eddff5 elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"0eddff5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Obtenir un devis est simple et rapide. Il vous suffit de fournir quelques informations sur votre projet et notre \u00e9quipe pr\u00e9parera une estimation personnalis\u00e9e.<\/p><p>Pour nous aider \u00e0 vous fournir un devis pr\u00e9cis, veuillez inclure :<\/p><ul><li>La quantit\u00e9 et le type de rondelles de hockey souhait\u00e9e<\/li><li>Votre logo ou votre design (si disponible)<\/li><li>Votre adresse ou lieu de livraison<\/li><li>Votre date limite ou la date de l\u2019\u00e9v\u00e9nement<\/li><\/ul><p>Une fois votre demande re\u00e7ue, nous examinerons les informations et vous enverrons un devis d\u00e9taill\u00e9 incluant les prix, les d\u00e9lais de production et les options de livraison.<\/p><p>Commencez votre projet d\u00e8s aujourd\u2019hui et cr\u00e9ez des rondelles de hockey personnalis\u00e9es qui mettent en valeur\u00a0<strong>votre \u00e9quipe, votre \u00e9v\u00e9nement ou votre marque<\/strong>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Estim\u00e9 &#8211; choisir le type de rondelles Demander un devis en ligne pour rondelles de hockey personnalis\u00e9es. Si vous recherchez des\u00a0rondelles de hockey personnalis\u00e9es\u00a0avec votre logo ou votre design, vous \u00eates au bon endroit. Les rondelles personnalis\u00e9es sont une excellente fa\u00e7on de promouvoir votre \u00e9quipe, de c\u00e9l\u00e9brer un tournoi, de cr\u00e9er des produits uniques ou [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-614","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/customhockeypuck.com\/fr\/wp-json\/wp\/v2\/pages\/614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/customhockeypuck.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/customhockeypuck.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/customhockeypuck.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/customhockeypuck.com\/fr\/wp-json\/wp\/v2\/comments?post=614"}],"version-history":[{"count":131,"href":"https:\/\/customhockeypuck.com\/fr\/wp-json\/wp\/v2\/pages\/614\/revisions"}],"predecessor-version":[{"id":5386,"href":"https:\/\/customhockeypuck.com\/fr\/wp-json\/wp\/v2\/pages\/614\/revisions\/5386"}],"wp:attachment":[{"href":"https:\/\/customhockeypuck.com\/fr\/wp-json\/wp\/v2\/media?parent=614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}